不要被震惊.这是很多文字,但我害怕没有提供一些详细的信息,我无法真正展示这是什么(并可能得到很多答案,并没有真正解决我的问题).而这绝对不是一项任务(正如他的评论中有人可笑地声称的那样).
由于除非至少设置了一些先决条件,否则根本无法回答此问题,以下是先决条件:
此外,我们需要更好地定义"更好".必须考虑几个属性:
现在通过或多或少的操作码实际意味着我的例子.它可能看起来实际上设置了操作码的数量,因为每个操作需要一个操作码.然而,它并不那么容易.
你可以进行类似的操作
ADD R1, R2, R3
Run Code Online (Sandbox Code Playgroud)
添加R1和R2的值,将结果写入R3.现在考虑以下特殊情况:
ADD R1, R2, R2
ADD R1, 1, R1
Run Code Online (Sandbox Code Playgroud)
这些是您在许多应用程序中可以找到的常见操作.您可以使用现有的操作码来表达它们(除非您需要不同的操作码,因为最后一个操作码具有int值而不是寄存器).但是,您也可以为这些创建特殊的操作码:
ADD2 R1, R2
INC R1
Run Code Online (Sandbox Code Playgroud)
和之前一样.优势在哪里?ADD2只需要两个参数,而不是3个,INC甚至只需要一个参数.因此,这可以在磁盘和/或内存中更紧凑地编码.由于将任何一种形式转换为另一种形式也很容易,因此解码步骤可以在两种方式之间转换以表达这些语句.不过,我不确定这两种形式会影响执行速度.
现在让我们假设您有一个ADD_RRR(R表示寄存器)和一个LOAD来将数据加载到寄存器中.
LOAD value, R2
ADD_RRR R1, R2, R3
Run Code Online (Sandbox Code Playgroud)
您可以拥有这两个操作码并始终在整个代码中使用这样的构造...或者您可以将它们组合成一个名为ADD_RMR(M代表内存)的新操作码
ADD_RMR R1, value, R3
Run Code Online (Sandbox Code Playgroud)
假设您有16位整数和32位整数作为本机类型.寄存器为32位,因此数据类型适合.现在,当您添加两个寄存器时,可以将数据类型设为参数:
ADD int16, R1, R2, R3
ADD int32, R1, R2, R3
Run Code Online (Sandbox Code Playgroud)
例如,对于有符号和无符号整数也是如此.这样,ADD可以是一个短操作码,一个字节,然后你有另一个字节(或者可能只是4位)告诉VM如何解释寄存器(它们是否保持16位或32位值).或者您可以废弃类型编码,而是有两个操作码:
ADD16 R1, R2, R3
ADD32 R1, R2, R3
Run Code Online (Sandbox Code Playgroud)
有些人可能会说两者完全相同 - 只是解释第一种方式,因为16位操作码可行.是的,但是一个非常幼稚的翻译可能看起来很不一样.例如,如果每个操作码有一个函数并使用switch语句调度(不是最好的方式,函数调用开销,switch语句也许不是最优的,我知道),这两个操作码可能如下所示:
case ADD16: add16(p1, p2, …Run Code Online (Sandbox Code Playgroud) 是否可以在Scala或Java中在运行时将scala代码编译为字符串?
我的想法是使用Scala构建DSL,然后让Java程序员在Java中使用DSL.
我听说类scala.tools.nsc.Interpreter可以做类似的事情,但当我在scala文件中导入它时,我得到"对象工具不是包scala的成员".
所以有人能给我一个暗示吗?
当使用scala解释器(即在命令行上运行命令'scala')时,我无法正确打印unicode字符.当然,正确打印az,AZ等,但例如€或ƒ打印为?.
print(8364.toChar)
Run Code Online (Sandbox Code Playgroud)
结果是 ?而不是€.可能我做错了什么.我的终端支持utf-8字符,甚至当我将输出管道传输到一个单独的文件并在texteditor中打开时,?被展示.
这一切都发生在使用Scala 2.8(每晚构建)和Java 1.6.0_17的Mac OS X(Snow Leopard,10.6.2)上
到目前为止,我已经为他们设计了大约5种实验语言和口译员,用于教育,作为一种爱好和乐趣.
我注意到的一件事:类似汇编的语言只有子程序和条件跳转作为结构,比if,while等高级语言要慢得多.我同时开发它们,两者都是解释语言.我用C++编写了解释器,我试图尽可能快地优化代码执行部分.
我的假设:在几乎所有情况下,解释语言的表现都随着它们的水平(高/低)而上升.
编辑:我没有提到这里编译的单词,甚至一次,它是解释与解释!
performance interpreter programming-languages language-design
Python 3.2 ALPHA 已经发布.
从更改日志中,看起来GIL已完全重写.
几个问题:
更新:
我对Python很新.所以这一切对我来说都是新的,但至少我明白用CPython存在GIL是一件大事.
问题但是,为什么CPython不仅像Perl那样克隆解释器而试图消除对GIL的需求?
我的scala程序正在使用scala.tools.nsc.interpreter.IMain中的编译器接口.当我使用scalac进行编译时,一切都按预期工作.但是当我用sbt编译它仍然编译时,但在执行时它会在从IMain实例调用explain-method时抛出以下错误消息:
Failed to initialize compiler: object scala not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
Run Code Online (Sandbox Code Playgroud)
如果我在IMain实例上使用settings.usejavacp.value = true,则会出现以下异常:
java.lang.Error: typeConstructor inapplicable for <none>
Run Code Online (Sandbox Code Playgroud)
我的SBT项目定义:
class Project(info: ProjectInfo) extends DefaultProject(info){
val scalaSwing = "org.scala-lang" % "scala-swing" % "2.9.0"
val scalaCompiler = "org.scala-lang" % "scala-compiler" % "2.9.0"
}
Run Code Online (Sandbox Code Playgroud)
这有什么不对?如何在Simple Build Tool Project中使用解释器?
我正在使用 …
刚刚看过谷歌宣布新网络编程语言Dart的早期预览的消息.dartlang.org上的文档说明:
您将能够以多种方式运行Dart代码:
将Dart代码转换为可在任何现代浏览器中运行的JavaScript:Chrome,Safari 5+和Firefox 4+(不久将提供更多浏览器支持).
直接在服务器端的VM中执行Dart代码
使用Dartboard在任何浏览器窗口中编写,修改和执行小型Dart程序
我很好奇是否已有VM可用于运行Dart代码?无论如何都找不到它,也许它可以通过一些beta程序获得?
每次我在解释器中使用这些键时,我都会看到这样的符号出现:
[[D^[[C
Run Code Online (Sandbox Code Playgroud)
我在ZSH中使用Linux Mint 12,但是我在使用bash的Ubuntu中获得了相同的结果.另外,在ssh中也是如此.
我读了Dan Piponi关于Futamura 医生的三个预测的优秀博客文章.在文章的最后,他有一个附录,其中包含了Haskell中Futamura投影的证明.但是,我发现他的文章缺乏有关所涉及语言的信息.为了使Futamura预测有效,专业化师的源语言,目标语言和对象语言必须具备哪些内容?例如,如果我在Haskell中将Haskell写入LLVM专用器,那么Futamura投影会起作用吗?如果您编写一个Haskell程序来证明这一点就像Dan Piponi在他的文章中所做的那样会很有帮助.
我一直在尝试在 vscode 上设置我的 python 工作区,但该软件似乎没有识别出我安装了 python,并且一直告诉我安装 python。我尝试手动添加 .exe 文件的路径,但每次都会出现“无效解释器提示”。只是为了证明我在设置中拥有正确的路径,这里是.json 文件的屏幕截图以及 我用来获取路径的命令提示。
interpreter ×10
scala ×3
performance ×2
python ×2
arrow-keys ×1
dart ×1
dsl ×1
haskell ×1
ledit ×1
locking ×1
ocaml ×1
opcode ×1
runtime ×1
sbt ×1
utf-8 ×1