루비를 이해하려는 JIT 컴파일러!루비키의 향이 더해져요.
앞말
"루비 느려!"자주 듣던 루비 3.0을 대상으로 지금까지 3배 고속화를 시도Ruby 3x3
하고 있다.
지난달 열린 루비카이지 2019도 이런 조처를 발표해 많은 기대의 눈길을 끌었다.
특히 고속화된 간JITコンパイラ
은 회화뿐 아니라 키노트에서도 볼 수 있어 큰 관심을 끌었다.
그러나 전자계산기를 독학하는 구조(그리고 기본정보기술자 시험을 위해) 쉽게 공부하는 필자(비정보학과 졸업)에게 어려운 내용이고, 펼칠 때마다 바뀌는 회의장 분위기에 대해서는 "완전히 이해했다"고 말할 수 없다.
그럼에도 불구하고 JITコンパイラ
를 비롯한 많은 시도는 루비 엔지니어에게 매우 흥미롭고 흥미로운 일이다
이번에는 루비카이지 2019의 여향을 기대하면서 많은 회의에서 언급된 JIT 컴파일러를 자세히 살펴보려고 한다.
이 글에서 저자는 JIT의 개념을 철저히 이해하기 위해 JIT를 천천히 이해하려 한다.
만약 잘못이나 의심스러운 점이 있다면, 꺼리지 않고 의견을 제시해 주십시오.(>_<)
JIT 컴파일러 is 뭐라고요? JITコンパイラ
는 루비2다.6부터 옵션으로 추가돼 루비 구조를 고속으로 실행할 예정입니다.
JIT(Just-In-Time Compuiler)는 코드가 실제로 실행됐을 때 컴파일된 구조로, 루비뿐만 아니라 Java의 실행 환경에도 적용된 구조다.
JIT 컴파일링이라는 용어는 소프트웨어를 구성하는 모듈, 클래스, 함수 등 특정 단위의 코드가 실제로 실행될 때 컴파일되기 때문에'Just In Time'으로 명명된다
위키백과https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9에서
루비의 JIT는 자주 등장MJIT
하지만 구조를 이해하려면 루비의 JIT 설치 주변의 총칭으로 기억할 수 있다.
참조: https://k0kubun.hatenablog.com/entry/ruby26-jit
이전 처리와 다르다
Ruby1.9~Ruby2.5, 기본값 Ruby26의 실행
루비는 해석기형 언어로 컴파일해서 기계어로 직접 변환하는 것이 아니다.어떻게 실행하느냐에 따라 루비의 코드는 자구, 문법 해석을 거쳐 YARVバイトコード
로 변환된다.바이트 코드는 프로그램 언어와 기계 언어 사이에 해당하는 코드다.
그러나 YARVバイトコード
도대체 기계 언어가 아닌 바이트 코드이기 때문에 CPU는 이것YARVバイトコード
을 직접 해석해서 실행할 수 없다.
따라서 CPU 설명YARVバイトコード
대신 CPU에 명령을 내리는 것은 가상 머신(VM)YARV
이다.
따라서 Ruby 코드는 명시적인 기계 언어로 컴파일되지 않고 실행될 수 있습니다.
MJIT를 위한 Rubby 26
(이 이해의 근거는C 컴파일러를 사용하는 Ruby JIT 컴파일러)YARVバイトコード
이 생성될 때까지 변화가 없다.
그리고 가상 머신YARV
도 예전과 같이 등장해 JITコンパイラー
배우가 늘었다.
프로그램을 실행하면 YARV
(이하 VM) 는 생성된 YARVバイトコード
을 설명하고 CPU가 이해할 수 있는 명령을 보내서 실행한다.
여기서 어떤 방법을 5회 이상이라고 가정해 보자.그때 VM의 라인은 JIT 대기열에 이 방법을 불러옵니다.
JIT는 VM과 다른 스레드로 이동하여 누적된 방법YARVバイトコード
을 C 코드로 변환합니다.
생성된 C의 코드는 머지않아 機械語
생성.soファイル
으로 변환될 것이다..soファイル
의 내용은 이진 코드(=기계어)이다.이것은 VM에서 동적으로 호출되는 링크입니다.
따라서 다음 시점에 VM에서 처리할 경우YARVバイトコード
이전 방식JITコンパイラ
과 동일한 방법이 있는 경우
VM은 실행 방법YARVバイトコード
을 설명하는 것이 아니라 함수 포인터를 통해 기계 언어로 컴파일된 방법.soファイル
을 읽어 더 빨리 실행할 수 있습니다.
현황 속도/기준
JIT 구조에 따라 루비의 고속화는 가능해졌지만 얼마나 많은 데이터를 앞당겼는지는 검증 방법에 따라 편차가 있다.
C코드 생성 시 최적화, C코드에서 기계어로 번역할 때 최적화 등 다양한 요소가 얽혀 단순히 "몇 배 빨랐어!"그게 아니라
또 JIT를 유효Ruby on Rails
로 설정하고 제작된 웹 응용 프로그램을 실행하면 오히려 느려지는 데이터도 루비카이치에 나타난다.
하지만 최근 실험에서 JIT가 유효해지더라도 무효화 때와 같은 정도의 점수가 나오는데...지금부터 본격적으로 공연을 시작하겠습니다.(2019/4 rubykaigi)
(이것은 필자의 감각적 이해이다. 단순한 처리가 증가했기 때문에 늦어도 어쩔 수 없다. 프로그램의 실행 시간이 길어지고 이미 기계 언어로 번역된 방법도 증가한다. 이것도 속도가 빠를수록 받아들일 수 있다고 생각한다.)
또한 JIT 이외의 속도 개선에 대해서도'루비로 루비를 쓰는 해설자'라는 내용이 있어 흥미를 끌고 있다.RubyKaigi 2019: Write a Ruby interpreter in Ruby for Ruby 3
끝말
루비케이지를 돌아보면 자신이 어떻게 루비를 몰랐는지 알 수 있을 거야.라일스를 일상적으로 접하게 되면 라일스가 하는 마술이 당연해질 수도 있다.
다른 한편, 주위를 둘러보면 Rails를 사용하면서 루비로 내장 도구를 제작하여 개발 효율을 높이는 예가 많다는 것을 알고 있습니다. 이런 활동이 조직의 기술력을 창조하고 OSS의 활동까지 확대할 수 있다는 것을 실감했습니다.
루비라는 프로그래밍 언어를 통해 기술에 직면해야 하는 루비케이지를 재확인한 지 3일이다.
참고서적/홈페이지
Ruby의 구조. - Ruby Undera Microsoft scope-
Rubby 2.6 JIT 컴파일러 통합
전문가와 해독한 Ruby2.6NEWS 파일 | cookpad 개발자 블로그
C 컴파일러를 사용한 Ruby JIT 컴파일러/Programing Symposium 60
LITALICO는 엔지니어를 적극적으로 채용하고 있다.
응시생, 제2응시생(미경험 포함)/중도채용은 모두 진행되며, 관심 있는 사람은 아래의 URL을 확인하시기 바랍니다.
https://www.wantedly.com/projects/309158
Reference
이 문제에 관하여(루비를 이해하려는 JIT 컴파일러!루비키의 향이 더해져요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yu_ra/items/0bdef90999949c5d95b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
JITコンパイラ
는 루비2다.6부터 옵션으로 추가돼 루비 구조를 고속으로 실행할 예정입니다.JIT(Just-In-Time Compuiler)는 코드가 실제로 실행됐을 때 컴파일된 구조로, 루비뿐만 아니라 Java의 실행 환경에도 적용된 구조다.
JIT 컴파일링이라는 용어는 소프트웨어를 구성하는 모듈, 클래스, 함수 등 특정 단위의 코드가 실제로 실행될 때 컴파일되기 때문에'Just In Time'으로 명명된다
위키백과https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9에서
루비의 JIT는 자주 등장
MJIT
하지만 구조를 이해하려면 루비의 JIT 설치 주변의 총칭으로 기억할 수 있다.참조: https://k0kubun.hatenablog.com/entry/ruby26-jit
이전 처리와 다르다
Ruby1.9~Ruby2.5, 기본값 Ruby26의 실행
루비는 해석기형 언어로 컴파일해서 기계어로 직접 변환하는 것이 아니다.어떻게 실행하느냐에 따라 루비의 코드는 자구, 문법 해석을 거쳐
YARVバイトコード
로 변환된다.바이트 코드는 프로그램 언어와 기계 언어 사이에 해당하는 코드다.그러나
YARVバイトコード
도대체 기계 언어가 아닌 바이트 코드이기 때문에 CPU는 이것YARVバイトコード
을 직접 해석해서 실행할 수 없다.따라서 CPU 설명
YARVバイトコード
대신 CPU에 명령을 내리는 것은 가상 머신(VM)YARV
이다.따라서 Ruby 코드는 명시적인 기계 언어로 컴파일되지 않고 실행될 수 있습니다.
MJIT를 위한 Rubby 26
(이 이해의 근거는C 컴파일러를 사용하는 Ruby JIT 컴파일러)
YARVバイトコード
이 생성될 때까지 변화가 없다.그리고 가상 머신
YARV
도 예전과 같이 등장해 JITコンパイラー
배우가 늘었다.프로그램을 실행하면
YARV
(이하 VM) 는 생성된 YARVバイトコード
을 설명하고 CPU가 이해할 수 있는 명령을 보내서 실행한다.여기서 어떤 방법을 5회 이상이라고 가정해 보자.그때 VM의 라인은 JIT 대기열에 이 방법을 불러옵니다.
JIT는 VM과 다른 스레드로 이동하여 누적된 방법
YARVバイトコード
을 C 코드로 변환합니다.생성된 C의 코드는 머지않아
機械語
생성.soファイル
으로 변환될 것이다..soファイル
의 내용은 이진 코드(=기계어)이다.이것은 VM에서 동적으로 호출되는 링크입니다.따라서 다음 시점에 VM에서 처리할 경우
YARVバイトコード
이전 방식JITコンパイラ
과 동일한 방법이 있는 경우VM은 실행 방법
YARVバイトコード
을 설명하는 것이 아니라 함수 포인터를 통해 기계 언어로 컴파일된 방법.soファイル
을 읽어 더 빨리 실행할 수 있습니다.현황 속도/기준
JIT 구조에 따라 루비의 고속화는 가능해졌지만 얼마나 많은 데이터를 앞당겼는지는 검증 방법에 따라 편차가 있다.
C코드 생성 시 최적화, C코드에서 기계어로 번역할 때 최적화 등 다양한 요소가 얽혀 단순히 "몇 배 빨랐어!"그게 아니라
또 JIT를 유효Ruby on Rails
로 설정하고 제작된 웹 응용 프로그램을 실행하면 오히려 느려지는 데이터도 루비카이치에 나타난다.
하지만 최근 실험에서 JIT가 유효해지더라도 무효화 때와 같은 정도의 점수가 나오는데...지금부터 본격적으로 공연을 시작하겠습니다.(2019/4 rubykaigi)
(이것은 필자의 감각적 이해이다. 단순한 처리가 증가했기 때문에 늦어도 어쩔 수 없다. 프로그램의 실행 시간이 길어지고 이미 기계 언어로 번역된 방법도 증가한다. 이것도 속도가 빠를수록 받아들일 수 있다고 생각한다.)
또한 JIT 이외의 속도 개선에 대해서도'루비로 루비를 쓰는 해설자'라는 내용이 있어 흥미를 끌고 있다.RubyKaigi 2019: Write a Ruby interpreter in Ruby for Ruby 3
끝말
루비케이지를 돌아보면 자신이 어떻게 루비를 몰랐는지 알 수 있을 거야.라일스를 일상적으로 접하게 되면 라일스가 하는 마술이 당연해질 수도 있다.
다른 한편, 주위를 둘러보면 Rails를 사용하면서 루비로 내장 도구를 제작하여 개발 효율을 높이는 예가 많다는 것을 알고 있습니다. 이런 활동이 조직의 기술력을 창조하고 OSS의 활동까지 확대할 수 있다는 것을 실감했습니다.
루비라는 프로그래밍 언어를 통해 기술에 직면해야 하는 루비케이지를 재확인한 지 3일이다.
참고서적/홈페이지
Ruby의 구조. - Ruby Undera Microsoft scope-
Rubby 2.6 JIT 컴파일러 통합
전문가와 해독한 Ruby2.6NEWS 파일 | cookpad 개발자 블로그
C 컴파일러를 사용한 Ruby JIT 컴파일러/Programing Symposium 60
LITALICO는 엔지니어를 적극적으로 채용하고 있다.
응시생, 제2응시생(미경험 포함)/중도채용은 모두 진행되며, 관심 있는 사람은 아래의 URL을 확인하시기 바랍니다.
https://www.wantedly.com/projects/309158
Reference
이 문제에 관하여(루비를 이해하려는 JIT 컴파일러!루비키의 향이 더해져요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yu_ra/items/0bdef90999949c5d95b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
루비케이지를 돌아보면 자신이 어떻게 루비를 몰랐는지 알 수 있을 거야.라일스를 일상적으로 접하게 되면 라일스가 하는 마술이 당연해질 수도 있다.
다른 한편, 주위를 둘러보면 Rails를 사용하면서 루비로 내장 도구를 제작하여 개발 효율을 높이는 예가 많다는 것을 알고 있습니다. 이런 활동이 조직의 기술력을 창조하고 OSS의 활동까지 확대할 수 있다는 것을 실감했습니다.
루비라는 프로그래밍 언어를 통해 기술에 직면해야 하는 루비케이지를 재확인한 지 3일이다.
참고서적/홈페이지
Ruby의 구조. - Ruby Undera Microsoft scope-
Rubby 2.6 JIT 컴파일러 통합
전문가와 해독한 Ruby2.6NEWS 파일 | cookpad 개발자 블로그
C 컴파일러를 사용한 Ruby JIT 컴파일러/Programing Symposium 60
LITALICO는 엔지니어를 적극적으로 채용하고 있다.
응시생, 제2응시생(미경험 포함)/중도채용은 모두 진행되며, 관심 있는 사람은 아래의 URL을 확인하시기 바랍니다.
https://www.wantedly.com/projects/309158
Reference
이 문제에 관하여(루비를 이해하려는 JIT 컴파일러!루비키의 향이 더해져요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yu_ra/items/0bdef90999949c5d95b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(루비를 이해하려는 JIT 컴파일러!루비키의 향이 더해져요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yu_ra/items/0bdef90999949c5d95b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)