发布于 2014-08-28 00:26:51 | 125 次阅读 | 评论: 0 | 来源: 网友投递
JRuby Java实现的Ruby解释器
JRuby,是一个采用纯Java实现的Ruby解释器,是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。Rails彻底加快及简化了Web应用的开发,不过它让人觉得不够成熟,特别是在高端企业级功能方面。另一方面,Java平台及其虚拟机、库和 应用服务器的速度、稳定性和功能方面却一直在提升,现在已被公认为是开发高端服务器。
JRuby 1.7.14 发布,此版本现已提供下载:
JRuby 1.7 主要是为了兼容 Ruby 1.9.3 版本,改进记录如下:
解决了 30 个 issues
修复了 Jar 文件源潜在的内存泄漏问题
因为在 Rails 应用启动比较慢,所以默认禁用 invokedynamic
load/require 内部重构和简化
解决了一些兼容性问题
#1923 - String#start_with? returns false when using an empty string
#1905 - Tempfile and deleteOnExit
#1899 - Can't call static method on Java 8 interface
#1898 - Fix the memory leak and actually close the resources.
#1889 - NPE from org.jruby.java.proxies.ArrayJavaProxy.to_a
#1888 - native memory leak when reading files from inside a .jar
#1859 - JMX tries to double-bind a port when using bundle exec
#1858 - JRuby with Java 8 4 to 10 times slower than Java 7
#1852 - JRubyClassloader seems to have a problem with file urls pointing to jar ...
#1850 - embedded jars do not get loaded
#1846 - Fix $LOAD_FEATURES paths for 1.8
#1818 - fix ArrayJavaProxy#to_a failure on arrays containing null
#1813 - can not load resources from jar anymore with jar uri
#1809 - apply minor enebo's comments
#1808 - Fix BigDecimal#round behavior with NAN and INFINITY
#1805 - Zlib crc improvements
#1803 - Fix minor bug in `setNativeEnabled`, and expose it in ScriptingContainer
#1802 - Fix Encoding::Converter#inspect output
#1799 - mvn -Pall fails at the documentation step
#1790 - Make Time#to_r consistent with MRI
#1777 - ServerSocket#accept_nonblock returns the server's port, not the client's
#1772 - avoid sub-classing ThreadLocal since it will leak in envs such as .wars
#1765 - added a java_field method for use in the jrubyc command.
#1762 - enhanced the java_class compiler so it can handle multiple constructors
#1750 - Refactor LoadService to make use of resources
#1729 - no valid struct layout for Ethon::Curl::Slist
#1676 - Empty hash optimization
#1580 - IO.select raises CancelledKeyException on shutdown
#1520 - Date comparison as java objects
#1435 - bouncy-castle-java JARs missing when warbling with JRuby 1.7.10
JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与 Java库 全面集成。Rails彻底加快及简化了Web应用的开发,不过它让人觉得不够成熟,特别是在高端企业级功能方面。另一方面,Java平台及其虚拟机、库和 应用服务器的速度、稳定性和功能方面却一直在提升,现在已被公认为是开发高端服务器应用的领先平台。不过如果Java平台不与Ruby等新兴语言联系在一 起,就有可能落后于流行趋势。
示例代码:
require "java" include_class "java.util.TreeSet" include_class "com.example.CallMe" include_class "com.example.ISpeaker" puts "Hello from ruby" set = TreeSet.new set.add "foo" set.add "Bar" set.add "baz" set.each { |v| puts "value: #{v}" } cm = CallMe.new cm.hello $globalCM.hello class CallJava include ISpeaker def initialize super @count = 0 end def say(msg) puts "Ruby saying #{msg}" end def addOne(from) # m.synchronize { @count += 1 puts "Now got #@count from #{from}" # } end end