背景介绍

InterSystems ObjectScript 是由 InterSystems 公司开发的编程语言,诞生于 1980 年代初期。它最初是为了支持 InterSystems 的数据库产品(如 Caché)而设计的,结合了面向对象和过程式编程的特性。ObjectScript 的设计目的是为了高效地处理医疗、财务和其他高性能计算领域的数据密集型应用。

公司老项目使用的是这个技术栈,我没得选,得使用。我明显感觉到,这个编程语言的社区远小于Java,Spring, C#,.NET, Python, AI等主流编程语言以及技术栈社区。出了错只能查官方API,AI编程辅助在这个语言上表现欠佳,比如会为一个类生成API不存在的方法,以及无法察觉到编译顺序之类的底层错误。

和主流编程语言的对比

相同点

面向对象编程

有静态方法和普通方法。

异常处理

全局变量

SET ^MyGlobal("UserCount") = 100

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

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

类似于C的宏定义

现代包管理工具

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

使用 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 仓库中报告任何问题。

贡献

欢迎贡献!随时提交拉取请求。

入职3个月,为冷门编程语言 InterSystems ObjectScript 编写了一个 VSCode 插件的更多相关文章

  1. 入职两个月,WPF开发感想

    1 .新工作,新开始 2.WPF初次接触以及学习MVVM开发模式 3.后台数据操作,ORACLE 存储过程(边做边学) 4.总结 4.1工作开发中的小问题 ,遇到的坑:  4.2 解决的问题,学校到的 ...

  2. java如何实现入职时间到现在 java如何计算知道入职时间, 求工作时长格式为年--月--日。

    Date ruZhi = new Date("入职年月bai"); Date now = new Date(); //算出du来时间夸格zhi多长 long shiChang = ...

  3. [日常]总结2016年7月入职至2016年7月26号微盘所遇bug

    2016年刚入职后在新浪微盘项目上所遇到的问题: 1.前端接口的程序不同版本问题,版本号在程序路径中区分,比如2.4.2/lib/sdk/api/weipan/Client.php 2.文件夹接口的m ...

  4. 入职一个月后 对.net的感想

    我本来应该找Java工程师的岗位的,因种种原因进入了.net开发工程师.然后,我进入了一扇新世界的大门. 1.语法不同,思想相同. 刚入职那几天,每天都好蒙,.net代码语法啥的都和Java不一样,a ...

  5. 成功入职ByteDance,分享我的八面面经心得!

    今天正式入职了字节跳动.办公环境也很好,这边一栋楼都是办公区域.公司内部配备各种小零食.饮料,还有免费的咖啡.15楼还有健身房.而且公司包三餐来着.下午三点半左右还会有阿姨推着小车给大家送下午茶.听说 ...

  6. 新人入职100天,聊聊自己的经验&教训

    这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...

  7. Oracle DBA从小白到入职实战应用

    现如今Oracle依然是RDBMS的王者,在技术上和战略上,Oracle仍然一路高歌猛进,并且全面引领行业迈入了云时代,伴随着12cR2即将在2016年正式发布,学习Oracle之路依旧任重道远,目前 ...

  8. ERP员工入职登记(五)

    在数据库中添加链接的地址:

  9. Blog 入职新公司的一些吐槽!

    入职公司已经两个星期了,说真的也很惭愧.我们这小批入职的一共六个人,五个人是实习生,我是唯一一个社招. 所以 我要吐槽 !! 吐槽1 人家都是90后(TAT) 其实真的不要觉得年龄是压力!看看路边KF ...

  10. 入职第一天:前端leader手把手教我入门Vue服务器端渲染(SSR)

    继前段时间西安电面之后顺利拿到了OFFER,今天(5月2号)是我入职第一天,在简短的内部培训了一上午后,前端leader让我先了解下什么是vue的服务器端渲染(SSR). SSR,英文全称叫 Serv ...

随机推荐

  1. 【MOOC】华中科技大学计算机组成原理慕课答案-第二章-数据表示

    单选 1 计算机中表示地址时使用 √A. 无符号数 B. 反码 C. 原码 D. 补码 2 浮点数的表示范围和表示精确度分别取决于 A. 阶码的编码和尾数的编码 √B. 阶码的位数和尾数的位数 C. ...

  2. Pandas 清除 Excel 特殊字符

    清除 Excel 特殊字符 主要是为了做一个笔记, 用 遍历 DataFrame 用正则匹配特殊字符并替换. 是上个月初的项目了, 其中有个将 Excel 传入数据库的时候, 发现有特殊字符, 很奇怪 ...

  3. SQL 强化练习 (一)

    当然, 说明一下, 所有的内容都是网上搬砖的, 也是用作自己练习用的. 我觉得如何去写 sql 这个思考的过程, 远比最终写出来更重要, 毕竟, 我最近有在公司看到了 2000多行的一个 sql. 我 ...

  4. Unity ML-Agents实战指南:构建多技能游戏AI训练系统

    引言:游戏AI训练的技术演进 在<赛博朋克2077>的动态NPC系统到<Dota 2>OpenAI Five的突破性表现中,强化学习正在重塑游戏AI边界.本文将通过Unity ...

  5. FastAPI与Alembic:数据库迁移的隐秘艺术

    title: FastAPI与Alembic:数据库迁移的隐秘艺术 date: 2025/05/13 02:02:31 updated: 2025/05/13 02:02:31 author: cmd ...

  6. Grind75详解

    Day1 001 ToSum //O(n2) public int[] TwoSum(int[] nums, int target) { for (int i = 0; i < nums.Len ...

  7. 使用IntelliJ IDEA 比对文件内容差异

    摘要:使用IntelliJ IDEA 比对文件内容差异部分,迅速定位修改点.   在敲代码的过程中,经常需要比较两个代码文件的内容差异,很多人会去网上找文件比较工具来处理,其实 IntelliJ ID ...

  8. 网络策略NetworkPolicy

    网络策略 在 Kubernetes 里,网络隔离能力的定义,是依靠一种专门的 API 对象来描述的,即: NetworkPolicy. Kubernetes 里的 Pod 默认都是"允许所有 ...

  9. win10 hyper-v 配置教程

    非家庭版跳过以下这一步. pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hv.txt ...

  10. Android studio虚拟机黑屏

    1.冷启动 cold boot now 2.新建一个 另外今天下午起来的比较晚,就在宿舍上的机,然后效果就比较差,我有罪,我下次要学习一定不在宿舍,今晚也是早早的吃了饭就来自习了,这就是成果.卡了我一 ...