복붙노트

다른 프로그래밍 언어로 쉽게 변환 할 수 있도록 코드에서 어떤 유형의 패턴을 적용 할 수 있습니까? [닫은]

PHP

다른 프로그래밍 언어로 쉽게 변환 할 수 있도록 코드에서 어떤 유형의 패턴을 적용 할 수 있습니까? [닫은]

한 프로그래밍 언어에서 다른 프로그래밍 언어로 코드를 변환하는 목표를 가진 부 프로젝트를 수행하려고합니다. 내가 시작하는 언어는 PHP와 파이썬 (파이썬에서 PHP로 시작하는 것이 더 쉬워야한다)이지만 이상적으로는 다른 언어를 (상대적으로) 쉽게 추가 할 수있을 것이다. 계획은 다음과 같습니다.

그런 다음 코드를 출력 할 수 있다고 생각합니다. 나는 완전한 번역이 필요하지 않다. 생성 된 코드를 검토하고 문제를 해결해야합니다. 이상적으로 번역자는 문제 번역을 표시해야합니다.

당신이 물어보기 전에 "도대체이게 무슨 지적이야?" 대답은 ... 재미있는 학습 경험이 될 것입니다. 이 문제를 덜 어렵게 만드는 방법에 대한 통찰력이 있다면 알려 주시기 바랍니다.

번역 작업을 수행하는 것보다 코드를 더 쉽게 번역 할 수 있도록 (예 : IoC, SOA) 코드를 적용 할 수있는 패턴의 유형을 파악하는 데 더 많은 관심이 있습니다.

