JRuby

JRuby
JRuby
JRuby logo.png
개발자찰스 올리버 너터, 토마스 에네보, 올라 비니, 닉 시거
초기 릴리즈2001년; 21년 전(2001년)
안정된 릴리스
9.3.4.0 / 2022년 3월 23일; 4개월 전(2022-03-23)[1]
저장소
기입처루비자바
운영 체제크로스 플랫폼
플랫폼Java 가상 머신
유형루비 프로그래밍 언어 인터프리터
면허증.EPL/GPL/LGPL
웹 사이트www.jruby.org Edit this on Wikidata

JRuby는 Java Virtual Machine 에 주로 Java로 작성된 Ruby 프로그래밍 언어를 구현한 것입니다. 소프트웨어는 3방향 EPL/GPL/LGPL 라이선스로 출시된 무료 소프트웨어입니다.JRuby는 Java와 긴밀하게 통합되어 Java와 Ruby 코드(Python 언어의 경우 Jython과 유사) 사이의 완전한 양방향 액세스를 통해 모든 Java 애플리케이션에 인터프리터를 내장할 수 있습니다.

JRuby의 주요 개발자는 Charles Oliver Nutter와 Thomas Enebo이며, Ola Bini와 Nick Sieger를 포함한 현재 및 과거의 많은 기여자가 있습니다.2006년 9월, Sun Microsystems는 Enebo와 Nutter를 JRuby에 풀타임으로 [2]고용했습니다.2007년 6월 ThinkWorks는 루비와 [3]JRuby를 위해 Ola Bini를 고용했습니다.

2009년 7월, JRuby 개발자는 엔진 [4]야드에서 JRuby 개발을 계속하기 위해 Sun을 떠났다.2012년 5월, Nutter와 Enebo는 Engine Yard를 [5]떠나 Red Hat의 JRuby에서 일하게 되었습니다.

역사

JRuby는 2001년 Jan Arne Petersen에 의해 처음 만들어졌다.그 당시와 그 후 몇 년 동안 코드는 루비 1.6 C 코드의 직접 포트였습니다.Ruby 1.8.6의 출시와 함께 JRuby를 1.8.6의 기능과 의미론으로 업데이트하려는 노력이 시작되었다.2001년 이후 여러 기여자가 프로젝트를 지원하여 현재(2012년) 약 6명으로 구성된 핵심 팀이 탄생했습니다.

JRuby 1.1은 JRuby에 Just-in-time 컴파일Awse-of-time 컴파일 모드를 추가했으며 대부분의 경우 현재 Ruby 1.8.7 레퍼런스 [6]구현보다 이미 더 빨랐다.

JRuby 패키지는 대부분의 플랫폼에서 사용할 수 있습니다.Fedora 9는 JRuby 1.1.[7][8]1에 표준 패키지로 포함된 최초의 패키지 중 하나입니다.

2009년 7월, Sun Microsystems의 핵심 JRuby 개발자인 Charles Oliver Nutter, Thomas Enebo Nick Sieger는 JRuby [4][9]개발을 계속하기 위해 엔진 야드에 합류했습니다.2012년 5월, Nutter와 Enebo는 Engine Yard를 [5]떠나 Red Hat의 JRuby에서 일하게 되었습니다.

JRuby 1.0은 루비 1.8.6을 지원하며, JRuby 1.4.0은 루비 1.8.7에 대한 호환성을 업데이트하고, JRuby 1.6.0은 루비 1.9.2를 동시에 지원합니다.JRuby 9.0.0은 루비 2.2에 대한 지원을 추가했습니다.

현재 버전의 JRuby(9.3.2.0)는 Ruby 2.6.[10]x를 지원합니다.

Ruby on Rails(레일의 루비)

JRuby는 버전 0.9(2006년 [11][12]5월)부터 Ruby Gems와 WEBrick을 실행하는 기능을 통해 Ruby on Rails 웹 프레임워크를 실행할 수 있게 되었습니다.선에 의한 두 명의 리드 개발자의 채용 이후, 레일즈의 호환성과 스피드가 큰폭으로 향상되었습니다.JRuby 버전 1.0은 레일즈 자체의 거의 [13]모든 테스트 케이스에 합격했습니다.그 후, 개발자는 실전 환경에서 [14]JRuby를 Rails 어플리케이션용으로 사용하기 시작했다.

