标签: jvm-languages

创建JVM编程语言

我在C中创建了一个编译器(使用lex和bison),用于支持循环,函数内部函数声明,递归调用等的动态类型编程语言.我还创建了一个运行编译器创建的中间代码的虚拟机.

我现在正在思考而不是编译到我自己的中间代码,将其编译为java字节代码.

我看到有关创建JVM语言的问题已经被提出,但是我找不到答案非常有用的信息.

所以这是我的问题:

  1. 我想要为JVM创建一种语言,必须阅读JVM规范书,你能提出哪些其他书籍(当然除了龙书)?我主要关注如何创建JVM语言的书籍或教程,而不是一般的编译器.
  2. 有许多Java库可以读取,写入和更改.class文件,如jclasslib,bcel,gnu字节码等.您会建议哪一个?另外,您是否了解执行相同工作的C库?
  3. 我正在考虑看看另一种针对JVM的语言,如Clojure,Jython或JRuby.但是所有这些语言都非常高级且复杂(为它们创建编译器).我正在寻找一个更简单的(我不介意它是未知或未使用的)编程语言,它是针对JVM的,它的编译器是开源的.有任何想法吗?

compiler-construction jvm programming-languages jvm-languages

87
推荐指数
4
解决办法
2万
查看次数

JVM上的Haskell?

我想知道是否有某种方法可以让Haskell在JVM上运行(编译或解释)?

在Sourceforge上存在JHaskell但这个似乎是空的并且已经死了.

GHC使用LLVM作为编译器后端.将LLVM编译为Java字节码是一个好主意还是可能的?或者也许使用不同的编译器后端?

haskell jvm jvm-languages frege

81
推荐指数
4
解决办法
2万
查看次数

Scala中def foo = {}和def foo()= {}之间有什么区别?

给定以下用于在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

以下是我注意到的一些类似问题:

  1. 功能与括号和没有的区别
  2. 没有参数的Scala方法

jvm programming-languages functional-programming scala jvm-languages

53
推荐指数
3
解决办法
5981
查看次数

在没有JVM支持的情况下,如何在JVM语言中实现协同程序?

在阅读了Loom提案之后提出了这个问题,该提案描述了在Java编程语言中实现协同程序的方法.

特别是此提案表示,要在该语言中实现此功能,将需要额外的JVM支持.

据我所知,JVM上已经有多种语言可以将协同程序作为其功能集的一部分,例如Kotlin和Scala.

那么如何在没有额外支持的情况下实现此功能,如果没有它可以有效实施?

java jvm scala jvm-languages kotlin

50
推荐指数
2
解决办法
2528
查看次数

在Scala中使用部分函数 - 它是如何工作的?

我是Scala的新手,我正在使用2.9.1,而我正试图了解如何使用部分功能.我对curried函数有一个基本的了解,我知道部分函数有点像curried函数,它们只有2nary或者其他类似函数.你可以告诉我,我有点绿.

看起来在某些情况下,比如XML过滤,能够部分功能是非常有利的,所以我希望能更好地理解如何使用它们.

我有一个使用RewriteRule结构的函数,但我需要它使用两个参数,而RewriteRule结构只需要一个,或一个部分函数.我认为这是我认为它有用的案例之一.

任何建议,链接,智慧的话等欢迎!

到目前为止,答案非常好,并且澄清了我的一些基本误解.我认为他们也解释了我在哪里挣扎 - 我想也许发布一个更具体的新问题会有所帮助,所以我也会这样做.

functional-programming scala jvm-languages

47
推荐指数
2
解决办法
2万
查看次数

Clojure是编译还是解释?

我在某处编写了Clojure.是真的编译,如Java或Scala,而不是解释,如Jython或JRuby?

interpreted-language compilation clojure jvm-languages compiled-language

37
推荐指数
3
解决办法
6250
查看次数

36
推荐指数
3
解决办法
1万
查看次数

Groovy优于Jython或Jruby?

当我可以使用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似乎肯定会有所帮助.

groovy language-comparisons jython jruby jvm-languages

34
推荐指数
2
解决办法
1万
查看次数

我应该学习Scala吗?

我是一名经验丰富的C++程序员,具有普通的Python技能.我首先研究Python的原因是:

  • 获得不同的编程视角(静态与动态,解释与编译等)
  • 增加我可以处理的项目的广度(Python允许我进行Web开发,为Symbian手机开发或敲击快速系统管理脚本)
  • 补充我的C++技能.

我认为Python很棒,我相信我已经实现了上述目标.我将继续将它用于小型项目,脚本和Web开发.

我怀疑我可以将它用于中型到大型项目.虽然动态类型很方便,但它允许我发现令人不安的某类错误.单元测试和linting可以缓解这个问题,但静态类型完全消除了它.

在查看了一些编程语言之后,我认为Scala看起来是一个很好的候选者:我喜欢类型推断并且它在JVM上运行,所以它应该在JVM可用的任何地方都可用.我还可以在使用它时了解有关函数式编程的更多信息.

但是......我也有一些疑问,这就是我希望Stack Overflow社区可以提供帮助的地方:

  • 可移植性:Linux和Windows至少我希望如此.那么手机呢,有可能让它在那里运行吗?
  • C++兼容性:我可以将C++代码与Scala混合使用吗?(JNI?)
  • 编程范例:我觉得此时切换到函数式编程(FP)并不舒服.我可以首先使用面向对象和程序与一些FP,然后在我学习时改变比例吗?
  • 工具链成熟度:您对IDE和调试器的体验是什么?我现在正在使用Eclipse,似乎没问题.
  • 学习速度:考虑到我的经验,您认为我能用Scala达到可行水平的速度有多快?
  • 部署:您如何部署Scala计划?它是一个罐子,它是可执行文件吗?

最后,您认为Scalas的一些缺点是什么?

java scala jvm-languages

32
推荐指数
4
解决办法
8520
查看次数

Scala和Clojure都在一个项目中

我正在寻找这两种语言的多语言编程指南.

我知道它们之间的互操作是可能的,因为它们都在同一个Java VM上运行,并且都被编译为相同的字节码.但有一些麻烦:

  • 我可以使用编译Clojure代码吗?
  • 我可以使用编译Scala代码吗?

(是的,是的,我知道我可以用一种语言插入jar来投射其他语言.)

所以问题是如何在Scala和Clojure中设置多语言开发?

interop scala clojure jvm-languages

29
推荐指数
3
解决办法
3670
查看次数