루비(프로그래밍 언어)

Ruby (programming language)
루비
Ruby logo.svg
패러다임멀티패러다임: 기능성, 필수성, 객체 지향성, 반사성
설계자마츠모토 유키히로
개발자마츠모토 유키히로 등
처음 등장한1995년, 27년(연간)
안정된 릴리스
3.1.2[1] / 2022년 4월 12일; 3개월 전 (2022년 4월 12일)
타이핑 분야오리, 다이내믹, 스트롱
범위어휘적, 때로는 역동적
구현 언어C
OS크로스 플랫폼
면허증.루비 라이선스
파일 이름 확장자.disclosed(비활성화)
웹 사이트www.ruby-lang.org
주요 구현
Ruby MRI, Truffle Ruby, YARV, Rubinius, MagLev, JRuby, MacRuby, RubyMotion, Mruby, IronRuby
영향을 받다
Ada,[2] Basic,[3] C++,[2] CLU,[4] [4]딜런, 에펠,[2] 리스프,[4] Lua, Perl,[4] [4]Python, Smalltalk[4]
영향받은
Clojure, CoffeeScript, Crystal, D, Elixir, Groovy, Ioke,[5] Julia,[6] Mirah, Nu,[7] Ring,[8] Rust,[9] Swift[10]

Ruby는 여러 프로그래밍 패러다임을 지원하는 해석고급 범용 프로그래밍 언어입니다.프로그래밍의 생산성과 단순성에 중점을 두고 설계되었습니다.루비에서는 원시 데이터 유형을 포함한 모든 것이 객체입니다.그것은 1990년대 중반 일본 마츠모토 유키히로에 의해 개발되었다.

루비는 동적으로 입력되며 가비지 컬렉션과 저스트타임 컴파일을 사용합니다.절차적 프로그래밍, 객체 지향 프로그래밍 및 기능적 프로그래밍을 포함한 여러 프로그래밍 패러다임을 지원합니다.제작자에 따르면 루비는 Perl, Smalltalk, Eiffel, Ada,[11][3] BASIC, Lisp의 영향을 받았다.

역사

초기 개념

마츠모토씨는 루비가 1993년에 임신했다고 말했다.1999년 루비 토크 메일링 리스트에 투고된 글에서 그는 [12]루비 토크에 대한 자신의 초기 아이디어 중 일부를 다음과 같이 설명한다.

저는 동료와 객체 지향 스크립트 언어의 가능성에 대해 이야기하고 있었습니다.Perl(Perl4는 Perl5가 아니라 Perl5)은 알고 있었지만, 장난감 언어의 냄새가 나서 별로 마음에 들지 않았습니다(아직도 있습니다).객체 지향적인 언어는 매우 유망해 보였다.나는 그때 파이썬을 알았다.하지만 저는 그것이 진정한 객체 지향 언어가 아니라고 생각했기 때문에 마음에 들지 않았습니다.OO의 기능은 언어에 추가되어 있는 것 같습니다.언어광이자 15년간 OO팬이었던 저는 진짜 객체 지향적이고 사용하기 쉬운 스크립트 언어를 원했습니다.찾아봤지만 하나도 없었어요.그래서 만들기로 했어요.

Matsumoto는 Ruby의 디자인을 Smalltalk와 같은 오브젝트 시스템, 고차 함수에서 영감을 얻은 블록,[13] Perl과 같은 실용적인 유틸리티로 핵심을 이루는 단순한 리스프 언어처럼 묘사하고 있다.

「루비」라는 이름은,[14] 1993년 2월 24일, 마츠모토와 이시츠카 케이주와의 온라인 채팅에서 유래했다.처음에는 "코랄"과 "루비"라는 두 가지 이름이 제안되었다.마츠모토씨는 나중에 이시쓰카씨에게 [15]보낸 메일에서 후자를 선택했다.마츠모토씨는, 후에 「루비」라고 하는 이름을 선택한 요인에 주목했다.그것은 동료 [16][17]중 한 의 탄생석이었다.

초기 릴리즈

루비 0.95의 첫 공개는 1995년 [18][19]12월 21일 일본 국내 뉴스그룹에서 발표되었다.그 후 [14]이틀 동안 3가지 버전의 루비가 추가로 출시되었습니다.이 발매는 일본어로 된 루비 리스트 메일링 리스트의 발매와 동시에 행해지고 있습니다.이 메일링 리스트는 새로운 언어의 첫 번째 메일링 리스트입니다.

이 개발 단계에서는 객체 지향 설계, 상속을 수반하는 클래스, 믹스인, 반복기, 클로저, 예외 처리 및 가비지 [20]수집 등 루비의 후속 릴리스에 익숙한 많은 기능이 이미 존재했습니다.

1995년 Ruby 0.95가 출시된 후, 몇 가지 안정적인 버전의 Ruby가 다음 해에 출시되었습니다.

  • Ruby 1.0: 1996년 12월 25일[14]
  • 루비 1.2: 1998년 12월
  • Ruby 1.4: 1999년 8월
  • 루비 1.6: 2000년 9월

