요인(프로그래밍 언어)
Factor (programming language)| 패러다임 | 다중 데이터: 기능, 연결, 스택 지향 |
|---|---|
| 개발자 | 슬라바 페스토프 |
| 첫 등장 | 2003 |
| 안정적 해제 | 0.98 / 2018년 7월 31일 ( |
| 타이핑 규율 | 강하고 역동적인 |
| OS | Windows, MacOS, Linux |
| 면허증 | BSD 라이선스 |
| 웹사이트 | factorcode.org |
| 영향을 받은 | |
| 조이, 포스, 리스프, 셀프 | |
인자는 슬라바 페스토프가 만든 스택 지향 프로그래밍 언어다.인자는 동적으로 타이핑되고 자동 메모리 관리는 물론 강력한 메타프로그래밍 기능까지 갖췄다.언어는 자체 호스팅된 최적 컴파일러와 대화형 개발 환경을 특징으로 하는 단일 구현을 가지고 있다.인자 분포는 큰 표준 라이브러리를 포함한다.
역사
슬라바 페스토프는 2003년 비디오 게임의 스크립팅 언어로 Factor를 만들었다.[1]현재 JFactor라고 불리는 초기 구현은 자바에서 구현되었고 자바 가상 머신에서 실행되었다.초기의 언어는 구문 면에서는 현대적인 요소를 피상적으로 닮았지만, 현대의 언어는 실제적인 면에서는 매우 다르며 현재의 구현은 훨씬 빠르다.
그 언어는 시간이 지남에 따라 크게 달라졌다.원래, Factor 프로그램은 자바의 반사 능력을 가지고 자바 객체를 조작하는 것에 초점을 맞췄다.처음부터 디자인 철학은 그 안에 쓰여진 프로그램에 맞게 언어를 수정하는 것이었다.Factor 구현과 표준 라이브러리가 더욱 상세해짐에 따라, 특정 언어 특징에 대한 필요성이 명확해졌고, 추가되었다.JFactor는 당신 자신의 클래스를 정의할 수 있는 객체 시스템을 가지고 있지 않았고, 초기 버전의 네이티브 팩터는 동일했다; 언어는 이런 방식으로 체계와 비슷했다.오늘날, 객체 시스템은 인자의 중심 부분이다.튜플 클래스, 콤비네이터 인라이닝, 매크로, 사용자 정의 구문 분석 단어, 현대 어휘 시스템 등 다른 중요한 언어 특징들은 그 효용성이 명확해지면서 단편적으로만 추가되었다.
외부 기능 인터페이스는 매우 초기 버전에서 Factor까지 존재했고, 유사한 시스템이 JFactor에 존재했다.이는 Factor와 통신해야 하는 각 외부 라이브러리에 대해 구현의 C 부분에 대한 플러그인을 생성하는 것 대신 선택되었으며, 보다 선언적이고, 컴파일 속도가 빠르며, 쓰기 쉽다는 장점이 있다.
자바 구현은 처음에는 통역자만으로 이루어졌으나, 나중에 자바 바이트코드에 대한 컴파일러가 추가되었다.이 컴파일러는 특정 절차에서만 작동했다.자바 버전의 Factor는 C와 Factor로 작성된 버전으로 대체되었다.처음에는 통역사만으로 구성되었으나, 통역은 다른 상황에서 사용되는 컴파일러 2개로 대체되었다.시간이 지남에 따라, 인자 구현은 훨씬 더 빠르게 성장했다.[2]
설명
팩터는 동적으로 타이핑되고 기능적이며 객체 지향적인 프로그래밍 언어다.코드는 단어라고 불리는 작은 절차를 중심으로 구성된다.일반적인 코드에서, 이것들은 1-3줄의 길이로, 7줄 이상의 절차는 매우 드물다.다른 프로그래밍 언어로 한 절차로 관용적으로 표현되는 어떤 것은 Factor에 여러 단어로 쓰여질 것이다.[3]
각 단어는 일정한 수의 인수를 취하고 일정한 수의 반환 값을 가진다.단어에 대한 인수는 역 폴란드어 표기법을 사용하여 데이터 스택에 전달된다.스택은 단지 단어에 대한 호출을 구성하는 데 사용되며, 데이터 구조로는 사용되지 않는다.Factor의 스택은 Fours의 스택과 유사한 방법으로 사용된다. 이를 위해, 그들은 둘 다 스택 언어로 간주된다.예를 들어, 다음은 현재 출력 스트림에 "hello world"를 출력하는 코드 조각이다.
"Hello world" 프린트
print에 있는 말이다io스택에서 끈을 떼고 아무것도 돌려주지 않는 어휘문자열을 현재 출력 스트림(기본적으로 터미널 또는 그래픽 수신기)으로 인쇄한다.[3]
요인 함수 은(는) 다음과 같은 방법으로 요인에서 구현할 수 있다.
: 요인(n -- n! ) dup 1 > [1,b] 제품 ] [1 ]일 경우 drop 1 ]모든 데이터가 스택으로만 전달되는 것은 아니다.어휘적으로 범위가 지정된 로컬 변수를 사용하면 절차 내에서 사용되는 임시 변수를 저장하고 액세스할 수 있다.동적 범위 변수는 스택을 사용하지 않고 프로시저 호출 간에 전달하기 위해 사용된다.예를 들어, 현재 입력 및 출력 스트림은 동적 범위 변수에 저장된다.[3]
인자는 유연성과 언어 확장 능력을 강조한다.[3]매크로를 위한 시스템과 요인 구문의 임의 확장을 위한 시스템이 있다.요인의 구문은 데이터 구조에 대한 새로운 유형의 단어 정의와 새로운 유형의 리터럴을 허용하도록 확장되는 경우가 많다.XML 라이브러리에서 XML 생성에 대한 문자적 구문을 제공하기 위해 사용되기도 한다. 예를 들어, 다음 단어는 문자열을 사용하고 문자열을 강조하는 HTML 문서인 XML 문서 객체를 생성한다.
: make-html ( 문자열 -- xml ) dup <XML <html><-><-></title></head><h1<-></h1> </html> XML ;그 단어dup스택의 맨 위 항목을 중복한다.그<->XML 문서의 해당 부분을 스택의 항목으로 채우는 것을 의미한다.
구현 및 라이브러리
요소에는 언어로 작성된 대규모 표준 라이브러리가 포함된다.여기에는 다음이 포함된다.
- OpenGL과 다양한 윈도우 설정 시스템을 기반으로 구축된 크로스 플랫폼 GUI 툴킷으로 개발 환경에 사용된다.[4]
- Postgre를 포함한 여러 데이터베이스 라이브러리에 바인딩SQL과 SQLite.[5]
- 용해로 웹 프레임워크가 있는 HTTP 서버 및 클라이언트.[6]
- 정수, 부유물 및 C 구조체의 효율적인 동질 배열.[7]
- 정규식을 구현하고 컴퓨터 코드를 생성하여 일치시키는 라이브러리.[8]
외부 기능 인터페이스가 Factor에 내장되어 있어 C, Objective-C 및 Fortran 프로그램과의 통신이 가능하다.GLSL로 작성된 셰이더와 실행 및 커뮤니케이션을 위한 지원도 있다.[3][9]
인자는 인자와 C++에서 구현된다.그것은 원래 초기 자바 구현에서 비롯되었다.오늘날, 파서와 최적화 컴파일러는 언어로 쓰여진다.언어의 특정한 기본 부분은 C++로 구현된다. 예를 들어, 쓰레기 수집가, 특정 원시 요소.
Factor는 컴파일된 코드와 데이터가 이미지에 저장되는 많은 Smalltalk 구현과 유사한 이미지 기반 모델을 사용한다.[10]프로그램을 컴파일하기 위해 프로그램이 영상에 로드되고 영상이 저장된다.특수 도구는 특정 프로그램을 실행하기 위한 최소한의 이미지를 생성하는 과정을 보조하며, 그 결과를 독립형 애플리케이션으로 구현할 수 있는 것으로 포장한다.[3][11]
Factor 컴파일러는 많은 고급 최적화를 구현하며 새로운 최적화 기법의 연구의 대상으로 사용되어 왔다.[3][12]
참조
- ^ Pestov, Slava. "Slava Pestov's corner of the web".
- ^ "Concatenative.org wiki: Factor/Implementation History".
- ^ a b c d e f g Pestov, Sviatoslav; Ehrenberg, Daniel (2010). "Factor: a dynamic stack-based programming language". ACM SIGPLAN Notices. ACM. 45 (12): 43–58. doi:10.1145/1899661.1869637.
- ^ Pestov, Slava. "Factor documentation: UI framework".
- ^ Coleman, Doug. "Factor documentation: Database library".
- ^ Pestov, Slava. "Factor documentation: HTTP server".
- ^ Pestov, Slava. "Factor documentation: Specialized arrays".
- ^ Coleman, Doug; Ehrenberg, Daniel. "Factor documentation: Regular expressions".
- ^ Pestov, Slava (28 July 2010). "Overhauling Factor's C library interface".
- ^ Pestov, Slava (10 January 2010). "Factor's bootstrap process explained".
- ^ Pestov, Slava (5 July 2008). "On shaking trees".
- ^ Ehrenberg, Daniel (2010). "Closure elimination as constant propagation" (PDF). Archived from the original (PDF) on 2011-07-26.
외부 링크
- 공식 웹사이트
- Slava Pestov (October 27, 2008). Factor: An Extensible Interactive Language (flv) (Tech talk). Google. Archived from the original on 2021-12-22.
- Zed Shaw (2008). The ACL is Dead (flv) (CUSEC 2008). CUSEC. – 요소를 언급하고 칭찬하는 요인에 기재된 프레젠테이션