여러 가상 머신의 콜라보레이션

2008년 2월 27일, Sun Microsystems와 Tokyo University는,[15] 1개의 인터프리터로 복수의 Ruby 또는 JRuby 애플리케이션을 실행할 수 있는 가상 머신을 실장하는 공동 연구 프로젝트를 발표했습니다.

Java 가상 시스템에서 동적 호출

JSR 292(JavaTM [16]플랫폼에서의 동적 유형 언어 지원)는 다음을 제안합니다.

  • 신규 추가invokedynamic동적 유형 검사를 사용하여 메서드 호출을 허용하는 JVM 수준의 명령,
  • 실행 시 클래스 및 메서드를 동적으로 변경합니다.

Sun 오픈 소스 프로젝트 Multi Language Virtual Machine은 이 [17]JSR의 프로토타입을 목표로 합니다.OpenJDK의 패치로 개발된 최초의 시제품은 2008년 [18][19]8월 말에 발표되어 공개되었습니다.

JRuby 팀은 코드 베이스에 동적 호출을 구현했습니다.다이내믹 호출은 초기 1.1.5 릴리즈에서 원시 [20]형태로 출고되었습니다.버전 1.7.0에서는 Java [21]8 빌드에서는 디폴트로 유효하게 되어 있습니다.

릴리스 이력

이 표에는 주로 버그를 수정하고 성능을 향상시킨 버전을 제외하고 JRuby 역사에서 중요한 단계를 나타내는 릴리스만 나와 있습니다.퍼포먼스 향상은 다음 표에도 나타나 있지 않습니다.이는 모든 릴리스가 일반적으로 이러한 개선을 가져오고 있기 때문입니다.

풀어주다 발매 날짜 하이라이트
0.9 2006-08-01 레일[11] 서포트
1.1 2008-03-28 Ruby MRI 1.8.7보다[6] 뛰어난 퍼포먼스
AOT 모드 및 JIT 모드[22]
1.1.4 2008-08-28 리팩터링된 Java 통합 계층
Ruby 1.9 지원 시작
C[23] 라이브러리를 호출하기 위한 FFI 서브시스템
1.2.0[24] 2009-03-16 루비 1.9용 JIT 컴파일러
Ruboto 프로젝트에 의한 Android의 예비 지원.
1.3.0[25] 2009-06-03 JRuby는 GAE/J와 같은 제한된 환경에서 더 잘 작동합니다.
1.4.0[26][27] 2009-11-02 Windows 네이티브런처 및 Windows 설치 프로그램
Ruby 1.8.7 지원
1.5.0[28] 2010-05-12 UNIX 기반 플랫폼용 네이티브 런처
개미 지원 및 Rake-Ant 통합
표준 라이브러리, RubyGemsRSpec 업데이트
1.6.0[29] 2011-03-15 Ruby 1.9.2 언어 및 API 호환성
빌트인 프로파일러
Ruby의 C API를 기반으로 한 C 확장 기능 실험 지원
1.7.0[21] 2012-10-22 Ruby 1.9.3 언어가 기본 모드입니다.
호출음 지원
1.7.4[30] 2013-05-16 실험판 Ruby 2.0 지원(대부분의 기능과 stdlib 포함)
9.0.0.0[31] 2015-07-22 Ruby 2.x 지원
새로운 최적화 런타임
새로운 POSIX 친화적인 IO 및 프로세스

MRI에서 완전 포트화된 인코딩/트랜스코딩 로직

9.1.7.0[32] 2017-01-11 여러 스레드를 사용할 때 심각한 LinkError 수정

몇 가지 키워드 인수 문제 수정

몇 가지 파서의 문제를 수정.

JIT 메모리 사용량 감소

Psych를 2.2.2로 업데이트

jruby-opensl을 0.9.18로 업데이트합니다.

72개 문제 해결 완료