1997년, 루비에 대한 첫 기사가 웹에 게재되었다.같은 해, 마츠모토씨는 netlab.jp에 채용되어 루비에서 전임 [14]개발자로 일하고 있습니다.

1998년, 마츠모토에 의해서 루비 애플리케이션 아카이브(Ruby Application Archive)가 개시되어,[14] 루비용의 간단한 영어 홈페이지가 개설되었습니다.

1999년, 최초의 영어 메일링 리스트인 루비톡이 시작되어,[21] 일본 이외의 나라에서도 영어에 대한 관심이 높아지고 있는 것을 알 수 있었다.같은 해, 마츠모토와 이시츠카 케이주는 1999년 10월에 일본에서 출판된 「루비」에 관한 최초의 책 「객체 지향 스크립트 언어 루비」를 집필했다.2000년대 초반에는 루비에 관한 20여 권의 책이 [14]일본어로 출판되었다.

2000년까지 [22]루비는 일본에서 파이썬보다 더 인기가 있었다.2000년 9월, 최초의 영어책프로그래밍 루비」가 인쇄되어 나중에 일반에 공개되어 영어권에서의 루비의 보급이 한층 더 확대되었습니다.2002년 초에는 영어 루비톡 메일링 리스트가 일본어 루비리스트보다 더 많은 메시지를 받고 있어 비일본어권에서 루비의 인기가 높아지고 있음을 알 수 있었다.

루비 1.8 및 1.9

Ruby 1.8은 2003년 8월에 처음 출시되어 오랫동안 안정적이었으며 2013년 [23]6월에 은퇴하였다.더 이상 사용되지 않지만, 여전히 이를 기반으로 하는 코드가 있습니다.Ruby 1.8은 Ruby 1.9와 부분적으로만 호환됩니다.

Ruby 1.8은 여러 업계 표준의 대상이 되어 왔습니다.루비의 언어 사양은, IT진흥원(일본 정부기관)의 오픈 스탠다드 추진 센터가 개발해, 일본 산업 표준 위원회(JISC)에 제출해, 국제 표준화 기구(ISO)에 제출했습니다.2011년에는[24] 일본공업표준(JIS X 3017), [25][26]2012년에는 국제표준(ISO/IEC 3017)으로 인정받았다.

2005년경, Ruby 언어작성된 웹 프레임워크인 Ruby on Rails와 함께 Ruby 언어에 대한 관심이 급증했습니다.Rails는 [27]Ruby에 대한 인지도를 높인 것으로 자주 알려져 있습니다.

2011년 [28]10월 31일에 출시된 Ruby 1.9.3에서 유효하게 된 Ruby는 Ruby License와 GPL에 의한 듀얼 라이선스에서 Ruby License와 2절 BSD [29]라이선스에 의한 듀얼 라이선스로 전환했다.1.9의 채택은 1.8에서 많은 인기 있는 서드파티 보석을 다시 써야 하는 변경으로 인해 늦어졌다.Ruby 1.9는 1.8 시리즈에 많은 중요한 변화를 가져옵니다.예를 들어 다음과 같습니다.[30]

  • block local 변수(이 변수가 선언블록에 대해 로컬인 변수)
  • 추가 람다 구문:f = ->(a,b) { puts a + b }
  • 기호 키에 콜론을 사용하는 추가 해시 리터럴 구문:{symbol_key: "value"} == {:symbol_key => "value"}
  • 문자열 단위의 문자 인코딩이 지원됩니다.
  • 새로운 소켓 API(IPv6 지원)
  • require_relative수입 담보

루비 2

Ruby 2.0은 Ruby 1.9.3과 완전히 하위 호환되도록 설계되었습니다.2013년 2월 24일 공식 2.0.0 릴리스 시점에서는 알려진 (미미한) 비호환성이 [31]5개뿐이었습니다.루비 2.0에는 다음과 같은 몇 가지 새로운 기능이 추가되었습니다.

  • method 키워드 인수,
  • 새로운 방법Module#prepend, 클래스를 확장하기 위해,
  • 기호 배열을 만드는 새로운 리터럴,
  • Enumerables의 느린 평가를 위한 새로운 API 및
  • #to_h를 사용하여 객체를 [32]해쉬로 변환하는 새로운 규칙입니다.

2.1.0부터는 Ruby의 버전 정책이 시멘틱 버전 [33]관리 정책과 더 유사하도록 변경되었습니다.

Ruby 2.2.0에는 속도 향상, 버그 수정 및 라이브러리 업데이트가 포함되어 있으며 일부 사용되지 않는 API를 제거합니다.가장 주목할 만한 점은 Ruby 2.2.0에서는 메모리 처리의 변경(증분 가비지 수집, 기호 가비지 수집 지원, 젬알록에 대해 직접 컴파일하는 옵션 등)이 도입되었습니다.또한 vfork(2)를 system() 및 span()과 함께 사용하기 위한 실험적인 지원과 Unicode 7.0 사양에 대한 지원이 추가되었습니다.버전 2.2.[34]1 이후 PowerPC64의 Ruby MRI 퍼포먼스가 [35][36][37]향상되었습니다.폐지되거나 삭제된 기능에는 callcc, DL 라이브러리, 다이제스트:HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger:: 어플리케이션 및 다양한 C API 기능.[38]

