gpt4 book ai didi

smalltalk - Smalltalk 镜像如何处理 IO?

转载 作者:行者123 更新时间:2023-12-04 14:37:41 24 4
gpt4 key购买 nike

我刚开始学习 Smalltalk,了解了它的语法,但还没有用它进行任何真正的编码。在阅读一些介绍性文章和一些 SO 问题时,例如:

  • What gives Smalltalk the ability to do image persistence, and whycan't languages like Ruby/Python serializethemselves?
  • What is a Smalltalk “image”?

  • 一个问题总是在我脑海中浮现: Smalltalk 镜像如何处理 IO?

    smalltalk 程序可以使用存储在图像中的信息从它退出的地方恢复。假设我有一些打开的 TCP 连接(更不用说各种缓冲区),它们如何恢复?除了重新打开它们之外似乎别无他法(由 this answer 确认)。如果 Smalltalk 确实重新打开了这些连接,这是否与“稍后从您停止的地方恢复执行程序”的想法背道而驰?还是背后有什么魔力?

    我不介意答案是否特定于某些方言,Pharo 说。

    也有兴趣了解一些资源以了解有关此主题的更多信息。

    最佳答案

    添加一个小的历史类(class)可能会很有用:Smalltalk 是在 1970 年代在施乐的帕洛阿尔托研究中心 (PARC) 创建的。同时,在同一个地方,个人计算机被发明了。同样在同一时间同一地点,发明了以太网。

    Smalltalk 是一个单一的集成系统,它同时是 IDE、GUI、外壳、内核、操作系统,甚至 CPU 的微代码都是 Smalltalk 系统的一部分。 Smalltalk 不必处理来自图像外部的非 Smalltalk 资源,因为无论出于何种意图和目的,都没有“外部”。可以重新创建准确的机器状态,因为虚拟机和机器之间实际上没有任何边界。 (几乎所有的系统都是用 Smalltalk 实现的。只有一小部分微代码、程序集和 Mesa。即使我们现在认为的设备驱动程序也是用 Smalltalk 编写的。)

    没有必要保持与其他计算机的网络连接,因为除了几个实验室之外没有人拥有网络。哎呀,几乎没有组织甚至拥有超过一台计算机。无需与主机操作系统交互,因为 Smalltalk 机器没有操作系统; Smalltalk 是操作系统。 (您可能知道 Dan Ingalls' Design Principles Behind Smalltalk 中的名言:“操作系统是不适合一种语言的东西的集合。不应该有。”)因为 Smalltalk 是操作系统,所以不需要一个文件系统,所有的数据都是简单的对象。

    Smalltalk 无法控制 Smalltalk 之外的内容。这是不是 Smalltalk 独有的一般属性。您可以通过编辑已编译的字节码来打破 Java 中的封装。您可以通过编辑已编译的机器代码来破坏 Haskell 中的类型安全。您可以通过编辑编译的机器代码在 Rust 中创建内存泄漏。

    因此,Smalltalk 的所有保证、功能和属性只有在您不离开 Smalltalk 的情况下才可用。

    这是一个更简单的示例,它不涉及联网或将图像移动到不同的机器:在主机文件系统中打开一个文件。暂停图像。删除文件。恢复图像。无法以相同状态恢复图像。

    Smalltalk 所能做的就是尽可能地近似外部资源的状态。它可以尝试重新打开文件。如果文件消失了,它可能会尝试创建一个具有相同名称的文件。它可以尝试恢复网络连接。如果失败,它可以尝试重新建立连接,创建到相同地址的新连接。

    但最终,图像之外的一切都在 Smalltalk 的控制之外,Smalltalk 对此无能为力。

    请注意,图像内部和“外部世界”之间的这种阻抗不匹配是 Smalltalk 通常受到的主要批评之一。如果您查看尝试与外部世界深度集成的 Smalltalk 系统,它们通常不得不妥协。例如。 GNU Smalltalk 是专门为深度集成到 Unix 系统而设计的,它实际上放弃了图像和持久性。

    关于smalltalk - Smalltalk 镜像如何处理 IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597875/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com