文章 聆严 周 · 九月 30, 2022 11m read

使用Prometheus监控Cache集群

Executive Summary

生产级别的Cache集群往往由多个Cache实例组成,而Cache自带的管理界面不能满足对整个集群的监控,因此在实际使用中,往往需要投入人力对实例进行性能巡检。即便如此,这种巡检模式实时性低、告警的漏报错报率高、对既往数据追溯能力差。针对Cache/IRIS集群管理的这一缺憾,本文提出以Prometheus监控Cache集群的方案,最终实现了对集群全实例监控指标的自动化采集,以及准实时监控数据展示和告警提示。

监控大屏3.主机实例监控

Prometheus及Grafana简介

Prometheus是一个开源的监控收集框架。它内置了一个数据收集服务、一个时序数据库、和一个Web UI管理界面。 Prometheus采用PULL模式拉取监控数据,使得它在众多监控解决方案中脱颖而出。这种PULL模式只需被监控对象暴露出符合Prometheus要求的接口即可,而无需配置监控服务器地址,也无需管理定时任务,对应用程序的侵入性极小。 Prometheus也有一个健全的生态。它提供各种管理接口API,如自动服务发现、告警、查询等接口,和已有开源软件互操作性好,也方便接入机构内部系统。其中Grafana是最重要的生态伙伴,它是一个开源的数据可视化工具,支持动态的更改数据源、灵活地配置报表、编写Prometheus查询语句、定义告警等。

8
0 1071
文章 Jingwei Wang · 二月 3, 2024 2m read

本篇文章会介绍一个简单的示例:如何使用IRIS 2023版自带的EnsLib.SQL.Service.GenericServiceEnsLib.SQL.Operation.GenericOperationMySQL的数据库读取出来并灌入Oracle数据库,本示例以Windows环境为例。

1. 创建SQL网关连接,连到MySQL

1.1 在windows中创建MySQL ODBC连接

1.2 在IRIS中创建ODBC SQL网关连接,连接到MySQL

系统管理 -> 配置 -> 连接 -> SQL网关连接,连接类型选择‘ODBC’,给一个连接名称,现有的DSN选择在1.1中所有建立的DSN名称,填写连接用户名和密码,然后点击下方‘连接测试’,如果出现‘连接成功’,说明此连接能够正常工作

2. 创建SQL网关连接,连到Oracle

2.1 在IRIS中创建JDBC网关连接,连接到Oracle

系统管理 -> 配置 -> 连接 -> SQL网关连接,连接类型选择‘JDBC’,给一个连接名称,填写连接用户名和密码,填写驱动器名称和要连接的Oracle数据库的URL和本地OJDBC.jar的java类路径,然后点击下方‘连接测试’,如果出现‘连接成功’,说明此连接能够正常工作

3. 创建Production组件

3.1 业务服务

添加EnsLib.SQL.Service.

0
0 280
问题 deng hang · 二月 1, 2024

医院目前即将使用iris2023.1;里面包含了%External.Messaging.KafkaClient 类,需要设置kafka的链接,发送kafka消息,然后断开链接,能否跟springboot 一样;自动配置,kafka的链接交给iris来管理,保持长链接,不要断开;直接使用%External.Messaging.KafkaClient 发送消息;

1
0 162
文章 Qiao Peng · 一月 31, 2024 21m read

InterSystems IRIS、Health Connect和上一代的Ensemble提供了优秀的互操作架构,但即便有低代码开发能力,很多开发者还是希望能用自己的技术栈语言在InterSystems的产品上开发互操作产品。

考虑到互操作产品本身的开放性要求和各个技术栈背后庞大的生态价值,InterSystems IRIS和Health Connect提供了Production EXtension (PEX)架构,让开发者使用自己的技术栈语言来开发互操作解决方案。目前PEX支持Java、.net、Python。

这里我们介绍使用Java利用PEX进行互操作产品的开发。

一 InterSystems IRIS上使用Java开发的基础

在进入PEX主题前,需要简单介绍一下Java在InterSystems IRIS上开发的各种技术选项,因为PEX也是以这些技术选项为基础的。

  • 如果仅把InterSystems IRIS作为一个数据库看待,可以使用JDBC对它进行SQL访问,这是最传统的开发方式;
  • Java是一个面向对象的开发语言,而InterSystems IRIS也是支持面向对象的数据平台。
