딜런 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
딜런은 1990년대 초 애플을 중심으로 개발된 객체 지향 프로그래밍 언어이다. 애플 뉴턴 컴퓨터에 사용될 예정이었으나, C와 뉴턴스크립트가 대신 사용되었다. 딜런은 리스프의 영향을 받아 S-표현식을 기반으로 했지만, 이후 ALGOL과 유사한 구문으로 변경되었다. 딜런은 대소문자를 구분하지 않으며, 하이픈을 사용하여 여러 단어로 된 식별자를 구성한다. 딜런은 모듈과 네임스페이스를 분리하여 캡슐화를 수행하며, 다중 상속과 제네릭 함수를 지원하여 확장성이 뛰어나다.
더 읽어볼만한 페이지
- 1992년 개발된 프로그래밍 언어 - 마이크로소프트 액세스
마이크로소프트 액세스는 1992년 출시된 데이터베이스 관리 시스템으로, 테이블, 쿼리, 폼 등을 생성하고 VBA를 통해 솔루션을 개발하며, 윈도우에서 사용 가능하고 다양한 데이터 형식과 통합된다. - 리스프 프로그래밍 언어 계열 - 클로저 (프로그래밍 언어)
클로저는 리치 히키가 개발한 JVM 기반의 함수형 프로그래밍 언어로, 자바와의 호환성을 특징으로 하며 불변 데이터 구조와 STM을 활용한 동시성 관리, 그리고 REPL 환경, 매크로 시스템 등의 기능을 제공한다. - 리스프 프로그래밍 언어 계열 - 커먼 리스프
커먼 리스프는 1980년대 초 여러 리스프 방언 통합 시도에서 시작된 언어로, S-표현식 문법, 다양한 자료형, 일급 함수, 매크로, CLOS를 특징으로 하며, ANSI 표준으로 정의되어 다양한 분야에서 활용된다. - 크로스 플랫폼 소프트웨어 - MSN
MSN은 1995년 마이크로소프트가 윈도우 95와 함께 출시한 웹 포털이자 관련 서비스 모음으로, 뉴스, 엔터테인먼트, 스포츠, 금융 등 다양한 콘텐츠를 제공하며 주요 온라인 서비스를 통합하는 허브 역할을 수행한다. - 크로스 플랫폼 소프트웨어 - 구글 포토
구글 포토는 사진 및 동영상 저장, 공유, 관리 기능을 제공하는 구글의 클라우드 기반 서비스로, 자동 분류, 얼굴 인식, 검색 기능을 제공하지만 2021년부터 무료 무제한 저장 용량 제공 정책이 변경되었고, 2024년에는 기술의 군사적 이용에 대한 윤리적 논란이 있었다.
딜런 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
이름 | 딜런 |
종류 | 다중 패러다임 프로그래밍 언어 |
패러다임 | 함수형 프로그래밍, 객체 지향 프로그래밍 |
설계자 | 불명 |
개발자 | 오픈 소스 커뮤니티, 애플, 할리퀸 (소프트웨어 회사), 카네기 멜런 대학교 |
최초 배포 | 1992년 |
최신 버전 | 2022.1 |
최신 배포일 | 2022년 11월 28일 |
타이핑 | 강력, 점진적 |
스코프 | 불명 |
플랫폼 | IA-32, x86-64 |
운영체제 | 크로스 플랫폼 |
라이선스 | 불명 |
파일 확장자 | dylan, lid |
파일 형식 | 불명 |
웹사이트 | Open Dylan 공식 웹사이트 |
구현체 | Open Dylan, Gwydion Dylan |
방언 | infix-dylan (AKA Dylan), prefix-dylan (historical only) |
영향을 준 언어 | CLOS, ALGOL, Scheme, EuLisp |
영향을 받은 언어 | Lasso, Python, Ruby, Julia |
2. 역사
딜런은 1990년대 초 애플을 주축으로 한 그룹에 의해 개발되었다. 애플 뉴턴 컴퓨터에 사용될 예정이었지만, 딜런 구현이 충분히 성숙되지 못하여 뉴턴은 대신 C와 월터 스미스가 개발한 뉴턴스크립트를 혼합하여 사용했다. 애플은 1995년에 딜런 개발을 종료했지만, 고급 통합 개발 환경(IDE)을 포함한 "기술 공개" 버전(Apple Dylan TR1)을 제공했다.
할리퀸은 마이크로소프트 윈도우용 상용 IDE를 출시했고, 카네기 멜론 대학교는 유닉스 시스템용 오픈 소스 컴파일러인 Gwydion Dylan을 출시했다. 이 두 구현은 모두 현재 오픈 소스이며, 할리퀸 구현은 Open Dylan으로 이름이 변경되어 딜런 해커스라는 자원 봉사자 그룹이 유지 관리하고 있다.
딜런 언어는 코드명 Ralph였으며, 제임스 조아킨은 "DYnamic LANguage"의 약자로 딜런이라는 이름을 선택했다.
2. 1. 개발 배경
딜런은 1990년대 초 애플을 주축으로 한 그룹에 의해 개발되었다. 개발 당시에는 애플 뉴턴 컴퓨터에 사용될 예정이었지만, 딜런 구현이 충분히 성숙되지 못하여 뉴턴은 대신 C와 월터 스미스가 개발한 뉴턴스크립트를 혼합하여 사용했다. 애플은 1995년에 딜런 개발을 종료했지만, 고급 통합 개발 환경(IDE)을 포함한 "기술 공개" 버전(Apple Dylan TR1)을 제공했다.두 개의 다른 그룹이 언어 설계에 기여하고 구현을 개발했다. 할리퀸은 마이크로소프트 윈도우용 상용 IDE를 출시했고, 카네기 멜론 대학교는 유닉스 시스템용 오픈 소스 컴파일러인 Gwydion Dylan을 출시했다. 이 두 구현 모두 현재 오픈 소스이다. 할리퀸 구현은 현재 Open Dylan으로 이름이 변경되었으며, 딜런 해커스라는 자원 봉사자 그룹에 의해 유지 관리되고 있다.
딜런 언어는 코드명 Ralph였다. 제임스 조아킨은 "DYnamic LANguage"의 약자로 딜런이라는 이름을 선택했다.
2. 2. 애플의 개발 중단과 오픈 소스 커뮤니티
딜런은 1990년대 초 애플을 주축으로 한 그룹에 의해 개발되었다. 개발 당시에는 애플 뉴턴 컴퓨터에 사용될 예정이었지만, 딜런 구현이 충분히 성숙되지 못하여 뉴턴은 대신 C와 월터 스미스가 개발한 뉴턴스크립트를 혼합하여 사용했다. 애플은 1995년에 딜런 개발을 중단했지만, 고급 통합 개발 환경(IDE)을 포함한 "기술 공개" 버전(Apple Dylan TR1)을 제공했다.언어 설계와 구현에는 다른 두 그룹도 기여했다. 할리퀸은 마이크로소프트 윈도우용 상용 IDE를 출시했고, 카네기 멜론 대학교는 유닉스 시스템용 오픈 소스 컴파일러인 Gwydion Dylan을 출시했다. 이 두 구현은 모두 현재 오픈 소스이다. 할리퀸 구현은 현재 Open Dylan으로 이름이 변경되었으며, 딜런 해커스라는 자원 봉사자 그룹이 유지 관리하고 있다.
2. 3. 명칭의 유래
딜런 언어의 코드명은 Ralph였다.[1] 제임스 조아킨(James Joaquin)은 "DYnamic LANguage"의 약자로 딜런이라는 이름을 선택했다.[1]3. 문법
딜런의 문법은 리스프의 영향을 많이 받았다. 초기에는 S-표현식 기반의 리스프와 유사한 접두사 구문을 사용했으나, 더 많은 프로그래머들에게 친숙하게 다가가기 위해 언어 설계 완료 시점에 ALGOL과 유사한 구문으로 변경되었다. 이 구문은 마이클 칼(Michael Kahl)이 설계했으며, 딜런 레퍼런스 매뉴얼에 자세히 설명되어 있다.
3. 1. 어휘 구조
딜런은 대소문자를 구분하지 않는다. 딜런의 어휘 구문은 여러 단어로 된 식별자의 구성 부분을 연결하기 위해 하이픈 (마이너스) 기호를 사용하는 명명 규칙을 허용한다 (때로는 "리습 케이스" 또는 "케밥 케이스"라고도 한다). 이 규칙은 리스프 언어에서 흔히 사용된다.딜런은 영숫자 문자와 하이픈 마이너스 기호 외에도 다양한 비영숫자 문자를 식별자의 일부로 사용할 수 있다. 식별자는 이러한 비영숫자 문자로만 구성될 수 없다. 모호성이 있는 경우 공백이 사용된다.
3. 2. 예제 코드
dylandefine class
4. 모듈과 네임스페이스
딜런을 비롯한 일부 언어는 별도의 명시적인 네임스페이스 또는 모듈 시스템을 통해 캡슐화를 수행한다.
딜런에서 컴파일 단위와 가져오기 단위의 개념은 분리되어 있으며, 클래스는 이 둘과 특별한 관련이 없다. ''라이브러리''는 함께 컴파일하고 처리해야 하는 항목을 정의하는 반면, ''모듈''은 네임스페이스를 정의한다. 프로그래머는 원하는 대로 클래스를 모듈에 함께 배치하거나 여러 모듈에 걸쳐 배치할 수 있다. 종종 클래스에 대한 완전한 정의는 단일 모듈에 존재하지 않고, 선택적으로 함께 수집되는 여러 모듈에 걸쳐 있기도 하다. 다른 프로그램은 필요에 따라 동일한 클래스의 다른 정의를 가질 수 있다.
예를 들어, `String`에 대한 정규 표현식(regex) 지원을 위한 추가 라이브러리를 생각해 보자. 일부 언어에서는 문자열에 기능을 포함하려면 해당 기능을 `String` 네임스페이스에 추가해야 한다. 이렇게 하면 `String` 클래스가 커지고, 정규 표현식을 사용할 필요가 없는 함수도 증가된 라이브러리 크기에 대한 "대가"를 치러야 한다. 이러한 이유로, 이런 종류의 추가 기능은 일반적으로 자체 네임스페이스와 객체에 배치된다. 이 접근 방식의 단점은 새로운 기능이 더 이상 `String`의 ''일부''가 아니라는 것이다. 대신 별도로 호출해야 하는 자체 함수 집합에 격리된다. 객체 지향 관점에서 자연스러운 구성인 `myString.parseWith(myPattern)` 대신 `myPattern.parseString(myString)`과 같은 것을 사용하며, 이는 효과적으로 순서를 반전시킨다.
딜런에서는 동일한 코드에 대해 많은 인터페이스를 정의할 수 있다. 예를 들어, 문자열 연결 메서드는 String 인터페이스와 다양한 클래스의 서로 다른 모든 연결 함수를 함께 수집하는 "concat" 인터페이스에 모두 배치할 수 있다. 이는 함수가 매우 다양한 객체 유형에 적용되는 경향이 있는 수학 라이브러리에서 더 일반적으로 사용된다.
인터페이스 구문의 더 실용적인 사용법은 모듈의 공개 및 비공개 버전을 구축하는 것이다. 이는 다른 언어에서는 문제가 발생하여 구문을 추가하는 ''임시방편'' 기능으로 포함된다. 딜런에서는 모든 함수 호출을 단순히 "Private" 또는 "Development" 인터페이스에 배치하고, `Public`에서 공개적으로 접근 가능한 함수를 수집할 수 있다. Java 또는 C++(C++)에서 객체의 가시성은 코드에서 정의되므로, 유사한 변경을 지원하려면 프로그래머는 정의를 완전히 다시 작성해야 하며 동시에 두 버전을 가질 수 없다.
5. 클래스
딜런에서 클래스는 대부분의 객체 지향 언어와 유사하게 객체의 '슬롯'(데이터 멤버, 필드, ivar 등)을 설명한다. 모든 슬롯에 대한 접근은 스몰토크와 같이 메서드를 통해 이루어진다. 슬롯 이름을 기반으로 기본 getter 및 setter 메서드가 자동으로 생성된다. 대부분의 다른 객체 지향 언어와 달리, 클래스에 적용 가능한 다른 메서드는 종종 클래스 외부에서 정의되므로 딜런의 클래스 정의는 일반적으로 저장소의 정의만 포함한다. 예를 들어:
```dylan
define class
slot title ::
slot position ::
end class;
```
이 예제에서는 "<window>" 클래스가 정의된다. <class name> 구문은 클래스 이름을 눈에 띄게 하기 위한 관례일 뿐이며, 꺾쇠 괄호는 클래스 이름의 일부일 뿐이다. 반면에 일부 언어에서는 클래스 이름의 첫 글자를 대문자로 표시하거나 이름 앞에 'C' 또는 'T'를 붙이는 것이 관례이다. <window>는 단일 클래스인 <view>에서 상속되며, 창 제목에 대한 문자열을 저장하는 `title`과 창의 한쪽 모서리에 대한 X-Y 점을 저장하는 `position`의 두 개의 슬롯을 포함한다. 이 예제에서 제목에는 기본값이 지정되어 있지만 위치는 그렇지 않다. 선택적 'init-keyword' 구문을 사용하면 프로그래머가 클래스의 객체를 인스턴스화할 때 슬롯의 초기 값을 지정할 수 있다.
C++나 Java와 같은 언어에서는 클래스도 인터페이스를 정의한다. 이 경우 위의 정의에는 명시적인 지침이 없으므로 두 언어 모두에서 슬롯 및 메서드에 대한 접근은 `protected`로 간주된다. 즉, 하위 클래스에서만 사용할 수 있다. 관련 없는 코드가 창 인스턴스를 사용할 수 있도록 하려면 `public`으로 선언해야 한다.
딜런에서는 이러한 종류의 가시성 규칙이 코드의 일부가 아니라 모듈/인터페이스 시스템의 일부로 간주된다. 이것은 상당한 유연성을 더한다. 예를 들어 초기 개발 중에 사용된 한 인터페이스는 모든 것을 공개로 선언할 수 있는 반면, 테스트 및 배포에 사용된 인터페이스는 이를 제한할 수 있다. C++ 또는 Java에서는 이러한 변경 사항이 소스 코드 변경을 필요로 하므로 사람들이 그렇게 하지 않지만, 딜런에서는 완전히 관련 없는 개념이다.
이 예제에서는 사용하지 않지만 딜런은 다중 상속도 지원한다.
6. 메서드와 제네릭 함수
딜런에서 메서드는 특정 클래스에만 연결되어 있지 않다. 메서드는 클래스 외부에 존재하며, 다중 디스패치(멀티메서드)를 기반으로 모든 인수의 유형에 따라 호출될 메서드가 선택된다. 즉, 메서드는 컴파일 시간에 알려지지 않아도 되며, 사용자의 필요에 따라 함수를 사용할 수도 있고 그렇지 않을 수도 있다.
자바에서는 동일한 메서드가 특정 클래스 안에 격리된다. 해당 기능을 사용하려면 프로그래머는 해당 클래스를 ''import''하고 메서드를 호출하기 위해 명시적으로 참조해야 한다. 해당 클래스를 컴파일 시간에 사용할 수 없거나 알 수 없는 경우 애플리케이션은 컴파일되지 않는다.
딜런에서 코드는 ''함수'' 내의 저장소에서 격리된다. 많은 클래스에는 자체 함수를 호출하는 메서드가 있어 다른 객체 지향 언어와 유사하게 보이고 느껴진다. 그러나 코드는 특정 클래스에 연결되지 않고 누구든지 기본적으로 호출할 수 있다는 의미에서 ''제네릭 함수''에 위치할 수도 있다. 다음은 특정 제네릭 함수를 클래스의 메서드에 연결하는 방법의 예시이다.
```text
define method turn-blue (w ::
w.color := $blue;
end method;
```
이 정의는 다른 언어의 정의와 유사하며 `<window>` 클래스 내에 캡슐화될 가능성이 크다. `:=` setter 호출은 `color-setter($blue, w)`에 대한 구문 설탕이다.
제네릭 메서드의 유용성은 더 일반적인 예를 통해 알 수 있다. 예를 들어, 대부분의 언어에서 흔히 사용되는 함수 중 하나는 객체에 대한 사람이 읽을 수 있는 형식을 반환하는 `to-string`이다. 예를 들어, 창은 제목과 괄호 안의 위치를 반환할 수 있고, 문자열은 자체를 반환할 수 있다. 딜런에서 이러한 메서드는 " `to-string` "이라는 단일 모듈로 모두 수집될 수 있으므로 이 코드를 클래스 자체의 정의에서 제거할 수 있다. 특정 객체가 `to-string`을 지원하지 않는 경우 `to-string` 모듈에 쉽게 추가할 수 있다.
7. 확장성
딜런은 프로그래머가 별도의 파일에 함수를 정의하여 기존 클래스에 기능을 추가할 수 있도록 한다. 예를 들어, 모든 `<string>`에 대한 맞춤법 검사 기능을 추가하고 싶을 때, C++이나 Java에서는 문자열 클래스의 소스 코드에 접근해야 한다. 하지만 이러한 기본 클래스는 소스 형태로 제공되는 경우가 드물다. 딜런(및 기타 "확장 가능한 언어")에서는 맞춤법 검사 메서드를 `spell-check` 모듈에 추가하여 `define method` 구문을 통해 적용할 수 있는 모든 클래스를 정의할 수 있다.[1] 이 경우 실제 기능은 문자열을 입력으로 받아 오류를 반환하는 단일 일반 함수로 정의될 수 있다. `spell-check` 모듈이 프로그램으로 컴파일되면 모든 문자열(및 기타 객체)에 추가 기능이 적용된다.[1]
8. Apple Dylan
참조
[1]
웹사이트
Julia: The Goldilocks language
https://increment.co[...]
Stripe
2020-08-23
[2]
서적
Dylan programming : an object-oriented and dynamic language
https://www.worldcat[...]
Addison-Wesley
1997
[3]
서적
The Dylan reference manual : the definitive guide to the new object-oriented dynamic language
https://www.worldcat[...]
Addison-Wesley Developers Press
1996
[4]
서적
Object-oriented programming languages : interpretation
https://www.worldcat[...]
Springer
2007
[5]
웹인용
Julia: The Goldilocks language
https://increment.co[...]
Stripe
2020-08-23
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com