아이오 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
아이오(Io)는 2002년 스티브 데코르테가 개발한 프로그래밍 언어이다. 개념적 통합과 동적 언어를 탐구하며 단순성과 유연성을 중시한다. 순수 객체 지향 프로토타입 언어로서 코드-애즈-데이터, 호모이코닉 특징을 가지며, 고차 함수, 액터 기반 동시성, 예외 처리 등을 지원한다. 높은 이식성을 가지며, 동적 로딩, 가상 머신, 정규 표현식을 지원한다. 메시지 전달 언어이며, 메서드 호출은 괄호 없이, 인수가 있을 경우 괄호 안에 인수를 넣어 표현한다. 메서드와 블록을 통해 익명 함수를 생성하며, 차등 상속 방식을 통해 객체를 생성한다.
더 읽어볼만한 페이지
- 2002년 개발된 프로그래밍 언어 - F 샤프
F#은 .NET 플랫폼에서 실행되는 크로스 플랫폼, 오픈 소스 프로그래밍 언어로서 함수형, 명령형, 객체 지향 프로그래밍을 지원하며 데이터 분석, 웹 개발, 앱 개발 등 다양한 분야에서 활용된다. - 2002년 개발된 프로그래밍 언어 - 시스템베릴로그
SystemVerilog는 Verilog를 확장한 하드웨어 기술 및 검증 언어로서, 객체 지향 프로그래밍, 제약 기반 난수 생성, 어설션 등의 고급 검증 기능을 제공하여 하드웨어 설계 및 검증의 효율성을 높인다. - 프로토타입 기반 프로그래밍 언어 - 루아 (프로그래밍 언어)
루아는 C 언어와의 통합이 용이하고 작고 가벼운 확장 가능한 스크립트 언어로, 테이블 기반의 자료 구조를 통해 다양한 프로그래밍 패러다임을 지원하며 여러 분야에서 활용된다. - 프로토타입 기반 프로그래밍 언어 - LPC (프로그래밍 언어)
LPC는 1989년 Lars Pensjö가 개발한 객체 지향 프로그래밍 언어로, C와 유사한 문법을 가지며 MUD 게임 개발에 주로 사용된다. - 동적 프로그래밍 언어 - PHP
PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다. - 동적 프로그래밍 언어 - 펄
펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
아이오 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
![]() | |
패러다임 | 객체 지향 프로토타입 기반 |
설계자 | Steve Dekorte |
개발자 | Steve Dekorte, Jonathan Wright, Jeremy Tregunna |
발표 연도 | 2002년 |
최신 버전 | 20170906 |
최신 버전 발표일 | 2017년 9월 6일 |
최신 미리보기 버전 | 2019.05.22-alpha |
최신 미리보기 버전 발표일 | 2019년 5월 22일 |
타입 | 동적, 강타입 |
플랫폼 | IA-32 x86-64 ARM .NET CLR |
운영 체제 | Windows macOS |
라이선스 | BSD 3-조항 |
구현체 | Io(http://iolanguage.org/) Io.NET(https://web.archive.org/web/20110716175739/http://synrc.com/io/index.htm) |
영향을 받은 언어 | Smalltalk NewtonScript(https://en.wikipedia.org/wiki/NewtonScript) Self Lua Lisp Python Act1 |
영향을 준 언어 | Ioke Potion |
2. 역사
아이오는 2002년 3월 7일경 스티브 데코르테(Steve Dekorte)가 친구 드루 넬슨(Dru Nelson)의 셀(Cel) 언어 개발을 돕다가 만들게 되었다. 데코르테는 프로그래밍 언어 작동 방식에 대한 이해를 높이기 위해 소형 언어를 직접 만드는 방법을 택했다.
아이오는 개념적 통합과 동적 언어 탐구를 목표로 하므로, 성능보다는 단순성과 유연성을 우선시하는 경향이 있다.[1]
3. 철학
4. 특징
5. 문법
아이오는 메시지 전달 언어이며, 주석을 제외한 모든 것은 메시지이다. 모든 메시지는 수신자에게 전송된다.
가장 단순한 형태의 Io 프로그램은 하나의 식별자로 구성된다.
```io
doStuff
```
위의 `doStuff`는 메서드이며, 인자가 없으므로 괄호를 명시적으로 사용할 필요가 없다. 인자가 있는 경우는 다음과 같이 나타낼 수 있다.
```io
doStuff(42)
```
다음은 "version" 메시지가 "System" 객체로 전송되는 예시이다.
```io
System version
```
연산자는 메서드 호출의 특수한 형태이다. Io 파서는 인터프리터에 의해 정의된 연산자 집합을 가로채서 메서드 호출로 변환한다. 예를 들어,
```io
1 + 5 * 8 + 1
```
위 코드는 아래와 같이 변환된다.
```io
1 +(5 *(8)) +(1)
```
Io의 모든 연산자는 메서드이며 (할당 연산자 ":=" 와 "="는 제외), 연산자 우선 순위는 C 언어의 우선 순위와 동일하다. 명시적인 괄호는 편의를 위해 사용하지 않아도 된다.
5. 1. 메서드와 블록
아이오(Io)에는 익명 함수를 만드는 두 가지 방법으로 메서드와 블록이 있다. 이 둘은 범위를 제외하고는 거의 동일하다. 블록은 정적 스코프를 가지는 반면, 메서드는 동적 스코프를 갖는다.메서드와 블록 모두 고차 함수이다.[1]
6. 예제
io
// C++ 스타일의 주석을 사용할 수 있다.
# 쉘 스타일의 주석도 가능하다.
/* C 언어 스타일도 가능하다. */
for(i, 1, 10, i print) // 1부터 10까지의 숫자를 표시한다.
x := Object clone // 새로운 슬롯을 만들 때는 ':='를 사용한다.
x = Map clone // 덮어쓸 때는 '='를 사용한다.
x prettyprint := method( // 인수가 없는 메서드를 만든다.
foreach(key, value, write(key, ": ", value, "\n")) // 맵에서 루프를 돈다.
)
x atPut("hi", 1) // 키와 값의 쌍을 맵에 넣는다.
x atPut("hello", 2)
x prettyprint
/* 출력은 다음과 같다.
hi: 1
hello: 2
- /
```[1]
6. 1. Hello, world!
io"Hello, world!" println
```[1]
6. 2. 객체 생성
새로운 객체는 객체를 복제하여 생성된다. Io에서는 특히 새롭고 빈 객체가 생성되고, 부모 객체와의 차이점만 새 객체 내에 저장된다. 이러한 동작을 차등 상속이라고 한다. 이러한 동작의 예는 다음과 같다.[1]```io
A := Object clone // "A"라는 새롭고 빈 객체를 생성한다.
6. 3. 팩토리얼 함수
다음은 재귀 호출을 사용하지 않고 팩토리얼을 계산하는 Io 코드이다.factorial := method(n,
if(n == 0, return 1)
res := 1
Range 1 to(n) foreach(i, res = res * i)
)
`res * i`를 `res`에 할당하는 것이 마지막 작업이므로, 함수는 암묵적으로 결과를 반환한다. 명시적인 return 문은 필요하지 않다. 위 코드는 범위를 사용한다.
6. 3. 1. 비재귀적 팩토리얼 함수
iofactorial := method(n,
if(n == 0, return 1)
res := 1
for(i, 1, n, res = res * i)
)
```
`Range` 대신 `for` 루프를 사용하면 더 빠르다. `res * i`를 `res`에 할당하는 작업이 마지막이므로, 명시적인 return 문은 필요하지 않다.[1]
6. 3. 2. 기타 예제
io"Hello, world!" println
```
새로운 객체는 클로닝으로 생성된다. Io에서는 새로운 빈 객체가 만들어질 때, 그 부모와의 차이점만 새로운 객체에 저장된다. 이러한 방식을 차분 상속이라고 부른다. 다음은 예시이다.
```io
A := Object clone // 새로운 빈 객체 "A"를 만든다
```
재귀를 사용하지 않는 팩토리얼 프로그램은 다음과 같다.
```io
factorial := method(n,
if(n == 0, return 1)
res := 1
n to(1) foreach(i, res = res * i)
res
)
```
위 예제에서는 range를 사용하지만, for 루프가 더 빠르다. 또 다른 예시는 다음과 같다.
```io
// C++ 스타일의 주석을 사용할 수 있다
# 쉘 스타일의 주석도 가능하다
/* C 언어 스타일도 가능하다 */
for(i, 1, 10, i print) // 1부터 10까지의 숫자를 표시
x := Object clone // 새로운 슬롯을 만들 때는 ':='를 사용한다
x = Map clone // 덮어쓸 때는 '='를 사용한다
x prettyprint := method( // 인수가 없는 메서드를 만든다
foreach(key, value, write(key, ": ", value, "\n")) // 맵에서 루프를 돈다
)
x atPut("hi", 1) // 키와 값의 쌍을 맵에 넣는다
x atPut("hello", 2)
x prettyprint
/* 출력은 다음과 같다:
hi: 1
hello: 2
- /
참조
[1]
웹사이트
Io Releases
https://github.com/I[...]
2020-02-06
[2]
문서
Io Programming Guide
http://iolanguage.or[...]
[3]
웹사이트
Io Programming: Writing Addons
https://en.wikibooks[...]
2023-06-22
[4]
웹사이트
io guide
https://iolanguage.o[...]
2023-06-22
[5]
간행물
The Reflective Programming Language Io
http://homes.dico.un[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com