0
1 327
公告 Claire Zheng · 一月 28, 2024

近日,InterSystems宣布 InterSystems IRIS® Cloud SQL 和 InterSystems IRIS® Cloud IntegratedML® 服务全面上市。 这些全面托管的云原生智能数据服务使开发人员能够轻松地在SQL环境中构建云原生数据库和机器学习(ML)应用程序。

通过 Cloud SQL和 Cloud IntegratedML,开发人员可以访问下一代关系数据库即服务(DBaaS),DBaaS快速且易于配置和使用。 嵌入式AutoML功能支持开发人员在全面托管的、弹性的云原生环境中,仅仅通过几条类似SQL的命令即可轻松开发并执行机器学习模型。

0
0 135
文章 Louis Lu · 一月 28, 2024 2m read

这里介绍三个SQL函数 JSON_ARRAY 、 JSON_OBJECT和JSON_ARRAYAGG,可以直接通过SQL语句返回JSON格式数据

1. JSON_ARRAY 函数通过逗号(,)分割的多个表达式,返回JSON array格式的数据

SELECT TOP 3 Name,
JSON_ARRAY(%ID,%TABLENAME,UCASE(Name),Age,Home_State) "JSON data" 
FROM Sample.Person

也可以忽略空值(null) ,添加“ABSENT ON NULL”

SELECT TOP 3 Name,
JSON_ARRAY(%ID,%TABLENAME,UCASE(Name),Age,Home_State ABSENT ON NULL) "JSON data" 
FROM Sample.Person

获取到的返回结果

如果想显示空值(null),使用"NULL ON NULL",如果没有特意标明,则该设置为默认值。

下面语句获取客户所有电话号码,并以JSON array格式返回:

SELECT JSON_ARRAY(HomePhone,WorkPhone,Mobile) "JSON data"
FROM Test.Phones
["055-8263371","052-4957286","054-4951066"]

2.

0
0 293
文章 Michael Lei · 一月 26, 2024 2m read

InterSystems 常见问题解答

如果系统24小时没有停止,旧的日志文件将根据“日志文件删除设置”在0:30删除。

导致日志文件保留的时间早于“日志文件删除设置”的一个可能原因是存在仍处于开放状态的事务。

在这种情况下,您将能够通过搜索执行事务的进程并完成事务来删除日志文件。

下面的示例检查是否存在未完成的事务,如果存在,则输出目标文件名和日志记录信息。