Ruby 2.3.0에는 Proc #call 변경, 예외 키워드 소켓 및 IO 사용, Thread #name 처리, 기본 패시브 Net:FTP 연결 및 stdlib에서 [39]Rake가 제거되었습니다.기타 주목할 만한 변경 사항은 다음과 같습니다.

  • 기본적으로는 모든 문자열 리터럴을 frozen으로 마크할 수 있으므로 문자열 [40]조작의 퍼포먼스가 대폭 향상됩니다.
  • 해시 비교를 통해 키뿐만 아니라 키/값 쌍을 직접 확인할 수 있습니다.
  • 새로운 안전 내비게이션 오퍼레이터 &.제로 핸들링을 용이하게 할 수 있다(예:if obj && obj.foo && obj.foo.bar, 를 사용할 수 있습니다.if obj&.foo&.bar).
  • did_you_mean gem은 기본적으로 번들되어 있으며 NameError 또는 NoMethodError에서 동일한 이름과 일치하는 것을 자동으로 제안하기 위해 부팅 시 필요합니다.
  • Hash #dig Array #dig를 통해 깊이 중첩된 값을 쉽게 추출할 수 있습니다(예:profile = { social: { wikipedia: { name: 'Foo Baz' } } }Foo Baz 값은 이제 다음 방법으로 취득할 수 있습니다.profile.dig(:social, :wikipedia, :name)).
  • .grep_v(regexp)이는 다른 새로운 기능과 더불어 특정 정규 표현의 모든 부정적인 예와 일치합니다.

Ruby 2.4.0에는 해시 테이블, Array #max, Array #min 및 인스턴스 변수 [41]액세스의 퍼포먼스가 향상되었습니다.기타 주목할 만한 변경 사항은 다음과 같습니다.

  • Binding #irb: binding.pry와 유사한 REP 세션을 시작합니다.
  • FixnumBignum을 Integer 클래스로 통합
  • 문자열은 ASC뿐만 아니라 Unicode 대소문자 매핑을 지원합니다.II
  • Regexp#match?라는 새로운 메서드는 Regexp#match의 고속 부울 버전입니다.
  • 스레드 데드록 검출에 의해 스레드와 그 역추적 및 의존관계가 표시되게 되었습니다.

Ruby 2.5.0의 몇 가지 주목할 만한 변경 사항으로는 rescue와 스테이트먼트가 주변 do-end 블록을 자동으로 사용하도록 하는 것(추가 begin-end block의 필요성 감소), expl_self에 의한 메서드 체인, 브랜치 커버리지 및 메서드 커버리지 측정 지원, Hash #slice와 Hash #transform_keys를 사용한 간단한 해시 변환 등이 있습니다.블록 통과 속도(3배), 뮤텍스 속도, ERB 템플릿 속도 및 일부 연결 방식 개선과 같은 성능 향상을 제공합니다.

Ruby 2.6.0에서는 실험적인 JIT(Just-in-Time 컴파일러)와 RubyVM이 다음과 같이 변경되었습니다.: Abstract Syntax Tree(실험용).

Ruby 2.7.0에서는 패턴 매칭(실험적), REP 개선, 압축 GC 및 positional 인수와 키워드 인수의 분리가 눈에 띈다.

루비 3

루비 3.0.0은 [42]2020년 크리스마스에 출시되었습니다.Ruby 3.0에서는 Ruby [43]2.0보다 프로그램이 3배 더 빨리 실행된다는 것을 의미하는 Ruby 3x3로 알려져 있으며, 일부는 이미 중간 릴리스에서 2에서 3까지 구현되어 있습니다.3x3를 달성하기 위해 Ruby 3는 MJIT와 함께 제공되며, 나중에 YJIT인 Just-In-Time 컴파일러는 프로그램을 더 빠르게 만들 수 있습니다. 비록 프로그램이 실험적인 것으로 묘사되며 기본적으로 실행 시 플래그가 활성화되어 있습니다.

Ruby 3.0의 또 다른 목표는 동시성과 2개의 유틸리티 Fibre Scheduler를 개선하는 것이며, 실험적인 Ractor가 [42]이 목표를 촉진합니다.Ractor는 공유 객체가 아닌 메시지를 교환함으로써 실현되므로 가볍고 스레드 세이프합니다.

Ruby 3.0은 정적 [42]분석을 위한 Ruby 프로그램의 종류를 기술하기 위해 RBS 언어를 도입하였습니다.일반적인 루비 프로그램과는 분리되어 있습니다.

Ruby 3.0에서는 구문 확장과 라이브러리 변경도 [42]몇 가지 있습니다.

루비 3.1은 [44]2021년 크리스마스에 출시되었습니다.Shopify가 개발한 새로운 Just-In-Time 컴파일러인 YJIT가 포함되어 실제 비즈니스 애플리케이션의 성능을 향상시킵니다.새로운 디버거도 포함되어 있습니다.이 릴리스에는 구문 확장 및 기타 개선 사항이 있습니다.FTP, SMTP, IMAP POP용 네트워크 라이브러리는 기본 보석에서 번들 보석으로 이동합니다.[45]

