가상 머신의 앵무시

Parrot virtual machine
가상 머신의 앵무시
Parrot Foundation logo
최종 릴리즈
8.1.0 / 2016년 2월 16일, 6년 전(2016-02-16)[1]
저장소
기입처C
운영 체제크로스 플랫폼
후계자MoarVM(Raku용)
유형가상 머신
면허증.Artistic License 2.0
웹 사이트www.parrot.org Edit this at Wikidata

Parrow는 동적 언어를 효율적으로 실행하도록 설계된 레지스터 기반 프로세스 가상 머신입니다.Parrow 어셈블리 언어 및 Parrow 중간 표현(PIR, 중간 언어)을 Parrow 바이트 코드로 컴파일하여 실행할 수 있습니다.Parrow는 무료 오픈 소스 [2]소프트웨어입니다.

Parrow는 Perl 커뮤니티에 의해 시작되었으며 오픈 소스자유 소프트웨어 커뮤니티의 도움을 받아 개발되었습니다.그 결과 Perl(Artistic License 2.0)과의 라이선스 호환성, 다양한 시스템 간의 플랫폼 호환성, 최신 프로세서 간의 프로세서 아키텍처 호환성, 실행 속도, 소형(플랫폼에 따라 약 70만) 및 Raku 및 othe의 다양한 요구에 대응할 수 있는 유연성에 중점을 두고 있습니다.r 현대의 역동적인 언어.

개발을 위한 안정적인 [3]애플리케이션 프로그래밍 인터페이스(API)를 갖춘 버전 1.0은 2009년 3월 17일에 출시되었습니다.마지막 버전은 릴리즈 8.1.0 "Andean Paraket"[1]입니다.Parrow는 2021년 8월 MoarVM에 의해 메인 사용(라쿠)에서 대체되어 다른 지원 [4]언어에서는 메인스트림 VM이 되지 않게 된 후 공식적으로 단종되었습니다.

역사

Parrow라는 이름은 Parrow라는 이름의 가상의 언어를 발표한 만우절 농담에서 유래했다. 이것은 Python과 Perl[5][6]통합할 것이다.이 이름은 나중에 Raku, Python 및 기타 프로그래밍 언어를 지원하는 것을 목표로 하는 이 프로젝트(처음에는 Raku 개발 노력의 일부)에 의해 채택되었습니다.여러 언어가 Parrow 가상 [7]시스템에서 실행되도록 포팅되고 있습니다.

앵무새 재단[8]2014년에 해산되었다.Foundation은 Parrow 프로젝트의 저작권상표를 보유하여 언어 구현 및 핵심 코드베이스 개발을 촉진하고 Parrow 커뮤니티를 성장시키기 위한 기반을 제공하며 다른 언어 [9]커뮤니티에 연락하기 위해 2008년에 설립되었습니다.

언어들

Parrow 가상 머신의 목적은 클라이언트 언어를 호스트하고 클라이언트 언어를 상호 운용할 수 있도록 하는 것입니다.이 목표를 달성하기 위해서는 몇 가지 장애물이 존재하는데, 특히 언어 간에 높은 수준의 개념, 데이터 및 데이터 구조를 매핑하는 것이 어렵다.

정적 언어 및 동적 언어

정적 및 동적 유형의 언어들의 서로 다른 특성이 Parrow의 디자인에 동기를 부여했습니다.Java 가상 머신 및 공통 언어 런타임과 같은 현재 널리 사용되는 가상 머신.NET 플랫폼은 정적으로 입력된 언어용으로 설계되었으며 Parrow의 타깃 언어는 동적으로 입력됩니다.

Java 가상 시스템 및 현재 Perl 5 가상 시스템과 같은 가상 시스템도 스택 기반입니다.Parrow 개발자들은 Parrow가 레지스터를 포함하는 것을 장점으로 보고 있는데, 이는 Parrow가 하드웨어 설계와 더 흡사하기 때문에 기계 코드에 가까운 속도로 실행될 수 있는 Parrow 가상 머신의 바이트 코드를 생성하는데 컴파일러 최적화에 관한 방대한 문헌을 사용할 수 있기 때문이다.LLVM, Lua VM, Inferno's Dis 등 다른 레지스터 기반 가상 머신은 Parrow 설계의 일부에 영감을 주었습니다.

