[javascript] Javascript V8 속도를 얻기 위해 Ruby, Python을 차단하는 것은 무엇입니까? [닫은]

V8 엔진 에 최적화 구현 (예 : 인라인 캐싱 )을 차단하는 Ruby / Python 기능 이 있습니까?

Python은 Google 직원이 공동 개발하므로 소프트웨어 특허에 의해 차단되어서는 안됩니다.

또는 이것은 Google이 V8 프로젝트에 넣은 리소스 문제입니다.



답변

Javascript V8 속도를 얻기 위해 Ruby, Python을 차단하는 것은 무엇입니까?

아무것도.

글쎄, 돈 : 돈. (시간, 사람, 자원이지만 돈이 있으면 구입할 수 있습니다.)

V8에는 수십 년의 경험을 가진 (저는 개별적으로 이야기하고 있습니다.) 동적 OO 언어를위한 엔진. 기본적으로 Sun HotSpot JVM을 만든 사람과 동일합니다 (많은 사람들 중에서).

수석 개발자 인 Lars Bak은 문자 그대로 VM에서 25 년 동안 작업 해 왔으며 (이러한 모든 VM은 V8까지 이어졌습니다) 기본적으로 그의 전체 (전문) 수명입니다. Ruby VM을 작성하는 사람들 중 일부는 25 세가되지도 않았습니다.

V8 엔진에 최적화 구현 (예 : 인라인 캐싱)을 차단하는 Ruby / Python 기능이 있습니까?

적어도 IronRuby, JRuby, MagLev, MacRuby 및 Rubinius에는 단형 (IronRuby) 또는 다형 인라인 캐싱이 있으므로 대답은 분명히 아니오입니다.

최신 Ruby 구현은 이미 많은 최적화를 수행합니다. 예를 들어 특정 작업의 경우 Rubinius의 Hash클래스는 YARV보다 빠릅니다. 이제는 Rubinius의 Hash클래스가 100 % 순수 루비로 구현되고 YARV가 100 % 손으로 최적화 된 C로 구현 된다는 사실을 알기 전까지는 그렇게 들리지 않습니다 .

따라서 적어도 일부 경우에 Rubinius는 GCC보다 더 나은 코드를 생성 할 수 있습니다!

또는 이것은 Google이 V8 프로젝트에 넣은 리소스 문제입니다.

예. Google뿐만 아니라 V8 소스 코드의 계보는 25 년이되었습니다. V8을 작업하는 사람들은 Self VM (현재까지 가장 빠른 동적 OO 언어 실행 엔진 중 하나), 애니 모픽 스몰 토크 VM (지금까지 가장 빠른 스몰 토크 실행 엔진 중 하나), HotSpot을 만들었습니다. JVM (가장 빠른 JVM, 아마도 가장 빠른 VM 기간) 및 OOVM (가장 효율적인 Smalltalk VM 중 하나).

실제로 V8의 수석 개발자 인 Lars Bak은 그중 하나 와 몇 가지를 모두 연구했습니다.


답변

JavaScript 인터프리터를 고도로 최적화하려는 동기가 훨씬 더 많기 때문에 Mozilla, Google 및 Microsoft간에 많은 리소스가 포함되어 있습니다. 자바 스크립트는 (보통 참을성이없는) 사람이 기다리는 동안 실시간으로 다운로드, 파싱, 컴파일 및 실행해야하며, 사람이 상호 작용하는 동안 실행되어야하며, 통제되지 않은 클라이언트 쪽에서이를 수행해야합니다. 컴퓨터, 전화 또는 토스터 일 수있는 환경. 이러한 조건에서 효과적으로 실행하려면 효율적이어야합니다.

Python과 Ruby는 개발자 / 배포자가 제어하는 ​​환경에서 실행됩니다. 제한적인 요소가 일반적으로 메모리 나 디스크 I / O와 같은 것이며 실행 시간이 아닌 강력한 서버 또는 데스크탑 시스템. 또는 캐싱과 같은 비 엔진 최적화가 활용 될 수 있습니다. 이러한 언어의 경우 속도 최적화보다 언어 및 라이브러리 기능 세트에 초점을 맞추는 것이 더 합리적입니다.

이것의 부수적 인 장점은 Node.js와 같은 모든 애플리케이션에 재사용 할 수있는 두 개의 고성능 오픈 소스 JavaScript 엔진이 있다는 것입니다.


답변

그것의 좋은 부분은 커뮤니티와 관련이 있습니다. 파이썬과 루비는 대부분 기업 지원이 없습니다. 파이썬과 루비 풀 타임으로 일하는 사람은 아무도 없습니다 (특히 CPython이나 MRI에서 일하는 동안 항상 돈을받지 않습니다). 반면에 V8은 세계에서 가장 강력한 IT 회사의 지원을받습니다.

또한 V8 사람들에게 중요한 것은 인터프리터이기 때문에 V8이 더 빠를 수 있습니다. 통역 할 표준 라이브러리가없고 언어 디자인에 대한 염려가 없습니다. 그들은 단지 통역사를 작성합니다. 그게 다야.

지적 재산권 법과는 아무런 관련이 없습니다. 구글 직원들도 파이썬을 공동 개발하지도 않는다 (제작자는 다른 커미터들과 함께 일하지만 파이썬에서 돈을 지불하지는 않는다).

파이썬 속도에 대한 또 다른 장애물은 파이썬 3입니다.이 언어의 채택은 언어 개발자의 주요 관심사 인 것 같습니다. 다른 구현을 따라 잡을 때까지 새로운 언어 기능의 개발을 중단했습니다.

