任修 发表于 7 天前

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


一个用于生成 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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 入职3个月,为冷门编程语言 InterSystems ObjectScript 编写了一个 VSCode 插件