브라우저의 Python : Brython, PyPy.js, Skulpt 및 Transcrypt 중에서 선택하는 방법은 무엇입니까?


89

이제 브라우저에서 Python을 코딩 할 수 있다는 사실을 알게되어 매우 기쁩니다. 다음은 주요 후보입니다 (간과 할 수있는 항목을 추가하십시오).

그러나 그들 중에서 선택하는 방법은 무엇입니까? 내가 볼 수있는 유일한 차이점은 Skulpt는 Python 2를 기반으로하는 반면 Brython은 Python 3을 기반으로한다는 것입니다.

참고 : 이것은 추천이나 의견에 대한 요청이 아닙니다. 나는 교육받은 선택에 정보를 제공 할 객관적인 사실을 찾고 있습니다.


6
무언가에 가장 적합한 라이브러리를 추천 해달라고 요청하는 것은 도움말에서 StackOverflow가 좋지 않다고 명시 적으로 설명하는 경우 중 하나입니다. 이 사이트의 형식이 아니라 좋은 질문입니다. 메일 링리스트 나 포럼과 같은 토론 기반을 원할 것입니다.
abarnert

2
Transcrypt ( transcrypt.org )는 python3.5 inc의 대규모 하위 집합에서 컴파일됩니다. 다중 상속, 빠르고 (호출 메모), 작고 읽기 쉬운 코드 생성, 다중 레벨 소스 맵 지원 및 조정없이 모든 JS 라이브러리를 사용할 수 있습니다. 면책 조항 : 내가 썼습니다.
Jacques de Hooge

1
안녕하세요 fzzylogic, 태그를 추가 했으므로 이제 사람들이 사용하여 질문 할 수 있습니다. 브라우저에서 Python을 사용하려는 경우 검색 할 가능성이 가장 적기 때문에 JS 태그를이 태그로 대체했습니다.
Jacques de Hooge

1
초보자를위한 Transcrypt에 대한 일종의 튜토리얼을 작성했습니다. github.com/bunkahle/Transcrypt-Examples/blob/master/alerts/…github.com/bunkahle/Transcrypt-Examples/blob/master/cookies/…
bunkus

1
27 개의 upvotes를 가진 dstromberg의 삭제 된 답변에는 멋진 비교 링크가 있습니다. stromberg.dnsalias.org/~strombrg/pybrowser/python-browser.html
Cees Timmerman

답변:


26

브라우저에서 Python을 실행 하는 것은 Brython, Skulpt, PyPy.js, Transcrypt, Pyodide, Batavia 를 비교하는 정말 훌륭하고 최신 (2019 년 기준) 기사입니다 . 나는 그것을 읽는 것이 좋습니다.

다음 그림에서 좋은 요약을 볼 수 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력


61

다음은 Brython 대 Transcrypt (2016 년 7 월, OP에 의해이 질문에 대한 옵션으로 Transcrypt가 추가 된 이후)에 대한 정보이며, 몇 달 전에 Brython과 함께 프로젝트를 시작하고 Transcrypt로 이동하여 수집했습니다 (지난주에 이동 완료). 나는 Brython과 Transcrypt를 좋아하고 둘 다에 대한 용도를 볼 수 있습니다.

이것에 익숙하지 않은 사람들을 위해, Brython과 Transcrypt는 자바 스크립트에 'transpile'python 입력을 둘 다 (편집 : Brython을 '브라우저를위한 Python 구현'으로 보는 것이 더 낫습니다. 왜냐하면 그것은 독립형 자바 스크립트를 생성하지 않기 때문입니다). 둘 다 Python 3 구문이 필요합니다. Brython에는 상당한 수의 Python 표준 라이브러리가 포함되어 있으며 일부는 웹 관련 작업을 처리하기 위해 자체 소유 한 반면 Transcrypt는 대부분이를 피하고 대신 Javascript 라이브러리 사용을 제안합니다.

