마식(프로그래밍 언어)
Magik (programming language)마식어는 다중 상속과 다형성을 지원하는 객체지향 프로그래밍 언어로 동적으로 입력된다.스몰월드 지리정보시스템(GIS)의 일환으로 1989년 스몰월드 시스템즈(Smallworld Giography Information System)의 아서 찬스에 의해 설계·시행되었다.2000년 스몰월드의 인수에 이어 마식사는 현재 GE에너지에 의해 제공되고 있으며, 여전히 스몰월드 기술 플랫폼의 일부로 사용되고 있다.
마식(Inspiration Magik)은 1990년에 처음 도입되었으며, 수년간 개선되고 업데이트되었다.현재 버전은 5.2이다.
2012년 7월, 마식 개발자들은 자바 가상 머신에 마식 언어를 포팅하는 과정에 있다고 발표했다.성공적인 포팅은 같은 해 11월 오라클 Corporation에 의해 확인되었다.[1]
스몰토크와의 유사점
Magik 그 자체는 언어의 특징과 구조 면에서 Smalltalk와 일부 유사점을 공유한다: Magik 언어는 Magik 가상 머신에 의해 해석되는 바이트 코드로 편집된다.매직 가상 머신은 마이크로소프트 윈도우를 포함한 여러 플랫폼에서 이용 가능하며, 유닉스와 리눅스의 다양한 풍미도 있다.
매직은 콘솔을 기반으로 하며 응용 프로그램이 실행 중일 때도 코드를 즉시 수정할 수 있다.콘솔은 또한 마식코드를 실행하고 결과를 보는 데 사용될 수 있다.
컴파일된 코드는 이미지 파일이라는 단일 파일에 저장된다.각 이미지 파일은 이미지를 마지막으로 저장했을 때 컴파일된 바이트 코드와 세션 상태(예: 변수 값)를 보관한다.
언어 기능
평.
매직은 그 것을 사용한다.#코드의 섹션을 설명으로 표시하는 토큰:
# 댓글이다.
과제들
매직은 그 것을 사용한다.<<할당할 연산자:
a <1.234 b << b> + c << "foo" + "bar" # concat 문자열
명확하게 하기 위해, 이 표기법은 "a가 1.234가 된다" 또는 "b가 b + a가 된다"로 읽힌다.이 용어는 과제와 비교를 구분한다.
또한 Magik은 C:에서 발견된 것과 유사한 방식으로 작동하는 이 연산자의 압축 변형을 지원한다.
b +< a # b< b + a에 해당한다.
변수를 인쇄하려면 다음 명령을 사용하십시오.
<< "안녕"이라고 쓴 글.
기호
정수와 같은 전통적인 데이터 유형뿐만 아니라, Magik은 또한 기호를 구현한다.기호는 마식(Magik) 전체에서 객체를 고유하게 식별하기 위해 광범위하게 사용되는 특별한 토큰 데이터 유형이다.그것들은 결장에 의해 표현되고 그 뒤에 일련의 등장인물이 줄지어 나타난다.기호는 세로 막대 문자를 사용하여 이스케이프할 수 있다.예를 들면 다음과 같다.
a <<< : hello #>:헬로가 마주칠 때마다, 그것은 같은 예 b << : hello world이다.
동적 타이핑
Magik 변수는 C#에 있는 것처럼 입력되지 않으며 런타임에 다른 개체를 참조할 수 있다.마식(Magik)에 있는 모든 것은 물체(물체와 정수 등 원시형)의 구분이 없다.
a << 1.2 #> 부동 소수점 번호가 변수 'a' a << "1.2" # 나중에 문자열이 변수 'a'에 할당된다.
- 물건들
사물은 예시를 이용하여 마직에서 구현된다.예시는 자바와 같은 다른 프로그래밍 언어의 수업과 유사하지만 중요한 차이점이 있다.Magik은 다중 상속, 믹스인(데이터 없이 기능성을 구현)을 지원한다.새로운 인스턴스는 기존 인스턴스를 복제하여 만들어진다(일반적으로 예시되지만 꼭 예시될 필요는 없다.
문구를 사용하여 새로운 예시가 생성됨def_slotted_exemplar(), 예를 들어,
def_featted_object(:my_object, {:my_ba, 34}, {:data_b, "hello"}, {:parent_object_a, :parent_object_b}, {:parent_object_b} 이 코드 조각은 새로운 예시를 정의 할 것이다.my_object호출된 두 개의 슬롯(또는 필드)이 있는slot_a(34까지 사전 준비) 및slot_b("Hello"로 미리 지정됨)라는 두 개의 기존 예로부터 상속되는 것parent_object_a그리고parent_object_b.
비교
Magik은 모든 일반적인 논리 연산자를 구현한다.=,<,<=,>,>=,~=/<>몇 가지 특이한 것뿐만 아니라 비교를 위해.그_is그리고_isnt연산자는 값보다는 객체의 특정 인스턴스(instance) 또는 객체 참조를 비교하는 데 사용된다.
예를 들면 다음과 같다.
때문에 a와 b의 값이 같은지 A<><>"안녕하세요"b<><>a=b"안녕하세요")진정한(_true)을 반환하는 _is b#를 반환한 잘못된(_false)는 아니다와 같은 인스턴스로 b<><>"안녕하세요"b<><은 a=b)을 반환합니다 진정한(_true)때문에 값 중이며 a와 b는 동등한 _is b)을 반환합니다 진정한(_true)때문에 b는 할당해 주었다.특정 인스턴스a의 값보다는 a와 같은 목적의
방법들
문구를 사용하여 예시문에 방법을 정의한다._method그리고_endmethod:
_my_object.my_b(a, b) _ndmethod를 반환함
두 가지 방법을 공급하는 것이 관례다.new()(새 인스턴스를 생성하려면) 및init()(사례를 초기화하기 위해).
# 새로운 방법 _method person.new(이름, 나이)_return_clone.init(이름, 나이)_endmethod # initialize 방법._개인 _방법 person.init(이름, 나이) # 부모 구현을 호출한다._super.init(이름, 나이) # 슬롯을 초기화한다.<이름.age << 나이.age <> age <return _self_endmethod>
그_clone의 물리적 사본을 만들다.person이의를 제기하다그_super문장은 개체가 상위 예시에 대한 방법의 구현을 호출할 수 있도록 허용한다.객체는 다음을 사용하여 자신을 참조할 수 있다._self명세서물체의 슬롯은 점 표기법을 사용하여 접근하고 할당된다.
객체의 공용 인터페이스에 포함되지 않는 메서드는 다음을 사용하여 비공개로 표시할 수 있다._private명세서개인 방법은 다음에 의해서만 호출할 수 있다._self,_super그리고_clone.
선택적 인수는 다음을 사용하여 선언할 수 있다._optional명세서전달되지 않은 선택적 인수는 Magik에 의해 특수 객체에 할당됨_unset(null에 상당함).그_gather명령문은 선택적 인수 목록을 선언하는 데 사용될 수 있다.
_my_object.my_my_my(_message) _endmethod
반복
마기크에서_while,_for,_over,_loop그리고_endloop진술을 번복하다
block _local s< 0 _local i< 0 _ 반면 i는 100 _local s+< i+< 1 _endloop> s _endblock.
여기서 _그동안은 _루프(loop)와 _엔드루프(endroop)가 결합되어 있다.
_over values.my_my_my_my_my_my_my_my_object_m <>< endloop_return total endm <<my_object.newmethod m <1.0, 2, 3.0, 4) # x = 10.0
여기서 values.elements()는 값을 반복하는 데 도움이 되는 반복기다.
Magik 발전기에서는 반복기법이라고 불린다.새로운 반복기 방법은 다음을 사용하여 정의할 수 있다._iter그리고_loopbody문장:
_iter _my_object.even_beven_been_bever_over.self.beven? 만약 a.ven?_진정한_그때는_진정한_body(a)_endif_endloop_endmethod이다.
절차들
매직은 절차라는 기능도 지원한다.절차도 대상이며 다음을 사용하여 선언된다._proc그리고_endproc진술들절차가 변수들에 할당되며, 그 후에 실행될 수 있다.
my_my_properties(a, b, c) _ndproc x <<my_proc>(1, 2, 3) # x = 6
정규식
Magik 지원 // 정규식 구문:
_만약 /Hello\,\s(\w)+!/.matches?("안녕, 마식아!") _그러면 ("성냥을 받았어!") _endif 및 Regex에서 그룹을 캡처하려면:
/sw([0-9]+-([0-9]+)*/.csw_all("sw65456-324sss", "1") # "65456" /sw([0-9]++-([0-9]+)-([0-9]+)-([0-9]+)*/.csw_all("sw65456-324sss", "$2") # "324" HTTP 라이브러리
Magik은 HTTP 라이브러리를 통한 HTTP 또는 HTTPS 요청 작성을 지원하며, 아래 예제를 참조하십시오.
magikhttp <<http.newhttp.http.url".post({"사용자-에이전트", "봇"}, "일부 데이터") 언어 키르크스
Magik은 원래 영국에서 개발되었기 때문에, 핵심 소세계 도서관의 방법들은 영국식 영어를 사용하여 철자를 쓴다.예를 들면 다음과 같다.
"초기화"가 아니라 "초기화"를 사용하십시오.
컬렉션
다른 프로그래밍 언어와 마찬가지로 마직도 컬렉션을 가지고 있다.여기에는 다음이 포함된다.
- 심플 벡터
- 밧줄
- 해시 테이블
- 속성 목록
- 동일 집합
- 가방
Hello World 예제
다음은 마식어로 쓰여진 헬로 월드 프로그램의 예다.
쓰기("Hello World!") 참조
- ^ Jim Connors (2012-11-05). "Sprinkle Some Magik on that Java Virtual Machine". Retrieved 2012-11-06.
With this new capability GE Energy has succeeded in hosting their Magik environment on top of the Java Virtual Machine