버전 표

버전 최신 버전 초기 출시일 지원 종료 단계 보안 유지 보수 단계 종료
이전 버전, 더 이상 유지 보수되지 않음 NA 1996-12-25[46] NA NA
이전 버전, 유지 보수 불필요: 1.8 1.8.7-p375[47] 2003-08-04[48] 2012-06년[49] 2014-07-01[50]
이전 버전, 더 이상 유지 보수되지 않음: 1.9.3-p551[51] 2007-12-25[52] 2014-02-23[53] 2015-02-23[54]
이전 버전, 유지 보수 불필요: 2.0 2.0.0-p648[55] 2013-02-24[56] 2015-02-24[55] 2016-02-24[55]
이전 버전, 유지 보수 불필요: 2.1 2.1.10[57] 2013-12-25[58] 2016-03-30[59][60] 2017-03-31[61][62]
이전 버전, 유지 보수 불필요: 2.2 2.2.10[63] 2014-12-25[64] 2017-03-28[65] 2018-03-31[62]
이전 버전, 유지 보수 불필요: 2.3 2.3.8[66] 2015-12-25[67] 2018-06-20[68] 2019-03-31[68]
이전 버전, 유지 보수 불필요: 2.4 2.4.10[69] 2016-12-25[70] 2019-04-01[71] 2020-04-01[71]
이전 버전, 유지 보수 불필요: 2.5 2.5.9[72] 2017-12-25[73] 2021-04-05[72] 2021-04-05[72]
이전 버전, 더 이상 유지 보수되지 않음: 2.6.10[74] 2018-12-25[75] 2021-04-05[76] 2022-04-05[76]
이전 버전이지만 유지 보수: 2.7 2.7.6[77] 2019-12-25[78] TBA TBA
이전 버전이지만 유지 보수: 3.0 3.0.4[79] 2020-12-25[80] TBA TBA
현재 안정적인 버전: 3.1 3.1.2[81] 2021-12-25[44] TBA TBA
범례:
구버전
이전 버전, 아직 유지 관리됨
최신 버전
최신 프리뷰 버전
향후 출시

의미론 및 철학

루비의 창시자 마츠모토 유키히로

마츠모토씨는, Ruby는 프로그래머의 생산성과 재미를 위해서, 훌륭한 유저 인터페이스 [82]디자인의 원칙에 따라서 설계되고 있다고 말하고 있습니다.2008년 Google Tech Talk에서 마츠모토 씨는 "나는 루비가 전 세계 모든 프로그래머가 생산적이고 프로그래밍을 즐기고 행복해지도록 돕는 것을 보고 싶다.이것이 루비 [83]언어의 주된 목적입니다.그는 시스템 설계는 컴퓨터가 아닌 인간의 [84]요구를 강조해야 한다고 강조합니다.

종종 사람들, 특히 컴퓨터 엔지니어들은 기계에 집중한다."이렇게 하면 기계가 빨리 돌아가겠지."라고 그들은 생각한다.이렇게 하면 기계가 더 효율적으로 작동하게 됩니다.이렇게 함으로써 기계는 뭔가를 하게 될 것입니다."그들은 기계에 집중하고 있다.하지만 사실 우리는 인간에 초점을 맞춰야 합니다. 인간이 프로그래밍을 하거나 기계를 작동시키는 것에 관심을 가져야 합니다.우리가 달인이다.그들은 노예들이다.

마츠모토씨는, 프로그래머의 작업이나 혼동을 최소한으로 억제해, 자신이 즐겨 사용하는 언어를 만드는 것이 주된 설계 목표라고 말했다.그는 [84]루비의 디자인에 POLA(최소 놀라움의 원칙)를 적용하지 않았다고 말했습니다.마츠모토 씨는 2005년 5월 뉴스그룹 comp.lang.ruby에 대한 논의에서 루비와 POLA의 거리를 두려고 시도했습니다.어떤 디자인 선택도 누군가에게 놀라움을 줄 것이기 때문에 그는 놀라움을 평가할 때 개인적인 기준을 사용한다고 설명했습니다.만약 그 개인 기준이 일관되게 유지된다면,[85] 그 기준을 잘 알고 있는 사람들에게는 놀랄 일이 거의 없을 것이다.

Matsumoto는 [84]인터뷰에서 이렇게 정의했다.

모든 사람은 각자의 배경을 가지고 있다.Python에서 온 사람도 있고 Perl에서 온 사람도 있을 수 있으며, 언어의 다른 측면에 놀랄 수도 있습니다.그리고 나서 그들은 나에게 다가와 '나는 이 언어의 특징에 놀랐어요, 그래서 루비는 덜 놀랍다는 원칙을 위반했어요.'라고 말한다.잠깐요. 잠깐요.'놀라지 말 것'의 원칙은 당신만을 위한 것이 아니다.'놀라지 않는' 원칙은 '놀라지 않는' 원칙이다.그리고 루비를 잘 배우고 나면 놀라지 않는 법이라는 뜻이죠.예를 들어, 저는 루비 디자인을 시작하기 전에 C++ 프로그래머였습니다.저는 C++에서만 2, 3년 동안 프로그래밍을 했습니다.그리고 2년 동안 C++ 프로그래밍을 했는데도 여전히 놀랍습니다.

