背景介绍
InterSystems ObjectScript 是由 InterSystems 公司开发的编程语言,诞生于 1980 年代初期。它最初是为了支持 InterSystems 的数据库产品(如 Caché)而设计的,结合了面向对象和过程式编程的特性。ObjectScript 的设计目的是为了高效地处理医疗、财务和其他高性能计算领域的数据密集型应用。
公司老项目使用的是这个技术栈,我没得选,得使用。我明显感觉到,这个编程语言的社区远小于Java,Spring, C#,.NET, Python, AI等主流编程语言以及技术栈社区。出了错只能查官方API,AI编程辅助在这个语言上表现欠佳,比如会为一个类生成API不存在的方法,以及无法察觉到编译顺序之类的底层错误。
和主流编程语言的对比
相同点
面向对象编程
有静态方法和普通方法。
异常处理
使用 TRY/CATCH
结构处理异常,类似于其他编程语言:
objectscript
TRY {
// 可能出错的代码
SET result = 10 / 0
} CATCH ex {
WRITE "Error: " _ ex.DisplayString()
}
全局变量
SET ^MyGlobal("UserCount") = 100
"$"为开头的变量的语法
让我想起来了php的变量。$JOB
,$ZDATE("YYYY-MM-DD")
类似于C的宏定义
支持预处理器指令和宏定义,在编译时进行文本替换:
objectscript
#define DEBUG 1
#if DEBUG
WRITE "Debug mode enabled"
#endif
现代包管理工具
zpm "search"
差异
高度封装的例程
有点像mysql的存储过程,可以直接使用
反人类的函数习惯
Collections集合的SetAt方法
do myList.SetAt("red",2)
他这里key是在最后一个参数的位置,value在第一个参数位置。
For循环是FOR var=start:increment:end
,主流语言是FOR var=start:end:increment
FOR i = 1 : 1 : 10 { code }
Property和Parameter傻傻分不清
两个都是属性的意思,前者表示可以更改,后者表示常量,类似于主流编程语言的const关键字。
奇特的语法
字符串包含
##class
调用
编译顺序人工干预
很头疼的特性,让我想起来被C++的手动内存管理折磨,现在需要自己指定编译顺序。
代码生成器
用代码生成代码,提高执行效率。
较难调试,双引号配对的折磨。
C
If $CLASSMETHOD(type, "%Extends", "%Boolean")
{
Do %code.WriteLine(" do data.Write($Select(.."_propName_"="""": ""null"", +.."_propName_": ""true"", 1: ""false""))")
}
ElseIf $CLASSMETHOD(type, "%Extends", "%Integer") || $CLASSMETHOD(type, "%Extends", "%Numeric")
|| $CLASSMETHOD(type, "%Extends", "%Float") || $CLASSMETHOD(type, "%Extends", "%Double")
{
Do %code.WriteLine(" do data.Write($Select(.." _ propName _ "="""": ""null"", 1: $FNUMBER(+.." _ propName _ ", ""N"")))")
}
Else
{
Do %code.WriteLine(" do data.Write($Select(.."_propName_"="""": ""null"", 1: """""""" _ .."_propName_"_""""""""))")
}
不存在多线程的类和方法
ObjectScript 本身并没有提供类似其他编程语言(如 Java 或 Python)中的传统 多线程 类或方法。JOB 在 ObjectScript 中是基于 多进程 的,而不是传统意义上的 多线程。
InterSystems ObjectScript 类图查看器

一个用于生成 InterSystems ObjectScript 类的 UML 类图的 Visual Studio Code 扩展。此扩展不仅生成类图,还提供交互式显示和导航功能。

功能
- 从
.cls
文件生成 UML 类图 - 支持类级和文件夹级图表生成
- 在编辑器和资源管理器中集成上下文菜单
- 可视化类关系、属性和方法
- 基于 PlantUML 提供可靠的图表表示
- 使用 PlantUML Web 服务器生成图表(无需安装 Java)
- 新增: 与 InterSystems IRIS 直接集成,获取服务器端类信息
- 新增: 从图表直接在 IRIS Documatic 中浏览类
- 交互式类图导航
- 点击类名、属性或方法可快速跳转到相应代码
- SVG 图表嵌入 HTML 中实现平滑交互
- 类关系的可视化导航
要求
操作系统 | 必需 | 可选(用于本地 PlantUML 生成) |
---|---|---|
Windows | - VSCode 1.96.0+ - ObjectScript 类文件(.cls ) |
- Java 8+ |
Linux | - VSCode 1.96.0+ - ObjectScript 类文件(.cls ) |
- Java 8+ - Graphviz |
💡 使用 PlantUML Web 服务器时,不需要 Java 和 Graphviz。
安装
- 从 VS Code 安装扩展
- 确保您的系统上已安装 Java 运行时环境 (JRE)(使用 PlantUML Web 服务器时可选)
- 安装后重启 VS Code
💡 查看详细图文教程 :如需查看安装和使用的详细截图演示,请访问 GitHub 仓库文档
使用方法
生成类图
- 在编辑器中打开
.cls
文件 - 使用以下方法之一生成类图:
- 按下
Ctrl+Alt+U
- 右键点击文件并选择"生成类图"
- 右键点击包含
.cls
文件的文件夹并选择"生成类图"
- 按下
- 出现提示时,选择您首选的生成方法:
- 本地 Java:使用本地 Java 安装生成图表并在 VS Code 中显示
- PlantUML Web 服务器:生成可以在任何浏览器中打开的 URL(无需安装 Java)
使用 PlantUML Web 服务器
选择"PlantUML Web 服务器"选项时:
- 无需本地 Java 安装
- 图表在 PlantUML Web 服务器上生成
- 您可以将 URL 复制到剪贴板或直接在浏览器中打开
- 可以与他人共享 URL 以查看图表
使用 IRIS 集成生成类图
此功能依赖于 Intersystem 插件,它将从所选类生成所有类属性、参数和方法。
需要注意的是,该功能会生成整个继承层次结构,即使是本地项目中不存在的类也会包含在内。
- 在 VS Code 设置中配置您的 IRIS 连接:
- 前往设置 > 扩展 > InterSystems ObjectScript 类图
- 输入您的 IRIS 服务器主机、端口、命名空间、用户名和密码
- 在编辑器中打开
.cls
文件 - 右键点击并选择"生成 InterSystems 类图"
- 扩展将连接到您的 IRIS 服务器并使用服务器中的类信息生成图表
- 点击图表中的类名、属性或方法可以:
- 在 IRIS Documatic 中打开类
- 在 IRIS 中查看属性定义
- 在 IRIS 中导航到方法实现
交互功能
- 点击图表元素可以:
- 跳转到类定义
- 查看属性定义
- 导航到方法实现
- 支持图表缩放和平移
- 清晰可视化类关系
键盘快捷键
Ctrl+Alt+U
:为当前打开的.cls
文件生成类图
扩展设置
此扩展提供以下命令:
intersystems-objectscript-class-diagram-view.generateClassDiagram
:为选定的文件或文件夹生成类图intersystems-objectscript-class-diagram-view.generateIntersystemsClassDiagram
:使用 IRIS 服务器信息生成类图
此扩展提供以下设置:
intersystems-objectscript-class-diagram-view.server.host
:IRIS 服务器主机intersystems-objectscript-class-diagram-view.server.port
:IRIS 服务器端口intersystems-objectscript-class-diagram-view.server.namespace
:IRIS 命名空间intersystems-objectscript-class-diagram-view.server.username
:IRIS 服务器用户名intersystems-objectscript-class-diagram-view.server.password
:IRIS 服务器密码
已知问题
- 子类生成:缺少为当前类生成子类图的功能
- 大型项目性能 :
- 使用右键为大型文件夹生成图表可能会有明显延迟
- 对于大型项目生成的 webview/SVG 缺乏流畅的缩放功能和适当的缩放
请在 GitHub 仓库中报告任何问题。
贡献
欢迎贡献!随时提交拉取请求。
许可证
此扩展根据 MIT 许可证授权。