에서 SICP , 저자 상태 ( 1.1 절 프로그래밍 언어의 세 가지 기본 "메커니즘"이 있음) :
언어가 관련된 가장 간단한 엔티티를 나타내는 기본 표현식
복합 요소가 더 간단한 요소로 만들어지는 조합 수단
복합 요소를 단위로 명명하고 조작 할 수있는 추상화 수단
이러한 요소 또는 메커니즘으로 주류 프로그래밍 언어 (예 : Java)를 어떻게 분석 할 수 있습니까?
에서 SICP , 저자 상태 ( 1.1 절 프로그래밍 언어의 세 가지 기본 "메커니즘"이 있음) :
언어가 관련된 가장 간단한 엔티티를 나타내는 기본 표현식
복합 요소가 더 간단한 요소로 만들어지는 조합 수단
복합 요소를 단위로 명명하고 조작 할 수있는 추상화 수단
이러한 요소 또는 메커니즘으로 주류 프로그래밍 언어 (예 : Java)를 어떻게 분석 할 수 있습니까?
답변:
원시 표현, 조합 수단 및 추상화 수단의 구별은 프로그래밍 언어를 모델링 할 때 유용합니다. 이것은 언어의 본질적인 속성이 아닙니다. 언어 정의를 가리킬 수 없으며“이 기능은 명백한 기본 표현입니다.이 기능은 명백하게 조합 수단”입니다. 구별은 모델의 속성이며 복잡한 모델은 분류에 저항 할 수 있습니다.
이 세 가지 개념의 교과서 예제는 lambda calculus 입니다.
더 많은 기능을 가진 언어에 도달하면 모델링이 더 모호해질 수 있습니다. 일반적으로 기본 표현은 기본 구성 요소로 분류 할 수 없거나 분리 할 수없는 표현입니다. 그러나 그것은 원자와 같습니다. 그것은 과학이 행진 할 때까지 원시적입니다. 예를 들어, 변수가 이름 대신 숫자를 사용하는 람다 미적분의 변형이 있습니다 ( de Bruijn indices ). 컴퓨터 증명을 위해 람다 용어를 모델링 할 때 특히 편리합니다. 컴퓨터 증명에서 정수는 구성 부분으로 나뉩니다 . 따라서이 모델에서 변수는 결국 원시 표현식이 아닙니다.
Java의 (일반적인 모델) 기본 표현은 주로 상수와 변수입니다. 조합 수단에는 수많은 연산자가 포함됩니다. 더 정확하게 말하면, "가산 식"은 A +
B 와 A -
B를 모두 포함하는 경우 두 개의 슬롯 (왼쪽과 오른쪽) 또는 세 개의 슬롯 (양쪽과 연산자)을 조합 한 수단입니다. 그 이름으로 (이 경우 연산자 +
와 -
그 자체로 원시 구조가됩니다). 결합 수단은 다른 명령 시퀀스를 포함 I ;
J 루프 구조를while (…) {…}
, 등등. 그런 다음 변수 선언, 함수 정의, 클래스 정의 등과 같은 조합 (모수 이름과 유형, 본문, 초기화 프로그램 등을 결합)과 추상화 수단 (재사용을 위해 이름을 정의하기 때문에) 등의 구성이 있습니다. 실제로 추상화 수단도 결합 수단이라는 것이 매우 일반적입니다. 이름과 정의를 결합한 것입니다.
거친 찌르기 :
표현은 바로 그 것입니다. Java에서 표현을 구성하는 것. 그것이 진술을 포함하도록 확장 될지 모르겠습니다.
조합에는 복합 표현식, (변수?,) 명령문, 메소드, 클래스 메커니즘 및 패키지가 포함됩니다. 일단 언어에 들어가면 모듈도 마찬가지입니다.
Java에서 가장 간단한 추상화 방법은 클래스입니다. 클래스 외부에는 아무것도 존재할 수 없습니다. 추상화의 "계층"이있을 수 있습니다. 정적 메서드는 인스턴스가 필요하지 않기 때문에 인스턴스 메서드보다 간단합니다.
제네릭은 추가 추상화 계층과 좌절감을 제공합니다.
기본 분류는 다음과 같습니다. LISP와 함께 병렬을 그리려고합니다.
기본 표현
LISP와 평행 : 원자, 숫자 및 목록.
조합 수단 (복합 데이터 구조를 구축 할 수있는 방법)
LISP의 병렬 : 단점 셀, 목록
추상화 수단
+
, -
, *
, /
, ...)LISP에서 병렬 : 함수와 같은 문법 설탕 let
,define
프로그래밍 언어는 일반적으로 구문 과 의미로 정의됩니다 . 이 두 가지 모두 언어 표준에 정의되어 있습니다.
구문은 유효한 프로그램을 작성하는 방법을 요약하고 의미는 해당 유효한 프로그램의 의미를 정의합니다.
귀하의 경우, 구문은 프리미티브가 무엇인지, 조합하는 방법 및 추상화 방법을 알려줍니다. 시맨틱은 조합과 추상화의 의미를 알려줍니다.
예를 들어 구문은 유효한 작성 방법을 알려줍니다. for
루프 . 시맨틱은 for 루프의 기능을 알려줍니다.
프로그래밍 언어를 실제로 분석하기 시작하려면 표준의 사본을 들고 무엇이 들어 있는지 확인하십시오. Java를 탐구하기 전에 C와 같은 간단한 언어로 시작하겠습니다. 나는 또한 책의 나머지 부분을 읽을 것입니다. 프로그래밍 언어가 작동하는 방식을 배우는 이유를 배우면 컴파일러를 구현하지 않아도 더 나은 프로그래머가되었습니다.
x = ++x;
은 일반적인 컴파일러가 명령문 을 승인하더라도 유효하지 않습니다.
올바른지 모르겠지만 부서를 이해하는 방법은 다음과 같습니다.
기본 표현 , >>, +, *, /, int, boolean, 변수, 메소드 등
조합의 수단은 이 논쟁의 여지가있을 수 있으며, 하나 + 및 concact, 또는 구성 대 상속과 방법 등의 이야기에 대한 자세한 고급 아이디어 같은 그 일이 그렇게 할 수 있습니다. 주입, 새로운 작업자, 확장 등
추상화 수단, 이것은 변수, 메소드의 이름을 지정하는 데 사용되는 구문 일뿐만 아니라 인터페이스, 클래스, 정적 클래스, 오버로드 메소드 등을 작성하는 수단입니다.
그러나 책에서 더 많은 정보를 제공해야 그 의미를 정확히 알 수 있습니다.
means of combination
그것에 대해 같은 방식으로 느꼈습니다 . 정확히 거기에 속하는 것을 알아내는 것이 어렵다는 것입니다. 그래도 좋은 대답입니다.