Ruby는 객체 지향입니다.모든 값은 객체이며, 여기에는 많은 다른 언어들이 원시(정수, 부울, "null" 등)로 지정하는 클래스와 인스턴스가 포함됩니다.변수는 항상 개체에 대한 참조를 유지합니다.모든 함수는 메서드이며 메서드는 항상 객체에서 호출됩니다.최상위 범위에서 정의된 메서드는 Object 클래스의 메서드가 됩니다.이 클래스는 다른 모든 클래스의 상위 클래스이므로 이러한 메서드는 모든 개체에서 호출할 수 있습니다.또한 모든 범위에서 볼 수 있어 사실상 "글로벌" 절차로 기능합니다.Ruby는 동적 디스패치, 믹스인 및 싱글톤 메서드를 통해 상속을 지원합니다(클래스에 정의되지 않고 단일 인스턴스에 속하고 정의됨).Ruby는 다중 상속을 지원하지 않지만 클래스는 모듈을 혼합으로 가져올 수 있습니다.

루비는 멀티패러다임 프로그래밍 언어로 설명되어 왔다: 루비는 객체 지향(모든 것이 객체이다) 또는 함수 프로그래밍(익명함수, 폐쇄 및 연속성 포함)과 함께 절차적 프로그래밍(클래스를 벗어난 함수/변수를 정의하면 '셀프' 객체의 일부가 된다)을 가능하게 한다.문장은 모두 값을 갖는다., 및 함수는 마지막 평가를 반환합니다).자기성찰, 반사 및 메타프로그래밍과 인터프리터 기반 스레드를 지원합니다.Ruby는 동적 타이핑이 특징이며 파라메트릭 다형성을 지원합니다.

Ruby FAQ에 따르면 구문은 Perl과 비슷하고 의미론도 Smalltalk와 비슷하지만 디자인 철학은 Python[86]크게 다르다.

특징들

구문

Ruby의 구문은 Perl과 Python의 구문과 대체로 유사합니다.클래스 정의와 메서드 정의는 키워드로 표시되며 코드 블록은 키워드 또는 중괄호로 정의할 수 있습니다.Perl과 달리 변수는 필수적으로 기호 앞에 붙지 않습니다.이 기호를 사용하면 변수 범위의 의미가 변경됩니다.실제적인 목적을 위해 표현[94][95]진술은 구별되지 않는다.줄 바꿈은 중요하며 문의 끝으로 간주됩니다. 세미콜론을 동일하게 사용할 수 있습니다.Python과 달리 들여쓰기는 중요하지 않습니다.

Python 및 Perl과의 차이점 중 하나는 Ruby가 모든 인스턴스 변수를 클래스에 완전히 비공개로 유지하고 액세스 메서드를 통해서만 공개한다는 것입니다.attr_writer,attr_reader등).C++나 Java와 같은 다른 언어의 "getter"나 "setter" 방식과는 달리, 루비의 접근기 방식은 메타프로그래밍을 통해 한 줄의 코드로 만들 수 있지만, 접근기 방식은 C++나 Java의 전통적인 방식으로도 만들 수 있습니다.이러한 메서드의 호출에서는 괄호를 사용할 필요가 없기 때문에, 발신측 코드의 1 행도 변경하지 않고, C#VB 같은 기능을 실현하기 위한 리팩터링을 실시할 필요도 없이, 인스턴스 변수를 완전한 함수로 변경하는 것은 간단한 일입니다.NET 속성 멤버

Python의 속성 기술자는 비슷하지만 개발 과정에서 트레이드오프를 수반합니다.Python에서 공개 인스턴스 변수를 사용하여 시작하고 나중에 속성 설명자를 통해 공개 인스턴스 변수를 사용하도록 구현을 변경하는 경우 클래스 내부 코드를 공개 속성 대신 개인 변수를 사용하도록 조정해야 할 수 있습니다.Ruby의 디자인은 모든 인스턴스 변수를 비공개로 강제하지만 선언하는 간단한 방법을 제공합니다.set그리고.get방법들.이는 Ruby에서는 클래스 외부에서 클래스의 내부 멤버에 직접 접속하는 것이 아니라 클래스에 메시지를 전달하고 응답을 받는다는 개념과 일치합니다.

실장

Matz의 루비 인터프리터

원래 루비 인터프리터는 종종 Matz의 루비 인터프리터 또는 MRI로 불립니다.이 구현은 C로 작성되며 자체 Ruby 전용 가상 머신을 사용합니다.

표준화 및 폐기된 Ruby 1.8 구현은 싱글패스 인터프리터 [23]언어C로 작성되었습니다.

