유포리아 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
유포리아는 로버트 크레이그가 개발한 프로그래밍 언어이다. 1993년 버전 1.0이 출시되었으며, 2006년 오픈 소스화되었다. 유포리아는 학습 용이성, 32비트 메모리 구현, 디버깅 지원, 자동 메모리 관리 등을 특징으로 하며, 인터프리터 방식으로 실행된다. 원자, 시퀀스, 정수, 객체 등의 데이터 타입을 지원하며, 문자열은 정수의 시퀀스로 표현된다. 다양한 동적 데이터 집합 처리에 유용하며, 인공 지능, 수학 연구, 프로그래밍 교육 등 다양한 분야에서 활용된다.
더 읽어볼만한 페이지
- 1993년 개발된 프로그래밍 언어 - 루아 (프로그래밍 언어)
루아는 C 언어와의 통합이 용이하고 작고 가벼운 확장 가능한 스크립트 언어로, 테이블 기반의 자료 구조를 통해 다양한 프로그래밍 패러다임을 지원하며 여러 분야에서 활용된다. - 1993년 개발된 프로그래밍 언어 - 비주얼 베이직 포 애플리케이션
비주얼 베이직 포 애플리케이션(VBA)은 마이크로소프트 오피스 제품군 등에서 매크로 생성 및 자동화 작업을 위해 사용되는 프로그래밍 언어로서, 여러 응용 프로그램에서 자동화 솔루션 구축, 오피스 프로그램 기능 확장, 사용자 정의 함수 제작, 다른 응용 프로그램과의 통합 등에 활용되며 보안 문제도 포함한다. - 자유 교육용 소프트웨어 - GRASS GIS
GRASS GIS는 래스터 및 벡터 데이터 처리를 지원하는 오픈 소스 GIS 소프트웨어로, 위상 구조 기반 벡터 모델을 특징으로 하며 학계, 연구 기관, 정부 기관 등에서 다양한 분야에 활용된다. - 자유 교육용 소프트웨어 - 스콜리눅스
스콜리눅스는 2001년 7월 2일에 시작된 교육용 소프트웨어 개발 프로젝트로, IT에 관심 있는 학생들을 위해 소스 코드 접근성과 번역을 강조하며 데비안 기반의 다양한 버전을 개발해 왔다. - 베이직 프로그래밍 언어 계열 - VB스크립트
VB스크립트는 마이크로소프트에서 개발한 스크립트 언어로, 인터넷 익스플로러의 클라이언트 스크립트 언어 및 액티브 서버 페이지의 표준 언어로 사용되었으나, 윈도우 클라이언트 지원 중단 발표로 향후 윈도우 릴리스에서 제거될 예정이다. - 베이직 프로그래밍 언어 계열 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다.
유포리아 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
![]() | |
이름 | Euphoria 유포리아 |
종류 | 프로그래밍 언어 |
디자인 | |
설계자 | Jeremy Cowgar, Robert Craig (원작자), Matt Lewis, Derek Parnell |
개발자 | http://openeuphoria.org/ |
등장 시기 | 1993년 |
릴리스 | |
최신 버전 | 4.1.0 |
최신 릴리스 날짜 | 2021년 3월 1일 |
특징 | |
패러다임 | 명령형 프로그래밍, 절차적 프로그래밍 |
타이핑 | 정적, 동적 |
호환 운영체제 | |
운영체제 | 크로스 플랫폼: Win32, 리눅스, macOS, FreeBSD, NetBSD, OpenBSD |
기타 정보 | |
라이선스 | BSD |
파일 확장자 | .e, .ex, .exw, .edb |
영향을 받은 언어 | BASIC |
영향을 준 언어 | http://phix.x10.mx |
웹사이트 | openeuphoria.org |
2. 역사
유포리아는 로버트 크레이그가 아타리 메가 ST에서 개인 프로젝트로 개발한 프로그래밍 언어이다. 이 언어의 많은 설계 아이디어는 크레이그가 토론토 대학교 컴퓨터 과학 석사 논문에서 제시한 것이다. 크레이그의 논문은 함수형 프로그래밍 언어에 대한 존 바커스의 연구에 큰 영향을 받았다.
유포리아는 단순성, 가독성, 빠른 개발 및 성능에 중점을 둔 다목적 절차적 프로그래밍 언어이다.
크레이그는 아타리 구현을 16비트 DOS 플랫폼으로 포팅했고, 1993년 7월에 유포리아 버전 1.0을 처음 출시했다. 당시에는 독점 소프트웨어 라이선스로 배포되었다. 크레이그는 초기 아타리 구현을 "원시적"이라고 표현하며 공개적으로 배포하지 않았다. 유포리아는 크레이그의 회사인 Rapid Deployment Software (RDS)와 웹사이트 rapideuphoria.com을 통해 개발 및 배포되었다. 2006년 10월, RDS는 유포리아 버전 3을 출시하고, 오픈 소스 소프트웨어 라이선스로 배포한다고 발표했다.
RDS는 유포리아 개발을 계속하여 2007년 8월에 버전 3.1.1을 출시했다. 이후 RDS는 유포리아 개발을 중단했고, openEuphoria Group이 개발을 이어받았다. openEuphoria Group은 2010년 12월에 버전 4를 출시하고, 새로운 로고와 마스코트를 공개했다.
버전 3.1.1은 DOS 플랫폼을 지원하는 유포리아의 마지막 버전이다.
유포리아는 "End-User Programming with Hierarchical Objects for Robust Interpreted Applications"의 두문자어이지만, 후문자어라는 의혹도 있다.
유포리아 인터프리터는 원래 C로 작성되었다. 2004년 11월, 버전 2.5 출시와 함께 유포리아 인터프리터는 프런트 엔드 파서와 백 엔드 인터프리터로 나뉘었다. 현재 프런트 엔드는 유포리아로 작성되었으며(유포리아-C 번역기와 바인더와 함께 사용), 주요 백 엔드와 런타임 라이브러리는 C로 작성되었다.
3. 특징
유포리아의 특징은 다음과 같다.특징 단순한 타입 제공 (atom, sequence, integer, object) 동적/정적 언어 세련되고 초보자도 다루기 쉬운 구문 디버거와 프로파일러의 표준 제공 각종 컬렉션 라이브러리 네임스페이스 기능, 오버라이드 수식어 중간 언어로 변환하여 인터프리터와 바인딩하여 배포 가능 C언어 라이브러리 루틴의 바인딩 Euphoria → C언어 소스 트랜슬레이터를 표준으로 제공 (gcc/Watcom C용) 소스 문서화 도구 EuDOC, creole 제공 (별도 배포) GUI 툴킷 래퍼 라이브러리 (IUP, GTK, wxWindows) 제공 (별도 배포) Euphoria로 개발된 위키/포럼 소프트웨어 Euweb (별도 배포) 유닛 테스트 도구 EuTEST의 표준 장착 사용료를 요구하지 않는 독립적인 실행 파일을 생성하여 배포할 수 있다.
3. 1. 설계 목표 및 기능
유포리아는 단순성, 가독성, 빠른 개발 및 성능에 중점을 둔 다목적 절차적 프로그래밍 언어이다. 이는 다음과 같은 방법으로 구현된다.
유포리아는 다음과 같은 설계 목표와 기능을 가지고 개발되었다.
유포리아의 특징은 다음과 같다.
4. 실행 방식
유포리아는 다음과 같은 실행 방식을 지원한다.
5. 데이터 타입
유포리아는 단순성을 위해 4개의 내장 데이터 타입(원자, 시퀀스, 정수, 객체)을 사용하며, 자동 가비지 컬렉션을 구현한다.[1] 이러한 특징들은 유포리아를 학습하기 쉽고, 일관된 고수준 구성을 가지도록 돕는다. 또한, 이종 컬렉션 타입(시퀀스)을 지원한다.[1]
타입 | 설명 |
---|---|
원자(Atom) | 31비트 부호 있는 정수 또는 64비트 IEEE 부동 소수점으로 구현된 숫자이다. |
시퀀스(Sequence) | 0개 이상의 원자(atom) 또는 다른 시퀀스(sequence)를 요소로 가지는 배열이다. |
정수(Integer) | -1073741824에서 1073741823 범위의 31비트 부호 있는 정수이다. |
객체(Object) | 원자, 시퀀스, 정수 등 모든 타입을 포함할 수 있는 일반적인 데이터 타입이다. |
5. 1. 기본 데이터 타입
유포리아는 두 가지 기본 데이터 형식을 가지고 있다.- '''원자(Atom)''' – 31비트 부호 있는 정수 또는 64비트 IEEE 부동 소수점으로 구현된 숫자이다. 유포리아는 현재 값에 따라 정수와 부동 소수점 표현 사이를 동적으로 변경한다.
- '''시퀀스(Sequence)''' – 0개 이상의 요소를 가진 벡터 (배열)이다. 각 요소는 ''원자(atom)''이거나 다른 ''시퀀스(sequence)''일 수 있다. 시퀀스의 요소 수는 고정되어 있지 않다(즉, 벡터/배열의 크기를 선언할 필요가 없다). 프로그램은 런타임 중에 필요에 따라 요소를 추가하거나 제거할 수 있다. 메모리 할당-해제는 참조 카운팅에 의해 자동으로 처리된다. 개별 요소는 대괄호로 묶인 인덱스 값을 사용하여 참조된다. 시퀀스의 첫 번째 요소는 1의 인덱스를 갖는다[1]. 내장된 시퀀스 내부의 요소는 추가 대괄호 인덱스 값을 사용하여 참조되므로, X[3][2]는 X의 세 번째 요소인 시퀀스에 포함된 두 번째 요소를 나타낸다. 시퀀스의 각 요소는 ''객체'' 유형(아래 참조)이다.
유포리아에는 두 가지 추가 데이터 유형이 미리 정의되어 있다.
- '''정수(Integer)''' – -1073741824에서 1073741823(-230에서 230-1) 범위의 31비트 부호 있는 정수 값으로 제한된 ''원자(atom)'' 유형이다. ''정수(Integer)'' 데이터 유형은 ''원자(atom)'' 데이터 유형보다 더 효율적이지만, 동일한 범위의 값을 포함할 수는 없다. 문자는 정수로 저장된다. 예를 들어, ASCII-'A'를 코딩하는 것은 65를 코딩하는 것과 정확히 같다.
- '''객체(Object)''' – 위에서 언급한 모든 것(즉, ''원자(atom)'', ''시퀀스(sequence)'' 또는 ''정수(integer)'')을 포함할 수 있고 런타임 중에 다른 유형으로 변경될 수 있는 일반적인 데이터 유형이다.
문자열 데이터 유형은 없다. 문자열은 ''정수(integer)'' 값의 ''시퀀스(sequence)''로 표현된다. 그러나 리터럴 문자열이 프로그래밍에서 매우 흔하게 사용되기 때문에, 유포리아는 큰따옴표로 묶인 문자를 정수의 시퀀스로 해석한다. 따라서
"ABC"
는 코더가 다음과 같이 작성한 것과 같이 간주된다.
{'A', 'B', 'C'}
는 다음과 같다.
{65, 66, 67}
5. 2. 추가 데이터 타입
유포리아에는 두 가지 추가 데이터 유형이 미리 정의되어 있다.- '''정수(Integer)''' - -1073741824에서 1073741823 (-230에서 230-1) 범위의 31비트 부호 있는 정수 값으로 제한된 ''원자(atom)'' 유형. ''정수(Integer)'' 데이터 유형은 ''원자(atom)'' 데이터 유형보다 더 효율적이지만, 동일한 범위의 값을 포함할 수는 없다. 문자는 정수로 저장된다. 예를 들어, ASCII-'A'를 코딩하는 것은 65를 코딩하는 것과 정확히 같다.
- '''객체(Object)''' - 위에서 언급한 모든 것(즉, ''원자(atom)'', ''시퀀스(sequence)'' 또는 ''정수(integer)'')을 포함할 수 있고 런타임 중에 다른 유형으로 변경될 수 있는 일반적인 데이터 유형.
문자열 문자열 데이터 유형은 없다. 문자열은 ''정수(integer)'' 값의 ''시퀀스(sequence)''로 표현된다. 그러나 리터럴 문자열이 프로그래밍에서 매우 흔하게 사용되기 때문에, 유포리아는 큰따옴표로 묶인 문자를 정수의 시퀀스로 해석한다. 따라서
"ABC"
는 코더가 다음과 같이 작성한 것과 같이 간주된다.
{'A', 'B', 'C'}
는 다음과 같다.
{65, 66, 67}
5. 3. 문자열 표현
유포리아에는 별도의 문자열 데이터 타입은 없지만, 문자열은 정수 값의 ''시퀀스(sequence)''로 표현된다. 그러나 리터럴 문자열이 프로그래밍에서 매우 흔하게 사용되기 때문에, 유포리아는 큰따옴표로 묶인 문자를 정수의 시퀀스로 해석한다. 따라서"ABC"
는 코더가 다음과 같이 작성한 것과 같이 간주된다.
{'A', 'B', 'C'}
는 다음과 같다.
{65, 66, 67}
6. 문법
- 단순한 타입: atom, sequence, integer, object 타입을 제공한다.
- 동적/정적 언어: 동적 타입과 정적 타입을 모두 지원한다.
- 쉬운 구문: 초보자도 쉽게 사용할 수 있는 구문을 제공한다.
- 표준 도구: 디버거와 프로파일러를 기본으로 제공한다.
- 다양한 라이브러리: 각종 컬렉션 라이브러리를 제공한다.
- 네임스페이스 및 오버라이드: 네임스페이스 기능과 오버라이드 수식어를 지원한다.
- 배포: 중간 언어로 변환하여 인터프리터와 바인딩하여 배포할 수 있다.
- C 언어 연동: C 언어 라이브러리 루틴 바인딩을 제공하고, Euphoria → C 언어 소스 트랜슬레이터(gcc/Watcom C용)를 표준으로 제공한다.
- 기타 도구: 소스 문서화 도구 EuDOC, creole을 제공하며, GUI 툴킷 래퍼 라이브러리(IUP, GTK, wxWindows) 및 위키/포럼 소프트웨어 Euweb을 별도로 배포한다.
- 유닛 테스트: 유닛 테스트 도구 EuTEST를 기본으로 제공한다.
- 로열티 프리: 사용료 없이 독립적인 실행 파일을 생성하여 배포할 수 있다.
6. 1. 주석
프로그램 주석은 두 개의 하이픈(--)으로 시작하여 줄 끝까지 이어진다.6. 2. 예제 코드
프로그램 주석은 더블 하이픈(--)으로 시작하여 줄 끝까지 이어진다.다음 코드는 항목 그룹에서 오래된 항목을 찾는 것이다. 발견되면, 해당 항목 앞의 모든 요소와 뒤의 모든 요소를 연결하여 제거한다. 시퀀스의 첫 번째 요소는 인덱스 1을 가지며, $는 시퀀스의 길이(즉, 총 요소 수)를 나타낸다.
global function delete_item( object old, sequence group )
integer pos
- - 코드 시작 --
pos = find( old, group )
if pos > 0 then
group = group[1 .. pos-1] & group[pos+1 .. $]
end if
return group
end function
다음은 위 예제를 수정하여 오래된 항목을 새 항목으로 바꾸는 코드이다. 변수 ''old''와 ''new''는 객체로 정의되었으므로 ''원자'' 또는 ''시퀀스''가 될 수 있다. 함수는 모든 유형의 데이터 시퀀스에서 작동하며 외부 라이브러리가 필요하지 않으므로 유형 검사가 필요하지 않다.
global function replace_item( object old, object new, sequence group )
integer pos
- - 코드 시작 --
pos = find( old, group )
if pos > 0 then
group[pos] = new
end if
return group
end function
위 예제에서 볼 수 있듯이, 유포리아는 시퀀스 처리 기능을 통해 간결하게 코드를 작성할 수 있다. 다음 코드는 ''시퀀스'' 처리 기능의 일부를 보여준다.
group = group[1 .. pos-1] & group[pos+1 .. $]
''시퀀스''는 모든 유형의 집합을 포함할 수 있으며, 특수 함수 없이도 표현식에서 슬라이싱(''시퀀스''에서 데이터의 하위 집합을 가져오기 위해)하고 연결할 수 있다.
포인터가 사용되지 않고 첨자가 자동으로 검사되므로, 함수는 경계 밖의 메모리에 접근할 수 없다. 메모리 누수 가능성이 없으며, 자동 가비지 컬렉션이 지원된다.
7. 매개변수 전달
함수의 인수는 항상 값으로 전달된다. 참조로 전달하는 기능은 없지만, 시퀀스는 자동 카피-온-라이트 의미 체계를 가지므로 효율적으로 구현된다. 즉, 시퀀스를 루틴에 전달하면 처음에 해당 시퀀스에 대한 참조만 전달되지만, 루틴이 이 시퀀스 매개변수를 수정하는 시점에서 시퀀스가 복사되고 루틴은 원본의 복사본만 업데이트한다.
8. 활용 분야
유포리아는 다양한 유형의 동적 데이터 집합을 쉽게 처리하도록 설계되었으며, 특히 문자열 및 이미지 처리에 유용하다. 유포리아는 인공 지능 실험, 수학 연구, 프로그래밍 교육, 수천 개의 문자를 포함하는 글꼴 구현 등에 사용되었다. 유포리아 인터프리터의 상당 부분이 유포리아로 작성되었다.
9. 비교되는 언어
이들 언어는 유포리아와 마찬가지로 단순한 타입 제공, 동적/정적 언어 지원, 쉬운 구문, 디버거 및 프로파일러 제공, 다양한 라이브러리 지원 등과 같은 특징을 공유한다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com