(示例可以从这里下载

*注意*如果要检查的日志文件较大或日志文件较多,则执行需要时间,因此请联系我们的支持中心。

 Class ISJ.JournalUtility { ClassMethod GetOpenTransaction() As %Status { set status= $$$OK #dim ex As %Exception.AbstractException #dim rset As %ResultSet try { //current journal file write !, "Current journal file name:" , ##class ( %SYS.Journal.System ).GetCurrentFileName(),!
0
0 118
文章 姚 鑫 · 一月 23, 2024 3m read

第七章 使用 SQL Search - 同义词表

同义词表

要实现同义词表,请将该表定义为扩展 iFind.Synonym 抽象类的持久类。

此类定义了两个属性:FromTermToTerm。一对 FromTermToTerm 属性将 ToTerm 定义为 FromTerm 的同义词。如果查询包含 FromTermSQL 搜索将使用 ToTerm 来扩展查询。

该查询使用此类的 GetMatch() 方法根据查询词在同义词表中搜索同义词。

在查询执行期间,SQL 搜索会检查单个单词单元或位置搜索短语是否存在任何同义词。例如,在同义词表中定义了两个同义词对(“persons”、“people”)(“walk”、“run”)。对短语“persons walk”执行 SQL 搜索查询。如果同义词表与查询关联,则 SQL 搜索不仅返回与原始查询匹配的文档,还返回与以下任一查询匹配的文档:“people run”、“people walk”“people run”

但是,如果 search_items 字符串为 '"persons walk"',则不会发生查询扩展,因为 SQL 搜索不会扩展位置短语搜索中的任何单词。位置短语本身是查询扩展的最小单位。

0
0 83
文章 Claire Zheng · 一月 17, 2024 1m read

第一步

您需要在Open Exchange中提交并发布您的应用。

第二步

通过您的个人主页/Open Exchange页面进入您个人的开发者页面

在这里您可以找到自己提交成功的全部应用

第三步

您可以通过以下几个方式参赛:

方式一

访问编程大赛页面,点击申请按钮,选择您想要提交的App进行提交。 

方式二

在您的App页面查看可参加的比赛进行提交 
 

方式三

找到您的所有的App,找到想投赛的App,按下图所示进行申请

如果您有更多疑问,欢迎留言提问,或者访问此链接进行了解。

0
0 270
文章 Michael Lei · 一月 15, 2024 2m read

作为针对数据导入处理性能和错误(锁定表已满)的衡量标准,可能需要调整常规内存堆 (gmheap) 和锁定表大小 (locksiz) 参数。

事实上,您可以使用终端和管理门户来检查当前分配了多少通用内存堆。


★终端用

// 一般メモリヒープサマリUSER> w $system .Config.SharedMemoryHeap.GetUsageSummary() 4992226 , 6029312 , 59441152

通用内存堆摘要以使用量、分配量和配置量(字节)的形式显示返回值。

使用量是分配的锁表、进程表等实际使用的量。
分配量是gmheap区域中锁表、进程表等分配的量。
配置量为gmheap(KB)+IRIS系统附加区,即当前最大可用量(实际通用内存堆区值)。

如上所述,配置数量与配置参数 gmheap 的独立值不匹配。
这是因为IRIS自动将内部使用的内存区域添加到配置参数gmheap中来配置通用内存堆区域。详情请参阅下面的文档。

关于gmheap

您可以使用以下命令获取锁表的使用情况:
返回值显示为可用量、用户可用量和已用量(字节)。详情请参阅这篇文章

 %SYS > w ##class (SYS. Lock ).GetLockSpaceInfo() 16772624 , 16764624 , 4592


★用于管理门户

您可以从“系统操作”>“系统使用情况”>“共享内存堆使用状态”进行检查。

0
0 143
公告 Claire Zheng · 一月 10, 2024

Hi 开发者们,

我们非常高兴地邀请大家参加新的 InterSystems 在线编程竞赛,此次编程大赛关注于“FHIR与数字医疗互操作性”这个主题。

🏆 InterSystems编程大赛:FHIR 与数字医疗互操作性🏆

时间: 2024年1月15日至2月5日(美国东部时间)

奖金池: 14,000 美元


1
0 253
文章 Claire Zheng · 一月 15, 2024 2m read

Gartner魔力象限是业内知名的分析报告,针对特定市场进行严谨、基于事实的研究后发布的魔力象限报告,可为用户提供全面视图,以便其了解在高速增长、差异化明显的市场中供应商的相对位置。在魔力象限中,供应商被定位在四个象限中:领导者(Leader)、挑战者(Challenger)、远见者(Visionary)和利基玩家(Niche Player)。

2023年年底,在 Gartner 2023年最新发布的“云数据库管理系统(Cloud DBMS)魔力象限”中,InterSystems再次荣膺“挑战者”(Challenger)称号,这是InterSystems第三次入围这一报告并得到认可(2022年“远见者”2021年“挑战者”)。

Gartner此次评估面向包括InterSystems在内的19家云数据库管理系统供应商进行。我们相信,Gartner魔力象限“挑战者”这一定位,证明了InterSystems有能力挑战现状、推动创新,为市场提供独特的解决方案。

InterSystems IRIS数据平台提供的结缔组织(connective tissue)可将不同来源的分散数据转换为单一、完整的视图,从而在医疗保健、金融服务和供应链等关键市场中为具有关键数据需求的客户提供更好的结果。

0
0 113
公告 Michael Lei · 一月 10, 2024

嗨,大家好,

我们想重点介绍 2023 年布拉格欧洲欧洲医疗健康黑克松Hackathon期间创建的一些杰出项目。
IKEM 和阿斯利康向参与者提出了九个现实世界的医疗保健挑战
InterSystems 向参与者介绍了使用 FHIR 存储库并通过在 AWS 上提供 FHIR 云服务来在其解决方案中执行 FHIR 可用性的机会。

来认识一下我们挑战的获胜者:

第一名Čarodějové (PathoSync)

“PathoSync 软件是复杂病理学家平台的坚实基础。通过使用自定义映射,任何实验室都可以将其数据投影到 FHIR7 标准,该标准很快将在全球范围内强制执行。这使得数字化过程更加顺利。与 InterSystems 的连接确保了质量并实现了很多医疗保健功能。此外,使用位于欧洲的FHIR服务器严格遵循GDPR规范,因此软件的使用遵循欧洲标准。

0
0 154
文章 姚 鑫 · 一月 5, 2024 3m read

第十六章 调用Callout Library函数

Callout 库是一个共享库(DLLSO 文件),其中包含 $ZF Callout 接口的挂钩,允许各种 $ZF 函数在运行时加载它并调用其函数。 $ZF Callout 接口提供了四种不同的接口,可用于在运行时加载 Callout 库并从该库调用函数。这些接口的主要区别在于如何识别库并将其加载到内存中:

  • 使用 $ZF() 访问 iriszf 标注库描述了如何使用名为 iriszf 的特殊共享库。当该库可用时,可以通过 $ZF("funcname",args) 形式的调用来访问其函数,而无需事先加载该库或指定库名称。
  • 使用 $ZF(-3) 进行简单库函数调用描述了如何通过指定库文件路径和函数名来加载库并调用函数。它使用简单,但虚拟内存中一次只能有一个库。与其他接口不同,它在调用库函数之前不需要任何初始化。
  • 使用 $ZF(-5) 通过系统 ID 访问库描述了一种可用于一次有效维护和访问多个库的接口。可以同时加载和使用多个库,每个库所需的处理开销比 $ZF(-3) 少得多。内存中的库由加载库时生成的系统定义的 ID 来标识。
  • 使用 $ZF(-6) 按用户索引访问库描述了处理大量标注库的最有效接口。该接口通过Global定义的索引表提供对库的访问。该索引可供 IRIS 实例中的所有进程使用,并且多个库可以同时位于内存中。
0
0 113
文章 姚 鑫 · 一月 4, 2024 2m read

第十五章 创建Callout Library - 处理 UNIX 信号处理错误

处理 UNIX 信号处理错误

UNIX 及相关操作系统下运行时,如果进程收到信号,某些系统调用可能会失败,最常见的是打开、读取、写入、关闭、ioctl 和暂停。如果函数使用任何这些系统调用,代码必须能够区分真正的错误、Ctrl-C 和应重新启动的调用。

以下函数允许检查异步事件并在 $ZF 中设置新的警报处理程序。函数声明包含在 iris-cdzf.h 中:

sigrtclr()

int sigrtclr(); — 清除重试标志。应在使用 sigrtchk() 之前调用一次。

dzfalarm()

int dzfalarm(); — 建立新的 `SIGALRM 处理程序。

进入 $ZF 时,会自动保存先前的处理程序。退出时会自动恢复。用户程序不应改变任何其他信号的处理。

sigrtchk()

int sigrtchk(); — 检查异步事件。每当以下系统调用之一失败时就应该调用:open、close、read、write、ioctl、pause 或进程收到信号时失败的任何调用。它返回一个代码,指示用户应采取的操作:

  • -1 — 不是信号。检查 I/O 错误。查看 errno 变量的内容。
  • 0 — 其他信号。从中断点重新开始操作。
  • 1SIGINT/SIGTERM
0
0 104
文章 Lilian Huang · 十二月 29, 2023 9m read

我们继续推出有关可供 HealthShare HealthConnect 和 InterSystems IRIS 用户使用的 FHIR 适配器工具的系列文章。

在前几篇文章中,我们介绍了小型应用程序,并在此基础上建立了我们的工作,并展示了安装 FHIR 适配器后在 IRIS 实例中部署的架构。在今天的文章中,我们将看到一个示例,说明如何执行最常见的 CRUD(创建 - 读取 - 更新 - 删除)操作之一,即读取操作,我们将通过恢复资源来完成此操作。

什么是资源?

FHIR 中的一个资源对应一种相关的临床信息,这种信息可以是病人(Patient)、对实验室的请求(ServiceRequest)或诊断(Condition)等。每种资源都定义了组成它的数据类型,以及对数据的限制和与其他类型资源的关系。每个资源都允许对其包含的信息进行扩展,从而满足 FHIR 80% 以外的需求(满足 80% 以上用户的需求)。

在本文的示例中,我们将使用最常见的资源 "Patient"。

0
0 233
文章 姚 鑫 · 十二月 27, 2023 2m read

第七章 创建Callout Library - 创建 ZFEntry 表

创建 ZFEntry

每个 Callout 库必须定义一个 ZFEntry 表,该表允许 IRIS 加载和访问 Callout 函数。 ZFEntry 表由以 ZFBEGIN 开头、以 ZFEND 结尾的宏代码块生成。在这两个宏之间,必须为要公开的每个函数调用一次 ZFENTRY 宏。

每个 ZFENTRY 调用都采用三个参数:

   ZFENTRY(zfname,linkage,entrypoint)

其中 zfname 是用于在 $ZF 调用中指定函数的字符串,linkage 是指定如何传递参数的字符串,entrypointC 函数的入口点名称。

要创建 Callout 库,代码必须包含 #define ZF_DLL 指令,该指令是一个开关,可生成用于定位库函数的内部 GetZFTable 函数。加载 Callout 库时, IRIS 调用此函数来初始化该库,以便后续查找库函数名称。

注意:ZFEntry 序列号

ZFEntry 表中条目的位置可能很重要。 $ZF(-5)$ZF(-6) 接口(在“调用标注库函数”中描述)都通过指定表中的序列号(从 1 开始)来调用库函数。

0
0 97
文章 Nicky Zhu · 十二月 27, 2023 7m read

在医疗行业中,处方是个非常重要的临床工作数据概念。因此,在考察用FHIR能如何构造我国所需医疗行业数据模型时,就会需要考虑如何用FHIR表达处方。

在2019年,FHIR的工作组已否认需要使用特定的资源来表达处方(不是药嘱)这个概念,见:

https://jira.hl7.org/browse/FHIR-24905

奇妙的是,IHE规范中却明确有处方(Prescription)的定义并需要引用药嘱(Medication Treatment Plan Item)。

https://www.ihe.net/uploadedFiles/Documents/Pharmacy/IHE_Pharmacy_Suppl_PRE.pdf?#page=12

FHIR官网指出这种复合式的request有三种表达方式:

• Shared requisition id

• "Based on" chain

• RequestOrchestration

https://build.fhir.org/request.html#compound

在FHIR实际应用中,则可以见到多种形态使用容器类资源表达处方并包含药嘱的表达形式,例如:

  1. 中国2023 FHIR Connectathon中使用消息Bundle来进行处方流转

http://wiki.hl7.org.

0
0 293
文章 姚 鑫 · 十二月 26, 2023 4m read

第六章 创建Callout Library

Callout library 库是一个共享库,其中包含自定义Callout函数和允许 IRIS使用它们的启用代码。本章描述如何创建Callout库并在运行时访问它。

  • Callout library 简介-描述如何创建和访问Callout library
  • ZFEntry链接选项 - 提供了决定如何传递函数参数的链接选项的详细描述。
  • 兼容语言和编译器-描述如何使用C以外的语言创建Callout库。
  • Callout Library运行和运行函数-描述两个可选函数,可将其设置为在加载或卸载标注库时自动运行。
  • 故障排除和错误处理-列出了一些应该避免的编码实践,并描述了处理UNIX信号处理错误的特殊函数。

注:共享库和标注库的术语,共享库shared library是指动态链接的文件(Windows上的DLL文件或UNIX及相关操作系统上的SO文件)。Callout library是一个共享库,它包含到$ZF Callout接口的钩子,允许各种$ZF函数在运行时加载和访问它。

Callout库简介

ObjectScript代码访问Callout库有几种不同的方法,但一般原则是指定库名、函数名和任何必需的参数(请参阅“调用Callout库函数”)。例如,下面的代码调用一个简单的Callout库函数:

Calloutsimplecallout.

0
0 118
文章 姚 鑫 · 十二月 25, 2023 2m read

第五章 使用$ZF(-100)运行程序或系统命令 - 增加权限

增加%System_Callout:USE权限

$ZF(-100)需要%System_Callout:USE权限。如果安全设置高于最小值,则可能会禁用此特权。下面的过程描述了如何在%Developer角色中启用它:

%Developer角色中启用%System_Callout:USE

  1. 在“管理门户”中,选择“系统管理员>安全>角色”。
  2. Roles页面上,单击Names列中的%Developer
  3. Edit %Developer页面的General选项卡上,找到%System_Callout权限并单击Edit
  4. 在“编辑资源权限”对话框中,如果尚未选中,请选中“权限使用”复选框,然后单击“确定”。

%Developer角色总是在安装 IRIS时创建,但是管理员可能不希望所有用户都可以使用它。在某些情况下,可能需要为用户提供一个角色,使$ZF(-100)可用,但不授予任何其他特权。下面的过程创建了一个只授予%System_CallOut:USE权限的新角色:

在新角色中启用%System_Callout:USE

  1. 打开Management Portal,进入System Administration > Security > Roles

0
0 97
文章 Louis Lu · 十二月 24, 2023 2m read

在此文章中将分享,当使用InterSystems IRIS 做后端时如何接收并保存通过POST方式发送过来的 Base64文件。

前后端之间传输文件,我认为较简单的方式是:前端将文件转为Base64格式,调用POST方法并将Base64内容附加在JSON消息中的一个参数中,在JSON消息中的另一个参数可以是文件名,比如消息定义如下:

{
    "fileData": "JVBERi0xLjQKJdPr6eEKMSAwIG...",
    "fileName": "example.pdf"
}

在IRIS中,可以定义一个web application用于处理POST请求,同时定义一个分派类继承于%CSP.REST,在类中定义一个方法,具体保存文件。

代码示例:

ClassMethod SaveFile() As %Status
{
    Try {
        Do ##class(%REST.Impl).%SetContentType("application/json")
        If '##class(%REST.Impl).%CheckAccepts("application/json") Do ##class(%REST.Impl).%ReportRESTError
0
0 270
文章 姚 鑫 · 十二月 23, 2023 3m read

第三章 使用$ZF(-100)运行程序或系统命令

$ZF(-100)函数允许 IRIS 进程调用可执行程序或主机操作系统的命令。这是唯一可以在没有特殊的Callout共享库的情况下使用的$ZF函数。

  • $ZF(-100)的语法和功能概述。
  • 程序执行-程序可以选择异步运行或在操作系统外壳中运行。
  • 记录命令和重定向输出——可选设置可以记录命令或重定向I/O
  • 添加%System_Callout:USE特权—使用$ZF(-100)需要此特权。

注意:$ZF(-100)取代了已弃用的函数$ZF(-1)$ZF(-2),在所有情况下都应优先使用。

介绍

$ZF(-100)提供类似于命令行接口的功能,允许调用可执行程序或主机操作系统的命令。这个函数的语法是:

status = $ZF(-100, keywords, command, arguments )

第一个参数必须是字面量-100。其他三个参数指定以下信息:

  • Keywords - 包含指定各种选项的关键字的字符串。例如,字符串"/ASYNC/LOGCMD"指定程序应该异步运行,并将命令行写入日志文件。
  • Command - 指定要调用的程序或系统命令的字符串。如果未指定可执行文件的完整路径,则操作系统将应用标准搜索路径规则。
  • 参数 - 命令参数被指定为一系列以逗号分隔的表达式(如下面的示例所示)。
0
0 122
文章 姚 鑫 · 十二月 22, 2023 3m read

第二章 $ZF Callout函数概述

IRIS $ZF系统功能是一套相关功能的容器。$ZF套件中的大多数函数都由函数调用的第一个参数标识,该参数将是一个负数,-100-3-6。例如,调用操作系统命令的函数具有$ZF(-100, )的形式,其中是包含要执行的命令的字符串。当讨论这个函数时,它将被称为$ZF(-100)。以同样的方式,其他函数将被称为$ZF(-3)$ZF(-6),只使用实际函数调用的第一个参数。也可以在不带负数参数的情况下调用$ZF()函数,在这种情况下,它调用名为iriszf的特殊Callout库中的函数。

注:Callout Libraries是动态链接的文件(WindowsDLL文件,UNIX及相关操作系统为SO文件)。Callout库是一个共享库,它包含到$ZF Callout接口的钩子,允许各种$ZF函数在运行时加载它并调用库函数。

$ZF函数集包括以下接口:

$ZF()函数(不带负数参数)

主要的$ZF()函数提供了对来自名为iriszf的特殊Callout库的函数的直接访问。当定义并编译了这个自定义库后,只需指定函数名和参数(例如,$ZF("myFunction",arg1)),就可以调用它的函数。与$ZF(-3)$ZF(-5)$ZF(-6)不同,不需要加载库或指定库标识符。

0
0 82