vscode不能运行smalltalk代码,因其无内置vm、不加载镜像、不维护活对象图;唯一可行方式是作为文本编辑器+git客户端+外部pharo命令调用工具。

VSCode 不能运行 Smalltalk 代码——它压根没有执行能力,也没有对象图、镜像加载或 VM 支持。你看到的“运行”按钮、调试面板、F5 快捷键,对 Smalltalk 全无效。所有所谓“运行”都必须绕过 VSCode 内核,走外部命令调用。
VSCode 按 F5 或点击“运行”根本不会触发 Smalltalk 执行
VSCode 的 run 和 debug 功能依赖语言扩展提供的 Debug Adapter Protocol (DAP) 实现,而 Pharo/Squeak 等 Smalltalk VM 不提供 DAP 接口,也没有进程 attach 能力。你点 F5 后只会看到“无法启动调试会话”或空白终端。
- 错误现象:
Cannot find debugger extension for 'smalltalk'或No debug configuration found - 真实原因:VSCode 从不读取
.image文件,也不启动 VM;它连.changes都只当纯文本 - 双击
pharo.image文件 → 打开的是 Pharo Launcher,不是 VSCode - 试图在 launch.json 里写
"type": "smalltalk"?VSCode 会直接报错:未知调试类型
唯一可行的“运行”方式:用终端调用 pharo CLI
真正能执行 Smalltalk 逻辑的,只有 pharo 命令行工具(即 Pharo VM 的 CLI 封装)。VSCode 只能帮你打开终端、写好命令、按回车——它本身不参与执行。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 前提:系统 PATH 中必须有
pharo,验证方式:终端输入pharo --version能返回版本号 - 典型命令:
pharo my.image eval --save 'Transcript show: ''hello''; cr.' - 注意
--save:不加则执行完镜像不保存变更;加了才写回.image - 路径必须是绝对路径或相对于当前终端工作目录;
${workspaceFolder}在 tasks.json 中可用,但别指望它自动补全.image - 别用
pharo my.image script.st:Pharo CLI 不支持直接运行 .st 文件,必须用eval或先用load导入
Smalltalk 扩展只能做三件事:高亮、括号匹配、文件管理
VSCode 上搜 “Smalltalk” 安装的扩展(如 smalltalk-syntax)本质是文本增强器,和 Python 插件不是一类东西。它们不连接 VM,不解析方法上下文,也不响应 thisContext。
- 语法高亮靠正则匹配,对
[ :x | x + 1 ]这类 block 可能漏判,别依赖它查语法错误 - snippets 如
meth展开为方法模板,但插入后仍需手动进 Pharo IDE 编译生效 - Git 对比
.st文件确实比 Monticello 直观,这是 VSCode 最实在的价值点 - 所有“调试”“inspect”“halt”相关描述都是误导——扩展里没实现,VM 也不支持
所谓“动态对象环境模拟”是幻觉
Smalltalk 的动态性不在语法,而在活镜像:你改一个方法定义,所有已有实例立刻响应;你 Object new 出的对象,下一秒就能被其他对象引用并发送消息。VSCode 没内存、没对象图、没 World 循环,它甚至不知道 self 指向什么。
- 你在 VSCode 里右键“查看定义” → 跳转到
.st文件某行,但这行代码还没被加载进镜像,根本不生效 - 编辑完
MyClass>>#doSomething,不进 Pharo 手动编译,VSCode 保存再多遍也没用 - 想看对象状态?VSCode 里没有
inspector、没有debugger、没有explore—— 因为根本没有对象可 inspect - 所谓 JS/Python 写的“Smalltalk 解释器玩具”,跑的是静态 AST,不是镜像,和真实开发无关
关键点始终只有一个:VSCode 是编辑器,Pharo 是运行时。两者之间没有桥梁,只有文件和 shell 命令。混淆边界,就会反复踩进“为什么 F5 不工作”“为什么断点无效”“为什么对象看不到”的坑里。