Brython ( Github)는 브라우저에서 변환 할 수 있습니다. 그래서 당신은 파이썬으로 작성하고 brython.js 엔진은 페이지가로드 될 때 즉시 자바 스크립트로 변환합니다. 이것은 정말 편리하고 생각보다 훨씬 빠릅니다. 그러나 페이지에 포함해야하는 brython.js 엔진은 약 500Kb입니다. 또한 Brython이 XHR 요청으로 별도의 .js 파일을 가져와 처리하는 표준 라이브러리를 가져 오는 문제도 있습니다. 일부 libs는 이미 brython.js로 컴파일되어 있으므로 모든 가져 오기가 새 파일을 가져 오는 것은 아니지만 많은 가져 오기를 사용하면 상황이 느려질 수 있습니다. 그러나이를 해결하는 방법이 있습니다. 내가 한 일은 브라우저 개발 도구의 네트워크 탭을 확인하여 페이지가로드 될 때 어떤 파일이 가져 왔는지 확인한 다음 Brython src 폴더의 복사본에서 내 프로젝트에서 사용하지 않는 모든 파일을 삭제했습니다. 사용 가능한 모든 라이브러리를 html에서 링크해야하는 py_VFS.js라는 하나의 파일로 컴파일하는 Brython에 포함 된 스크립트 (Brython / www / scripts / make_VFS.py에있는 것 같습니다)를 실행합니다. 일반적으로 2MB 이상의 거대한 파일이 생성되지만 사용하지 않는 파일을 삭제하면 매우 작을 수 있습니다. 이렇게하면 brython.js, py_VFS.js 및 Python 코드 만 가져와야하며 추가 XHR 요청이 필요하지 않습니다.

반면 Transcrypt ( Github )는 파이썬 3 패키지 로 배포됩니다.수동으로 사용하거나 도구 체인에 연결하여 미리 파이썬을 자바 스크립트로 컴파일 할 수 있습니다. 따라서 Transcrypt를 사용하면 Python으로 작성하고 Python에 대해 transcrypt를 실행하면 프로젝트에서 연결할 수있는 자바 스크립트를 뱉어냅니다. 출력에 대한 일부 제어를 제공한다는 점에서도 기존 컴파일러와 비슷합니다. 예를 들어, ES6 또는 ES5로 컴파일하도록 선택하거나 소스 맵을 출력하도록 요청할 수 있습니다 (디버깅하는 동안 브라우저가 생성 된 자바 스크립트 코드의 내부에있는 해당 Python 코드로 직접 이동합니다.) Transcrypt의 자바 스크립트 출력은 매우 간결합니다 ( 또는 다른 말로하면 예쁘고 간결합니다). 제 경우에는 150kB의 파이썬이 165kB의 축소되지 않은 ES5 자바 스크립트로 변환됩니다. 비교하자면 내 프로젝트의 Brython 버전은 변환 후 약 800Kb를 사용했습니다.

그러나 Transcrypts 간결함의 이점을 얻으려면 문서를 조금 (정말 약간만) 읽어야합니다. 예를 들어 Transcrypt를 사용하면 dict, set 및 list와 같은 데이터 구조에 대한 Python의 '진실성'이 기본적으로 활성화되지 않으며 유형 검사와 관련된 잠재적 인 성능 문제로 인해이를 전역 적으로 활성화하는 것은 권장되지 않습니다. 명확성을 위해 : CPython에서 빈 dict, set 또는 list는 진리 값 False를 갖지만 Javascript에서는 'true'로 간주됩니다 .. 예 :

myList = []
if myList:    # False in CPython bcs it's empty, true in javascript bcs it exists
    # do some things.

이 문제를 해결하는 방법에는 세 가지 이상이 있습니다.

  • python을 javascript로 변환 할 때 -t 플래그를 사용하십시오.
  • 코드 내에서 __pragma__(tconv)또는을 사용 __pragma__(notconv)하여 transcrypt 컴파일러에 로컬에서 Python과 유사한 진리 값으로의 자동 변환을 켜도록 지시하십시오.
  • 진실 값을 확인하는 대신 len (myList)> 0을 확인하여 문제를 완전히 피하십시오 ... 아마도 대부분의 상황에서 괜찮을 것입니다.

