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# ... ..
Computer Science
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이라는 것은 다른 무언가를 나타내는데 사용된다. 이 ..
0. 개요 🤔 이후 강의들을 듣는 데 필요한 최소한 Compile의 전반적인 과정을 알아보자. 1. Compile 전반적인 과정 * 일련의 phase로 구성되어 있다. Front-End : 의미분석까지의 단계는 소스 프로그램의 의미를 이해하고 분석하는 역할을 한다. Back-End : 나머지 단계는 중간 형태를 사용하여 동일한 target program을 생성하는 역할을 한다. 궁극적으로 token화를 하기 위한 것이다. 우리가 흔히 개발에서 말하는 front-end, back-end와 같은 의미로 쓰이는 것은 아니다. Compiler의 앞면과 뒷면이라고 이해하면 편할 것이다. cf) interpreter는 compiler의 frontend 과정은 공유하지만, compiler와 같이 중간 형태를 직접 해..
0. 개요 🤔 JAVA는 Interpreter를 사용하는 언어라고 하고, C는 Compiler를 사용하는 언어라고 한다. 🤔 그렇다면 컴파일과 인터프리테이션의 차이가 무엇일까? // 이후 글에서 Compilation과 Interpretation 영어를 그대로 사용하겠다. 한글로 정확한 번역이 어렵다고 생각된다. 1. Compilation vs. Interpretation Compilation과 Interpretaion은 서로 반대 개념이 아니다. 둘 사이에 명확한 구분을 하기 힘들다. 1-1. Pure Compilation 컴파일러(Compiler)는 high-level의 원본 프로그램을 target program으로 번역하는 역할을 한다. 사용자는 나중에 운영 체제(OS)에게 target program..
0. 프로그래밍 언어 스펙트럼 프로그래밍 언어 스펙트럼을 살펴보자. computation(연산)의 modle을 기준으로 분류할 수 있다. 이 스펙트럼의 가장 상위 분류에는 "선언적(Declarative)" 언어와 "명령적(Imperative)" 언어가 있다. 소 제목은 각 분류의 언어들의 주요 세부 분류(subfamilies) 1. 선언적(Declarative) 언어 선언적 언어는 주로 "컴퓨터가 무엇(WHAT)을 해야 하는가"에 중점을 둔다. 프로그래머는 원하는 결과물 또는 속성을 선언한다. 어떤 순서로 실행해야 하는지를 명시하지 않는다. 선언적 언어의 하위분류로는 함수형(Functional), 데이터플로우(Dataflow), 논리 또는 제약 기반(Logic or Constrained-Based) 언어..