我在OS X上使用Ruby 1.8.7.Ruby 解释器位于何处?我的目标是了解有关Ruby,解释语言和解释/解析的更多信息.
我偶然发现了ruby中关于变量定义的奇怪行为(并且在途中丢失了一盒甜甜圈):
irb(main):001:0> if false
irb(main):002:1> a = 1
irb(main):003:1> end
=> nil
irb(main):005:0> a.nil?
=> true
irb(main):006:0> b.nil?
NameError: undefined local variable or method `b' for main:Object
from (irb):6
from /Users/jlh/.rbenv/versions/2.1.5/bin/irb:11:in `<main>'
Run Code Online (Sandbox Code Playgroud)
为什么不a.nil?扔undefined local variable?例如,看一下python(只是想将它与解释语言进行比较):
>>> if False:
... a = 1
...
>>> print a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)
在编译语言中,这甚至不会编译.
我真的不敢相信这是红宝石中的预期行为.并且它不是特定于irb的,在ruby/rails代码块中运行它会产生相同的结果.
ruby interpreted-language ruby-on-rails abstract-syntax-tree
在我看来,如果你用一种解释性的语言写作一定很难销售软件,因为任何购买它的人都可以编辑它/改变它/转售它没有太大的困难.
你怎么解决这个问题?我有几个PHP应用程序,我不愿意向人们销售,因为它似乎太简单了,他们无法更改/阅读/编辑/销售我生产的内容.
我构建了数据库驱动的网站.以前我使用过Perl或PHP和MySQL.
现在我正在开始一个大型的新项目,我希望以能够产生响应速度最快的网站的方式进行.
我在这里看到了几个页面,其中有关如何优化PHP的问题受到各种版本的批评,"因为它是一种解释性语言并不会产生那么大的差异,所以不值得花时间去优化PHP."
我还听过关于编译语言和解释语言的好处的各种讨论(特别是SO播客),似乎使用编译语言来提供网站而不是解释语言符合我的利益.
这在网络环境中甚至可能吗?如果是这样,那么合理的语言选择是什么?
除了速度之外,我认为可以在编译时发现错误而不必调试网站.这是合情合理的吗?
我想知道是否有人使用或阅读过编译为Apache的.so扩展名的PHP脚本...我想我记得在某处读过它但不知道是否存在这样的事情.
这看起来很有希望,但不完整和被遗弃:http://phpcompiler.org/
我感兴趣,因为我认为它可以提高性能...也许有人可以指出一个框架或apache扩展来做到这一点.
谢谢!!
我已经有一个我一直在研究的语言的解析器.让它解释困难吗?我觉得它很简单.解析和语法检查完成.我只有一棵物体树.每次创建对象时,我都会创建一个分支并存储其类型(string,int,float,class/obj).然后每次将新成员添加到对象时,我创建一个分支并重复.
我试着让它听起来很简单.我仍然需要检查对象A是否可以添加到对象B等.
AST和语法检查完成之后是否真的相当简单,还是还有很多工作要做?
如果PHP是解释语言(每条线都是在到达时执行的),如果错误发生在一个从未执行过的函数中,它怎么会抛出错误?
或者可能是我没有得到解释的意思?
例如
<?php
$number = 1;
function square(){
$foo = 1 //missing semicolon, throws error
}
echo $number;
?>
Run Code Online (Sandbox Code Playgroud) 我正在阅读关于V8的优秀文章,Google的Javascript引擎:https://developers.google.com/v8/design#mach_code.
有一次,他们说Javascript直接编译成机器语言,没有任何字节码或解释器.
报价:
V8首次执行时,会将JavaScript源代码直接编译为机器代码.没有中间字节代码,没有解释器.
那么,为什么Javascript仍然与"脚本"和"解释"语言一起列出,当它被清楚地编译时(至少在V8中)?
考虑到这个问题,我发现了这个引用:
V8可以独立运行,也可以嵌入到任何C++应用程序中.
我只是想知道为了速度是否值得坚持使用非OOP代码.此外,在商业网络应用程序中,通常使用或避免使用OOP吗?哪个是标准?
非常感谢,
埃德
我知道解释 C++ 代码可能没有实际价值,这个问题仅用于娱乐和学习目的。
是否可以逐条解释 C++ 代码语句而不是编译它?还请解释回答的原因。
如果不可能,是否有可以解释的语言子集?
c++ theory compiler-construction interpreter interpreted-language
php ×4
interpreter ×2
ruby ×2
apache ×1
browser ×1
c++ ×1
compiled ×1
dynamic ×1
javascript ×1
oop ×1
performance ×1
theory ×1
v8 ×1
webserver ×1