run-time이 무엇인가? 에 대한 공부를 하다가 짧고 괜찮은 유튭 강의가 있어서 리뷰해 보았다. 링크
프로그래밍 언어 scheme은 여러가지 rules, syntax, semantic 등에 관한 설명이 50페이지짜리 문서로 정리되어있다. C++는 1300 페이지의 문서로 정리되어있다.
interpreter
interpreter는 위 문서의 룰대로 코드를 작성하고 넣으면 해석하여 output을 나오게 하는 역할을 한다. interpreter는 Assembly, C, Machine code(1, 0), Java, 혹은 만드려고 하는 언어로 interpreter를 만들 수도 있다. 예를 들어 Scheme 1.0 interpreter는 C로 작성하고 1.1 버전은 1.0버전으로 작성 할 수 있다. 실제로 modern scheme 버전의 interpreter코드는 이전버전의 scheme 코드로 작성되있다고 한다.
compiler
compiler와 interpreter는 무엇이 다른 것인가? 영상에서는 interpreter는 코드를 기계적으로 스탭 바이 스탭으로 해석하다가 에러를 만나면 그 때 멈추로 에러를 뱉는 아주 원시적인 것으로 표현하고, compiler는 code를 run하기 전에 analyze해서 에러를 미리 방지하는 업그레이드 된 툴 정도로 설명한다.
compiler는 하나의 코드를 다른 언어의 코드로 변환하는 역할을 한다. 예를들어 scheme언어를 assembly for x86, 혹은 assembly for powerPC로 변환하고, 이 경우 interpreter는 하드웨어(CPU 칩을 이야기 하는 듯)라고 한다. 그리고 scheme언어 웹 브라우저에서 실행하기 위해Javascript compiler도 있다.
C++로 짜여진 3D 게임이 웹 브라우저에서 구동되는 데모를 보여준다.
implementations는 for loop, if statement, int, float 등 해당 언어 스팩이 제시하는 기본적인 기능들을 쓸 수 있도록 해준다. 하지만 아주 복잡한 프로그램을 만드려면 더욱 강력한 기능들이 필요하다. 이런 기능들은 수정 될 가능성도 있고 너무나도 방대해서 compiler나 interpreter에 모두 포함을 시키지 않고 function이나 OOP 언어의 경우 Class로 만들어서 library형태로 관리하게 된다.
Ecosystem, packages, modules
Rubygem, PyPI, npm을 성공적인 라이브러리 생태계 구성 사례로 소개한다.
Run-time은 코드가 run 되는 곳이다. 기본적으로 컴퓨터가 Run-time environment이다. OS에 상관 없이 코드를 구동 할 수 있는 JVM과 같은 Vertual machine도 Run-time이다. 모바일 핸드폰에도 Run-time, 테블릿, 아두이노, 스마트워치와 같은 하드웨어부터 웹과 같은 소프트웨어까지도 모두 run-time이라고 할 수 있다. 심지어 Vim 에디터도 Vimscript로 코드를 짜면 실행 시킬 수 있는 run-time이다.
C로 쓰여져 있는 Linux의 창시자 토르발스 리누스의 Linux가 리눅스 오픈소스 개발자들에게 보내는 이메일을 보여준다. 이메일에는 리누스가 오픈소스 개발자들에게 "왜 본인들이 쓴 코드의 문제를 고치지 않는지 모르겠다." 혹은 "이 문제가 수년간 지속됬는데 전혀 나아질 기미가 보이질 않는다." 등의 다소 거친 말투로 개발자들을 다그친다.
위 사례처럼 프로그래밍 언어를 비롯한 모든 오픈소스 프로젝트는 커뮤니티가 존재하고 각 각 다른 성향을 지닌다.