프로그래밍언어론
-
제어흐름- 반복과 재귀프로그래밍언어론 2023. 5. 31. 04:03
루프 프로그램에서 문장이나 연산이 반복되는 부분. 반복부의 문장은 부수효과를 반복하는 것이 주요한 목적이다. 부수효과가 없는 반복은 의미 없다. 어디선가의 메모리가 갱신되는것이 목적이다. 순차나열 주어진 집합의 모든 값에 대하여 한번씩 수행되는 반복문. 반복횟수는 시작 전에 결정된다. r1 := first r2 := step r3 := last L1: if r1 > r3 goto L2 . . . ––루프 몸체부. r1을 루프 인덱스를 위해 사용한다. r1 := r1 + r2 goto L1 L2: □ r1 := first r2 := step r3 := last goto L2 L1: . . . ––loop body; use r1 for i r1 := r1 + r2 L2: if r1 ≤ r3 goto L1 위..
-
제어흐름 - 구조적 흐름과 선택프로그래밍언어론 2023. 5. 30. 01:28
goto를 포기하는 것은 소프트웨어 공학에서 구조화 프로그래밍이라는 큰 혁명의 일부이다. 1990년대에 객체지향 프로그래밍이 그랬던 것처럼 구조화 프로그래밍은 1970년대의 강력한 트렌드였다. 구조화 프로그래밍은 하향 설계 (점차적인 세분화), 모듀롸된 코드, 구조화된 타입, 변수 및 상수 이름을 잘 붙이는 것, 설명문을 충분히 넣어주는 것 등을 포함한다. 개발자는 구조화 프로그래밍을 통해 서브루틴 내에서 거의 대부분의 잘 설계된 순차적 알고리즘이 순차, 선택, 반복만으로 구현될 수 있음을 보였다. 레이블 대신 구조화된 언어에서는 구문적으로 중첩된 구조물의 끝으로 분기 제어가 이동하도록 하는 방법을 쓴다. 다단계 return 단번에 여러번의 서브루틴 호출에서 리턴시킨다. 비지역 goto가 발생하면 언어 ..
-
제어흐름 -수식2프로그래밍언어론 2023. 5. 29. 22:44
초기화 지정문이 변수에 값을 넣는 방법을 제공하기 때문에 명령형 언어에서 꼭 변수를 선언할 때 초기값을 넣을 방법을 제공해야 하는 것은 아니다. 그러나 적어도 두 가지 이유에서 초기값은 매우 유용하다. 정적으로 할당되는 변수의 경우 선언에서 지정된 초기값은 컴파일러에 의해 메모리에 의해 바로 기록될 수 있다. 지정문에 의해 초기값이 설정되면 그 수행(로드, 스토어)을 위한 비용 발생 초기화 되지 않은 변수의 값 사용 오류를 막아준다. 배열 인덱스 값이 잘못되는 문제가 C에서 종종 일어난다. 변수가 쓰레기값을 가지는 경우 테스트에서 검출되지 않는다. 초기화를 하면 변수의 메모리가 할당될 때 초기화 하기 때문에 지정에 의한 값보다 성능상 유리하다. 스택객체는 초기화 되지 않는다. 함수 호출과 리턴시 메모리 ..
-
서브루틴과 제어 추상화프로그래밍언어론 2023. 5. 22. 18:47
추상화 프로그래머가 프로그램 부분에 이름을 붙이는 방법과 절차. 사용되는 곳에서 그 이름만 쓰고 구체적인 구현은 알 필요가 없다. 제어 추상화 라고 하면 잘 정의된 영ㄴ산에 이름을 붙여 사용하는 것이 추상화의 목적인 경우이고, 데이터 추상화는 추상화의 주요 목적이 정보를 표현하는 것이다. 서브루틴 호출자에 의해 수행이 시작되고 호출자는 서브루틴의 수행이 끝나기를 기다린다. 대부분의 서브루틴은 매개변수를 가져서 호출자가 서브루틴의 행동에 영향을 미칠 목적으로 또는 연산을 수행할 데이터를 제공하기 위하여 매개변수를 전달한다. 값을 반환하는 서브루틴은 함수라고 불리고 그렇지 않은 서브루틴은 프로시저 라고 불린다. 대부분의 언어세 서브루틴은 사용되기 전에 선언되어야 하지만 일부 언어에서는 선언하기 전에 호출할 ..
-
제어흐름-수식1프로그래밍언어론 2023. 4. 15. 23:54
수식계산 수식은 연산자, 함수를 피연산자또는 매개변수에 적용하는 표현이다. 피연산자 또는 매개변수는 재귀적 정의에 의해 수식이다. 피연산자와 매개변수 자리에는 수식이 나올 수 있기 때문에 재귀적이다. 연산자 특별하고 간단한 구문을 사용하는 빌트인 함수 빌트인 함수는 어너 설계 과정에서 미리 만들어진 함수를 말한다. 연산자의 표기는 중위표기, 후위표기, 전위표기가 있다. 언어에 따라서 이 형식이 달라지기도 한다. 다중 키워드 연산에서 중위 표기법이 쓰이기도 한다. 삼항연산자가 그 예시이다. 후위표기는 우리가 알고있는 후위연산자++이 있다. 파이썬은 후위연산자가 존재하기 않는다. 연어를 설계할때 수식을 정의할때 한가지를 나타낼때 여러가지 표현을 가능하도록 하지 않기 위함이다.(언어의 일관성) 우선순위 다음과..
-
현대의 컴파일프로그래밍언어론 2023. 4. 15. 19:29
CPU의 기능적 유닛 fetch, 명령문 해석, 피연산자를 레지스터에서 가져오기, 메모리 접근, 레지스터에 결과를 다시 쓰기... 기능적 유닛의 단계를 차례로 수행될때 대부분이 쉬는 상황이 발생한다. 파이프 라이닝을 사용하면 초당 수행 명령문 수가 크게 증가하고, 지연을 최소화할 수 있다. 파이프라인의 지연 다음 몇가지 사항들에 해당한다. 파이프 라인의 단위가 제어나 데이터를 위해 기다려야 하는 경우 앞에 명령에서 계산된 값을 써야하는 경우 필요한 데이터가 메모리에서 로드될 동안 기다려야 하는 경우 필요한 리소스가 없어서 시다려야 하는 경우 다름 명령문이 오기를 기다리는 시간 성능을 위해서는 지연을 최소화 해야한다. 현대적 프로세서 현대적 프로세서를 위한 컴파일의 특징은 RISC를 이용하여 간단한 명령문..
-
명령문구조프로그래밍언어론 2023. 4. 14. 21:27
명령문집합 구조 명령문 집합은 기계마다 다르다. 공통되는 명령문은 계산, 데이터 이동, 제어 명령문이다. CISC 하드웨어를 주로 사용 여러 클락을 복잡한 명령문을 가짐 명령문 안에서 메모리에서 메모리 load, store가 가능하다. 명령문당 높은 사이클과, 작은 코드를 가진다. 하드웨어에서 복잡한 연산을 하기 때문에 복잡한 명령문을 가지기 때문에 저장공간이 크고, 여러 기능을 지원하는 회로를 포함한다. 메모리의 data를바로 연산하기도 한다. CISC는 명령문의 수가 적기때문에 한 명령문이 복잡한 일을 한다. 명령문마다 길이가 다르기 때문에 사이클이 다르다 하드웨어가 복잡하다. RSIC 소프트웨어를 주로 사용한다. 단일 클락의 간단한 명령문을 가짐 명령문의 갯수가 많다. 별도 명령문으로 레지스터와 메..
-
아키텍쳐 - 1프로그래밍언어론 2023. 4. 14. 02:09
메모리 계층 구조 메모리 크기는 레지스터에 있는 주소의 크기로 결정된다. 32비트 기계: 4GB 64비트 기계: 제곱만큼 가능 메모리가 커지면서 같은 칩 내부에 다 들어갈 수 없다. CPU속도가 메모리 접근속도 보다 훨씬 빠르게 발전하고 있다. 레지스터의 구조 레지스터는 가장빠른 메모리로서 지연시간 없이 접근이 가능하다. 레시스터는 저장소로 이용되고나 다른 특수 목적으로써 이용될 수 도 있다. 백터 계산용 큰 레지스터 PC, fp 직전 계산 셜과 상태값 또는 overflow의 여부를 나타내는 상태 레지스터 레지스터의 값을 메모리로 내보냈다가 다시 읽어오는 일을 최소화 하기 위한 방식으로 레지스터를 사용한다. 캐시 캐시는 하드웨어에 의해 관리된다. 1차 캐시와 메모리 캐시가 있는데, 기계에 따라 on ch..