기능 개념

Parrow는 특히 예외 처리 및 스레드화관련하여 정확하고 휴대하기 어려운 폐쇄 및 연속성포함기능 프로그래밍의 여러 기능을 지원합니다.가장 큰 장점은 메서드를 사용하는 객체의 동적 확장성으로, PMC(다형 컨테이너) 및 관련 opcode를 사용할 수 있습니다.이러한 문제에 대한 솔루션을 가상 시스템 수준에서 구현하면 이러한 문제를 개별 클라이언트 언어로 해결할 필요가 없습니다.

컴파일러 도구

Parrow는 파서 Grammar Engine(PGE)을 포함한 컴파일러 쓰기[10] 도구의 스위트를 제공합니다.PGE는 재귀적 하강 파서뿐만 아니라 연산자-우선순위 파서를 표현할 수 있는 하이브리드 파서-제너레이터이며, 단일 문법으로 둘 사이의 자유로운 전환을 가능하게 합니다.PGE는 Tree Grammar Engine(TGE; 트리 문법 엔진)에 공급됩니다.TGE는 최적화 및 최종적으로 코드 생성을 위해 PGE에 의해 생성된 해석 트리를 더욱 변환합니다.

기존 클라이언트 언어

많은 언어들이 이미 Parrow용으로 컴파일러 프런트 엔드를 가지고 있지만, 많은 언어들은 여전히 부분적으로만 [11]기능합니다.2013년 7월 현재 적극적으로 유지되고 있는 언어는 다음과 같습니다.[12]

2013년 7월 현재 비활성 언어는 다음과 같습니다.

다음과 같은 난해한 프로그래밍 언어도 구현되어 있습니다.

내부

Parrow의 프로그램 코드에는 다음 세 가지 형식이 있습니다.

  • 바이트[14] 코드는 바이너리이며 Parrow에 의해 기본적으로 해석됩니다.바이트 코드는 보통 파일 확장자가 .pbc인 파일에 저장됩니다.
  • Parrow Assembly Language(PASM; 앵무새 어셈블리 언어)는 바이트 코드로 컴파일되는 저수준 언어입니다.PASM 코드는 보통 파일 확장자가 .pasm인 파일에 저장됩니다.
  • Parrow Intermediate Representation(PIR[15]; 앵무새 중간 표현)은 PASM보다 약간 높은 수준의 언어이며 바이트 코드까지 컴파일됩니다.언어 구현의 주요 타깃입니다.PIR는 Parrot의 루틴 간 호출 규칙을 투과적으로 관리하고 향상된 구문, 레지스터 할당 등을 제공합니다.PIR 코드는 보통 파일 이름 확장자가 .pir인 파일에 저장됩니다.

레지스터

Parrow는 대부분의 하드웨어 CPU와 마찬가지로 레지스터 기반이며 스택 기반인 대부분의 가상 시스템과 다릅니다.Parrow는 4종류의 레지스터를 제공합니다.

  • I: 네이티브 정수형
  • N: 부동 소수점 수
  • S: Unicode를 지원하는 고급 문자열 레지스터
  • P: PMC 또는 Polymorphic Container: Parrow 객체 유형

Parrow는 임의의 수의 레지스터를 제공합니다.이 숫자는 서브루틴별로 컴파일 시 고정됩니다.

산술 연산

PASM 내

    세트 I1, 4     주식회사 I1        # I1은 현재 5     더하다 I1, 2     # I1은 현재 7     세트 N1, 42.0     데크 N1        # N1은 현재 41.0입니다.     후보선수 N1, 2.0   # N1은 현재 39.0입니다.     인쇄물 I1     인쇄물 ', '     인쇄물 N1     인쇄물 "\n"     끝. 