맞아요, 그래서 제 프로젝트가 점점 커져서 성능 향상을 위해 미리 컴파일하고 싶었지만 Brython으로 그렇게하기가 어려웠습니다. (기술적으로는 가능하지만 온라인 편집기 를 사용 하고 자바 스크립트 버튼을 클릭하여 출력). 나는 그것을하고 project.html에서 생성 된 자바 스크립트에 연결했지만 어떤 이유로 작동하지 않았습니다. 또한 Brython의 오류 메시지를 이해하기 어렵 기 때문에이 단계가 실패한 후 어디에서 시작해야할지 몰랐습니다. 또한 출력 된 코드의 큰 크기와 brython 엔진의 크기가 나를 괴롭히기 시작했습니다. 그래서 저는 처음에는 더 높은 등급으로 보였던 Transcrypt를 자세히 살펴보기로 결정했습니다. 왜냐하면 즉시 시작하는 방법을 알려주는 멍청한 지침을 선호하기 때문입니다 (이후 추가되었습니다).

Python3.5를 설치 한 후 설정하는 주요 사항은 다음과 같습니다.

  1. venv (각 프로젝트에 더 적은 공간을 사용하는 virtualenv의 새로운 내장 버전과 비슷 함)를 사용하여 python3.5 프로젝트 폴더를 설정합니다 (입력 : python3.5 -m venv foldername- 3.5의 패키지 문제가있는 우분투 해결 방법) ). 이것은 무엇보다도 bin 하위 폴더와 함께 'foldername'을 만듭니다.
  2. pip ( 'foldername / bin / pip install transcrypt')로 Transcrypt python 패키지를 설치하여 foldername / lib / python3.5 / site-packages / transcrypt에 설치합니다.
  3. activate매번 foldername / bin / python3.5의 전체 경로를 입력 할 필요가없는 경우 현재 터미널. 'source foldername / bin / activate'를 입력하여 활성화합니다.
  4. 코드 작성을 시작하고 테스트를 위해 자바 스크립트로 컴파일합니다. 코드를 작성한 폴더 내에서 컴파일하십시오. 예를 들어, 나는 foldername / www / project를 사용했습니다. 따라서 해당 폴더에 CD를 넣고 'transcrypt -b your_python_script.py'를 실행하십시오. 그러면 출력이라는 하위 폴더에 저장 __javascript__됩니다. 그런 다음 HTML에서 출력 된 javascript에 연결할 수 있습니다.

이동하는 주요 문제

