Computer Science/프로그래밍언어론

0. 개요 🤔 궁금증 or 들어가기 전 특정 name이 선언되기 전에 사용이 가능한가에 대한 이야기이다. // C++ 이라고 가정 int main() { int n = 0; n = x + 5; // 가능한가? int x = 3; printf("value = %d\n", n); } main 함수 내에서 일어나는 일이라고 가정, 선언 전 Line에서 x가 사용 가능하냐는 의미 결론부터 말하자면, 불가능 => 정적 의미론 오류 (Static Semantic Error) 오히려 x가 이전, 밖에 먼저 선언되어 있으면 가능 1. 각 언어의 선언 순서 1-1. Algol 60 , Lisp (초기 언어) 모든 선언이 해당 스코프의 시작부에 나타야 한다. 1-2. Pascal declare-before-use rule..
0. 개요 🤔 궁금증 or 들어가기 전 우리가 프로그래밍 하면서 아주 자연스럽게 사용했던 중첩된 서브루틴에 대해 알아보자. 중첩 subroutine 내에서 선언된 것들과 스코프 등에 대한 이야기를 해보자. (서브루틴 = 함수 or 메서드 정도로 생각하면 편하다) 1. Nested Subrotuines (중첩 서브루틴) 많은 언어에서 중첩 서브루틴을 지원한다. ex. Algol 60, Ada, ML, Commn Lisp, Python, Scheme, Swift 등 오히려 C언어 계열에서는 불가능 1-1. Algol 계열의 Nested Subroutines 중첩 서브루틴 내에서 선언된 상수, 타입, 변수 또는 서브루틴은 해당 스코드 외부에서는 보이지 않는다. (Not-visible) 이름과 객체 간의 바인딩..
1. Static Scoping (정적 스코핑) Statically scoped (정적 스코프) = lexically scoped : Compile 시점에 스코프가 확정되어 Code를 보고 알 수 있다. ex. C, Jaca, Python, C# ... 2. C언어에서의 Scope C 언어는 정적 스코프(lexical scope)를 따른다. - 함수에 진입하면 새로운 스코프가 생성되며. 함수 내에서 선언된 지역 변수나 객체에 대한 바인딩이 스코프 내에서 생성된다. - 함수 내에서 선언된 지역 변수가 전역 스코프에 이미 있는 변수와 이름이 충돌하면, 지역 변수가 전역 변수를 숨긴다. - 함수가 종료될 때(서브루틴에서 반환할 때) 지역 스코프가 파기되며, 그 스코프 내에서 선언된 지역 변수 또는 객체의 바인..
0. 개요 🤔 궁금증 or 들어가기 전 스코프가 뭔데!? -> 코드를 보고 여러 가지 스코프의 개념을 잘 이해해 보자. 1. Scope Rules 1-1. What is Scope - Scope (스코프) : 프로그램 내에서 바인딩이 활성화되어 있는 Code의 Text 영역 = 프로그램에서 변수나 함수가 유효한 범위 스코프는 moule의 body, class, subroutine 또는 구조적인 제어 흐름과 관련이 있으며, 이러한 스코프는 종종 a block이라고도 불린다. 1-2. 스코프의 종류 1. Statically scoped (정적 스코프) = lexically scoped : Compile 시점에 스코프가 확정되어 Code를 보고 알 수 있다. ex. C, Jaca, Python, C# ... ..
0. 개요 ✍️ 이전 포스트에서 배웠던 ✍️ Static objects, Stack objects, Heap objects 또 추가로 Garbbage Collection에 대해 차근차근 알아보자. ✍️ 이는 모두 메모리/저장공간 관리에 관한 내용이다. 1. 정적 할당 (Static Allocation) 정적 할당은 객체의 수명과 관련된 메모리 할당 메커니즘 중 하나이다. 이전에 말했던 3가지 방법 중 첫 번째를 소개해보려고 한다. 1-1. 정적 객체(Static objects) 쉽게 말해 Memory에서 Code & Data에 해당하는 부분이다. (이와 반대로 Heap과 Stack은 모두 run time 혹은 compile time에 동적으로 변한다) 이에는 전역 변수(Global variables), ..
0. 개요 🤔 들어가기 전 🤔 객체의 생명 주기와 저장 관리는 프로그래밍 언어에서 객체, 변수, 그리고 바인딩의 작동 방식을 이해하는 중요한 측면이다. 🤔 그렇다면 Binding 시의 고려 사항이 있을까? 🤔 Binding 한 Object의 생명 주기는 어떻게 될까? 1. Binding 시의 고려 사항 Names와 the objects를 엮는 것을 binding이라고 한다. (여기서 object는 우리가 객체지향 프로그래밍의 객체가 아닌 어떠한 things라고 이해하는 것이 좋다.) Objects의 생성과 소멸 => 객체의 life time Bindings의 생성과 제거 => 바인딩의 life time 바인딩 비활성화와 재활성화 (일시적인 unsusable의 개념) 변수, 서브루틴, 타입 등의 바인딩에 ..
1. Binding Time의 개념 1-1. Binding의 개념 바인딩이란, 두 가지 사물 사이의 관계를 나타낸다. bound; 엮다. binding;제본이라는 뜻을 가진 것을 유추해 보자. a name(변수 등)에 the thing it name을 엮어주는 것. 1-2. Binding Time 이름에 속성이나 값이 결정되는 시점 바인딩이 되는 시점인데, 일반적으로 구현 결정이 내려지는 시점을 나타낸다. 언어 디자인 시점 : 작업 흐름 구조, 기본 데이터 유형의 집합, 복잡한 데이터 유형을 만드는 데에 사용되는 생성자 등을 정의할 때의 바인딩 시간 언어 구현 시점 : 스택 & 힙의 구조, 최대 크기 등과 같은 세부 구현 사항을 결정할 때의 바인딩 시간 프로그램 작성 시점 : 프로그래머가 프로그램의 알고..
0. 개요 🤔 Fortran, Algol 그리고 Lisp 같은 언어들이 일찍이 "고급언어" 라고불린 까닭이 무엇일까? 무엇이 high-level과 low-level이 구분하는 것일까? (고급과 저급이 언어의 value를 나타내는 것은 아니다.) 💡 결론부터 말하자면, 고급 언어와 저급 언어를 가르는 기준은 "추상화 수준"이다. 1. 추상화 (Abstraction) 1-1. 추상화의 목표 추상화는 두 가지 상호 보완적인 목표를 달성한다. 머신 독립성 사람이 이해하기 쉽고 프로그래밍하기 쉽도록 한다. 쉽게 말해서, 복잡한 시스템이나 프로세스를 단순화하고 요약하는 방법이다. 1-2. A Name 추상화는 결국 "이름"을 부여하는 과정을 의미한다. 이 Name이라는 것은 다른 무언가를 나타내는데 사용된다. 이 ..
dog-pawwer
'Computer Science/프로그래밍언어론' 카테고리의 글 목록