代码作为系统图像(序列化 运行 时间环境)与源代码(文本)
Code as System image (serialized run-time environment) vs Source (text)
今天几乎所有的传统语言都将程序员的意图表示为文本源,然后(为了简单起见)将其翻译成一些 bytecode/machine 代码和 interpreted/executed 由 VM/CPU .
还有另一种技术,由于某种原因,这些天并不那么流行:"freeze" VM 的 运行 时间和 dump/serialize 环境(符号绑定、状态、代码(无论那是什么))转换为图像,然后您可以传输、加载和执行。
因此,您不会以通常的方式 "write" 您的代码,而是使用新符号修改环境,而在 "run-time".
我看到这种技术的巨大优势:
- 强大的 REPL:您可以在编写代码时自省代码、部分评估代码、直接测试代码并查看更改的效果。然后回滚,如果你搞砸了,再做一次,或者最终将它提交给环境。无需漫长的编译-运行-调试周期;
- 关于动态语言的一些常见问题(它们不能被编译,因为编译器不能静态推理环境)被遗忘:解释器知道什么位于何处并且可以用静态偏移替换符号引用并进行其他优化;
- 程序员的大脑更容易:你 "offload" 从你的头脑中获得关于代码的不同上下文信息,即你不需要跟踪你的代码已经对某些人做了什么 variable/data结构或哪个变量包含什么:您直接在眼前看到它!在通常的方式(编写源代码)中,程序员向代码添加新的抽象或注释以阐明意图,但这可能(并且将会)变得混乱。
问题是:这种方法有什么缺点?是否有任何我没有看到的严重严重缺点?我知道,它有一些问题,即:
- 尝试用它构建一个模块系统,这不会导致依赖地狱或严重的链接问题
- 安全问题
- 尝试对此类图像进行版本控制并启用并发开发
但是,恕我直言,可以通过良好的设计解决这些问题。
EDIT1: 关于状态 "closed,primarily opinion-based"。我已经描述了两种现有的方法,很明显,一种方法优于另一种方法。其原因是纯粹的 "opinion-based" 还是有研究支持这一点,我不知道,但即使它们是基于意见的,如果有人列出这些意见发展的原因,它实际上,应该回答我的问题。
作为 smalltalk 的日常用户,我不得不说我没有发现任何根本的缺点并且不得不承认它有很多优点。
它使元编程、程序推理变得容易,并且更好地支持重构和代码重写。
不过,它 requires/develops 是一种查看代码的不同方式。对于对抽象不感兴趣的开发人员,Smalltalk 几乎没有什么可以提供的
今天几乎所有的传统语言都将程序员的意图表示为文本源,然后(为了简单起见)将其翻译成一些 bytecode/machine 代码和 interpreted/executed 由 VM/CPU .
还有另一种技术,由于某种原因,这些天并不那么流行:"freeze" VM 的 运行 时间和 dump/serialize 环境(符号绑定、状态、代码(无论那是什么))转换为图像,然后您可以传输、加载和执行。
因此,您不会以通常的方式 "write" 您的代码,而是使用新符号修改环境,而在 "run-time".
我看到这种技术的巨大优势:
- 强大的 REPL:您可以在编写代码时自省代码、部分评估代码、直接测试代码并查看更改的效果。然后回滚,如果你搞砸了,再做一次,或者最终将它提交给环境。无需漫长的编译-运行-调试周期;
- 关于动态语言的一些常见问题(它们不能被编译,因为编译器不能静态推理环境)被遗忘:解释器知道什么位于何处并且可以用静态偏移替换符号引用并进行其他优化;
- 程序员的大脑更容易:你 "offload" 从你的头脑中获得关于代码的不同上下文信息,即你不需要跟踪你的代码已经对某些人做了什么 variable/data结构或哪个变量包含什么:您直接在眼前看到它!在通常的方式(编写源代码)中,程序员向代码添加新的抽象或注释以阐明意图,但这可能(并且将会)变得混乱。
问题是:这种方法有什么缺点?是否有任何我没有看到的严重严重缺点?我知道,它有一些问题,即:
- 尝试用它构建一个模块系统,这不会导致依赖地狱或严重的链接问题
- 安全问题
- 尝试对此类图像进行版本控制并启用并发开发
但是,恕我直言,可以通过良好的设计解决这些问题。
EDIT1: 关于状态 "closed,primarily opinion-based"。我已经描述了两种现有的方法,很明显,一种方法优于另一种方法。其原因是纯粹的 "opinion-based" 还是有研究支持这一点,我不知道,但即使它们是基于意见的,如果有人列出这些意见发展的原因,它实际上,应该回答我的问题。
作为 smalltalk 的日常用户,我不得不说我没有发现任何根本的缺点并且不得不承认它有很多优点。 它使元编程、程序推理变得容易,并且更好地支持重构和代码重写。
不过,它 requires/develops 是一种查看代码的不同方式。对于对抽象不感兴趣的开发人员,Smalltalk 几乎没有什么可以提供的