나는 다소 간단한 요구 사항이 있으므로 귀하의 마일리지가 다를 수 있습니다.

  • brython 또는 python 표준 libs를 javascript libs로 대체해야합니다. 예를 들어 'import json'은 Brython에서 제공하지만 Transcrypt에서는 javascript lib를 사용하거나 Python 코드에서 직접 JSON.parse / JSON.stringify를 사용할 수 있습니다. Python 코드에 직접 축소 된 버전의 자바 스크립트 라이브러리를 포함하려면 다음 형식을 사용하세요 (세 개의 따옴표에 유의하세요).

    __pragma__ ('js', '{}', '''
    // javascript code
    ''')
    
  • Brython의 html 특정 기능은 Transcrypt에서 분명히 작동하지 않습니다. 일반적인 자바 스크립트 방식을 사용하세요. 예 : 1) Brython에서 'document ['id ']'를 사용하여 특정 HTML 태그를 참조했을 수 있지만 Transcrypt를 사용하면 'document.getElementById ('id ')를 사용합니다. 그것은 자바 스크립트에서). 2) 'del nodeName'(Brython 함수 인 BC)으로 노드를 삭제할 수 없습니다. 'node.parentNode.removeChild (node)'와 같은 것을 사용하십시오. 3) brython의 모든 DOM 함수를 자바 스크립트 대안으로 대체합니다. 예 : class_name = className; text = textContent; html = innerHTML; 부모 = parentNode; children = childNodes 등. 일부 오래된 브라우저에서 요구하는 대안을 포함하는 것이 필요한 경우이를위한 javascript 라이브러리가 있습니다. 4) Brython의 set_timeout은 javascripts setTimeout으로 대체됩니다. 5) BR ()과 같은 Brython의 html 태그는 일반적인 자바 스크립트 방식을 사용하여 교체해야하며 <= dom 조작 구문을 사용한 모든 위치를 다시 실행해야합니다. 일반 텍스트 마크 업을 innerHTML로 삽입하거나 javascript 구문을 사용하여 요소를 만든 다음 일반 javascript DOM 구문을 사용하여 첨부합니다. 또한 체크 박스의 경우 brython이 "if 체크 박스 = 'checked':"를 사용하지만 Transcrypt는 "if 체크 박스 :"에 만족합니다 .. 일반 텍스트 마크 업을 innerHTML로 삽입하거나 javascript 구문을 사용하여 요소를 만든 다음 일반 javascript DOM 구문을 사용하여 첨부합니다. 또한 체크 박스의 경우 brython이 "if 체크 박스 = 'checked':"를 사용하지만 Transcrypt는 "if 체크 박스 :"에 만족합니다. 일반 텍스트 마크 업을 innerHTML로 삽입하거나 javascript 구문을 사용하여 요소를 만든 다음 일반 javascript DOM 구문을 사용하여 첨부합니다. 또한 체크 박스의 경우 brython이 "if 체크 박스 = 'checked':"를 사용하지만 Transcrypt는 "if 체크 박스 :"에 만족합니다.

  • 나는 지난주에 Transcrypt가 몇 가지 사소한 것 (필러로 대체하기에 충분히 쉬웠지만)에 대한 지원이 없었던 2700 라인 프로젝트 이동을 마쳤으며, 이들은 1) str.lower, str.split (str. 분할이 존재하지만 파이썬 버전과 다르게 작동하는 자바 스크립트 분할 인 것 같습니다. str, int 및 float에서는 작동하지 않으며 dict, list 및 set에서만 작동합니다. 4) Brython과의 또 다른 차이점은 내가 dict의 JSON 표현을 가져 오면 'myDict = dict (data)'를 사용하여 그렇게해야하는 반면 brython은 'myDict = data'에 만족한다는 것입니다. 그러나 그것은 Brython의 json.loads의 무언가와 관련이있을 수 있으며, JSON.parse로 직접 대체했습니다.__pragma__('opov')로컬의 경우) 오버로드 된 형식을 사용하여 집합 연산과 같은 작업을 수행 할 수 없지만 해당 함수를 사용해야합니다. 예

    a = set([1, 2, 3])
    b = set([3, 4, 5])
    a.difference(b)             # is used instead of a - b
    a.union(b)                  # used instead of a | b
    a.intersection(b)           # used instead of a & b
    a.symmetric_difference(b)   # used instead of a ^ b
    

6) 또한 기본적으로 'for i in dict :'를 사용하여 dict를 반복 할 수 없습니다 (cmd line -i 또는 __pragma__('iconv')).하지만 keys () 멤버를 사용하여 활성화하지 않아도됩니다. 예 :

for key, value in dict.items():
    # do things for each key and value..

요약하자면

  • 나는 Brython을 좋아합니다. 왜냐하면 그것을 사용하고 코드를 테스트하는 것이 쉽기 때문입니다 (F5 만). 대부분의 표준 lib가 있기 때문에 진정한 파이썬에 더 가깝습니다. 브라우저에 트랜스 파일 엔진 (편집 : 또는 파이썬 VM으로 볼 수 있음)을 포함해야하는 것과 큰 출력 자바 스크립트 크기를 포함해야하는 것을 싫어합니다. 작업을 계속해야한다면 (하지만 여전히 Brython을 사용), brython 메서드에 너무 많이 의존하는 대신 자바 스크립트 메서드를 사용하여 brython에서 DOM을 조작했을 것입니다. 내 요구가 변경되면 다른 트랜스 파일러에게.

  • 저는 Transcrypt를 좋아합니다. 왜냐하면 출력 된 자바 스크립트가 실제로 '가볍고 비열한'것이고 브라우저 측에서로드하는 유일한 것은 파이썬 코드와 크기가 비슷한 생성 된 자바 스크립트 코드이기 때문입니다. 또한 소스 맵을 지원하고 출력 된 자바 스크립트에 대한 제어 수단을 제공하기 때문입니다. 그리고 그것을 사용하여 최적화에 대해 꽤 배웠습니다.

누군가가 자신의 특정 프로젝트에 어떤 것이 좋은지 알 수 있기를 바랍니다.


1
Brython이 트랜스 파일러라고 확신합니까? JavaScript에서 Python 인터프리터를 구현한다고 확신합니다. 트랜스 파일러라면 앱과 함께 번들링 할 필요가 없습니다.
Carl Smith

