我在C中创建了一个编译器(使用lex和bison),用于支持循环,函数内部函数声明,递归调用等的动态类型编程语言.我还创建了一个运行编译器创建的中间代码的虚拟机.
我现在正在思考而不是编译到我自己的中间代码,将其编译为java字节代码.
我看到有关创建JVM语言的问题已经被提出,但是我找不到答案非常有用的信息.
所以这是我的问题:
compiler-construction jvm programming-languages jvm-languages
我想知道是否有某种方法可以让Haskell在JVM上运行(编译或解释)?
在Sourceforge上存在JHaskell但这个似乎是空的并且已经死了.
GHC使用LLVM作为编译器后端.将LLVM编译为Java字节码是一个好主意还是可能的?或者也许使用不同的编译器后端?
给定以下用于在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
我是Scala的新手,我正在使用2.9.1,而我正试图了解如何使用部分功能.我对curried函数有一个基本的了解,我知道部分函数有点像curried函数,它们只有2nary或者其他类似函数.你可以告诉我,我有点绿.
看起来在某些情况下,比如XML过滤,能够部分功能是非常有利的,所以我希望能更好地理解如何使用它们.
我有一个使用RewriteRule结构的函数,但我需要它使用两个参数,而RewriteRule结构只需要一个,或一个部分函数.我认为这是我认为它有用的案例之一.
任何建议,链接,智慧的话等欢迎!
到目前为止,答案非常好,并且澄清了我的一些基本误解.我认为他们也解释了我在哪里挣扎 - 我想也许发布一个更具体的新问题会有所帮助,所以我也会这样做.
我在某处编写了Clojure.是真的编译,如Java或Scala,而不是解释,如Jython或JRuby?
interpreted-language compilation clojure jvm-languages compiled-language
有没有类似于Python virtualenv for Java或JVM Languages?
当我可以使用Jython或Jruby时,为什么我会选择使用Groovy?该语言是否提供了任何固有的优势来弥补Jython和Jruby技能适用于JVM之外的其他语言的事实?
请记住,我故意将此问题保持为通用,但如果特定域中存在任何优势,请不要犹豫,对其进行描述.
编辑
为了澄清,如果我在Jruby中编写一些代码,在某些情况下,如果需要,我现在可以将代码移到JVM之外,或者至少我已经对Ruby有了更好的理解.而Groovy技能仅在使用JVM中存在的语言时才适用.Jython和Jruby具有这种内置优势,Groovy必须弥补这一劣势吗?
如果Groovy没有你找到的任何优势,你建议只使用Jython或Jruby,请告诉我.
编辑2
感谢大家的所有答案,其中大多数都提出了相同的观点,Groovy与Java,Jython或Jruby集成得稍好一些.
跟进
使用Netbeans 6.5作为我的IDE我发现Groovy可以更好地与Java项目集成,然后是Jruby.我不确定缺乏集成是否是Jruby或Netbeans的失败.但是在使用它之后,Groovy似乎肯定会有所帮助.
我是一名经验丰富的C++程序员,具有普通的Python技能.我首先研究Python的原因是:
我认为Python很棒,我相信我已经实现了上述目标.我将继续将它用于小型项目,脚本和Web开发.
我怀疑我可以将它用于中型到大型项目.虽然动态类型很方便,但它允许我发现令人不安的某类错误.单元测试和linting可以缓解这个问题,但静态类型完全消除了它.
在查看了一些编程语言之后,我认为Scala看起来是一个很好的候选者:我喜欢类型推断并且它在JVM上运行,所以它应该在JVM可用的任何地方都可用.我还可以在使用它时了解有关函数式编程的更多信息.
但是......我也有一些疑问,这就是我希望Stack Overflow社区可以提供帮助的地方:
最后,您认为Scalas的一些缺点是什么?
我正在寻找这两种语言的多语言编程指南.
我知道它们之间的互操作是可能的,因为它们都在同一个Java VM上运行,并且都被编译为相同的字节码.但有一些麻烦:
(是的,是的,我知道我可以用一种语言插入jar来投射其他语言.)
所以问题是如何在Scala和Clojure中设置多语言开发?
jvm-languages ×10
scala ×5
jvm ×4
java ×3
clojure ×2
compilation ×1
frege ×1
groovy ×1
haskell ×1
interop ×1
jruby ×1
jython ×1
kotlin ×1
python ×1
virtualenv ×1