PIR의 경우

 .sub 'main' : main $I1 = 4 inc $I1 # $I1 은 5 $I1 + = 2 # I1 은 7 $N1 = 42.0 dec $N1 # $N141.0 $N1 - = 2.0 #N1 은 현재 39.0 $I1 인쇄, "1 인쇄" 1 "1 "1 "1 "1 "1 "1 인쇄"

발전

2005년 후반까지 Dan Sugalski는 Parrow의 수석 디자이너이자 수석 설계자였다.오랫동안 Perl, Linux 커널 및 C++ 해커였던 Chip Salzenberg는 그가 수석 개발자가 된 2006년 중반까지 그 자리를 이어받았다.Punie의 수석 개발자이자 Parrow의 컴파일러 도구의 수석 설계자인 Alison Randal은 2010년 10월 중순까지 수석 설계자로 있다가 사임하고 Christoph Otto를 새로운 수석 [16]설계자로 선택했습니다.

개발에 대한 논의는 주로 irc.perl.org의 #timeout 채널에서 진행됩니다.또한 Parrotsketch에서 주최하는 Parrot 및 언어 개발자를 위한 주간 회의가 같은 네트워크상에서 개최되고 있습니다.parrot.org에서 호스팅하는 parrow-dev 메일링 리스트에서도 많은 논의가 이루어지고 있습니다.

설계에 대한 논의는 [17]Parrow 저장소에 Parrow Design Documents(PDD; Parrow Design Documents) 형태로 존재합니다.최고 설계자 또는 다른 지정 설계자가 이러한 문서를 작성하여 기능의 개념과 인터페이스 및 설계 노트를 설명합니다.앵무새 해커는 이러한 문서를 실행 가능한 테스트로 변환하고 기존 기능을 사용합니다.

Parrow 팀은 매달 셋째 주 화요일에 새로운 안정 버전을 출시합니다.코어 커밋은 번갈아 가면서 리볼빙스케줄로 릴리스를 만듭니다.단일 커밋이 연속해서 여러 릴리스를 담당하지 않는 경우는 없습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "New supported release 8.1.0 "Andean Parakeet"". Parrot Foundation. 2016-02-16. Retrieved 2016-09-26.
  2. ^ "Parrot Contributor License Agreement 1.0" (PDF). Parrot Foundation. Retrieved 2009-03-18.
  3. ^ "Parrot Roadmap". Parrot Foundation. 2008-11-20. Retrieved 2008-11-20.
  4. ^ "Inactive Parrot Parrot VM". www.parrot.org.
  5. ^ "The Story Behind the Parrot Prank - O'Reilly Media". Oreilly.com. 2001-04-06. Retrieved 2014-02-25.
  6. ^ "Programming Parrot". Perl.com. Archived from the original on 2010-07-18. Retrieved 2014-02-25.
  7. ^ "Languages Parrot VM". Parrot.org. 2006-02-14. Retrieved 2014-02-25.
  8. ^ "Corporations Advanced Search". Washington State Department of Licensing. UBI 602 839 536. Retrieved 2021-04-09.{{cite web}}: CS1 maint :url-status (링크)
  9. ^ 2008년 6월 29일 Wayback Machine에서 Parrow Foundation 아카이브 발표
  10. ^ [1] 2009년 5월 9일 Wayback Machine에서 아카이브 완료
  11. ^ "Languages – Parrot". Trac.parrot.org. Retrieved 2014-02-25.
  12. ^ "Languages - Parrot VM". parrot.org. Retrieved 19 April 2018.
  13. ^ Whiteknight. "Whiteknight/matrixy — GitHub". Github.com. Retrieved 2014-02-25.
  14. ^ "Archived copy". Archived from the original on 2008-12-24. Retrieved 2009-07-15.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  15. ^ [2] 2009년 7월 20일 Wayback Machine에서 아카이브 완료
  16. ^ Otto, Christoph (2010-10-21). "reparrot: Parrot has a new architect. What now?". Reparrot.blogspot.com. Retrieved 2014-02-25.
  17. ^ "Parrot 6.1.0 - Parrot Design Documents (PDDs)". Docs.parrot.org. Retrieved 2014-02-25.

외부 링크