@Carl Smith 흥미로운 점은 그렇게 생각하지 않았습니다. Brython은 파이썬 코드를 자바 스크립트로 변환하지만 자바 스크립트에는 표준 바이트 코드가 없기 때문에 생성 된 자바 스크립트를 Brython 엔진의 '바이트 코드'로 볼 수 있습니다.
fzzylogic

1
당신은 나를 오해했습니다. 나는 Brython이 Python을 JavaScript로 전혀 변환하지 않는다고 생각합니다. C 대신 JS로 Python 인터프리터를 구현합니다. GitHub README에 따르면 "Brython (브라우저 Python)은 DOM 요소 및 이벤트에 대한 인터페이스를 사용하여 브라우저에서 실행되는 Python 3의 구현입니다."
칼 스미스

4
@jsbueno 현재 사용 가능한 시드, randint, 선택 및 임의의 시작점을 의미합니다. 실제로 우리는 누군가가 그것을 집어 들고 완성하기를 바랍니다. 우리 목록에서 높은 것이었던 re에서했던 것처럼. 그렇게 어렵지 않아야합니다. 도서관의 양은 증가했지만 기부를 환영합니다. 악센트는 JS 라이브러리를 사용하는 데 유지되지만 개인적으로 더 많은 standardlib를 환영합니다.
Jacques de Hooge

1
좋은 개요. 전반적으로 주요 차이점은 Brython의 목표는 실제로 브라우저에서 Python을 사용할 수 있도록하는 것이지만 Transcrypt의 목표는 Python 구문을 사용하여 JavaScript를 작성할 수 있도록하는 것입니다. 이것은 Transcrypt가 Python 의미 체계에서 기본 수준에서 벗어나는 진실성 차이와 같은 일을 기꺼이 수행하고 JavaScript 라이브러리를 활용하는 코드를 목표로하는 것으로 보인다는 것을 의미합니다. Brython은 Python에서 모든 작업을 수행 할 것이라는 생각으로 가능한 한 가깝게 Python을 복제하려고합니다.
BrenBarn

12

나는 pypyjs뿐만 아니라 skulpt를 사용하고 헌신했습니다. 그리고 그것들은 당신이 나에게 물어 보면 어떤 비교도 의문의 여지가 없다는 세 가지 모두 매우 다릅니다.

그것은 당신이 찾고있는 것에 달려 있습니다.

PyPyJS

pypyjs는 전체 pypy 가상 머신을 포함하는 12MB 자바 스크립트 파일입니다. 따라서 파이썬 구현의 완성도를 원한다면 이것은 당신의 아기입니다. 정말 잘 작동하는 자바 스크립트 브리지가 있지만 자바 스크립트 웹 사이트 코드를 파이썬으로 작성하기위한 실행 가능한 옵션은 아닙니다. 그러나 그것은 당신을 허용 할 것 import compiler입니다.

emscripten으로 빌드되었으며 pystone 벤치 마크를 실행할 때 CPython 보다 빠릅니다 .

여기 슬라이드가 pypyjs에 대한 짧은 이야기를했습니다 .

Skulpt

교육 도구 (또는 시간이 지남에 따라 진화)이며, 파이썬을 cpython 컴파일러를 매우 밀접하게 에뮬레이트하는 상태 머신으로 컴파일합니다. 핵심은 자바 스크립트로 파이썬 컴파일러를 손으로 구현 한 것입니다. 다음을 수행 할 수있는 비동기 실행을 허용합니다.

while (True):
    print "hi"

브라우저를 잠그지 않고.

Skulpt는 비동기식 연속을 지원하는 유일한 제품으로, 발생하는 비동기 작업을 해결하는 동안 Python 실행을 일시 중지 할 수 있습니다. 이 작품 만들기 :

from time import sleep
sleep(1)

Skulpt는 pystone을 비교할 때 CPython 속도의 약 10 분의 1 속도로 실행됩니다.

Brython

나는 이것에 대해 적어도 @ olemis-lang이 이것을 확장 할 수 있다는 것을 알고 있습니다. 그러나 Brython이 py3이고 다른 것은 py2라는 명백한 차이점 옆에 있습니다. Brython은 또한 트랜스 파일러입니다.

Brython은 공식적으로 하드웨어 기능이기 때문에 time.clock이 구현되지 않았기 때문에 pystone 벤치 마크를 실행하지 않습니다.


