가상 머신의 앵무시
Parrot virtual machine![]() | |
최종 릴리즈 | 8.1.0 / 2016년 2월 [1] , 전( |
---|---|
저장소 | |
기입처 | C |
운영 체제 | 크로스 플랫폼 |
후계자 | MoarVM(Raku용) |
유형 | 가상 머신 |
면허증. | Artistic License 2.0 |
웹 사이트 | www |
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월 현재 비활성 언어는 다음과 같습니다.
- 호
- APL
- bc
- 일반적인 리스프
- 리스프
- ECMAScript
- 넷째
- 범용 명령어
- GNU m4
- 야코
- 옥타브[13]
- QuickBASIC 4.5
- Small talk (치챗 경유)
- .NET 바이트 코드
다음과 같은 난해한 프로그래밍 언어도 구현되어 있습니다.
내부
Parrow의 프로그램 코드에는 다음 세 가지 형식이 있습니다.
- 바이트[14] 코드는 바이너리이며 Parrow에 의해 기본적으로 해석됩니다.바이트 코드는 보통 파일 확장자가 .pbc인 파일에 저장됩니다.
- Parrow Assembly Language(PASM; 앵무새 어셈블리 언어)는 바이트 코드로 컴파일되는 저수준 언어입니다.PASM 코드는 보통 파일 확장자가 .pasm인 파일에 저장됩니다.
- Parrow Intermediate Representation(PIR[15]; 앵무새 중간 표현)은 PASM보다 약간 높은 수준의 언어이며 바이트 코드까지 컴파일됩니다.언어 구현의 주요 타깃입니다.PIR는 Parrot의 루틴 간 호출 규칙을 투과적으로 관리하고 향상된 구문, 레지스터 할당 등을 제공합니다.PIR 코드는 보통 파일 이름 확장자가 .pir인 파일에 저장됩니다.
예
레지스터
Parrow는 대부분의 하드웨어 CPU와 마찬가지로 레지스터 기반이며 스택 기반인 대부분의 가상 시스템과 다릅니다.Parrow는 4종류의 레지스터를 제공합니다.
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 # $N1 은 41.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 팀은 매달 셋째 주 화요일에 새로운 안정 버전을 출시합니다.코어 커밋은 번갈아 가면서 리볼빙스케줄로 릴리스를 만듭니다.단일 커밋이 연속해서 여러 릴리스를 담당하지 않는 경우는 없습니다.
「 」를 참조해 주세요.
- GraalVM
- 공통 언어 런타임(CLR)
- 응용 프로그램 가상 시스템 비교
- mod_filename(모드)
- 다빈치 머신
레퍼런스
- ^ a b "New supported release 8.1.0 "Andean Parakeet"". Parrot Foundation. 2016-02-16. Retrieved 2016-09-26.
- ^ "Parrot Contributor License Agreement 1.0" (PDF). Parrot Foundation. Retrieved 2009-03-18.
- ^ "Parrot Roadmap". Parrot Foundation. 2008-11-20. Retrieved 2008-11-20.
- ^ "Inactive Parrot Parrot VM". www.parrot.org.
- ^ "The Story Behind the Parrot Prank - O'Reilly Media". Oreilly.com. 2001-04-06. Retrieved 2014-02-25.
- ^ "Programming Parrot". Perl.com. Archived from the original on 2010-07-18. Retrieved 2014-02-25.
- ^ "Languages Parrot VM". Parrot.org. 2006-02-14. Retrieved 2014-02-25.
- ^ "Corporations Advanced Search". Washington State Department of Licensing. UBI 602 839 536. Retrieved 2021-04-09.
{{cite web}}
: CS1 maint :url-status (링크) - ^ 2008년 6월 29일 Wayback Machine에서 Parrow Foundation 아카이브 발표
- ^ [1] 2009년 5월 9일 Wayback Machine에서 아카이브 완료
- ^ "Languages – Parrot". Trac.parrot.org. Retrieved 2014-02-25.
- ^ "Languages - Parrot VM". parrot.org. Retrieved 19 April 2018.
- ^ Whiteknight. "Whiteknight/matrixy — GitHub". Github.com. Retrieved 2014-02-25.
- ^ "Archived copy". Archived from the original on 2008-12-24. Retrieved 2009-07-15.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ [2] 2009년 7월 20일 Wayback Machine에서 아카이브 완료
- ^ Otto, Christoph (2010-10-21). "reparrot: Parrot has a new architect. What now?". Reparrot.blogspot.com. Retrieved 2014-02-25.
- ^ "Parrot 6.1.0 - Parrot Design Documents (PDDs)". Docs.parrot.org. Retrieved 2014-02-25.