맨위로가기

팩터 (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

팩터는 슬라바 페스토프가 2003년에 개발한 동적 타입의 함수형 및 객체 지향 프로그래밍 언어이다. 스택 지향 프로그래밍 언어로, '단어'라고 불리는 작은 프로시저를 중심으로 코드를 구성하며, 후위 표기법을 사용하여 스택에 인수를 전달한다. 팩터는 언어 확장을 강조하며, 매크로 시스템과 구문 확장을 위한 시스템을 갖추고 있다. 팩터는 C++로 구현되었으며, 표준 라이브러리, 컴파일러, 고급 최적화 기술을 제공하며, LISP의 많은 기능을 차용했다.

더 읽어볼만한 페이지

  • 스택 지향 프로그래밍 언어 - 포스트스크립트
    어도비 시스템즈에서 개발한 포스트스크립트는 페이지 기술 언어이자 튜링 완전한 프로그래밍 언어로서, 데스크톱 출판 혁명을 이끌고 인쇄 기술 발전에 기여했으며, PDF 형식의 기반이 되었다.
  • 스택 지향 프로그래밍 언어 - 포스 (프로그래밍 언어)
    포스는 1958년 찰스 무어가 개발한 스택 기반, 역폴란드 표기법을 사용하는 프로그래밍 언어이며, 임베디드 시스템 등 다양한 분야에서 활용되었고, 1994년 ANSI 표준으로 제정되었다.
  • 2003년 개발된 프로그래밍 언어 - 스칼라 (프로그래밍 언어)
    스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
  • 2003년 개발된 프로그래밍 언어 - 아파치 그루비
    아파치 그루비는 자바 가상 머신에서 실행되는 동적 타이핑 프로그래밍 언어이며, 자바와 파이썬 등의 특징을 결합하여 웹 애플리케이션 개발 등 다양한 분야에서 활용된다.
  • 고급 프로그래밍 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 고급 프로그래밍 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
팩터 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
개요
Factor 로고
이름Factor (팩터)
종류다중 패러다임 프로그래밍 언어
개발 시작2003년
최신 안정화 버전0.100
타이핑강한 동적 타이핑
영향 받은 언어Joy
Forth
Lisp
Self
영향을 준 언어Cat
운영체제Windows
macOS
Linux
라이선스BSD 라이선스
웹사이트factorcode.org

2. 역사

슬라바 페스토프는 2003년에 비디오 게임스크립트 언어로 팩터를 만들었다.[1] 초기 구현은 현재 JFactor로 불리며, 자바로 구현되었고 자바 가상 머신에서 실행되었다. 초기 언어는 구문 측면에서는 현대적인 팩터와 유사했지만, 실질적으로는 매우 달랐으며 현재 구현은 훨씬 더 빠르다.

튜플 클래스, 조합자 인라인, 매크로, 사용자 정의 파싱 단어 및 현대 어휘 시스템과 같은 중요한 언어 기능들은 유용성이 명확해짐에 따라 점진적으로 추가되었다. 오늘날 객체 시스템은 팩터의 핵심 부분이다.

외부 함수 인터페이스는 팩터 초기 버전부터 존재했으며, JFactor에도 유사한 시스템이 있었다. 이는 팩터가 통신해야 하는 각 외부 라이브러리에 대한 구현의 C 부분에 플러그인을 생성하는 대신 선택되었으며, 더 선언적이고 컴파일 속도가 빠르며 작성하기 쉽다는 장점이 있다.

자바 버전의 팩터는 C와 팩터로 작성된 버전으로 대체되었다. 처음에는 단순한 인터프리터로 구성되었지만, 이후 서로 다른 상황에서 사용되는 두 개의 컴파일러로 대체되었다. 시간이 지남에 따라 팩터 구현은 훨씬 더 빠르게 성장했다.[2]

2. 1. 초기 구현 (JFactor)

슬라바 페스토프는 2003년 비디오 게임스크립트 언어로 팩터를 만들었다.[1] 초기 구현은 현재 JFactor로 불리며, 자바로 구현되었고 자바 가상 머신에서 실행되었다. 초기 언어는 구문 측면에서 표면적으로 현대적인 팩터와 유사했지만, 현대 언어는 실질적으로 매우 다르며 현재 구현은 훨씬 더 빠르다.

이 언어는 시간이 지남에 따라 크게 변경되었다. 원래 팩터 프로그램은 자바의 리플렉션 기능을 사용하여 자바 객체를 조작하는 데 중점을 두었다. 처음부터 설계 철학은 팩터로 작성된 프로그램에 맞게 언어를 수정하는 것이었다. 팩터 구현과 표준 라이브러리가 더욱 자세해지면서 특정 언어 기능의 필요성이 명확해졌고, 이러한 기능이 추가되었다. JFactor에는 프로그래머가 자신의 클래스를 정의할 수 있는 객체 시스템이 없었고, 초기 버전의 네이티브 팩터도 마찬가지였다. 이 점에서 이 언어는 Scheme과 유사했다.

외부 함수 인터페이스는 팩터의 초기 버전부터 존재했으며, JFactor에도 유사한 시스템이 존재했다. 자바 구현은 처음에 단순한 인터프리터로 구성되었지만, 나중에 자바 바이트코드로의 컴파일러가 추가되었다. 이 컴파일러는 특정 프로시저에서만 작동했다.[2]

2. 2. 언어의 발전

슬라바 페스토프는 2003년 비디오 게임스크립트 언어로 팩터를 만들었다.[1] 초기 구현은 현재 JFactor로 불리며, 자바로 구현되었고 자바 가상 머신에서 실행되었다. 초기 언어는 구문 측면에서 표면적으로 현대적인 팩터와 유사했지만, 현대 언어는 실질적으로 매우 다르며 현재 구현은 훨씬 더 빠르다.

시간이 지남에 따라 팩터는 크게 변화하고 발전했다. 원래 팩터 프로그램은 자바의 리플렉션 기능을 사용하여 자바 객체를 조작하는 데 중점을 두었다. 처음부터 설계 철학은 팩터로 작성된 프로그램에 맞게 언어를 수정하는 것이었다. 팩터 구현과 표준 라이브러리가 더욱 자세해지면서 특정 언어 기능의 필요성이 명확해져 튜플, 조합자 인라인, 매크로, 사용자 정의 파싱 단어, 현대 어휘 시스템 등 다양한 기능이 점진적으로 추가되었다. JFactor에는 프로그래머가 자신의 클래스를 정의할 수 있는 객체 시스템이 없었고, 초기 네이티브 팩터도 마찬가지였으나, 현재 객체 시스템은 팩터의 핵심 부분이다.

외부 함수 인터페이스는 팩터의 초기 버전부터 존재했으며, JFactor에도 유사한 시스템이 존재했다. 이는 팩터가 통신해야 하는 각 외부 라이브러리에 대한 구현의 C 부분에 플러그인을 생성하는 대신 선택되었으며, 더 선언적이고 컴파일 속도가 빠르며 작성하기 쉽다는 장점이 있다.

자바 구현은 처음에 단순한 인터프리터로 구성되었지만, 나중에 자바 바이트코드로의 컴파일러가 추가되었다. 이 컴파일러는 특정 프로시저에서만 작동했다. 자바 버전의 팩터는 C와 팩터로 작성된 버전으로 대체되었다. 처음에 이것은 단순한 인터프리터로 구성되었지만, 인터프리터는 서로 다른 상황에서 사용되는 두 개의 컴파일러로 대체되었다. 시간이 지남에 따라 팩터 구현은 훨씬 더 빠르게 성장했다.[2]

2. 3. 외부 함수 인터페이스

팩터는 초기 버전부터 외부 함수 인터페이스(FFI)를 지원했으며, JFactor에도 유사한 시스템이 존재했다.[1] 이는 팩터가 통신해야 하는 각 외부 라이브러리에 대한 구현의 C 부분에 플러그인을 생성하는 대신 선택되었으며, 더 선언적이고 컴파일 속도가 빠르며 작성하기 쉽다는 장점이 있다.[1] 이를 통해 C, Objective-C, Fortran 프로그램과의 통신이 가능하다.

2. 4. 구현의 변화

슬라바 페스토프는 2003년 비디오 게임스크립트 언어로 팩터를 만들었다.[1] 초기 구현은 현재 JFactor로 불리며, 자바로 구현되었고 자바 가상 머신에서 실행되었다. 초기 언어는 구문 측면에서 표면적으로 현대적인 팩터와 유사했지만, 현대 언어는 실질적으로 매우 다르며 현재 구현은 훨씬 더 빠르다.

초기 자바 구현은 단순한 인터프리터였으나, 나중에 자바 바이트코드로 컴파일하는 기능이 추가되었다. 이 컴파일러는 특정 프로시저에서만 작동했다. 이후 자바 버전은 C와 팩터로 작성된 버전으로 대체되었다. 처음에는 단순한 인터프리터였으나, 두 개의 컴파일러로 대체되었다. 시간이 지남에 따라 팩터 구현은 훨씬 더 빨라졌다.[2]

3. 특징

팩터는 동적 타입을 가지는 함수형 프로그래밍객체 지향 프로그래밍 프로그래밍 언어이다. 다른 연쇄형 언어와 마찬가지로 역 폴란드 표기법 구문을 사용하여, 함수 이름을 쓰기 전에 인수를 먼저 기술한다.

팩터는 동적 타이핑을 사용하며, 독특한 객체 시스템을 갖추고 있다. 원시 자료형은 몇 개 안 되며, 사용자나 표준 라이브러리에서 튜플 등의 기구를 사용하여 고유한 클래스를 만들 수 있다. 상속은 지원하지 않지만, Self와 같은 위임을 지원한다. 형이나 튜플 외에도 클래스를 만드는 방법으로 술어(predicate) 클래스나 공용체(union) 클래스가 지원된다. 내장 복합 데이터형으로는 고정 길이 및 가변 길이 배열해시 테이블이 있다. 부동 소수점 수와 임의 길이의 정수도 지원한다. 연결 리스트, 복소수, 분수는 표준 라이브러리에서 구현되어 있다.

처음에는 인터프리터만 있었지만, 현재는 완전한 컴파일러가 있다.[14][15] 최적화된 기계어를 생성하는 컴파일러는 모두 팩터로 작성되었다. 실행 파일 형식의 출력을 하지 않고, Smalltalk와 같은 이미지 파일로 기계어 코드를 저장하며, 이 이미지 파일을 실행하기 위한 최소한의 기능(VM 등)을 갖춘 배포 도구와 함께 배포한다.

정적 스코프와 동적 스코프도 지원한다. Factor에는 보캐뷸러리, 계속, HTTP 서버와 웹 프레임워크, OpenGL 바인딩, GUI 라이브러리, XML 파서 등 다양한 라이브러리가 있다.

팩터는 대화형 테스트 주도 개발에 적합한 언어가 되는 것을 목표로 하며, 이를 위해 근본적으로 Forth의 안전한 버전이 되었다. 동적 타이핑이지만, 컴파일러는 스택의 깊이를 컴파일 시점에 파악하고 있다.

3. 1. 코드 구조

코드는 '단어(word)'라고 불리는 작은 프로시저를 중심으로 구성된다. 일반적인 코드에서 단어는 1~3줄로 구성되며, 7줄 이상인 프로시저는 매우 드물다. 다른 프로그래밍 언어에서 하나의 프로시저로 표현될 만한 것은 팩터에서는 여러 단어로 작성된다.[3]

3. 2. 스택 기반 프로그래밍

팩터에서 단어(프로시저)에 대한 인수는 후위 표기법을 사용하여 자료 스택에서 전달된다. 이 스택은 단어 호출을 구성하는 데만 사용되며, 자료 구조로는 사용되지 않는다. 팩터의 스택은 Forth와 유사하게 사용되며, 이 때문에 둘 다 스택 지향 프로그래밍 언어로 간주된다.[3] 예를 들어, "hello world"를 출력하는 코드는 다음과 같다.

```factor

"hello world" print

```

`print`는 스택에서 문자열을 가져와 아무것도 반환하지 않는 `io` 어휘집의 단어이다. 이 단어는 문자열을 현재 출력 스트림(기본적으로 터미널 또는 그래픽 리스너)에 출력한다.[1]

3. 3. 데이터 전달

모든 데이터가 스택으로만 전달될 필요는 없다. 렉시컬 스코핑을 통해 프로시저 내에서 사용되는 임시 변수를 저장하고 접근할 수 있다. 동적 스코핑 변수는 스택을 사용하지 않고 프로시저 호출 간에 값을 전달하는 데 사용된다. 예를 들어, 현재 입력 및 출력 스트림은 동적으로 스코핑된 변수에 저장된다.[3]

3. 4. 유연성과 확장성

팩터는 유연성과 언어 확장 능력을 강조한다.[1] 매크로 시스템뿐만 아니라 팩터 구문의 임의 확장을 위한 시스템도 갖추고 있다. 팩터의 구문은 새로운 유형의 단어 정의와 데이터 구조를 위한 새로운 유형의 리터럴을 허용하도록 자주 확장된다. 또한 XML 라이브러리에서 XML 생성을 위한 리터럴 구문을 제공하는 데 사용된다. 예를 들어, 다음 단어는 문자열을 가져와 문자열을 강조하는 HTML 문서인 XML 문서 객체를 생성한다.



: make-html ( string -- xml )

dup




<->

<->





XML> ;



`dup` 단어는 스택의 최상위 항목을 복제한다. `<->`는 스택의 항목으로 XML 문서의 해당 부분을 채우는 것을 나타낸다.

4. 객체 지향 프로그래밍

팩터는 객체 시스템을 갖추고 있다. 사용자나 표준 라이브러리에서는 튜플 등의 기구를 사용하여 고유한 클래스를 만들 수 있다. 상속은 지원하지 않지만, Self와 같은 위임을 지원한다. 형이나 튜플 외에도 클래스를 만드는 방법이 있으며, 술어 클래스나 공용체 클래스가 지원된다.

5. 데이터 형

팩터의 내장 복합 데이터형으로는 고정 길이 및 가변 길이 배열해시 테이블이 있다. 부동 소수점 수와 임의 길이의 정수도 지원한다. 연결 리스트, 복소수, 분수는 표준 라이브러리에서 구현되어 있다.[14][15]

6. 구현 및 라이브러리

Factor는 C, Objective-C, Fortran 프로그램과 통신할 수 있는 외부 함수 인터페이스를 내장하고 있으며, GLSL로 작성된 셰이더를 실행하고 통신하는 기능도 지원한다.[3][9] Factor는 자체 언어와 C++로 구현되었다. 초기에는 Java 구현에서 부트스트랩되었으나, 현재 파서와 최적화 컴파일러는 Factor로 작성되었고, 가비지 수집기와 같은 언어의 특정 기본 부분은 C++로 구현된다.

Factor는 스몰토크와 유사한 이미지 기반 모델을 사용하여 컴파일된 코드와 데이터를 이미지에 저장한다.[10] 프로그램을 컴파일하려면 프로그램을 이미지에 로드하고 이미지를 저장하며, 특수 도구를 사용하여 특정 프로그램을 실행하기 위한 최소 이미지를 생성하고 독립 실행형 애플리케이션으로 배포할 수 있도록 지원한다.[3][11]

Factor 컴파일러는 다양한 고급 최적화를 구현하며, 새로운 최적화 기술 연구의 대상이 되어 왔다.[3][12]

6. 1. 주요 라이브러리


  • OpenGL과 다양한 윈도우 시스템을 기반으로 구축되어 개발 환경에 사용되는 크로스 플랫폼 GUI 툴킷.[4]
  • PostgreSQLSQLite를 포함한 여러 데이터베이스 라이브러리에 대한 바인딩.[5]
  • Furnace 웹 프레임워크를 갖춘 HTTP 서버 및 클라이언트.[6]
  • 정수, 부동 소수점 및 C 구조체의 효율적인 균질 배열.[7]
  • 일치 작업을 수행하기 위해 기계 코드를 생성하는 정규 표현식을 구현하는 라이브러리.[8]
  • 외부 함수 인터페이스가 Factor에 내장되어 있어 C, Objective-C, Fortran 프로그램과의 통신이 가능하며, GLSL로 작성된 셰이더를 실행하고 통신하는 기능도 지원한다.[3][9]

6. 2. 구현 방식

팩터는 팩터와 C++로 구현되었다. 원래 이전의 자바 구현에서 부트스트랩되었다.[4] 오늘날 파서와 최적화 컴파일러는 해당 언어로 작성되었다. 가비지 수집기 및 특정 기본 요소와 같은 언어의 특정 기본 부분은 C++로 구현된다.

6. 3. 이미지 기반 모델

팩터는 스몰토크 구현과 유사한 이미지 기반 모델을 사용하며, 컴파일된 코드와 데이터가 이미지에 저장된다.[10] 프로그램을 컴파일하려면 이미지를 로드하고 저장한다. 특수 도구는 특정 프로그램을 실행하기 위한 최소 이미지를 생성하고, 결과를 독립 실행형 애플리케이션으로 배포할 수 있는 형태로 패키징하는 프로세스를 지원한다.[3][11]

7. 컴파일러

팩터 컴파일러는 많은 고급 최적화를 구현하며 새로운 최적화 기술 연구의 대상이 되어 왔다. 초기에는 인터프리터만 있었지만, 현재는 완전한 컴파일러가 있다(비 최적화 컴파일러는 기본적으로 인터프리터의 루프를 전개한 것에 불과하다[14][15]). 최적화된 기계어를 생성하는 컴파일러는 모두 팩터로 작성되었다. 실행 파일 형식의 출력을 하지 않고, 스몰토크와 같은 이미지 파일로 기계어 코드를 저장한다.

8. LISP와의 관계

팩터는 LISP의 많은 기능을 채택하고 있다. 동형성 구문, 가비지 컬렉션, 고차 함수, 컴파일 시 평가, read-eval-print 루프, 트리에셰이커 등이 있다.[1]

단, 겉모습은 역 폴란드 표기법을 따르기 때문에 LISP와는 반대로 보인다. 즉, 함수 호출의 중첩은 LISP의 경우 바깥쪽 함수가 앞에 표기되지만, 팩터에서는 반대로 뒤에 표기된다. 이는 연쇄적 언어인 본질적인 특성이다.[1]

9. 처리계

과거에는 자바로 구현된 버전과 C 언어로 구현된 버전이 존재했다. 하지만 자바로 구현된 버전은 거의 사용되지 않으며, 이미 유지보수가 이루어지지 않고 있다. C 언어로 작성된 버전은 점차 셀프 호스팅을 통해 팩터로 대체되고 있으며, C 언어로 작성된 부분은 줄어들고 있다.[1]

10. 언어 사양

팩터는 C 언어와 같은 표준 사양은 존재하지 않지만, 언어 사양 문서는 풍부하다.

11. Hello World 예시

"hello world" print

참조

[1] 웹사이트 Slava Pestov's corner of the web http://factorcode.or[...]
[2] 웹사이트 Concatenative.org wiki: Factor/Implementation History http://concatenative[...]
[3] 간행물 Factor: a dynamic stack-based programming language ACM
[4] 웹사이트 Factor documentation: UI framework http://docs.factorco[...]
[5] 웹사이트 Factor documentation: Database library http://docs.factorco[...]
[6] 웹사이트 Factor documentation: HTTP server http://docs.factorco[...]
[7] 웹사이트 Factor documentation: Specialized arrays http://docs.factorco[...]
[8] 웹사이트 Factor documentation: Regular expressions http://docs.factorco[...]
[9] 웹사이트 Overhauling Factor's C library interface http://factor-langua[...] 2010-07-28
[10] 웹사이트 Factor's bootstrap process explained http://factor-langua[...] 2010-01-10
[11] 웹사이트 On shaking trees http://factor-langua[...] 2008-07-05
[12] 웹사이트 Closure elimination as constant propagation http://factorcode.or[...]
[13] 문서 Factor 0.100 now available https://re.factorcod[...]
[14] 블로그 Two-tier compilation comes to Factor https://factor-langu[...] 2007-09-10
[15] 블로그 Compiler overhaul https://factor-langu[...] 2008-01-08



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com