9.2.0.0[33] 2018-05-24 Ruby 2.5 언어 지원
9.2.9.0[34] 2019-10-30 Ruby 2.5.7 언어 지원
9.3.2.0[35] 2021-12-02 Ruby 2.6.x 언어 지원
9.3.3.0[36] 2022-01-19 Ruby 2.6.x 언어 지원
9.3.4.0[37] 2022-03-23 Ruby 2.6.x 언어 지원

설계.

2006년 초부터 현재의 JRuby 코어 팀은 JRuby를 단순한 C 포트에서 벗어나 더 나은 성능을 지원하고 궁극적으로 Java 바이트 코드로 컴파일하는 데 도움을 주기 위해 노력해 왔습니다.이를 지원하기 위해 팀은 JRuby를 사용하여 Ruby on Rails를 수정하지 않고 실행할 수 있다는 야심찬 목표를 세웠다.이 목표를 달성하는 과정에서 JRuby 테스트 스위트는 JRuby의 '정확성'에 자신감을 얻을 정도로 확대되었다.그 결과, 2006년 말과 2007년 초에 JRuby의 핵심 서브시스템에 대한 훨씬 더 복잡한 재설계와 리팩터링을 실시하기 시작했다.

JRuby는 코드를 직접 해석하거나 런타임에 Java 바이트 코드로 컴파일하거나 실행 전에 Java 바이트 코드로 컴파일할 수 있는 혼합 모드 가상 머신으로 동작하도록 설계되었습니다.2007년 10월까지는 인터프리터 모드만 모든 Ruby의 컨스트럭트를 지원했지만, 풀 AOT/J를 지원했습니다.IT 컴파일러는 버전 1.1 [22]이후부터 사용할 수 있습니다.컴파일러 설계를 통해 해석 및 컴파일된 코드가 병렬로 실행될 수 있을 뿐만 아니라 생성된 바이트 코드를 최적화하고 Java 클래스 파일로 출력할 수 있습니다.

프레임워크 지원

JRuby는 Rails, RSpec, Rake 및 RubyGems에 대한 지원을 내장하고 있습니다.FFI 서브시스템을 내장하여 보석으로 번들된 C 라이브러리를 사용할 수 있습니다.또, Ruby MRI와 같이 Interactive Ruby Shell(irb)을 기동할 수도 있습니다.

NetBeans 6에서 사용할 수 있는 Netbeans Ruby Pack은 Ruby 및 JRuby와 함께 IDE를 개발할 수 있으며,[38][39] Ruby의 두 가지 구현을 위한 Ruby on Rails도 사용할 수 있습니다.NetBeans 7.0 이후에는 포함되지 않습니다.

프로그래밍

루비와 Java의 만남

JRuby는 Java로 작성된 것을 제외하면 표준 Ruby 인터프리터와 유사합니다.JRuby는 Ruby와 같은 개념의 객체 지향 프로그래밍과 동적 타이핑이 특징입니다.주요 차이점은 JRuby가 Java와 긴밀하게 통합되어 [40]Java 프로그램에서 직접 호출할 수 있다는 것입니다.Java는 웹 애플리케이션 개발에서 중요한 기반을 가지고 있습니다.

Java 호출 JRuby

JRuby의 강력한 특징 중 하나는 Java Platform의 클래스를 호출하는 기능입니다.이를 위해서는 먼저 "require 'java"를 호출하여 JRuby의 Java 지원을 로드해야 합니다.다음으로 JLabel을 사용하여 Java JFrame을 작성하는 예를 나타냅니다.

요구하다 '실패'   = 자바.흔들다.JFrame.신규 .get Content Pane(콘텐츠 창).더하다 자바.흔들다.JLABEL.신규(안녕, 세상아!) .set Default Close 조작 자바.흔들다.JFrame::종료_ON_닫기 .포장하다 .set_module 진실의 

JRuby는 또한 사용자가 루비와 같은 언더스코어 메서드 명명법을 사용하여 Java 코드를 호출하고 JavaBean 속성을 [dubious ]속성으로 참조할 수 있도록 합니다.

.콘텐츠_개요.더하다 라벨. .눈에 보이는 = 진실의 

Java에서 JRuby 호출

