我正在研究在DSP上运行Linux的嵌入式系统.现在我们想让它的一些部分可编写脚本,我们正在寻找一种很好的可嵌入脚本语言.这些脚本应该与我们现有的C++代码库很好地集成,小而快.
我知道Lua是这类问题的行业选择.我们可能会选择Lua,因为它是经过验证的,并且被证明是稳定的等等.然而,作为一种编程语言,它有一些相当古怪的角落.
那么,可嵌入语言有哪些替代方案?
编辑:
这是大约一年之后.
我们实际上在我们的嵌入式系统上使用了Lua,它表现非常出色.随着时间的推移,我们为项目的越来越多的部分添加了越来越多的脚本支持,这确实有助于实现它.
性能非常出色,真的.即使是相当复杂的操作,涉及搜索长数组或奇特的字符串操作也表现得非常好.我们基本上从未遇到过与Lua相关的性能问题.
与C函数的接口非常简单,并且工作得非常好.这使我们可以轻松地扩展脚本系统.
最后,我们对Lua的灵活性感到震惊.我们的Lua解释器必须在具有非标准内存分配器的系统上运行,并且不支持双数据类型.在一个头文件中有两个记录良好的位置我们必须修改以使Lua在该系统上工作.它非常适合嵌入!
给定以下用于在Scala中定义函数的构造,您能解释一下它们之间的区别,以及它们的含义是什么?
def foo = {}
Run Code Online (Sandbox Code Playgroud)
与
def foo() = {}
Run Code Online (Sandbox Code Playgroud)
更新
感谢您的快速回复.这些都很棒.对我来说唯一的问题是:
如果我省略括号,是否还有办法传递函数?这是我在repl中得到的:
scala> def foo = {}
foo: Unit
scala> def baz() = {}
baz: ()Unit
scala> def test(arg: () => Unit) = { arg }
test: (arg: () => Unit)() => Unit
scala> test(foo)
<console>:10: error: type mismatch;
found : Unit
required: () => Unit
test(foo)
^
scala> test(baz)
res1: () => Unit = <function0>
Run Code Online (Sandbox Code Playgroud)
更新2012-09-14
以下是我注意到的一些类似问题:
jvm programming-languages functional-programming scala jvm-languages
我是一名PHP开发人员.我喜欢PHP!如果你知道如何使用它,这是一个非常好的语言,但我知道它有时会让非常糟糕的设计.
它让我想起了具有良好部件和不良部件的JavaScript.一个特别的项目CoffeeScript试图只关注好的部分,迫使你编写好的代码.
我在想是否可以用PHP完成类似的事情...一种新的语法,只能编译成好的PHP代码,并且可以使用PHP 5.3获得所有新的和令人兴奋的东西.
所以,领先一些人,我会问:如果你可以只使用Ruby或Python或其他东西,为什么要在PHP之上创建一种新语言?
所以,我真正的问题是......
主题标题实际上是我的问题.第二个问题是:我什么时候使用这两个?
Ruby可以向Number类和其他核心类型添加方法以获得如下效果:
1.should_equal(1)
Run Code Online (Sandbox Code Playgroud)
但似乎Python无法做到这一点.这是真的?如果是这样,为什么?是否与类型无法修改的事实有关?
更新:我不想谈论猴子修补的不同定义,而是只关注上面的例子.我已经得出结论,由于你们中的一些人已经回答,所以无法做到.但我想更详细地解释为什么不能这样做,也许如果Python中有什么功能可以允许这样做.
回答你们中的一些人:我可能想要这样做的原因只是美学/可读性.
item.price.should_equal(19.99)
Run Code Online (Sandbox Code Playgroud)
这更像是英语,并清楚地表明哪个是测试值,哪个是预期值,如下所示:
should_equal(item.price, 19.99)
Run Code Online (Sandbox Code Playgroud)
这个概念就是Rspec和其他一些Ruby框架所基于的.
ruby python programming-languages fluent-interface monkeypatching
例如,在Windows文件夹中,如果我们创建一些文件并将其命名为1.html,2.txt,3.txt,photo.jpg,zen.png,则顺序将保持不变.但是如果我们创建另一个名为_file.doc的文件,它将被放在顶部.(考虑到我们按名称降序排序)
同样,将被视为第一个的角色是什么,这样如果我使用该角色,它会将文件放在层次结构的顶部?
windows algorithm programming-languages char special-characters
我的同行之间讨论了"if"语句是否被视为一种方法的有趣讨论?尽管"if"附加了单词statement,但它仍然表现得类似于简单的非返回值方法.
例如:
if(myValue) //myValue is the parameter passed in
{
//Execute
}
Run Code Online (Sandbox Code Playgroud)
同样,方法可以执行相同的操作:
public void MyMethod(myValue)
{
switch(myValue)
{
case true:
//Logic
break;
case false:
//Logic
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在编程语言中调用(考虑)"if"语句是一种简单的预定义方法是否准确?
language-agnostic programming-languages if-statement conditional-statements
当人们想要强调一种语言比另一种语言更好时,我会看到很多"表达能力"这个词.但我并不确切地看出它们的含义.
您如何看待编程语言的表现力?你能用一些代码表现出表现力吗?
与表现力和DSL有什么关系?人们想出DSL来获得表现力吗?
Python是我目前所知道的最好的语言,但是由于自动完成,静态类型是一个很大的优势(尽管对动态语言的支持有限,但与静态支持相比,它没什么).我很好奇是否有任何语言尝试将Python的好处添加到静态类型语言中.特别是我对具有以下功能的语言感兴趣:
是否存在具有大量这些功能的静态类型语言?