본문 바로가기

개발 Note/값 중심의 언어

(9)
감명 깊었던 programming language principles 6- 값 중심의 언어 - 정적 타입 시스템 오류 검증 문제 M3는 유용하지만 실행되서는 안되는 프로그램들이 있습니다. 실행중에 타입이 맞이 않아서 실행을 멈추게 되는 경우를 가진 프로그램들입니다. 타입 - 프로그램을 기획하는 한 방법 - 프로그래밍 언어가 그러한 기획을 물샐틈 없이 할 수 있도록 구성되어야 "너무 빡빡하지 않게" (PASCAL, PL/1, Algol68, Ada) 프로그램이 기획한 대로 실행된다는 것을 보장해야 프로그램 기획이 제대로 됬는지를 실행전에 검증 될 수 있어야 검증이 자동으로 된다면... M3 프로그램은 다섯종류의 값들이 있고 각각 분별력있게 흘러다녀야 합니다. 함수, 정수, 참/거짓, 쌍, 메모리 주소 입니다.1. 함수 적용식 E1 E2 에서 식 E1은 함수여야 합니다. 2. 덧셈식 E1 + E2 의 부품식들의 결과는..
감명 깊었던 programming language principles 5- 값 중심의 언어 - 메모리 주소 값 프로그래밍 언어의 편의성 측면에서는 여러가지 설탕 구조물들이 첨가 되어야 합니다. 이는 프로그래머에게 편의를 제공해주고, 코드의 이해를 돕는데 좋은 장치가 됩니다. 컴퓨터 메모리를 사용하는 명령형 언어의 모습(imperative features)가 그 대표적인 예입니다.추가합니다. 언어키우기 : M3 1. 새로운 메모리 주소를 할당받는다.2. 메모리 주소에 저장된 값을 읽고 쓴다.3. 프로그램 실행 순서에 따라서 다른 결과를 계산하게 될 수 있다. (주소에서 읽고 나서 쓰느냐 쓰고나서 읽느냐) 이제 값의 공간에는 메모리 주소가 포함되었습니다. 메모리 주소가 값이 되면서, 프로그램 식의 의미 판단에는 메모리가 필요합니다.메모리에는 프로그램의 식들이 계산되면서 일어난 반응들이 계속 쌓여갑니다. : 식 E가 ..
감명 깊었던 programming language principles 5- 값 중심의 언어 지금까지 프로그래밍 언어가 어디서 시작되어 어떻게 만들어 졌는지에 대해서 언급했습니다. 현재 프로그래밍 언어가 나아가는 방향은 시스템(기계) 을 다루는 단계에서 점점 본연의 목적을 향해 가고 있습니다.그 본연의 방향이라는 것은 적어도 "기계를 편하게 다루는 것"은 아닙니다. "기계의 편리한 사용" 이라는 슬로건으로는 달성할 수 없었던 결과를 향하는 것입니다. 다시한번 처음에 언급했던, 프로그래밍 언어가 컴퓨터를 구동시키기 위해 만들어 졌는가?에 대해서 되세겨봅시다.프로그래밍 언어는 컴퓨터를 동작시키기 위해서 만들어진 것이 아닙니다. 프로그래밍 언어가 있었고(수학적 증명을 위해서 만들어진), 이것을 동작시키기 위해서 컴퓨터가 탄생했습니다. 1930-40 년대에 이미 논리학자와 수학자들은 기계적으로 계산가능..
감명 깊었던 programming language principles 4- 기계 중심 언어- 타입시스템 타입 시스템. 실행되서는 안되는 프로그램들프로그램을 만드는 방법을 충실히 따라서 제대로 생긴 프로그램을 만드는 것은 쉽습니다. 그런데, 그 중에는 실행될 수 없는 프로그램들이 많습니다.(프로그램이라고 표현했지만, 좀 규모를 축소하면 코드라고 표현 하는게 프로그래머에게 더 와닫겠군요.)실행되서 어떤 루틴에서 동작하지 않는 프로그램, 메모리를 과도하게 사용하여 시스템을 멈추게 하는 프로그램, 무한 루프에 빠진 프로그램.... 등등.예를 들지 않아도 아마 대충은 감이 올것입니다.실행되서는 안되는 이라고 했지만, 좀더 평범하게 표현하자면, 실행되지만 잘 돌지 않는 프로그램이라고 표현하는 것이 좋겠네요. 프로그램을 만드는 방법( 문법) 적으로는 문제가 없지만, 실제로 동작했을때 제대로 실행되지 않는 프로그램들이 ..
감명 깊었던 programming language principles 4- 기계 중심 언어-메모리 관리 메모리 관리 컴퓨터가 프로그램을 실행할 때 소모하는 자원은 시간과 메모리입니다. 시간은 무한하지만, 메모리는 유한합니다. 프로그램이 한없이 메모리를 소모할 수는 없습니다. 메모리가 어디에서 소모되는지 볼 필요가 있습니다. 프로그램 실행중에 메모리는 let- 식과 프로시져 호출식의 실행을 위해 하나씩 소모됩니다. let 식으로 선언된 이름과 프로시져의 인자 이름을 위해 매번 새로운 메모리가 소모됩니다. 그리고 소모되기만 합니다.이렇게 메모리만 소모시키면 언젠가는 프로그램을 더이상 수행 못하게 되겠죠. 따라서 메모리를 재활용 해야 합니다. 그러면 어떤 메모리를 재활용 해야 하는가?프로그램 실행중 사용한 메모리중에서 더이상 사용하지 않을 메모리를 재활용 해야 합니다.그럼 어떻게 더이상 사용하지 않을 메모리인지..
감명 깊었던 programming language principles 4- 기계 중심 언어 기계 중심의 언어 초기에 컴퓨터 사이언스는 튜링 머신이나 람다 컬큐러스를 기반으로 컴퓨터와 프로그래밍 언어를 만드는 것에 의의가 있었고, 그러다 보니 자연스럽게 기계 자체를 동작시키는데 가장 큰 목적이 있었습니다.그 당시는 이제 시작 단계라서 어떻게 프로그래밍 언어를 디자인해야 하는지 무엇이 문제일지가 드러나지 않은 상태 였습니다. 처음에 기대했던, 기계중심의 언어는 이런것이다.!! 라고 간단하게 정의 되어있을 것이라 기대하고 읽기 시작 하실 것입니다.그러나, 내용은 사실 그렇게 명쾌하게 나오지 않습니다. 언어가 어떤 수학적 정의를 바탕으로 설계가 되었고, 그 한계가 무엇인지는 프로그래밍 언어의 요소들을 하나 하나 살펴보면서 짚어갈 수 밖에 없습니다.예를 들면 변수란 무엇인가? 함수는 무엇인가? 재귀 호..
감명 깊었던 programming language principles 3- 모양과 뜻 모양과 뜻 프로그래밍 언어는 문법구조(syntax)와 의미구조(semantics)로 구성되어있습니다. 문법구조는 언어의 겉 모양이고 의미구조는 언어의 속뜻을 의미합니다.이 두가지를 정의하지 못하면 언어라고 볼수 없고, 이 두가지를 알지 못하면 언어를 사용할 수 없습니다. 제대로 생긴 프로그램을 어떻게 만들고 그 프로그램의 의미가 무엇인지에 대한 정의가 없이는 언어를 구현할 수 도 없고 사용할 수 도 없습니다. 또, 그 정의들은 애매하지 않고 혼동이 없어야 합니다. 문법구조 문법구조는 프로그래밍 언어로 프로그램을 구성하는 방법입니다. 제대로 생긴 프로그매들의 집합을 만드는 방법으로, 귀납적으로 규칙을 정의합니다.이 귀납적인 규칙으로 만들어지는 프로그램은 나무(TREE)구조를 갖춘 2차원의 모습입니다.(여기..
감명 깊었던 programming language principles 2-기본기 2. 기본기 프로그래밍 언어가 어떤 형태로 되어있는가 를 이야기 하기 위해서는 기본적으로 사용하는 어휘들과 말하는 방식이 있습니다. 그 어휘와 방식의 기본이 수학입니다. 이런 베이스적인 부분들을 언급할 필요성이 있고, 이해해야할 필요 역시 있습니다. 귀납법 ( inductive definition) 집합을 정의하는 방법에는 조건제시법, 원소 나열법, 귀납법이 있습니다.원소나열법 :{0,1, 참새, 비둘기}조건 제시법 : {x|x는 1,2 의 양의 정수}귀납법은, 참 매력적인 분야라고 합니다. 무한한 것을 유한한 것들로 정의 할 수 있기 때문입니다. 프로그래밍 언어에서는 이 귀납법에 대한 이해가 반드시 필요합니다. 한번 귀납법에 대해서 살펴 볼까요? ( 저처럼 수학에서 멀어진지 오래된 사람들은 기억이 가물..