【问题标题】:Interpreted standard library解释的标准库
【发布时间】:2011-02-26 10:35:35
【问题描述】:

一种编程语言通常带有至少部分由该语言本身实现的标准库。

在解释语言的情况下,显而易见的实现是在解释器启动时读取库源文件,但这会遇到一个混乱但持久的问题,即确保解释器知道在哪里找到这些文件,即使两者都被移动。如果它们可以嵌入解释器本身会更干净,所以只有一个可执行文件。

我可以看到一个简单的方法,只需将库源文件转换为 C 文字字符串,但我很好奇是否有任何我忽略的陷阱或对该方法的改进。

所以我的问题是,现有的解释语言将语言本身中的库源文件附加到解释器?

【问题讨论】:

  • 你提到的问题根本不必出现。只是不要移动这些东西,或者在必要时更新语言等效的模块搜索路径。
  • 移动事物与使用编译语言做同样的事情有何不同。要么你把东西放在编译器/解释器知道在哪里找到它们的默认位置,要么你需要告诉编译器/解释器你把它们放在哪里。

标签: programming-languages interpreter language-implementation


【解决方案1】:

字节码虚拟机通常可以解决这个问题:将字节码存储在文件(*.pyc、*.rbc)中,并使用更简单的机制加载库的字节码版本。

Smalltalks 通过将标准堆转储到一个名为“图像”的单独文件中来做到这一点。

对于单文件分发,将库文件附加到可执行文件的末尾,并包含特殊逻辑以供解释器从其二进制文件中读取并找到这些可解释程序数据的结构,或者构建静态包含程序数据的解释器。

【讨论】:

  • 此外,Lisp 方言通常与 pyc/rbc 类似的形式是“FASL”(代表“FASt Load”),它们要么是字节码,要么是一些可链接的动态二进制格式(所以,不完全是一个目标文件,但比字节码更优化)。
猜你喜欢
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2014-03-20
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
相关资源
最近更新 更多