Mercury(프로그래밍 언어)
Mercury (programming language)![]() | |
패러다임 | 논리, 기능, 객체 지향 |
---|---|
설계자 | 졸탄 소모기 |
개발자 | 멜버른 대학교 |
처음 등장한 | 1995년 4월 8일, | 전(
안정된 릴리스 | 22.01.3 / 2022년 7월9일; 전( |
타이핑 분야 | 강력, 정전기, 다형성 |
구현 언어 | 수성. |
플랫폼 | IA-32, x86-64, ARM, Sparc64, Java, CLI |
OS | 크로스 플랫폼:Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android |
면허증. | GPL 컴파일러, LGPL 표준 라이브러리 |
파일 이름 확장자 | .m |
웹 사이트 | www |
주요 구현 | |
멜버른 머큐리 컴파일러 | |
영향을 받다 | |
프롤로그, 호프, 하스켈 |
Mercury는 실제 사용을 위해 만들어진 함수 논리 프로그래밍 언어입니다.첫 번째 버전은 멜버른 대학 컴퓨터과학과에서 퍼거스 헨더슨, 토마스 콘웨이, 졸탄 소모지에 의해 Somogy의 감독 하에 개발되어 1995년 4월 8일에 출시되었습니다.
머큐리는 순수하게 선언적인 논리 프로그래밍 언어이다.그것은 프롤로그와 하스켈 [1]둘 다와 관련이 있다.강력한 정적 다형성 시스템과 강력한 모드 및 결정론 시스템을 특징으로 합니다.
공식 구현인 멜버른 Mercury 컴파일러는 Linux, macOS 및 Windows용 등 대부분의 Unix 및 Unix 유사 플랫폼에서 사용할 수 있습니다.
개요
Mercury는 논리 프로그래밍 언어 Prolog를 기반으로 합니다.Selective Linear Refinit Clause Resolution(SLD) 알고리즘과 같은 구문과 기본 개념을 가지고 있습니다.강력한 타입과 모드를 가진 Prolog의 순수한 서브셋으로 볼 수 있습니다.따라서 기능과 런타임 효율성 면에서 이전 제품과 비교되는 경우가 많습니다.
이 언어는 소프트웨어 엔지니어링 원리를 사용하여 설계되었습니다.Prolog의 원래 구현과는 달리 직접 해석되지 않고 별도의 컴파일 단계가 있습니다.이것에 의해, 프로그램을 실행하기 전에 보다 광범위한 에러를 검출할 수 있습니다.엄격한 정적 유형 및 모드[1] 시스템과 모듈 시스템을 갖추고 있습니다.
컴파일 시에 취득한 정보(타입이나 모드등)를 사용하는 것으로써, 통상, Mercury 로 기술된 프로그램은 [2][3]Prolog 로 기술된 동등한 프로그램보다 큰 속도로 동작합니다.그것의 저자들은 수성이 세계에서 가장 빠른 논리 언어라고 주장한다.[1]
Mercury는 Prolog와는 달리 순전히 선언적인 언어입니다.그것은 다음과 같은 논리적인 Prolog 스테이트먼트가 없기 때문입니다.!
(컷) 및 명령어 입력/출력(I/O)입니다.이것에 의해, 고도의 스태틱 프로그램 분석과 프로그램 최적화가 가능하게 됩니다.여기에는 컴파일 타임 가비지 [4]컬렉션이 포함됩니다만, 특정의 프로그래밍 구성(예를 들면[dubious ], 디폴트로 복수의 옵션을 개입시킨 스위치)을 표현하기 어려워집니다.(Mercury에서는 불순한 기능을 사용할 수 있지만, 이것은 주로 외국어 코드를 호출하는 방법으로 사용됩니다.모든 불순한 코드는 명시적으로 표시되어야 합니다.)일반적으로 불순한 연산(입출력 등)은 모든 관련 코드를 통해 더미 월드 값을 스레드화함으로써 선형 유형을 사용하여 수성의 순수 구조를 사용하여 표현된다.
Mercury에서 작성된 주목할 만한 프로그램으로는 Mercury 컴파일러와 Prince XML 포맷터가 있습니다.소프트웨어 회사인 Mission Critical IT도 2000년부터 Mercury를 사용하여 엔터프라이즈 애플리케이션과 Ontology-Driven 소프트웨어 개발 플랫폼인 ODASE를 [5]개발하고 있습니다.
백엔드
Mercury에는 몇 가지 백엔드가 있어 Mercury 코드를 다음과 같은 여러 언어로 컴파일할 수 있습니다.
생산 수준
과거.
- GCC 백엔드를 통한 어셈블리 언어
- Aditi는 멜버른 대학에서 연역 데이터베이스 시스템도 개발했습니다.Aditi를 [citation needed]지원하는 마지막 버전은 Mercury-0.12.2입니다.
- 의 Common Intermediate Language(CIL; 공통 중간 언어)NET 프레임워크
- 얼랑
또한 Mercury는 외국어 인터페이스를 갖추고 있어 선택한 백엔드에 따라 다른 언어의 코드를 Mercury 코드와 연결할 수 있습니다.다음과 같은 외국어가 가능합니다.
백엔드 | 외국어 |
---|---|
C(양쪽 레벨) | C |
자바 | 자바 |
얼랑 | 얼랑 |
IL | Common Intermediate Language(CIL; 공통 중간 언어) 또는 C# |
그런 다음 이러한 언어에서 다른 언어를 호출하여 인터페이스할 수 있습니다.단, 이것은 다른 백엔드에 대해 외국어 코드를 여러 번 쓸 필요가 있음을 의미합니다.그렇지 않으면 백엔드 간의 이식성이 상실됩니다.
가장 일반적으로 사용되는 백엔드는 원래 로우 레벨C 백엔드입니다
예
:- 모듈 안녕. :- 인터페이스. :- import_module 이오. :- 프리드 주된(이오::di, 이오::uo) 이 멈추다. :- 실행. 주된(!입출력) :- 이오.write_string("안녕하세요, 월드!"\n, !입출력).
:- 모듈 파이브. :- 인터페이스. :- import_module 이오. :- 프리드 주된(이오::di, 이오::uo) 이 멈추다. :- 실행. :- import_module 인트. :- 기능하다 파이브(인트) = 인트. 파이브(N) = (한다면 N =< 2 그리고나서 1 또 다른 파이브(N - 1) + 파이브(N - 2)). 주된(!입출력) :- 이오.write_string("timeout(10) =", !입출력), 이오.write_int(파이브(10), !입출력), 이오.nl(!입출력). % 대신 io.format fibd(10) = %d\n", [i(10)를 사용할 수 있습니다.IO)
!IO
는 "상태 변수"로, 컴파일 시 구체적인 이름이 할당되는 변수 쌍에 대한 구문설탕입니다. 예를 들어, 위의 내용은 다음과 같습니다.
주된(IO0, 입출력) :- 이오.write_string("timeout(10) =", IO0, IO1), 이오.write_int(파이브(10), IO1, IO2), 이오.nl(IO2, 입출력).
발매일정
안정 릴리스 명명 방식은 최초 13개 안정 릴리스의 경우 0.1~0.13이었습니다.2010년 2월 Mercury 프로젝트는 출시 연도와 달을 사용하여 각각의 안정적인 출시 이름을 짓기로 결정했습니다.예를 들어 10.04는 2010년 4월에 출시된 릴리스용입니다.
또한 오늘의 개발 시스템 릴리즈(ROTD)의 정기적인 스냅샷도 자주 있습니다.
IDE 및 에디터 지원
- 개발자가 Vim 지원 제공
- Emacs용 플라이체크 라이브러리
- Eclipse IDE용 플러그인을 사용할 수 있습니다.
- NetBeans IDE에 플러그인을 사용할 수 있습니다.
「 」를 참조해 주세요.
- 또 다른 기능 논리 언어인 Curry
- 앨리스, 표준 ML의 방언
- Logtalk, 언어, Prolog의 객체 지향 확장으로 Prolog로 컴파일
- 오즈/모차르트, 다중 문자 언어
- Visual Prolog, 언어, Prolog의 강력한 객체 지향 확장자, 새로운 구문 포함
레퍼런스
- ^ a b c 머큐리 프로젝트 - 동기 부여
- ^ Mercury 프로젝트 - 벤치마크
- ^ Somogyi, Zoltan; Henderson, Fergus; Conway, Thomas (October–December 1996). "The execution algorithm of Mercury: an efficient purely declarative logic programming language". Journal of Logic Programming. Mercurylang.org. 29 (1–3): 17–64. CiteSeerX 10.1.1.46.9861. doi:10.1016/S0743-1066(96)00068-4. Retrieved 2008-08-30.
- ^ Mazur, Nancy (May 2004). Compile-time garbage collection for the declarative language Mercury (PDF) (Thesis). Katholieke Universiteit Leuven.
- ^ 미션 크리티컬 IT
- ^ Ralph Becket의 Mercury 튜토리얼에서 개작
외부 링크