PyPyJS 개발자는 개발을 중단했습니다. 또한 Python3 지원은 아직 완료되지 않은 것 같습니다. github.com/pypyjs/pypyjs/issues/213github.com/pypyjs/pypyjs/issues/172
Roland Pihlakas

그것은 유지되지 않지만 그것이 작동하지 않는다는 것을 의미하지는 않습니다. :) trinket.io/pypyjs 그러나이 공간을 지켜보십시오. 또한 직접 수행하지 않는 한 오픈 소스가 유지 될 것으로 기대할 수 없습니다. :)
albertjan 2018

Trinket with Python 2는 브라우저 측에서 실행되는 반면 Trinket with Python 3 (및 numpy)은 서버 측에서 실행됩니다. 코드가 서버 측에서 실행 되더라도 브라우저에서 시각적 플로팅을 렌더링 할 수 있다는 것은 여전히 ​​인상적입니다. 그들이 어떻게 그것을 달성했는지 아는 것은 매우 유용 할 것입니다. 아이디어가 있습니까?
Roland Pihlakas

Trinket은 RapydScript-NG를 사용하여 Python을 JavaScript로 변환하고 WebGL을 사용하여 3D 애니메이션을 생성하는 GlowScript 라이브러리 (glowscript.org)를 사용합니다. 트랜스 파일과 실행은 모두 브라우저에서 수행됩니다. 다음은 GlowScript 아키텍처의 개요입니다. vpython.org/contents/VPythonArchitecture.pdf
user1114907

11

https://brythonista.wordpress.com/2015/03/28/comparing-the-speed-of-cpython-brython-skulpt-and-pypy-js/

이 페이지는 세 후보를 벤치마킹합니다. Brython이 확실한 승자로 부상했습니다.

SO가 이런 종류의 질문에 좋지 않다고 설명하는 '도움'에도 불구하고이 경우 간결한 답변이 가능한 것으로 보입니다.

사람들이 너무 성급한 것일까 요?


5
지난번에 brython을 확인한 것은 파이썬의 완전한 구현이 아닙니다. 또한 "최상의"또는 "이 중에서 선택하는 방법"을 측정하는 방법도 명확하지 않습니다. 가장 빠른? Python은 대부분 속도에 사용되지 않습니다. 대부분의 기능 / 라이브러리를 구현합니까? 브라우저에서 사용하지 않을 모듈이있을 수 있습니다. 일반적인 작업 (트리 조작)에 대한 추가 (cpython과 호환되지 않음) 구문이 플러스 또는 마이너스입니까? 벤치 마크에서의 성과가 그다지 의미가 없다고 생각합니다.
syntonym

성능 벤치 마크는 약 20-40 % 더 빠르지 않고 일부 작업에서 약 1000 % 향상 될 때 중요한 요소입니다. Brython은 자바 스크립트보다 가벼운 레이어이므로 다릅니다. 또한이 프로젝트는 요즘 Python3과 매우 호환됩니다. 예를 들어 큰 정수 처리를 위해 필요에 따라 잘 알려진 잘 알려진 몇 가지 자바 스크립트 라이브러리를 프로젝트에 통합하는 것입니다.
jsbueno

7

우선 저는 Brython 커미터입니다. 그럼에도 불구하고 객관적인 평가를 위해 가능한 한 공정하게 노력하겠습니다.

마지막으로 사용했을 때 Skulpt는 생성기 표현식과 같은 기능을 지원하지 않았습니다. Brython과 PyPy.js는 그렇게하므로 IMHO 기능 수준에서 나중이 우월합니다.

Brython (현재)은 아직 작업 중입니다. 일부 모듈은 가져올 수 없습니다 (예 : xml.ElementTree ). 그럼에도 불구하고 표준과의 완전한 호환성을 달성 함에도 불구하고 전체 CPython 테스트 스위트를 실행하기 위해 노력하고 있기 때문에 이러한 상황은 변화하기 시작했습니다 (적어도 말이되는 경우).

Brython은 모듈 가져 오기 속도를 높이기 위해 .vfs.js도 지원합니다.