JRuby는 Java 6용 JSR 223[41] 스크립팅 또는 Apache Bean Scripting 프레임워크를 사용하여 Java에서 쉽게 호출할 수 있습니다.

//JSR 233의 Java 6 스크립트 사용 예시 Script Engine Manager 매니저 = 신규 Script Engine Manager(); 스크립트 엔진 rb엔진 = 매니저.get Engine By내선("실패"); 해라 {     rb엔진.평가하다('Hello World'를 붙여주세요.); } 또 만나 (스크립트 예외 ex) {     ex.print Stack Trace(프린트 스택 트레이스)(); } 

성능

일부 벤치마크에 따르면 JRuby가 대체품보다 빠르다.구현은 실행 전에 로딩되는 코드의 양에 따라 다르기 때문에 속도를 측정하는 방법이 다르면 성능 이점을 편향적으로 해석할 수 있습니다.Java Virtual Machine 자체가 로드되는 데 걸리는 시간은 벤치마크를 계산할 때 실행 시간에서 제외되는 경우가 많습니다.

JRuby는 글로벌 인터프리터 잠금(Rubinius와 마찬가지로)의 제약을 받지 않고 JVM 스레드를 활용할 수 있다는 아키텍처상의 큰 이점을 가지고 있기 때문에 프로세스 내에서 완전한 병렬화를 실현할 수 있습니다.이것에 의해, Ruby MRI는 OS 스레드를 이용해도 달성할 수 없습니다.

2007년에 테스트된 실제 Mongrel서버 애플리케이션에서는 Java Virtual Machine이 인스턴스화된 [42]후 JRuby의 성능이 Ruby MRI 1.8보다 향상되었습니다.

2007년 Ruby 구현 벤치마크에서 JRuby는 일부 테스트에서 Ruby MRI 1.8보다 빨랐지만, YARV는 [43]두 테스트 모두 능가했습니다.

