这是一个非常大的问题,我主要在寻找能够了解以下内容的资源.
我知道python解释器是用C语言编写的,它产生的字节码可以在用C编写的python虚拟机上运行(对吧?).我的问题是可以在python本身实现这两个吗?我想我要去的地方是(技术)在python中编写类似操作系统的东西的可能性,特别是没有静态编译任何东西?
如果我理解正确,python没有一个必须在python中编写的汇编程序.这些东西可以在技术上(可行吗?)完成吗?或者python的动态类型会出现某种问题吗?
我对微处理器架构,装配和机器代码有所了解,这是最近的EE毕业生在学校学到的东西.但是我很想看到像python这样的高级语言的全貌.
我正在评估自定义VM的不同可能性,而我从另一个问题中遗漏了LLVM.由于我还在研究嵌入式语言VM的评估,我现在无法自己测试/检查.我想知道有关LLVM/CLANG的以下信息:
我知道clamav防病毒实例使用LLVM/clang支持的字节码来支持动态/运行时签名.但是,我不知道是否存在实现此功能和/或教程或文档的现有工具,它们将指导您完成实现此类操作的过程.
谢谢!:)
如果我已经有一个解释器,我为什么要使用像Parrot这样的VM来使用我使用的动态语言(Python,Perl,...)?我可以获得什么,在我的代码和我的机器之间使用不同的VM,以及使用单独的解释器的成本?
(我是VM问题的新手,所以答案很明显)
编辑
我一直在阅读本地优化编译器技术,但我一直没有得到它们的实现方式.我们的想法是,优化器每次都会查看代码的"窗口",并以某种方式检测模式并用更优化的版本替换它们.
我的问题是,如何发现这些模式?(假设您的平台是一个虚拟机,可以输出组装计算机的汇编代码,如Schocken的Hack).
人们实际上是手动检查代码(使用控制流图或DAG或其他),然后收集所有识别的模式并将它们编码到优化器中?或者是否有自动方式.
例如,您在分析器中提供要优化的代码,并且它会喷出所述模式.如果是这样,怎么开始写一个呢?
compiler-construction design-patterns control-flow-graph vm-implementation peephole-optimization
Erlang是一种众所周知的编程语言,因其轻量级线程而闻名(除其他外)。Erlang 通常是用BEAM 机器实现的。Erlang BEAM 机器的描述 (H'97) 说
为了保证公平调度,一个进程在经过固定数量的减少后被挂起,然后从队列中恢复第一个进程。
我对这种减少的概念很感兴趣。根据 (H'97),只有以下 BEAM 命令算作减少:
所有这些都涉及函数调用。相比之下,调用 C 函数(例如TrC/TrCO)和调用内置函数(例如由Bif_0_ 调用)不算作减少。
问题。在这个序言之后,这是我想知道的。
(H'97) B. Hausman,Erlang BEAM 虚拟机规范。
concurrency erlang multithreading scheduling vm-implementation
今天几乎所有传统语言都将程序员的意图表示为文本源,然后(为简单起见)将其转换为某些字节码/机器代码并由VM/CPU解释/执行.
还有另一种技术,出于某种原因,它并不是流行的日子:"冻结"VM的运行时间并将环境(符号绑定,状态,代码(无论是什么))转储/序列化为图像,然后您可以传输,加载和执行.因此,您不能以通常的方式"编写"代码,而是在"运行时"中使用新符号修改环境.
我看到这项技术的巨大优势:
问题是:这种方法的缺点是什么?我没有看到任何严重的劣势吗?我知道,它有一些问题,即:
但是,这些是,恕我直言,可以用一个好的设计解决.
EDIT1:关于"已关闭,主要是基于意见"的状态.我已经描述了两种现有的方法,很明显,一种方法比另一方更受欢迎.我不知道其原因是纯粹的"以意见为基础"还是有研究支持,但是即使他们是以意见为基础的,如果有人将这些意见列为开发的原因,那么实际上应该回答我的问题.
我注意到一些不太老的VM语言,比如用C语写的Lua,NekoVM和Potion.
看起来他们正在重新实现许多C++功能.
用C而不是C++编写它们有什么好处?
我在C中编写了一个虚拟机,其中有一个调用表填充了指向函数的指针,这些函数提供了VM的操作码的功能.当虚拟机运行时,它首先解释一个程序,创建一个索引数组,该索引数组对应于所提供操作码的调用表中的相应函数.然后它循环遍历数组,调用每个函数直到它到达结尾.
每条指令都非常小,通常是一行.适合内联.问题是编译器不知道何时将调用任何虚拟机的指令,因为它是在运行时决定的,所以它不能内联它们.函数调用和参数传递的开销正在扼杀我的VM的性能.关于如何解决这个问题的任何想法?
消息传递是Erlang的核心 - "消息传递进程".
但是,当涉及到erlang时,虚拟机的概念仍然模糊不清.
任何帮助?
我想在Java或Haskell中实现垃圾收集器(GC),但这有意义吗?
我是否能够控制我自己的GC实现何时启动而不是GC的实现语言?
我想这个问题可以有三种答案:
看看这些:
这与我在带有垃圾收集器的语言上构建解释器并不重复.我需要一个翻译垃圾收集器?因为我不希望我的引导与解释底层GC.
java compiler-construction interpreter garbage-collection vm-implementation
bytecode ×2
c ×2
erlang ×2
interpreter ×2
python ×2
c++ ×1
clang ×1
concurrency ×1
function ×1
inline ×1
java ×1
lisp ×1
llvm ×1
parrot ×1
performance ×1
perl ×1
scheduling ×1
selflanguage ×1
smalltalk ×1