해결법

  1. ==============================

    1.나는 컴퓨터 과학자들의 강력한 팀에 의해 지원 된 1995 년부터 범용 프로그램 조작 (특별한 경우 인 언어 번역으로)을 수행하는 도구 (DMS Software Reengineering Toolkit)를 구축 해왔다. DMS는 일반적인 구문 분석, AST 작성, 기호 테이블, 제어 및 데이터 흐름 분석, 변환 규칙 적용, 주석이있는 소스 텍스트 재생성 등을 제공하며 모두 컴퓨터 언어의 명시 적 정의로 매개 변수화됩니다.

    나는 컴퓨터 과학자들의 강력한 팀에 의해 지원 된 1995 년부터 범용 프로그램 조작 (특별한 경우 인 언어 번역으로)을 수행하는 도구 (DMS Software Reengineering Toolkit)를 구축 해왔다. DMS는 일반적인 구문 분석, AST 작성, 기호 테이블, 제어 및 데이터 흐름 분석, 변환 규칙 적용, 주석이있는 소스 텍스트 재생성 등을 제공하며 모두 컴퓨터 언어의 명시 적 정의로 매개 변수화됩니다.

    이 작업을 수행하는 데 필요한 기계류의 양은 매우 다양합니다 (특히 일반적인 언어로 여러 언어에 대해이 작업을 수행하려는 경우). 신뢰할 수없는 정의가있는 언어에 대한 신뢰할 수있는 구문 분석기가 필요합니다 (PHP는 완벽한 예입니다. ).

    언어 - 대 - 언어 번역기를 만들거나 시도하는 것에 대해 당신이 생각하는 것은 아무 문제가 없지만, 당신이 기대하는 것보다 실제 언어에 대해 훨씬 더 큰 과제를 발견 할 것입니다. 우리는 DMS에 단지 100 년을 투자하고 C + +와 같은 불쾌한 언어에 대해서는 "신뢰할 수있는"언어 정의 (PHP 용으로 작성한 것)를 포함하여 6-12 개월을 투자했습니다. 그것은 "학습 경험의 지옥"이 될 것입니다; 그것은 우리를위한 것입니다. (위의 웹 사이트에서 기술 논문 섹션을 찾아 흥미로운 학습을 시작할 수 있습니다.)

    사람들은 친숙한 일부 기술로 시작하여 일종의 일반화 된 기계를 만들기 위해 종종 노력합니다. (Python AST는 훌륭한 예입니다.) 좋은 소식은, 그 일의 일부가 완료된 것입니다. 나쁜 소식은 기계류에 수많은 가정이 내장되어 있다는 것입니다. 그 중 대부분은 다른 작업을 수행하기 위해 노력할 때까지 발견되지 않습니다. 이 시점에서 기계는 원래 그 기계가 수행 한 작업을 수행하고 있으며 실제로는 다른 작업을 수행하려는 시도에 실제로 저항 할 것입니다. (나는 PHP를 모델로하는 Python AST를 얻으려고 노력하는 것이 많은 즐거움이 될 것이라고 생각한다).

    제가 처음에 디엠에스를 설립하기 시작한 이유는 그러한 가정이 거의 구축되지 않은 기초를 세우는 것이 었습니다. 그것은 우리에게 두통을 줄 수있는 것들이 있습니다. 지금까지 블랙홀이 없습니다. (지난 15 년간 내 직무의 가장 어려운 부분은 그러한 가정이 들어오는 것을 막으려 고 시도하는 것입니다.)

    많은 사람들은 또한 구문 분석 할 수 있다면 (아마도 AST를 얻을 수 있다면), 복잡한 일을하는 도중에 있다고 생각하는 실수를 범합니다. 어려운 교훈 중 하나는 좋은 프로그램 분석 또는 변환을 수행하기 위해 기호 테이블과 흐름 분석이 필요하다는 것입니다. AST는 필요하지만 충분하지 않습니다. 이것이 Aho & Ullman의 컴파일러 서가 2 장에서 멈추지 않는 이유입니다. (OP는 AST를 넘어 추가 기계를 만들 계획이므로이 권리가 있습니다). 이 항목에 대한 자세한 내용은 구문 분석 후의 수명을 참조하십시오.

    "나는 완벽한 번역이 필요 없다"라는 말은 번거롭다. 약한 번역자가하는 일은 코드의 "쉬운"80 %를 변환하여 손으로 할 정도로 어려운 20 %를 남겨 둡니다. 변환하려는 응용 프로그램이 매우 작 으면 한 번만 변환하려는 경우 20 %는 정상입니다. 많은 응용 프로그램 (또는 시간 경과에 따른 사소한 변경 사항이있는 동일한 응용 프로그램)을 변환하려는 경우 좋지 않습니다. 100K SLOC를 변환하려고 시도하면 20 %는 이미 이해할 수없는 번역 된 프로그램의 80,000 행에 대한 컨텍스트에서 번역, 이해 및 수정하기 어려운 20,000 개의 원본 코드입니다. 그것은 엄청난 노력이 필요합니다. 백만 라인 수준에서 이것은 실제로 불가능합니다. 놀랍게도 자동화 된 툴을 불신하고 백만 라인 시스템을 직접 손으로 번역해야하는 사람들이 있는데, 그것은 훨씬 더 어려워 일반적으로 오랜 시간 지연, 높은 비용 및 종종 철저한 실패로 고통스럽게 찾아냅니다.

    대규모 시스템을 번역하기 위해 촬영해야하는 것은 90 % 이상의 전환율입니다. 그렇지 않으면 번역 활동의 수동 부분을 완료 할 수 없을 수도 있습니다.

    또 다른 핵심 고려 사항은 번역 할 코드의 크기입니다. 훌륭한 도구를 사용하더라도 작업자, 강건한 번역자를 구축하는 데 많은 에너지가 필요합니다. 간단한 코드 기반 (예 : 우리 경험에서 최대 약 100,000SLOC)에 대해 단순히 수동 변환을 수행하는 대신 번역기를 만드는 것이 섹시하고 시원한 것처럼 보이지만 경제학은 단순히이를 정당화하지 않습니다. 아무도이 답변을 좋아하지 않지만 코드의 10K SLOC 만 번역해야한다면 총알을 물고 그것을하는 것이 좋습니다. 그리고 네, 그것은 고통 스럽습니다.

    저는 도구가 매우 훌륭하다고 생각합니다 (그렇지만 저는 꽤 편향되어 있습니다). 좋은 번역가를 만드는 것은 여전히 ​​어렵습니다. 대략 1.5-2 년이 걸리고 도구를 사용하는 방법을 알고 있습니다. 차이점은 이러한 많은 기계 장치를 사용하면 우리가 실패하는 것보다 훨씬 더 자주 성공할 수 있다는 것입니다.

  2. ==============================

    2.필자의 대답은 Python을 구문 분석하여 Python을 다른 언어로 변환하는 특정 작업을 처리 할 것이고 Ira가 자신의 대답에서 잘 설명하는 상위 수준의 측면이 아닌 것입니다.

    필자의 대답은 Python을 구문 분석하여 Python을 다른 언어로 변환하는 특정 작업을 처리 할 것이고 Ira가 자신의 대답에서 잘 설명하는 상위 수준의 측면이 아닌 것입니다.

    즉, 파서 모듈을 사용하지 마십시오. 더 쉬운 방법이 있습니다.

    ast 모듈은 파이썬 2.6부터 사용 가능하며, 준비된 AST를 제공하므로 사용자의 요구에 훨씬 더 적합합니다. 필자는 작년에이 기사를 작성했지만 간단히 말해서 ast의 구문 분석 메소드를 사용하여 Python 소스 코드를 AST로 구문 분석합니다. 파서 모듈은 AST가 아닌 파스 트리를 제공합니다. 차이점에주의하십시오.

    자, 파이썬의 AST는 매우 상세하기 때문에, AST가 주어지면 프론트 엔드 작업은 그리 어렵지 않습니다. 나는 당신이 기능의 일부분을 아주 빨리 준비 할 수있는 간단한 프로토 타입을 가질 수 있다고 생각한다. 그러나 완전한 솔루션을 얻는 데는 언어의 의미가 다르기 때문에 더 많은 시간이 필요합니다. 언어의 간단한 하위 집합 (함수, 기본 유형 등)은 쉽게 변환 할 수 있지만 더 복잡한 계층에 도달하면 무언가의 핵심을 에뮬레이트하기 위해 중장비가 필요합니다. 예를 들어, PHP에 존재하지 않는 파이썬의 생성자와리스트 보완을 생각해보십시오.

    최종 팁 하나를 얻기 위해 Python 개발자가 Python 2 코드를 Python 3 코드로 변환하기 위해 만든 2to3 도구를 고려해보십시오. 프론트 엔드 방식으로, 파이썬을 무언가로 변환하는 데 필요한 대부분의 요소가 있습니다. 그러나 파이썬 2와 3의 코어가 비슷하기 때문에 에뮬레이션 기계가 필요하지 않습니다.

  3. ==============================

    3.특히 Joel의 인턴이 여름에 그 일을했다는 것을 고려할 때, 번역가를 쓰는 것은 불가능하지 않습니다.

    특히 Joel의 인턴이 여름에 그 일을했다는 것을 고려할 때, 번역가를 쓰는 것은 불가능하지 않습니다.

    하나의 언어를 원한다면 쉽습니다. 더 많은 일을하고 싶다면, 조금 어렵지만 너무 많이하지는 마십시오. 가장 어려운 부분은 완성 된 언어가 완전한 언어가 수행하는 다른 작업을 수행 할 수 있지만 내장 된 데이터 유형은 언어가 경이적인 것을 바꿀 수 있다는 것입니다.

    예를 들면 :

    word = 'This is not a word'
    print word[::-2]
    

    (C ++ 코드를 복제하는 데 많은 시간이 걸린다.

    그것은 조금은 제쳐두고, 나는 생각한다.

    언어 문법을 토대로 토크 나이저 / 파서를 작성한 적이 있습니까? 이 프로젝트의 주요 부분이기 때문에 그렇게하지 않는 방법을 배우는 것이 좋습니다. 내가 할 수있는 것은 기본적인 튜링 (Turing) 구문을 제안하는 것인데 파이썬 바이트 코드와 상당히 유사하다. 그런 다음 언어 문법 (아마도 BNF 사용)을 취하는 문법 분석기를 만들고 언어를 중간 언어로 컴파일합니다. 그렇다면 당신이하고 싶은 것은 그 반대로 - 문법에 따라 타겟 언어로 파서를 작성하십시오.

    내가보기에 가장 분명한 문제는 처음에는 무의미하게 비효율적 인 코드, 특히 Python과 같은 더 강력한 언어로 작성하는 것입니다.

    그러나 이런 식으로하면 출력을 최적화 할 수있는 방법을 찾아 낼 수 있습니다. 요약:

    * 강력 함으로서 이것은 네 줄을 필요로한다는 것을 의미합니다 :

    myinput = raw_input("Enter something: ")
    print myinput.replace('a', 'A')
    print sum(ord(c) for c in myinput)
    print myinput[::-1]
    

    저에게 4 줄에 그와 비슷한 것을 할 수있는 다른 언어를 보여주세요. 파이썬만큼 강력한 언어를 보여 드리겠습니다.

  4. ==============================

    4.귀찮게하지 말라는 해답이 몇 가지 있습니다. 그게 얼마나 도움이 되니? 너 배우고 싶어? 당신은 배울 수 있습니다. 이것은 편집입니다. 타겟 언어는 기계 코드가 아니고 다른 고급 언어입니다. 이것은 항상 수행됩니다.

    귀찮게하지 말라는 해답이 몇 가지 있습니다. 그게 얼마나 도움이 되니? 너 배우고 싶어? 당신은 배울 수 있습니다. 이것은 편집입니다. 타겟 언어는 기계 코드가 아니고 다른 고급 언어입니다. 이것은 항상 수행됩니다.

    시작하기가 상대적으로 쉬운 방법입니다. 먼저 http://sourceforge.net/projects/lime-php/ (PHP로 작업하기를 원할 경우) 또는 일부 예제 코드를 살펴보십시오. 다음으로 생성 한 파서에 일련의 정규 표현식과 피드 토큰을 사용하여 어휘 분석기를 작성할 수 있습니다. 의미 론적 액션은 코드를 다른 언어로 직접 출력하거나 마사지 및 트래버스하여 출력 코드를 생성 할 수있는 데이터 구조 (객체, 사람 생각)를 구축 할 수 있습니다.

    PHP와 Python은 많은면에서 서로 다른 언어이지만 다른 구문을 사용하기 때문에 운이 좋습니다. 어려운 부분은 문법 형식과 데이터 구조 사이의 의미 론적 차이를 극복하는 것입니다. 예를 들어, 파이썬에는리스트와 사전이 있지만, PHP에는 assoc 배열 만 있습니다.

    "학습자"접근법은 언어의 제한된 하위 집합 (예 : 인쇄문, 간단한 수학 및 변수 할당 등)에 대해 정상적으로 작동하는 항목을 만든 다음 점진적으로 제한을 제거하는 것입니다. 이것은 기본적으로 필드의 "큰"사람들이 한 일입니다.

    아, 그리고 파이썬에서 정적 유형을 가지고 있지 않기 때문에, 파이썬이하는 방식에 따라 숫자, 문자열 또는 객체를 추가하는 "python_add"와 같은 PHP 함수를 작성하고 의존하는 것이 가장 좋습니다.

    분명히, 당신이 그것을 시키면 이것은 훨씬 커질 수 있습니다.

  5. ==============================

    5.나는 파서 대신에 ast.parse를 사용하는 것과 관련하여 두 번째 @EliBendersky 관점을 사용하겠습니다. 나는 또한 그의 블로그를 복습하기를 당신에게 강력히 권합니다. 나는 파이썬 -> 자바 스크립트 변환기 (@https : //bitbucket.org/amirouche/pythonium)를하기 위해 ast.parse를 사용했다. 필자는 Pythonium 디자인을 다른 구현을 약간 검토하고 직접 시도했다. 나는 또한 시작한 https://github.com/PythonJS/PythonJS에서 Pythonium을 포크했다. 실제로는 완전히 다시 작성되었다. 전반적인 디자인은 PyPy 및 http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-89-1.pdf 용지에서 영감을 얻었습니다.

    나는 파서 대신에 ast.parse를 사용하는 것과 관련하여 두 번째 @EliBendersky 관점을 사용하겠습니다. 나는 또한 그의 블로그를 복습하기를 당신에게 강력히 권합니다. 나는 파이썬 -> 자바 스크립트 변환기 (@https : //bitbucket.org/amirouche/pythonium)를하기 위해 ast.parse를 사용했다. 필자는 Pythonium 디자인을 다른 구현을 약간 검토하고 직접 시도했다. 나는 또한 시작한 https://github.com/PythonJS/PythonJS에서 Pythonium을 포크했다. 실제로는 완전히 다시 작성되었다. 전반적인 디자인은 PyPy 및 http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-89-1.pdf 용지에서 영감을 얻었습니다.

    내가 처음 시도한 것부터 최선의 해결책까지, 파이 닐 륨 마케팅처럼 보일지라도 실제로는 그렇지 않다. (네티켓에 맞지 않는 것이 있으면 망설이지 말라.)

    Pyjamas #fail을 실행하는 데 성공한 적이 없으며 코드를 다시 읽지 않으려 고 시도했습니다. 그러나 내 마음 속에서 잠옷은 파이썬에서 자바 스크립트 번역이 아닌 API-> API 변환 (또는 프레임 워크 프레임 워크)을하고있었습니다. JavaScript 프레임 워크는 이미 페이지에있는 데이터 또는 서버의 데이터를 사용합니다. 파이썬 코드는 "배관 공사"일뿐입니다. 그 후 나는 잠옷이 실제로 진짜 파이썬인지 js 번역기인지를 발견했다.

    여전히 API-> API (또는 프레임 워크 -> 프레임 워크) 변환이 가능하다고 생각합니다. 기본적으로 Pythonium에서 저수준에서 수행하는 작업입니다. 아마 Pyjamas는 Pythonium과 같은 알고리즘을 사용합니다 ...

    그런 다음 Brython이 Skulpt와 같이 Javascript로 완벽하게 작성되었으며 컴파일 및 보풀이 필요하지 않음을 알았지 만 JavaScript로 작성되었습니다.

    이 프로젝트의 과정에서 작성된 첫 줄부터 PyPy에 대한 자바 스크립트 백엔드조차 알고있었습니다. 그래, 찾을 수 있다면 PyPy에서 직접 자바 스크립트로 파이썬 인터프리터를 생성 할 수있다. 사람들은 재앙이라고 말합니다. 나는 왜 어디서 읽었는지. 그러나 이유는 그들이 인터프리터 인 RPython을 구현하기 위해 사용하는 중간 언어가 C (그리고 아마도 asm)로 번역되도록 맞춤 설정된 Python의 서브 세트라는 이유라고 생각합니다. Ira Baxter는 여러분이 무언가를 만들 때 항상 가정을하고 PyPy : Python -> C 번역의 경우에 무엇을 할 것인가에 최선을 다할 수 있다고 가정합니다. 이러한 가정은 다른 컨텍스트와 관련이 없을 수도 있습니다. 그렇지 않으면 오버 헤드가 더 심해질 수 있습니다. 그렇지 않으면 직접 번역이 항상 더 나을 가능성이 높습니다.

    통역사를 파이썬으로 작성하게하는 것은 (아주) 좋은 생각처럼 들립니다. 그러나 퍼포먼스상의 이유 때문에 컴파일러에 더 관심이있었습니다. 실제로 파이썬을 자바 스크립트로 컴파일하는 것이 더 쉽습니다.

    필자는 PythonJS를 시작하여 Python의 하위 집합을 작성하여 JavaScript로 쉽게 변환 할 수있게했습니다. 처음에는 과거 경험으로 인해 OO 시스템을 구현하는 데 신경 쓰지 않았습니다. JavaScript로 변환하기 위해 얻은 Python의 하위 집합은 다음과 같습니다.

    이것은 많이 보이지만 실제로는 파이썬의 완전한 의미에 비해 매우 좁은 것 같습니다. Python 구문을 사용하는 JavaScript입니다.

    생성 된 JS는 완벽합니다. 오버 헤드가 없으며 추가 편집을 통해 성능면에서 개선 될 수 없습니다. 생성 된 코드를 향상시킬 수 있다면 Python 소스 파일에서도이 코드를 사용할 수 있습니다. 또한 컴파일러는 http://superherojs.com/이 작성한 .js에서 찾을 수있는 JS 트릭을 사용하지 않으므로 매우 읽기 쉽습니다.

    PythonJS의이 부분의 직접적인 자손은 Pythonium Veloce 모드이다. 전체 구현은 @ https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/veloce/veloce.py?at=master 793 SLOC + 다른 번역자와 공유 코드 SLOC 약 100 개를 찾을 수 있습니다.

    pystones.py의 수정 된 버전은 Veloce 모드 cf에서 번역 될 수 있습니다. https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pystone/?at=master

    기본 파이썬 -> 자바 스크립트 번역을 설정 한 후 전체 파이썬을 자바 스크립트로 변환하는 또 다른 경로를 선택했습니다. 목표 언어를 제외한 객체 지향 클래스 기반 코드를 수행하는 glib의 방식은 JS이므로 배열,지도 같은 객체 및 기타 많은 트릭에 액세스 할 수 있으며이 모든 부분은 Python으로 작성되었습니다. IIRC에는 Pythonium 변환기에 의해 작성된 자바 스크립트 코드가 없습니다. Python이 Python과 완벽하게 호환되는 것을 어렵게 만드는 부분은 단일 상속을 얻는 것이 어렵지 않습니다.

    이 부분은 https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/runtime.py?at=master에 포함되어 있습니다. Python Veloce와 호환되는 Python으로 작성되었습니다.

    실제 호환 변환기 인 https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/compliant.py?at=master는 직접 JavaScript 코드를 생성하지 않으며 가장 중요한 것은 ast-> ast 변환을 수행하지 않습니다. . 나는 cst보다 더 좋을지라도 ast와 함께 작업하는 것이 좋지 않더라도 ast-> ast와 ast를 시도했다. NodeTransformer와 더 중요한 것은 ast - ast를 할 필요가 없다.

    필자의 경우 Python ast를 사용하는 것은 성능 향상 일 것이다. 예를 들어, 코드와 관련된 블록을 생성하기 전에 블록의 내용을 검사해야하기 때문이다.

    그래서 번역의 각 단계마다 한 번씩 각 노드를 방문하지 않습니다.

    전체 프로세스는 다음과 같이 설명 할 수 있습니다.

    Python source code -> Python ast -> Python source code compatible with Veloce mode -> Python ast -> JavaScript source code
    

    파이썬 빌트인은 파이썬 코드 (!), IIRC로 작성되었으며, 부트 스트래핑 유형과 관련된 몇 가지 제한이 있습니다. 그러나 Pythonium을 호환 모드로 변환 할 수있는 모든 것에 액세스 할 수 있습니다. https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/builtins/?at=master에서 살펴보십시오.

    pythonium에서 생성 된 JS 코드를 읽을 수는 있지만 소스 맵이 크게 도움이됩니다.

    이 경험에 비춰볼 때 제가 드릴 수있는 귀중한 조언은 친절한 늙은 방귀입니다.

    Python Veloce 모드에서만 나는 아주 행복합니다! 그러나 그 과정에서 나는 정말로 내가 찾고 있던 것이 자바 스크립트에서 나와 다른 사람들을 해방시키는 것이지만 더 중요한 것은 안락한 방법으로 창조 할 수 있다는 것을 발견했다. 이로 인해 Scheme, DSL, Models, 그리고 결국 도메인 특정 모델 (http://dsmforum.org/ 참조)이되었습니다.

    Ira Baxter의 답변 :

    견적은 전혀 도움이되지 않습니다. PythonJS와 Pythonium 모두 6 개월 이상 자유 시간을 가졌습니다. 그래서 풀 타임에서 6 개월 더 기대할 수 있습니다. 나는 우리 모두가 엔터프라이즈 컨텍스트에서 100 년이라는 것이 무엇을 의미 할 수 있고 전혀 의미하지는 않을지를 알고 있다고 생각합니다.

    누군가가 무언가가 어렵거나 더 자주 불가능하다고 말하면, "불가능한 문제에 대한 해결책을 찾는 데는 시간이 걸립니다."그렇지 않으면 수학적 증거가 불가능한 것으로 입증 된 경우를 제외하고는 불가능한 것이 없다고 대답합니다 ...

    그것이 불가능하다고 증명되지 않으면 그것은 상상의 여지를 남겨 둡니다 :

    또는

    낙관적 사고 만이 아닙니다. 파이썬 -> 자바 스크립트를 시작했을 때 모두가 말하는 것은 불가능했습니다. 불가능한 PyPy. 너무 어려운 Metaclasses. 등등 ... 나는 PyPy를 Scheme-> C 페이퍼 (25 세)에 가져 오는 유일한 혁명이 자동 JIT 생성 (RPython 해석기로 작성된 기반 힌트라고 생각한다)이라고 생각한다.

    한 가지가 "어렵거나"불가능하다고 말하는 대부분의 사람들은 이유를 제시하지 않습니다. C + +를 구문 분석하기가 어렵습니까? 나는 그들이 여전히 (무료) C ++ 파서라는 것을 알고있다. 악마는 세부 사항에 있습니까? 나는 그것을 안다. 혼자 불가능하다는 것은 도움이되지 않는다고 말하는 것은 "도움이되지 않는다"는 것보다 낙담하고, 다른 사람들을 낙담시키려는 사람들도 있습니다. https://stackoverflow.com/questions/22621164/how-to-automatically-generate-a-parser-code-to-code-translator-from-a-corpus를 통해이 질문에 대해 들었습니다.

    당신에게 딱 맞는 것은 무엇입니까? 이것이 바로 다음 목표를 정의하고 전반적인 목표를 달성하는 방법입니다.

    적어도 완벽하지는 않지만 한 언어에서 다른 언어로 번역 할 수없는 패턴은 없습니다. 언어 대 언어 번역이 가능하기 때문에 먼저 이것을 목표로 삼는 것이 좋습니다. 이후, 나는 http://en.wikipedia.org/wiki/Graph_isomorphism_problem에 따르면 두 컴퓨터 언어 사이의 번역이 트리 또는 DAG 동형이 가능하다고 생각한다. 우리가 이미 그들이 둘 다 완수하고 있다는 것을 알고 있더라도, 그래서 ...

    API-> API 번역으로 시각화하는 프레임 워크 -> 프레임 워크는 생성 된 코드를 향상시키는 방법으로 계속 염두에 두어야 할 사항 일 수 있습니다. 예 : 매우 구체적인 구문으로 프롤로그하지만 여전히 파이썬에서 같은 그래프를 설명하여 계산과 같은 프롤로그를 할 수 있습니다 ... 파이썬 변환기에 프롤로그를 구현하는 경우 파이썬에서 통합을 구현하지는 않지만 C 라이브러리에서 와서 Python 문법 "은 파이썬 주의자에게 매우 읽기 쉽습니다. 결국 구문은 우리가 의미를 부여하는 "그림"일뿐입니다 (그래서 내가 스키마를 시작한 것입니다). 악의는 언어의 세부 사항에 있으며 구문에 대해 말하는 것이 아닙니다. 언어 getattribute 후크에서 사용되는 개념 (사용자 없이도 사용할 수 있음)은 꼬리 재귀 최적화와 같은 VM 기능을 다루는 것이 어려울 수 있습니다. 초기 프로그램이 꼬리 재귀를 사용하지 않더라도 대상 언어에 꼬리 재귀가 없더라도 여러분은 그것을 그린렛 / 이벤트 루프를 사용하여 에뮬레이션 할 수 있습니다.

    대상 및 소스 언어의 경우 다음을 찾으십시오.

    이것에서 나타날 것이다 :

    빠르고 느린 코드로 변환 될 내용을 알고있을 것입니다.

    stdlib 또는 라이브러리에 대한 질문도 있지만 명확한 대답은 없습니다. 이는 목표에 달려 있습니다.

    관용구 코드 또는 읽을 수있는 생성 된 코드는 또한 솔루션을 가지고 ...

    PHP와 같은 플랫폼을 대상으로하는 것은 느린 경로 또는 중요한 경로의 C 구현을 제공 할 수 있으므로 브라우저를 타겟팅하는 것보다 훨씬 쉽습니다.

    첫 번째 프로젝트가 Python을 PHP로 변환하고 있다고 가정 할 때, 필자가 아는 PHP3 하위 집합에 대해서는 veloce.py를 사용자 정의하는 것이 최선의 방법입니다. PHP를위한 veloce.py를 구현할 수 있다면 아마도 호환 모드를 실행할 수있을 것입니다 ... 또한 php_veloce.py로 생성 할 수있는 PHP의 하위 집합으로 PHP를 번역 할 수 있다면 PHP를 veloce.py가 소비 할 수있는 Python의 하위 집합으로, PHP를 자바 스크립트로 번역 할 수 있습니다. 그냥 ...

    또한 해당 라이브러리를 살펴볼 수도 있습니다.

    또한이 블로그 게시물 (및 설명)에 관심이있을 수 있습니다. https://www.rfk.id.au/blog/entry/pypy-js-poc-jit/

  6. ==============================

    6.Vala (C # 같은 언어)를 C로 변환하는 Vala 컴파일러를 살펴볼 수 있습니다.

    Vala (C # 같은 언어)를 C로 변환하는 Vala 컴파일러를 살펴볼 수 있습니다.

  7. from https://stackoverflow.com/questions/3455456/what-kinds-of-patterns-could-i-enforce-on-the-code-to-make-it-easier-to-translat by cc-by-sa and MIT license