我看了一些JVM的新语言.其中两个人现在非常感兴趣:Clojure和Scala.但在我看来,他们俩都不理想.(让我们继续猜测,因为我不想损害自己讨论......)
我实际上认为这是一个棘手的举动是MS的发明--F#.简单地将OCaml语言移动到.NET平台会产生一些令人敬畏的效果.
问题是:有人设法为JVM编写功能齐全的OCaml编译器吗?如果这是一个好主意,你会怎么说?
如何从JVM中发送POSIX信号?(在Java或Clojure中)
在我尝试使用谷歌搜索之前,我从未想过这会成为一个问题 - 有很多关于处理信号的信息,但没有关于发送它们的信息.
如果没有使用JNI或调用shell来执行"kill",还有其他方法可以向PID发送信号吗?
我最近买了Scala编程,并一直在阅读它.语言肯定不是我的预期!具体来说,除了Lisp宏和Haskell的类型级别副作用隔离之外,它似乎实现了我所知道的几乎所有编程语言的想法.
坦率地说,它让我有些不知所措.虽然我认为拥有这么多工具很好,但我真的只是在JVM上寻找一种强类型的函数式语言.我想我可能会以这种方式使用Scala,但我想如果我与任何库交互或通过其他人的代码,我会遇到很多这种高级(对我而言)OOP的东西 - 特征和"对象层次结构"线性化,"所有这些抽象和重要的业务,单例,包和伴随对象,隐式转换......更不用说各种语法快捷方式和糖.
人们经常哀叹那些试图将一种语言的风格转变为另一种语言的程序员,原因很多.但并非所有语言都像Scala一样具有多范式,所以也许它的社区有不同的看法?例如,在F#中,编程风格和使用的OOP似乎有一些余地.但是从阅读中我不确定这对Scala来说是否也是一个好的哲学.
更有经验的Scala程序员可以帮助我吗?为清晰起见编辑:基本上,我可以安全地使用Scala的FP功能而不用担心其高级OOP方面吗?
抱歉这个漫无边际的问题!
paradigms programming-languages functional-programming scala jvm-languages
java中vararg可以使用的参数个数的最大值是多少?我相信应该有一些限制而且它不是无限的.
我花了很多时间寻找能够无缝访问Java遗留代码(Weka代码)的函数式语言.导入的Java类方法的自动完成将非常好.我会展示自己的印象,如果我错了,请纠正我.
Yeti对我非常有吸引力,因为它简单且类似于ML,但我无法为它设置好的IDE.我不知道语言本身是否已经可用于现实生活中.
Groovy,JRuby和Jython似乎非常成熟,但并不是真正的功能. Scala已经成熟,但至少在Netbeans上也是如此(如果我记得很清楚的话,还有Eclipse)它是错误的.
" OCaML-Java "也是OO,并没有准备好使用(3个或4个单独的项目).我认为在IDE中它的使用准备就更少了.
Jaskell似乎死了.
Clojure似乎已经成熟并且在Intellij IDEA(La Clojure插件)中运行得非常好,但我不确定在编码时我是否希望每行编写超过2个parens.
SISC和ABCL我没试过.我认为没有IDE支持.
CAL(或Quark ...... Blah ...)语言通向SAP网站,之后我耐心地搜索功能性JVM语言.
有类似的问题但不全面.例如: 哪种函数式编程语言在Eclipse中提供了最好的支持?
是否有一些能够直接调用java类的JVM函数语言?如果Yeti得到IDE支持,就像Clojure一样(在IDEA中),对我来说这将是完美的.
谢谢
编辑 - - - - - - - - - - - - - - - - - -
我可以在Intellij IDEA中使用Clojure + Scala.互操作性示例:
Scala代码
package a
class ScalaMain {
def test = {
"testing!"
}
}
Run Code Online (Sandbox Code Playgroud)
Clojure代码
(import '(a ScalaMain)) ;' …Run Code Online (Sandbox Code Playgroud) functional-programming scala clojure jvm-languages intellij-idea
是否有任何Frege相当于Haskell,getLine并read从标准库中的控制台解析输入?
目前我这样做:
import frege.IO
getLine :: IO String
getLine = do
isin <- stdin
isrin <- IO.InputStreamReader.new isin
brin <- IO.BufferedReader.fromISR isrin
line <- brin.readLine
return $ fromExceptionMaybe line
fromExceptionMaybe :: Exception (Maybe a) -> a
fromExceptionMaybe (Right (Just r)) = r
fromExceptionMaybe (Right _) = error "Parse error on input"
fromExceptionMaybe (Left l) = error l.getMessage
pure native parseInt java.lang.Integer.parseInt :: String -> Int
main _ = do
line <- getLine
println $ parseInt line …Run Code Online (Sandbox Code Playgroud) 标题很好地反映了我的问题.我想知道有关JVM(不仅仅是HotSpot,但显然是开始的地方)如何实现或处理特定功能的问题是否有良好的资源或跳跃点?我不是在寻找JLS或JVM规范中的东西- 我知道先去那里.
例如:在尝试理解性能问题时,我们经常进行的对话不是关于规范的内容,而是实际实现中的当代最佳实践.例如,有一些城市神话说"最终类在Java中表现更好,因为JVM可以内联或以其他方式优化这些东西." 是否有一般资源我们可以转向以评估这些浮动的声明?
我通过HotSpot特定的参考资料回答了我自己的问题.其他供应商的产品呢?小型JVM的细节?多核细节?平台细节,如果它们有所作为?其他JVM语言的细节?
只是为了避免一些潜在的抱怨:1)这不是寻找过早的优化(事实上,更好地理解平台应该劝阻受过良好教育的开发人员!); 2)我知道Java程序员应该专注于漂亮,可移植,随处运行的代码,但对于我们中的许多人而言,平台细节最终会引起关注!
这是通过对一些有用的意见启发的具体问题由托尔比约恩Ravn的安德森.我很高兴收集一些其他更有用的例子,超出我上面引用的例子,以激发人们可能想要这些资源的原因.
在SO一些有趣的相关问题:尾部调用优化的JVM,杀手JVM功能,优化,都将是无用的明天,JVM实现之间的差异.
编辑添加: 我将答案提供给所提及的最佳个人参考,或者提供指向网站的指针(可能是为了回答这个问题而建立的),最好地集中/编目JVM实施智慧和实际后果.客户语言和开发人员.
尾部调用是否在Frege中进行了优化.我知道在Java和编译为JVM字节码的语言中都没有TCO,如Clojure和Scala.弗雷格怎么样?
Wikipedia 目前关于Groovy编程语言的文章解释说"大多数有效的Java文件也是有效的Groovy文件",并提供以下示例,首先是Java代码:
for (String it : new String[] {"Rod", "Carlos", "Chris"})
if (it.length() <= 4)
System.out.println(it);
Run Code Online (Sandbox Code Playgroud)
然后在Groovy中相同:
["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}
Run Code Online (Sandbox Code Playgroud)
请注意,在第一个示例中,我们使用了完全普通的Java方法java.lang.String.length().在第二个例子中,这个方法已被神秘地替换为对一个名为的方法的调用size().我已经验证第二个示例是有效的Groovy代码并且具有正确的行为.
java.lang.String没有一个叫做的方法size().Groovy没有String为自己的目的进行子类化:
String s = ""
Class c = s.getClass()
println c.getName() // "java.lang.String"
Run Code Online (Sandbox Code Playgroud)
它也不会以某种方式为String对象添加额外的方法:
// [...]
for (def method : c.getMethods()) {
println method.getName()
}
// prints a whole bunch of method names, no "size"
Run Code Online (Sandbox Code Playgroud)
但仍然这个代码以某种方式工作:
// [...]
println s.size() …Run Code Online (Sandbox Code Playgroud) 在接下来的3年中,我将不得不使用非常具体的第三方API来使用JVM(项目要求).他们想要Java,但我已经有了回避Java的余地.我希望我们可以回到.NET框架,这样我就可以在F#中开发代码,完全爱上OCaml..NET开发已被我们的客户打倒.这是不行的.
我转向寻找,阅读和探讨编程博客/论坛,试图了解哪种语言可能会对我更有吸引力:Scala或Clojure.那些似乎拥有最大的社区/粉丝群.有了ML语言的经验,我看到很多人将Scala与ML进行比较.然而,在进行这种比较时,有一些真正的反对者.如果Scala接近ML,那么我的生产力和学习曲线将有助于实现这一转变.
互联网上充满了错误的信息,并想知道我是否患有此类信息.我不喜欢Lisp的语法(不要伤害我!)但是如果Scala有我正在阅读的瑕疵(糟糕的IDE支持,通量单元测试框架,性能问题)我想知道Clojure是否更好选项.我希望通过使用函数作为第一类对象,并最大限度地减少并发性痛苦,提高效率.
所以无论如何,在我花太多时间在互联网上而不工作之前......我被JVM困住了,厌倦了Java,想知道去哪儿了?