2014년 4월 현재 컴퓨터 언어 벤치마크 게임에서 JRuby 1.7.4는 일반적으로 Ruby MRI 2.1.0과 동일한 성능을 가지고 있지만 [44][45]더 많은 메모리를 사용합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Releases · jruby/jruby". github.com. Retrieved 2022-01-11.
  2. ^ Jacki (2006-09-07). "Sun Welcomes JRuby Developers". On the Record. Archived from the original on 2012-08-29. Retrieved 2013-11-07.
  3. ^ Ola Bini. "ThoughtWorks". On the Record.
  4. ^ a b "Sun's JRuby Team Jumps Ship to Engine Yard". PCWorld. 2009-07-28. Retrieved 2012-06-02.
  5. ^ a b "Red Hat lures in JRuby power pair". The Register. 2012-05-23. Retrieved 2012-06-02.
  6. ^ a b Cangiano, Antonio (2007-03-12). "The Great Ruby Shootout". Retrieved 2008-02-01.
  7. ^ Nutter, Charles (2008-04-25). "JRuby 1.1.1 in RedHat Fedora". Retrieved 2008-04-26.
  8. ^ "jruby". fedoraproject.org. Retrieved 2008-04-26.[영구 데드링크]
  9. ^ Nutter, Charles (2009-07-28). "JRuby's Future at Engine Yard". Archived from the original on 2009-07-31. Retrieved 2009-07-28.
  10. ^ "Ruby 2.6 Support". JRuby Team. Retrieved 2020-04-09.
  11. ^ a b "Rails Support". JRuby Team. Retrieved 2008-02-17.
  12. ^ Nutter, Charles (2008-08-24). "Zero to Production in 15 Minutes". Retrieved 2008-08-27.
  13. ^ 2,807건의 레일별 테스트 사례 중 98.6%가 성공적으로 실행됩니다. 2015년 5월 22일 Wayback Machine에서 공개된 JRuby 0.9.8 아카이브참조하십시오.
  14. ^ "Success Stories". JRuby Wiki on GitHub. 2011-01-05. Retrieved 2011-03-16.
  15. ^ "The University of Tokyo and Sun Microsystems Commence Joint Research Projects on High Performance Computing and Web-based Programming Languages". Sun Microsystems. 2008-02-27. Retrieved 2008-02-28.
  16. ^ 'JSR 292' 참조
  17. ^ "Sub-Projects and Investigations". Sun Microsystems. 2007. Retrieved 2008-02-06.
  18. ^ Rose, John (2008-08-26). "Happy International Invokedynamic Day!". Retrieved 2008-09-03.
  19. ^ Lorimer, R.J. (2008-09-01). "Dynamic Invocation Runs on OpenJDK". infoq.com. Retrieved 2008-09-03.
  20. ^ Nutter, Charles (2008-09-11). "A First Taste of InvokeDynamic". Retrieved 2008-09-13. I managed to successfully wire InvokeDynamic directly into JRuby's dispatch process! Such excitement! The code is already in JRuby's trunk, and will ship with JRuby 1.1.5 (though it obviously will be disabled on JVMs without InvokeDynamic).
  21. ^ a b "JRuby 1.7.0 Released". JRuby Team. 2012-10-22. Retrieved 2011-10-23.
  22. ^ a b Nutter, Charles (2007-09-27). "The Compiler Is Complete". Retrieved 2007-10-12.
  23. ^ Enebo, Tom (2008-08-28). "JRuby 1.1.4 Released". Retrieved 2009-02-25.[영구 데드링크]
  24. ^ Enebo, Tom (2009-03-16). "JRuby 1.2.0 Released". JRuby Team. Archived from the original on 2009-03-19. Retrieved 2009-03-17.
  25. ^ Enebo, Tom (2009-06-03). "JRuby 1.3.0 Released". JRuby Team. Archived from the original on 2009-06-12. Retrieved 2009-06-03.
  26. ^ "JRuby 1.4.0 Released". JRuby Team. 2009-11-02. Retrieved 2009-11-03.
  27. ^ "JRuby 1.4.0 Released". adtmag.com. 2009-11-10. Retrieved 2009-11-21.
  28. ^ "JRuby 1.5.0 Released". JRuby Team. 2010-05-12. Retrieved 2010-05-12.
  29. ^ "JRuby 1.6.0 Released". JRuby Team. 2011-03-15. Retrieved 2011-03-15.
  30. ^ "JRuby 1.7.4 Released". JRuby Team. 2013-05-16. Retrieved 2013-05-19.
  31. ^ "JRuby 9.0.0.0 Released". JRuby Team. 2015-07-22. Retrieved 2015-07-25.
  32. ^ "JRuby 9.1.7.0 Released — JRuby.org". jruby.org. Retrieved 2017-01-13.
  33. ^ "JRuby 9.2.0.0 Released". Retrieved 2018-05-27.
  34. ^ "JRuby 9.2.9.0 Released". Retrieved 2019-11-05.
  35. ^ "JRuby 9.3.2.0 Released". Retrieved 2022-01-11.
  36. ^ "JRuby 9.3.3.0 Released". Retrieved 2022-01-19.
  37. ^ "JRuby 9.3.4.0 Released". Retrieved 2022-03-23.
  38. ^ "Ruby & JRuby Support Available in NetBeans IDE". netbeans.org. 2007-03-06. Retrieved 2009-07-04.
  39. ^ "Ruby brightens the NetBeans platform". infoworld.com. 2007-03-01. Retrieved 2008-07-04.
  40. ^ Fox, Joshua (July 17, 2006). "Ruby for the Java world". JavaWorld. Retrieved 2020-07-26.
  41. ^ JSR 223: Java Platform Specification Request 스크립트
  42. ^ Sieger, Nick (2007-10-25). "JRuby on Rails: Fast Enough". Retrieved 2007-10-28.
  43. ^ Cangiano, Antonio (2007-12-03). "The Great Ruby Shootout". Retrieved 2014-02-02.
  44. ^ "JRuby compared to Ruby 1.9, Computer Language Benchmarks Game (1)". Archived from the original on 2015-01-23. Retrieved 2014-02-02.
  45. ^ "JRuby compared to Ruby 1.9, Computer Language Benchmarks Game (2)". Archived from the original on 2014-07-23. Retrieved 2014-02-02.

추가 정보

외부 링크