入职3个月,为冷门编程语言 InterSystems ObjectScript 编写了一个 VSCode 插件

入职3个月,为冷门编程语言 InterSystems ObjectScript 编写了一个 VSCode 插件

    正在检查是否收录...
一言准备中...

背景介绍

InterSystems ObjectScript 是由 InterSystems 公司开发的编程语言,诞生于 1980 年代初期。它最初是为了支持 InterSystems 的数据库产品(如 Caché)而设计的,结合了面向对象和过程式编程的特性。ObjectScript 的设计目的是为了高效地处理医疗、财务和其他高性能计算领域的数据密集型应用。
公司老项目使用的是这个技术栈,我没得选,得使用。我明显感觉到,这个编程语言的社区远小于Java,Spring, C#,.NET, Python, AI等主流编程语言以及技术栈社区。出了错只能查官方API,AI编程辅助在这个语言上表现欠佳,比如会为一个类生成API不存在的方法,以及无法察觉到编译顺序之类的底层错误。

和主流编程语言的对比

相同点

面向对象编程

有静态方法和普通方法。

异常处理

使用 TRY/CATCH 结构处理异常,类似于其他编程语言:

TRY { // 可能出错的代码 SET result = 10 / 0 } CATCH ex { WRITE "Error: " _ ex.DisplayString() } 

全局变量

SET ^MyGlobal("UserCount") = 100

"$"为开头的变量的语法

让我想起来了php的变量。$JOB,$ZDATE("YYYY-MM-DD")

类似于C的宏定义

支持预处理器指令和宏定义,在编译时进行文本替换:

#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++的手动内存管理折磨,现在需要自己指定编译顺序。

代码生成器

用代码生成代码,提高执行效率。
较难调试,双引号配对的折磨。

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 类图查看器

入职3个月,为冷门编程语言 InterSystems ObjectScript 编写了一个 VSCode 插件

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

入职3个月,为冷门编程语言 InterSystems ObjectScript 编写了一个 VSCode 插件

功能

  • .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。

安装

  1. 从 VS Code 安装扩展
  2. 确保您的系统上已安装 Java 运行时环境 (JRE)(使用 PlantUML Web 服务器时可选)
  3. 安装后重启 VS Code

💡

查看详细图文教程

:如需查看安装和使用的详细截图演示,请访问 GitHub 仓库文档

使用方法

生成类图

  1. 在编辑器中打开 .cls 文件
  2. 使用以下方法之一生成类图:
    • 按下 Ctrl+Alt+U
    • 右键点击文件并选择"生成类图"
    • 右键点击包含 .cls 文件的文件夹并选择"生成类图"
  3. 出现提示时,选择您首选的生成方法:
    • 本地 Java

      :使用本地 Java 安装生成图表并在 VS Code 中显示
    • PlantUML Web 服务器

      :生成可以在任何浏览器中打开的 URL(无需安装 Java)

使用 PlantUML Web 服务器

选择"PlantUML Web 服务器"选项时:

  • 无需本地 Java 安装
  • 图表在 PlantUML Web 服务器上生成
  • 您可以将 URL 复制到剪贴板或直接在浏览器中打开
  • 可以与他人共享 URL 以查看图表

使用 IRIS 集成生成类图

此功能依赖于 Intersystem 插件,它将从所选类生成所有类属性、参数和方法。
需要注意的是,该功能会生成整个继承层次结构,即使是本地项目中不存在的类也会包含在内。

  1. 在 VS Code 设置中配置您的 IRIS 连接:
    • 前往设置 > 扩展 > InterSystems ObjectScript 类图
    • 输入您的 IRIS 服务器主机、端口、命名空间、用户名和密码
  2. 在编辑器中打开 .cls 文件
  3. 右键点击并选择"生成 InterSystems 类图"
  4. 扩展将连接到您的 IRIS 服务器并使用服务器中的类信息生成图表
  5. 点击图表中的类名、属性或方法可以:
    • 在 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 许可证授权。



  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-26988.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.7W+
8
1
1
WAP站长官方

[深度学习] 大模型学习3下

上一篇

​​SBOM(软件物料清单)—— 软件供应链安全的“成分说明书”​

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单