PyPy.js에는 PyPy (JIT 컴파일, 잘 테스트 됨, ...)에 의해 구동된다는 사실에서 직설적으로 따르는 여러 특성이 있지만 브라우저에서 실행하는 데 적합한 지 확실하지 않습니다. 이것은 프로젝트가 발전함에 따라 변경 될 수 있습니다.

TODO : 신뢰할 수있는 벤치 마크로 내 대답을 보완하려고 노력할 것입니다.


8
skulpt 커미터로서 생성기 표현식을 지원한다고 말할 수 있습니다. :)
albertjan

6

여기에 언급되지 않은 것은 RapydScript 또는 RapydScript-NG입니다. GlowScript VPython (glowscript.org)에서 사용되는 매우 효율적인 JavaScript 코드를 생성합니다. 나는 알렉스 Tsepkov (원래 RapydScript 사용하는 데 사용 https://github.com/atsepkov/RapydScript )를하지만, 최근 Kovid 고얄의 RapydScript-NG (전환 https://github.com/kovidgoyal/rapydscript-ng ). 최근에 CPython, RapydScript 및 Brython에서 pystone 벤치 마크를 실행했으며 여기에서 결과를 볼 수 있습니다.

https://groups.google.com/forum/?fromgroups&hl=ko#!topic/brython/20hAC9L3ayE


결과를 요약 해 주시겠습니까?
제이

1
6 월 18 일 Pierre Quentel은 "좋아요, 성능 문제가 있지만 상황이 좋아지고 있습니다. 현재 작업중인 릴리스 (3.2.7)는 3.2.6보다 빠르게 파이 스톤 테스트 2.5를 실행합니다. 아직 15입니다. CPython보다 느리지 만 초기에는 수천 배 더 느 렸습니다. "
user1114907 jul.

1
나는 rapydscript-ng 트랜스 파일러를 사용하여 pystones 벤치 마크를 실행했고, 내 Windows 10 컴퓨터에서 CPython의 5 배 속도, 600000 pystones / sec 대 125000 pystones / sec를 벤치 마크했습니다. rapydscript-ng에 대한 CPython 속도의 약 5 배는 GlowScript VPython에서 사용되는 연산자 오버로딩을 끄면 CPython의 약 7 배로 증가합니다. 예를 들어 a + b는 a [ "+"] (b)로 변환됩니다. ; 이는 3D 벡터를 쉽게 조작 할 수 있도록하기위한 것입니다.
user1114907 jul.

나는 Quentel의 논평이 Brython을 언급했다고 말하지 않았다.
user1114907 jul.

2
더 이상 벤치 마크를 실행하지 않았습니다. RapydScript 개발이 중단되었을 때 처음에는 RapydScript-NG로 전환했습니다. 그 후 Alex Tsepkov가 개발로 돌아 왔을 때 나는 그와 교환을했고, 그는 심지어 그는 Kovid Goyal의 NG 프로젝트가 glowscript.org에서 저의 특정 용도에 더 적합하다는 데 동의했습니다. Tsepkov는 웹 프로그래머를 위해 혼합 된 Python / JavaScript 언어를 구축하고자하는 반면, Goyal은 대략적인 표준 Python을 강조하고 브라우저에서 컴파일 할 수있는 좋은 지원을 제공합니다. 두 가지 모두 제 작업의 핵심입니다.
user1114907 jul.

4

아무도 언급하지 않았기 때문에 사전 컴파일 된 Python 바이트 코드를 실행하기 위해 Python 가상 머신을 구현하는 Batavia 를 언급 할 가치가 있다고 생각했습니다 .

방금 시도해 보았지만 흥미로운 개념이지만 문서가 거의 없기 때문에 아직 초기 단계입니다.

결국 그것은 당신이하려는 일에 달려 있습니다. Transcrypt 는 좀 더 실용적이고 성능이 뛰어나고 최근에 출시 / 유지 관리 되었기 때문에 살펴본 후 선택했습니다 .


Skulpt는 여전히 활발하게 유지 관리되고 꽤 많은 사용자 기반 (cousera에 대한 몇 가지 매우 많은 교육 과정)에 의해 사용되며 transcrypt만큼 릴리스를 얻지 못할 수도 있지만 더 많은 유지 관리자, 제품을 구축 한 유지 관리자가 있습니다. 그래서 그들은 장기적으로 그 안에 있습니다. :)
albertjan

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.