Ruby 1.9부터 시작하여 Ruby 2.x 이후까지 공식 Ruby 인터프리터는 YARV("Yet Another Ruby VM")이며, 이 구현은 이전 MRI 릴리스에서 사용되던 느린 가상 머신을 대체했습니다.

대체 구현

2018년 현재 JRuby, Rubinius, mruby 등 루비의 다양한 대체 구현이 있습니다.JRuby와 Rubinius는 각각 다른 접근 방식을 취하며 JRuby와 Rubinius는 적시 컴파일을 제공하고 mruby는 사전 컴파일을 제공합니다.

Ruby에는 3가지 주요 대체 구현이 있습니다.

  • Java 가상 머신에서 실행되는 Java 및 Ruby 혼합 구현인 JRuby.JRuby는 현재 루비 2.5를 목표로 하고 있다.
  • Truffle Ruby, Graal과 함께 Truffle 언어 구현 프레임워크를 사용하는 Java 구현VM
  • Rubinius는 런타임에 LLVM을 사용하여 시스템 코드로 컴파일하는 C++ 바이트 코드 가상 시스템입니다.바이트코드 컴파일러와 대부분의 코어 클래스는 순수한 루비로 작성됩니다.Rubinius는 현재 Ruby 2.3.1을 대상으로 하고 있습니다.

기타 Ruby 구현에는 다음이 포함됩니다.

현재는 사용되지 않는 다른 Ruby 구현은 다음과 같습니다.

Ruby 구현의 성숙도는 Ruby on Rails(레일) 프레임워크를 실행하는 능력으로 측정되는 경향이 있습니다. Ruby 구현은 복잡하고 많은 Ruby 고유 기능을 사용하기 때문입니다.특정 구현이 이 목표를 달성하는 시점을 "레일 특이점"이라고 합니다.레퍼런스 실장, JRuby 및 Rubinius는[97] 모두 실제 환경에서 변경 없이 Rails를 실행할 수 있습니다.

플랫폼 지원

Matsumoto는 원래 4.3에서 Ruby를 개발했습니다.BSD 기반의 Sony NEWS-OS 3.x는 나중에 SunOS 4.x로, 마지막으로 Linux로 [98][99]의 작업을 이행했다.1999년까지, 루비는 많은 다른 운영체제에서 일하는 것으로 알려졌습니다.최신 Ruby 버전 및 구현은 모든 주요 데스크톱, 모바일 및 서버 기반 운영 체제에서 사용할 수 있습니다.Ruby는 또한 Jelastic, Heroku, Google Cloud Platform 등 많은 클라우드 호스팅 플랫폼에서도 지원됩니다.

RVMRBEnv 등의 툴을 사용하면 여러 루비 버전 및 여러 '젬셋'을 하나의 머신에 쉽게 설치하고 파티셔닝할 수 있습니다.

저장소 및 라이브러리

RubyGems는 Ruby의 패키지 매니저입니다.Ruby 패키지는 "gem"이라고 불리며 명령줄을 통해 설치할 수 있습니다.대부분의 보석은 라이브러리이지만, IDE[100]같은 애플리케이션도 일부 존재합니다.RubyGems.[101]org에는 100,000개 이상의 루비 보석이 호스팅되어 있습니다.

Git을 위한 버전 관리 저장소 호스팅을 제공하는 서비스인 GitHub에 많은 신규 및 기존 루비 라이브러리가 호스팅됩니다.

