问题标签 [selflanguage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
version-control - How do you do version control in Self?
How do you do version control in Self?
I understand it is a shared environment(image) where all developers can be connected to the same image, but I'm keen to understand how I do things like roll back changes, take patches forms developers who cannot share an image, and share via GitHub?
lisp - 代码作为系统映像(序列化运行时环境)与源代码(文本)
今天几乎所有的传统语言都将程序员的意图表示为文本源,然后(为了简单起见)将其翻译成一些字节码/机器代码并由 VM/CPU 解释/执行。
还有另一种技术,由于某种原因,现在不那么流行:“冻结”你的 VM 的运行时间并将环境(符号绑定、状态、代码(无论是什么))转储/序列化到一个图像,然后您可以传输、加载和执行该图像。因此,您不会以通常的方式“编写”代码,而是在“运行时”使用新符号修改环境。
我看到了这种技术的巨大优势:
- Power-boosted REPL:您可以在编写代码时对其进行内省、部分评估、直接测试并查看更改的效果。如果你搞砸了,然后回滚,然后再做一次,或者最终将它提交到环境中。无需漫长的编译-运行-调试周期;
- 一些关于动态语言的常见问题(它们不能被编译,因为编译器不能静态推断环境)被忽略了:解释器知道什么在哪里,并且可以用静态偏移代替符号引用并进行其他优化;
- 程序员的大脑更容易:你从你的头脑中“卸载”关于代码的不同上下文信息,即你不需要跟踪你的代码已经对某个变量/数据结构做了什么,或者哪个变量保存了什么:你看它直接在你的眼前!以通常的方式(编写源代码),程序员向代码添加新的抽象或注释以阐明意图,但这可能(并且将会)变得混乱。
问题是:这种方法有什么缺点?有没有我没有看到的严重的严重缺点?我知道,它存在一些问题,即:
- 尝试用它构建一个模块系统,这不会导致依赖地狱或严重的链接问题
- 安全问题
- 尝试对此类图像进行版本控制并启用并发开发
但恕我直言,这些都是可以通过良好的设计解决的。
EDIT1:关于“关闭,主要基于意见”的状态。我已经描述了两种现有的方法,很明显,一种方法优于另一种方法。其原因是纯粹的“基于意见”还是有研究支持这一点,我不知道,但即使它们是基于意见的,如果有人会列出形成这种意见的这些原因,它实际上,应该回答我的问题。
algorithm - 我在哪里可以找到用于类型推断的笛卡尔积算法的实现?
在哪里可以找到用于类型推断的笛卡尔积算法的实现? (最好在 Python/C++ 中,但任何语言都可以。)
我已经在互联网上搜索了很多次,但是关于算法的细节很少,据我所知,没有公布的实现。