作为一个帮助我学习口译和优化的练习,我都不知道,我用C编写了一个脑筋解释器.到目前为止它看起来完美无缺,尽管与其他快速相比,它在执行速度方面表现不佳口译.
有哪些方法可以改变这个解释器以提高性能(或其他方面)?
我的解释器的一个有趣的方面(虽然大多数其他人也可能这样做)是我运行一个循环,读取源输入并将每个指令转换为
struct { long instruction; long loop; }
Run Code Online (Sandbox Code Playgroud)
该loop值是匹配的索引]指令,如果该指令是[,和匹配的索引[指令,如果该指令是],允许快速跳跃.我想这个'解析'过程(不需要很长时间)可以改善执行时间,而不是每次需要时进行冗余重新分析以找到匹配的方括号.
这个程序是一个有趣的测试brainfuck解释器的速度:
++++++++[->-[->-[->-[-]<]<]<]>++++++++[<++++++++++>-]<[>+>+<<-]>-.>-----.>
Run Code Online (Sandbox Code Playgroud)
instructionstruct instruction成为操作函数的直接指针来消除运行时循环中的巨型开关- 这比前一版本运行得慢(函数调用开销?)我不确定如何更清楚地说出我的问题.基本上,PyPlot是否仅限于一个实例/窗口?我尝试的任何黑客或变通办法都会导致我的程序冻结或第二个pyplot窗口排队,直到第一个关闭.
我是一个相当新的Pycharm用户,最近从其他IDE切换.
我有一个问题是关于交互式python解释器,它是我在运行脚本后可以输入变量来检查它们的"窗口".Pyscripter有这个叫做"Python解释器"的东西,我知道Pycharm也有.
我在"工具"下尝试了"Python控制台",但我不认为这是一回事.所以我想知道如何在Pycharm中找到这个Python解释器?我正在使用社区版本3.
我需要找到一个好的Lua到JavaScript转换器; luaforj.org上的lua2js已经过时(大约3年左右,看起来它不适用于Lua 5.1),我还没有在Google上找到任何东西.
有没有人有任何其他转换器的经验?它应该适用于Lua 5.1,最好是基于.NET的,但.NET不是必需的.一个javascript lua解释器也可以工作.
对我来说这是一个新的:这个错误表示什么?
/usr/bin/perl: bad interpreter: Text file busy
Run Code Online (Sandbox Code Playgroud)
当时有几个磁盘密集型进程在运行,但我以前从未见过这个消息 - 事实上,这是我第一次记得在尝试运行Perl脚本时遇到错误.经过几秒钟的等待,我能够运行它,并且从那时起就没有看到这个问题了,但对此有一个解释会很好.
运行Ubuntu 9.04,文件系统是ext3.
看起来我已经搞砸了Java Threads/OS Threads和Interpreted语言.
在开始之前,我确实理解绿色线程是Java线程,其中线程由JVM处理,整个Java进程仅作为单个OS线程运行.因此在多处理器系统上它是无用的.
现在我的问题是.我有两个主题A和B.每个都有10万行独立代码.我在多处理器系统上的Java程序中运行这些线程.每个线程都将被赋予一个本机操作系统线程到RUN,它可以在不同的CPU上运行但是由于Java被解释,这些线程将需要一次又一次地与JVM交互以将字节代码转换为机器指令?我对吗 ?如果是,那么对于较小的程序,Java Threads不会是一个很大的优势吗?
一旦Hotspot编译这两个执行路径,它们都可以像原生线程一样好吗?我对吗 ?
[编辑]:另一个问题是,假设您有一个Java代码未编译的Java线程,您创建该Thread并启动()它?操作系统线程和JVM如何交互以运行该字节码?
谢谢
有没有用javascript或java编写的C语言解释器?
我不需要一个完整的解释器,但我需要能够一步一步地执行程序,并能够看到变量的值,堆栈......所有这些都在Web界面中.
这个想法是通过向他们展示程序的逐步执行来帮助C初学者.我们正在使用GWT来构建接口,因此如果Java中存在某些内容,我们应该能够使用它.
我可以修改它以满足我的需要,但如果我可以避免编写解析器/抽象语法树walker/stack操作...这将是伟大的.
要清楚,我不想模拟完整的C,因为有些程序可能非常棘手.
我指的是一个基本的操作,例如:表达式评估,矫揉造作,函数调用.
CI想要模拟将包含:变量,for,while,函数,数组,指针,数学函数.没有goto,字符串函数,ctypes.h,setjmp.h ...(至少目前为止).
这是一个原型:http://www.di.ens.fr/~fevrier/war/simu.html
在这个例子中,我们已经手动将C代码转换为javascript表示,但它是有限的(诸如a == 2 || a = 1未处理的表达式)并且仅限于手动转换的程序.
我们在远程服务器上处理了一个C编译器,因此我们可以检查代码是否正确(并且没有任何未定义的行为).解析/ AST构造也可以远程完成(所以任何语言),但AST步行需要在javascript中才能在客户端运行.
我运行这个:
In [303]: %prun my_function()
384707 function calls (378009 primitive calls) in 83.116 CPU seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
37706 41.693 0.001 41.693 0.001 {max}
20039 36.000 0.002 36.000 0.002 {min}
18835 1.848 0.000 2.208 0.000 helper.py:119(fftfreq)
Run Code Online (Sandbox Code Playgroud)
--snip--
每次tottime,percall,cumtime是什么?ncalls相当明显(调用函数的次数).我的猜测是,tottime是在函数中花费的总时间,不包括在其自己的函数调用中花费的时间; percall是???; cumtime是在函数调用中花费的总时间,包括在其自己的函数调用中花费的时间(当然,不包括重复计数).该文档是不是太有帮助; 谷歌搜索也没有帮助.
我一直想用自己的语言编写一段时间(表面上是为了学习经验),因此需要在构建解析器,解释器和编译器时相对基础.所以:
编辑:我不是在寻找编译器编译器/解析器编译器,如Lex,Yacc和Bison ......
compiler-construction parsing interpreter compiler-theory language-theory
interpreter ×10
c ×2
javascript ×2
python ×2
brainfuck ×1
converter ×1
gwt ×1
hang ×1
ipython ×1
java ×1
linux ×1
lua ×1
matplotlib ×1
optimization ×1
parsing ×1
perl ×1
plot ×1
profiler ×1
pycharm ×1
ubuntu-9.04 ×1