Ruby 프로그래밍을 위한 애플리케이션, 문서, 라이브러리를 호스팅한 Ruby Application Archive는 2013년까지 유지되었으며, 이후 기능이 RubyGems로 [102]이전되었습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ https://www.ruby-lang.org/en/news/2022/04/12/ruby-3-1-2-released/ 참조해 주세요.
  2. ^ a b c Cooper, Peter (2009). Beginning Ruby: From Novice to Professional. Beginning from Novice to Professional (2nd ed.). Berkeley: APress. p. 101. ISBN 978-1-4302-2363-4. To a lesser extent, Python, LISP, Eiffel, Ada, and C++ have also influenced Ruby.
  3. ^ a b "Reasons behind Ruby". Ruby Conference 2008. Confreaks TV. Retrieved 2019-06-25.
  4. ^ a b c d e f Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java. Berkeley: APress. p. 3. ISBN 978-1-59059-881-8. It draws primarily on features from Perl, Smalltalk, Python, Lisp, Dylan, and CLU.
  5. ^ Bini, Ola. "Ioke". Ioke.org. Archived from the original on 2011-07-21. Retrieved 2011-07-21. inspired by Io, Smalltalk, Lisp and Ruby
  6. ^ "Julia 1.0 Documentation: Introduction". Retrieved 6 October 2018.
  7. ^ Burks, Tim. "About Nu™". Programming Nu™. Neon Design Technology, Inc. Retrieved 2011-07-21.
  8. ^ Ring Team (3 December 2017). "Ring and other languages". ring-lang.net. ring-lang.
  9. ^ "The Rust Reference". Retrieved 16 November 2019.
  10. ^ Lattner, Chris (2014-06-03). "Chris Lattner's Homepage". Chris Lattner. Retrieved 2014-06-03. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  11. ^ "About Ruby". Retrieved 15 February 2020.
  12. ^ Shugo Maeda (17 December 2002). "The Ruby Language FAQ". Retrieved 2 March 2014.
  13. ^ Matsumoto, Yukihiro (13 February 2006). "Re: Ruby's lisp features". Retrieved 15 February 2020.
  14. ^ a b c d e f "History of Ruby".
  15. ^ "[FYI: historic] The decisive moment of the language name Ruby. (Re: [ANN] ruby 1.8.1)" (E-mail from Hiroshi Sugihara to ruby-talk).
  16. ^ "1.3 Why the name 'Ruby'?". The Ruby Language FAQ. Ruby-Doc.org. Retrieved April 10, 2012.
  17. ^ Yukihiro Matsumoto (June 11, 1999). "Re: the name of Ruby?". Ruby-Talk (Mailing list). Retrieved April 10, 2012.
  18. ^ "More archeolinguistics: unearthing proto-Ruby". Archived from the original on 6 November 2015. Retrieved 2 May 2015.
  19. ^ "[ruby-talk:00382] Re: history of ruby". Retrieved 2 May 2015.
  20. ^ "[ruby-list:124] TUTORIAL — ruby's features". Retrieved 2 May 2015.
  21. ^ "An Interview with the Creator of Ruby".
  22. ^ Yukihiro Matsumoto (October 2000). "Programming Ruby: Forward". Retrieved 5 March 2014.
  23. ^ a b "We retire Ruby 1.8.7". Retrieved 2 May 2015.
  24. ^ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語RubyのJIS規格(JIS X 3017)制定について". Retrieved 2 May 2015.
  25. ^ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語Ruby、国際規格として承認". Retrieved 2 May 2015.
  26. ^ "ISO/IEC 30170:2012". Retrieved 2017-03-10.
  27. ^ 웹 개발: Ruby on Rails.Devarticles.com (2007-03-22)2013-07-17에 회수.
  28. ^ "Ruby 1.9.3 p0 is released". ruby-lang.org. October 31, 2011. Retrieved February 20, 2013.
  29. ^ "v1_9_3_0/NEWS". Ruby Subversion source repository. ruby-lang.org. September 17, 2011. Retrieved February 20, 2013.
  30. ^ Ruby 1.9: 기대되는 것.slideshow.rubyforge.org2013-07-17에 회수.
  31. ^ 엔도 유스케.(2013-02-24) 루비 2.0.0-p0이 출시되었습니다.Ruby-lang.org 를 참조해 주세요.2013-07-17에 회수.
  32. ^ 엔도 유스케.(2013-02-24) 루비 2.0.0-p0이 출시되었습니다.Ruby-lang.org 를 참조해 주세요.2013-07-17에 회수.
  33. ^ "Semantic Versioning starting with Ruby 2.1.0". December 21, 2013. Retrieved December 27, 2013.
  34. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "Ruby 2.2.1 Released". Retrieved 12 July 2016.{{cite web}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  35. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "v2.2.1 ChangeLog". Retrieved 12 July 2016.{{cite web}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  36. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Specifying non volatile registers for increase performance in ppc64". Retrieved 12 July 2016.{{cite web}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  37. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Specifying MACRO for increase performance in ppc64". Retrieved 12 July 2016.{{cite web}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  38. ^ "ruby/NEWS at v2_2_0 · ruby/ruby · GitHub". GitHub. Retrieved 2 May 2015.
  39. ^ "Ruby/NEWS at v.2_3_0 - ruby/ruby". GitHub. Retrieved 25 December 2015.
  40. ^ "Ruby 2.3.0 changes and features". Running with Ruby. dev.mensfeld.pl. 14 November 2015.
  41. ^ "Ruby 2.4.0 Released". www.ruby-lang.org. Retrieved 2016-12-30.
  42. ^ a b c d "Ruby 3.0.0 Released". Ruby Programming Language. 2020-12-25. Retrieved 2020-12-25.
  43. ^ "Ruby 3x3: Matz, Koichi, and Tenderlove on the future of Ruby Performance".
  44. ^ a b "Ruby 3.1.0 Released". ruby-lang.org. Retrieved 25 Dec 2021.
  45. ^ "Ruby 3.1.0 Released".
  46. ^ "The Ruby Community's Christmas Releases". www.rubyinside.com.
  47. ^ "A Patch in Time: Securing Ruby".
  48. ^ "ruby-1.8.0 released!". www.ruby-lang.org.
  49. ^ "Plans for 1.8.7". www.ruby-lang.org.
  50. ^ "EOL for Ruby 1.8.7 and 1.9.2". www.ruby-lang.org.
  51. ^ "Ruby 1.9.3-p551 Released". www.ruby-lang.org.
  52. ^ "Ruby 1.9.0 Released". www.ruby-lang.org.
  53. ^ "Support for Ruby version 1.9.3 will end on February 23, 2015". www.ruby-lang.org.
  54. ^ "Support for Ruby 1.9.3 has ended". www.ruby-lang.org.
  55. ^ a b c "Ruby 2.0.0-p648 Released". www.ruby-lang.org.
  56. ^ "Ruby 2.0.0-p0 is released". www.ruby-lang.org.
  57. ^ "Ruby 2.1.10 Released". www.ruby-lang.org.
  58. ^ "Ruby 2.1.0 is released". www.ruby-lang.org.
  59. ^ "Support plans for Ruby 2.0.0 and Ruby 2.1". www.ruby-lang.org.
  60. ^ "Ruby 2.1.9 Released". www.ruby-lang.org.
  61. ^ "Ruby Issue Tracking System". bugs.ruby-lang.org.
  62. ^ a b "Support of Ruby 2.1 has ended". www.ruby-lang.org.
  63. ^ "Ruby 2.2.10 Released". www.ruby-lang.org.
  64. ^ "Ruby 2.2.0 Released". www.ruby-lang.org.
  65. ^ "Ruby 2.2.7 Released". www.ruby-lang.org.
  66. ^ "Ruby 2.3.8 Released". www.ruby-lang.org.
  67. ^ "Ruby 2.3.0 Released". www.ruby-lang.org.
  68. ^ a b "Support of Ruby 2.2 has ended". www.ruby-lang.org.
  69. ^ "Ruby 2.4.10 Released". Ruby Programming Language. 2020-03-31. Retrieved 2020-04-01.
  70. ^ "Ruby 2.4.0 Released". www.ruby-lang.org.
  71. ^ a b "Support of Ruby 2.4 has ended". www.ruby-lang.org.
  72. ^ a b c "Ruby 2.5.9 Released". Ruby Programming Language. 2021-04-05. Retrieved 2021-04-05.
  73. ^ "Ruby 2.5.0 Released". www.ruby-lang.org.
  74. ^ "Ruby 2.6.9 Released". Ruby Programming Language. 2021-11-24. Retrieved 2021-12-14.
  75. ^ "Ruby 2.6.0 Released". www.ruby-lang.org.
  76. ^ a b "Ruby 2.6.10 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-04-28.
  77. ^ "Ruby 2.7.6 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-04-28.
  78. ^ "Ruby 2.7.0 Released". www.ruby-lang.org.
  79. ^ "Ruby 3.0.4 Released". Ruby Programming Language. 2022-04-12. Retrieved 2022-04-28.
  80. ^ "Ruby 3.0.0 Released". www.ruby-lang.org.
  81. ^ "Ruby 3.1.2 Released". ruby-lang.org. Retrieved 28 April 2022.
  82. ^ "The Ruby Programming Language". Retrieved 2 May 2015.
  83. ^ Google Tech Talks – Ruby 1.9 on YouTube
  84. ^ a b c Bill Venners. "The Philosophy of Ruby". Retrieved 2 May 2015.
  85. ^ "Welcome to RUBYWEEKLYNEWS.ORG". 4 July 2017. Archived from the original on 4 July 2017.{{cite web}}: CS1 maint: bot: 원래 URL 상태를 알 수 없습니다(링크).
  86. ^ "The Ruby Language FAQ: How Does Ruby Stack Up Against...?". Retrieved 2 May 2015.
  87. ^ Bruce Stewart (29 November 2001). "An Interview with the Creator of Ruby". O'Reilly Media. Retrieved 2 May 2015.
  88. ^ Bill Venners. "Dynamic Productivity with Ruby". Retrieved 2 May 2015.
  89. ^ "Language Workbenches: The Killer-App for Domain Specific Languages?". martinfowler.com. Retrieved 2 May 2015.
  90. ^ "Ruby – Add class methods at runtime".
  91. ^ Bill Venners. "Blocks and Closures in Ruby". Retrieved 2 May 2015.
  92. ^ "Methods". Official Ruby FAQ.
  93. ^ Britt, James. "Ruby 2.0.0 Standard Library Documentation". Retrieved 2013-12-09.
  94. ^ "[ruby-talk:01120] Re: The value of while..." In Ruby's syntax, statement is just a special case of an expression that cannot appear as an argument (e.g. multiple assignment).
  95. ^ "[ruby-talk:02460] Re: Precedence question". statement [...] can not be part of expression unless grouped within parentheses.
  96. ^ "remove/virtual_module: Born to make your Ruby Code more than 3x faster. Hopefully". GitHub. 21 February 2020.
  97. ^ Peter Cooper (2010-05-18). "The Why, What, and How of Rubinius 1.0's Release".
  98. ^ Maya Stodte (February 2000). "IBM developerWorks – Ruby: a new language". Archived from the original on August 18, 2000. Retrieved 3 March 2014.
  99. ^ Yukihiro Matsumoto (August 2002). "lang-ruby-general: Re: question about Ruby initial development". Retrieved 3 March 2014.
  100. ^ "The Ruby Toolbox". Retrieved 2015-04-04.
  101. ^ "Stats RubyGems.org your community gem host". rubygems.org. Retrieved 10 December 2021.
  102. ^ "We retire raa.ruby-lang.org". 2013-08-08. Retrieved 2016-01-03.

추가 정보

외부 링크