기술적 세부 사항에 관해서는 Ruby에 대해 많이 알지 못하지만 Python에는 최적화를 사용할 수있는 여러 곳이 있습니다 (Google 프로젝트 인 Unladen Swallow는 먼지를 물기 전에 구현하기 시작했습니다). 다음은 계획 한 최적화 중 일부입니다 . PyPy의 JIT가 CPython을 위해 구현되면 파이썬이 V8 속도를 얻는 것을 볼 수는 있지만 앞으로 몇 년 동안은 그럴 것 같지 않습니다 (현재 초점은 JIT가 아닌 Python 3 채택입니다).

많은 사람들은 루비와 파이썬이 각각의 전역 인터프리터 잠금 장치 를 제거함으로써 엄청난 이익을 얻을 수 있다고 생각합니다 .

또한 파이썬과 루비는 JS보다 훨씬 무거운 언어라는 것을 이해해야합니다. 표준 라이브러리, 언어 기능 및 구조에 훨씬 더 많은 기능을 제공합니다. 객체 지향의 클래스 시스템만으로도 많은 무게가 추가됩니다 (좋은 방법으로 생각합니다). 나는 거의 자바 스크립트를 Lua와 같이 내장되도록 설계된 언어라고 생각한다 (그리고 여러면에서 비슷하다). 루비와 파이썬은 훨씬 더 풍부한 기능을 가지고 있으며, 그 표현력은 대개 속도를 낼 것입니다.


답변

성능은 “충분히 빠름”만으로도 충분하다고 생각하는 핵심 Python 개발자의 주요 초점이 아닌 것 같습니다. 프로그래머가 생산성을 높이는 데 도움이되는 기능은 컴퓨터가 코드를 더 빨리 실행하는 데 도움이되는 기능보다 중요합니다.

그러나 표준 인터프리터와 호환되는 더 빠른 Python 인터프리터를 생성하기 위해 unladen-swallow 라는 (현재 버려진) Google 프로젝트가 있었습니다. PyPy 는 더 빠른 Python을 생성하려는 또 다른 프로젝트입니다. PyPy의 선구자 인 Psyco 도 있으며 전체 통역사를 변경하지 않고도 많은 Python 스크립트의 성능을 향상시킬 수 있으며 Cython 은 Python 구문과 매우 유사한 것을 사용하여 Python 용 고성능 C 라이브러리를 작성할 수 있습니다.


답변

오해의 소지가있는 질문. V8은 JavaScript의 JIT (Just-In-Time 컴파일러) 구현이며 가장 많이 사용되는 비 브라우저 구현 Node.js에서는 이벤트 루프를 중심으로 구성됩니다. CPython은 JIT가 아니며 이벤트가 아닙니다. 그러나 이들은 PyPy 프로젝트에서 가장 일반적으로 사용됩니다. CPython 2.7 (및 곧 3.0 이상) 호환 JIT입니다. 예를 들어 Tornado와 같은 이벤트 서버 라이브러리가 많이 있습니다. 실제 테스트는 Tornado와 Node.js를 실행하는 PyPy간에 존재하며 성능 차이는 미미합니다.


답변

방금이 질문에 부딪 쳤으며 언급되지 않은 성능 차이의 큰 기술적 이유가 있습니다. 파이썬에는 강력한 소프트웨어 확장 기능이있는 매우 큰 에코 시스템이 있지만 이러한 확장 기능의 대부분은 성능을 위해 C 또는 다른 저수준 언어로 작성되며 CPython API와 밀접한 관련이 있습니다.

CPython 구현 속도를 높이는 데 사용할 수있는 잘 알려진 많은 기술 (JIT, 최신 가비지 수집기 등)이 있지만 모두 API의 실질적인 변경이 필요하므로 프로세스의 대부분의 확장이 중단됩니다. CPython은 더 빠를 것이지만, 파이썬 (매우 광범위한 소프트웨어 스택)을 매력적으로 만드는 많은 것들이 손실 될 것입니다. 예를 들어, 몇 가지 더 빠른 Python 구현이 있지만 CPython에 비해 견인력이 거의 없습니다.


답변

디자인 우선 순위와 사용 사례 목표가 다르기 때문에 저는 믿습니다.

일반적으로 스크립트 (일명 동적) 언어의 기본 목적은 기본 함수 호출간에 “접착제”가되는 것입니다. 이러한 기본 기능은 a) 가장 중요하고 자주 사용되는 영역을 다루고 b) 가능한 한 효과적이어야합니다.

예제는 다음과 같습니다.
iOS Safari가 정지되도록하는 jQuery 정렬
정지는 선택자 별 호출을 과도하게 사용하여 발생합니다. 선택자 별 가져 오기가 기본 코드로 구현되고 효과적으로 그러한 문제는 발생하지 않습니다.

V8 데모에 자주 사용되는 레이트 레이서 데모를 고려하십시오. Python 세계에서는 Python이 기본 확장을위한 모든 기능을 제공하므로 기본 코드로 구현할 수 있습니다. 그러나 V8 영역 (클라이언트 측 샌드 박스)에서는 VM을 최대한 효율적으로 만드는 것 외에 다른 옵션이 없습니다. 따라서 유일한 옵션은 스크립트 코드를 사용하여 광선 추적 프로그램 구현을 참조하십시오.

서로 다른 우선 순위와 동기 부여.

Sciter 에서는 기본적으로 거의 완전한 jQurey 코어를 구현하여 테스트했습니다. ScIDE (HTML / CSS / Script로 제작 된 IDE) 와 같은 실제 작업에서 이러한 솔루션은 모든 VM 최적화보다 훨씬 잘 작동한다고 생각합니다.