找回密码
 立即注册
首页 业界区 业界 入职3个月,为冷门编程语言 InterSystems ObjectScript ...

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

任修 昨天 19:31
背景介绍

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

相同点

面向对象编程

有静态方法和普通方法。
异常处理

使用 TRY/CATCH 结构处理异常,类似于其他编程语言:
  1. TRY {
  2.     // 可能出错的代码
  3.     SET result = 10 / 0
  4. } CATCH ex {
  5.     WRITE "Error: " _ ex.DisplayString()
  6. }
复制代码
全局变量

SET ^MyGlobal("UserCount") = 100
"$"为开头的变量的语法

让我想起来了php的变量。$JOB,$ZDATE("YYYY-MM-DD")
类似于C的宏定义

支持预处理器指令和宏定义,在编译时进行文本替换:
  1. #define DEBUG 1
  2. #if DEBUG
  3.     WRITE "Debug mode enabled"
  4. #endif
复制代码
现代包管理工具

zpm "search"
差异

高度封装的例程

有点像mysql的存储过程,可以直接使用
反人类的函数习惯

Collections集合的SetAt方法
  1. 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++的手动内存管理折磨,现在需要自己指定编译顺序。
代码生成器

用代码生成代码,提高执行效率。
较难调试,双引号配对的折磨。
  1. If $CLASSMETHOD(type, "%Extends", "%Boolean")
  2.         {
  3.                         Do %code.WriteLine("   do data.Write($Select(.."_propName_"="""": ""null"", +.."_propName_": ""true"", 1: ""false""))")
  4.         }
  5.                 ElseIf $CLASSMETHOD(type, "%Extends", "%Integer") || $CLASSMETHOD(type, "%Extends", "%Numeric")
  6.                         || $CLASSMETHOD(type, "%Extends", "%Float") || $CLASSMETHOD(type, "%Extends", "%Double")
  7.         {
  8.                         Do %code.WriteLine("   do data.Write($Select(.." _ propName _ "="""": ""null"", 1: $FNUMBER(+.." _ propName _ ", ""N"")))")
  9.                 }
  10.                 Else
  11.                 {
  12.                         Do %code.WriteLine("   do data.Write($Select(.."_propName_"="""": ""null"", 1: """""""" _ .."_propName_"_""""""""))")
  13.                 }
复制代码
不存在多线程的类和方法

ObjectScript 本身并没有提供类似其他编程语言(如 Java 或 Python)中的传统 多线程 类或方法。JOB 在 ObjectScript 中是基于 多进程 的,而不是传统意义上的 多线程。
InterSystems ObjectScript 类图查看器

1.png

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

功能


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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册