我需要将动态语言部署到一个小型嵌入式Linux设备上,并且很难找到合适的语言:我想用这种语言构建一个小型的Web应用程序(使用像Sinatra或Camping这样的小框架)并编写一些用于维护的脚本.
我更喜欢Ruby,因为我有一些经验,但经过几天尝试交叉编译,我只能构建裸线解释器,没有libs(miniruby).它的问题是,它只是太大了:剥离超过1 MB!
您使用的是哪种语言,以及使其运行有多困难?
[这是关于最新技术的经验问题:我不是在问Java是否比在JVM中运行的动态语言更酷或更酷.
除了性能是主要决策因素的情况之外,公司/开发人员是否仍然愿意选择Java而不是Groovy,JRuby或Jython?
编辑:如果答案是"是",为什么?
个人注意:我要问的原因是,虽然我在Ruby中做了一些我的专业工作(现在不是JRuby),但在我的个人项目中,我使用的是Java.虽然我在Groovy中编写了非平凡的应用程序,但我更喜欢Java,但我想知道我是否应该克服它并在Groovy中做所有事情.我喜欢Java,因为我觉得静态打字可以节省我的时间并帮助重构.(不,我不熟悉Scala.)但是,我觉得这个非常经验的,关于主题的编程问题可能会为我的决定提供信息.
我是学习Ruby的新手,还是它有更多的方法来编写(相同的)Java/C#的东西?另外,如果它比Java更灵活,那么Ruby的语言特性通常不会用于避免混淆吗?
例子可能是并行赋值和编写字符串的所有不同方法吗?
注意:我不是要求与Java/C#进行比较......只是这个语言问题,请...
编辑:我知道C#,Java和Ruby是强类型的,并且只有Ruby(如Python和其他)是动态类型的(而Java/C#是静态类型的).一些答案说动态类型的语言更灵活.这是否正确,它如何影响语法?我只询问语法灵活性.
(PHP也是动态类型的,就我所见,它似乎没有 Java/C#更灵活.再说一遍,我的意思是语法方面,不是在部署方面,也不是任何其他方面......)
ruby syntax language-features programming-languages dynamic-languages
我几乎一直在使用Java,因为它刚出现,但在过去的五年中已经被烧毁了,即使做最简单的事情也变得多么复杂.我开始在我的精神科医生的推荐下学习Ruby,呃,我的意思是我的同事(年轻,冷静的同事 - 他们使用Macs!).无论如何,他们不断重复的一件事是,Ruby是一种"灵活"的语言,而不是像Java那样的老式,更加拙劣的语言,但我真的不知道这意味着什么.有人能解释是什么让一种语言比另一种语言"更灵活"?请.我对动态类型有所了解,可以看出这对简洁有什么好处.Ruby语法很漂亮.还有什么?动态打字是主要原因吗?
我是来自 C++ 背景的 Python 新手,这是我第一次看到一种只包含对象的语言。我刚刚了解到类和函数也只是对象。那么,有没有办法将下面的函数转换为类呢?
In [1]: def somefnc(a, b):
...: return a+b
...:
Run Code Online (Sandbox Code Playgroud)
我首先尝试将__call__变量分配给以None消除函数的“可调用性质”。但正如您所看到的,已__call__成功替换为None但这并没有导致该函数在调用时停止添加数字,尽管在分配给somefnc.__call__(1,3)之前正在工作somefnc.__call__None
In [2]: somefnc.__dict__
Out[2]: {}
In [3]: somefnc.__call__
Out[3]: <method-wrapper '__call__' of function object at 0x7f282e8ff7b8>
In [4]: somefnc.__call__ = None
In [5]: x = somefnc(1, 2)
In [6]: print(x)
3
In [7]: somefnc.__call__
In [8]: print(somefnc.__call__(1, 2))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
ipython-input-8-407663da97ca
in <module>()
----> 1 print(somefnc.__call__(1, 2)) …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种ECMAScript替代方案,作为自定义应用程序逻辑的脚本语言.我喜欢ECMA,特别是新规范的语法(如AS3).
不幸的是,AS3引擎不是开源的,无法集成到项目中.我想要一种专为面向对象使用而设计的脚本语言.
具体来说,是否有一种语言:
我宁愿做的事情
prototype对象您了解哪些语言符合此个人资料?我很难找到专为良好的面向对象设计而设计的高质量脚本语言.
javascript scripting-language dynamic-languages actionscript-3 ecma262
我正在努力更好地处理语言"动态"的真正含义.我对Lingo有很多经验,Lingo是Adobe(以前的Macromedia)Director产品系列的脚本语言,我只是想知道它是否会被视为"动态语言".
变量和列表的处理方式似乎非常"动态语言" - 对我而言.
有了变量,你只需要写foo = 3或bar = "Hello World".你没有将变量声明为- int或者string- 将数据表示为原样.
使用列表,您可以编写类似的内容miscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]].这不一样tuple吗?
这些功能是否足以符合"动态语言"状态?
有趣的是,我一直在使用C#而且导演/ Lingo要少得多,但是现在对动态语言的所有兴奋,我想知道我是否真的反对这个问题.
编辑
关于Mark Rushakoff回答,下面,这里是试图分析Lingo是否有资格使用这篇维基百科文章 "动态" :
Eval- Lingo有do和value关键字.do将执行整个命令,例如,do "foo = 23"或do "foo = sum(20, 3)".value尝试将字符串转换为数字,但它不仅仅是一个解析运算符 - 它实际上可以将变量的字符串表示转换为其数字,例如,假设 …
使用Clojure代理时,fns传递给代理应该覆盖现有方法还是与它们一起调用super.method()?
在以下代码中,RequestHandler.get()与代理一起被调用get [].
;see: http://github.com/paulosuzart/JTornado
(ns org.ctornadoweb)
(import '(org.jtornadoweb Web$RequestHandler))
(import '(org.jtornadoweb HttpServer Web$Application))
(let [myHandler (proxy [Web$RequestHandler] []
(get []
(.write "Hi CLJ"))
(post []
(.write "POST")))]
(.listen
(HttpServer.
(.add (Web$Application.) "/" (class myHandler))
false nil false) 8089))
Run Code Online (Sandbox Code Playgroud)
编译/继承版本也是如此:
; Starts a JTornado HTTP Server and a sample RequestHandler.
; Bit verbose due to compilation directives. Recommendation is to generate
; a set of macros to hide this.
(ns org.ctornadoweb
; …Run Code Online (Sandbox Code Playgroud) 我是动态语言界的新手,并试图找到一个好的起点.
看看微软如何减少Iron Ruby在其产品中的作用,我正在寻找一种将在dotNET平台上支持的动态编程语言.您是否可以列出在一个而不是另一个中找到的特定功能,以帮助您进行选择.
动态语言允许从值仅在运行时获知的变量调度和调用值.Perl中的对比示例:
班级名称
不变
Foo::Bar->some_method
Foo::Bar::->some_method
'Foo::Bar'->some_method
Run Code Online (Sandbox Code Playgroud)这些都是相同的,除了第一个是边缘情况.如果在具有该名称的范围中定义了子例程,则调度发生在其返回值上,这导致难以理解的错误.引用的版本总是安全的.
动态
my $class_name = 'Foo::Bar';
$class_name->some_method
Run Code Online (Sandbox Code Playgroud)方法名称
不变
Some::Class->foo_bar
Run Code Online (Sandbox Code Playgroud)动态
my $method_name = 'foo_bar';
Some::Class->$method_name
Run Code Online (Sandbox Code Playgroud)功能名称
不变
foo_bar;
(\&foo_bar)->()
Run Code Online (Sandbox Code Playgroud)动态
my $function_name = 'foo_bar';
(\&$function_name)->()
Run Code Online (Sandbox Code Playgroud)我想知道,变量名称没有符号(通常或根本没有)的语言如何处理这些问题,特别是他们的语言设计者如何消除以下歧义?
FooBar.some_method,其中类FooBar可能是名称文字,或者是值为类名称的变量SomeClass.foo_barwhere方法foo_bar可能是name literal或其值是方法名称的变量foo_bar函数可能是名称文字或值为函数的变量我主要对这个问题标签中提到的三种语言感兴趣,但是如果你知道一种不同的动态语言,你也可以回答.
ruby ×4
java ×2
javascript ×2
python ×2
.net ×1
c# ×1
clojure ×1
duck-typing ×1
dynamic ×1
ecma262 ×1
groovy ×1
ironruby ×1
jruby ×1
lingo ×1
powershell ×1
python-3.x ×1
sigils ×1
syntax ×1