Posts by Tag

Lua1.1

[루아1.1] opcode.c 읽기 (3)

6 분 소요

Opcode.c (3) Opcode.c 파일은 크게 두 부분으로 나뉩니다. 전반부는 루아 VM 구현이고 후반부는 루아 외부 API 구현입니다. 호스트 프로그램에서 Lua.h를 통해 호출하는 루아 API들을 구현한 것이죠. 그래서 아직 다 읽지 않은 함수가 많습니다. 이번 글에서 모...

[루아1.1] opcode.c 읽기 (2)

11 분 소요

Opcode.c (2) 이전 글에 이어서 Opcode.c 파일을 계속 읽겠습니다. 오늘은 lua_execute() 함수 하나만 읽고 글을 마무리 할 생각입니다. 함수가 커요. 아마 lua_execute() 함수가 루아 VM 구현 자체인것으로 보입니다. int lua_execute...

[루아1.1] opcode.c 읽기 (1)

3 분 소요

Opcode.c (1) 드디어 루아 1.1 코드 읽기의 마지막 파일입니다. Opcode.c 파일은 루아 1.1 소스 파일 중에서 두 번째로 긴 파일입니다. 내용이 많아요. 그래도 이 파일만 읽고 나면 루아 2.1로 넘어 갈 수 있습니다. Opcode.c 파일은 이름만 보면 루아 V...

[루아1.1] table.h table.c 읽기

7 분 소요

Table.h 저는 처음에 파일 이름만 보고 Table.c와 Table.h 파일은 루아의 테이블 타입 자료 구조를 구현한 것인줄 알았습니다. 그런데 Table.h에 익스턴 변수 이름을 보니 심볼 테이블을 구현한 것 같습니다.

[루아1.1] inout.c inout.h 읽기

3 분 소요

Inout.h Inout.h 파일은 짧습니다. 함수 선언을 제외하면 extern으로 전역 변수를 외부에서 접근할 수 있게 해주는게 전부입니다.

[루아1.1] hash.c hash.h 읽기

9 분 소요

Hash.h Hash.h 파일은 아주 짧은 파일입니다. 구현이 있는 Hash.c도 350 줄 정도로 길지 않습니다. 가벼운 마음으로 읽기 시작하겠습니다. 읽기 전에 왜 파일 이름이 해시(Hash)인지 궁금하네요. 해시 함수 관련 알고리즘을 구현한건가… 읽어 보면 알겠지요.

[루아1.1] lua.stx 읽기 (5)

2 분 소요

Lua.stx (5) 계속 Lua.stx 파일을 읽겠습니다. 문법 섹션은 지난 글에서 다 읽었고 이제 다시 C 언어 구현입니다. 거의 다 읽었습니다. 느낌상 루아 1.1 소스 코드를 반 정도 읽은 것 같습니다. 그런데 너무 대충 읽은 것 같네요. 그래도 계속 읽으렵니다.

[루아1.1] lua.stx 읽기 (4)

3 분 소요

Lua.stx (4) 이제 Lua.stx 파일을 반 정도 읽었습니다. 정말 길군요. 계속 읽어 나가겠습니다.

[루아1.1] lua.stx 읽기 (3)

7 분 소요

Lua.stx (3) 아직 Lua.stx 파일의 1/3 정도 밖에 못 읽었습니다. 아직도 갈 길이 멀군요. 그래도 계속 가 볼랍니다. 어차피 아직 1.1도 다 못 읽었고 다 읽는다 해도 릴리즈가 21개 더 남았습니다. 일주일에 릴리즈 한 개씩 읽는다 해도 20주가 넘게 걸리네요. ...

[루아1.1] lua.stx 읽기 (2)

4 분 소요

Lua.stx 파일은 내용이 깁니다. 아마 이 파일 다 읽으면 루아 1.1 소스 코드는 거의 다 읽은 것이나 다름 없지 않을까 합니다. 전 글에서 정적 전역 변수 선언 부분 코드를 읽었습니다. 이번 글에서는 그 아래에 나오는 인터널 함수 구현 코드를 읽겠습니다.

[루아1.1] lua.stx 읽기 (1)

4 분 소요

Lua.stx (1) Lua.stx는 루아 1.1에서 루아 문법을 구현한 yacc 인풋 파일입니다. 보통은 Lua.y 혹은 Lua.yacc라고 확장자를 정하는데 루아 개발자들은 특이하게 Lua.stx라고 붙였네요. 아마도 syntax라는 의미로 확장자를 stx로 했는가봅니다. 이 ...

[루아1.1] lex.c 읽기

10 분 소요

Lex.c Lua.lex를 읽고 나서 꽤나 찜찜했습니다. 호출하는 함수라든가 정의한 함수들이 없거나 쓰지 않았거든요. 쓰지 않는건 상관 없는데 호출하는 함수가 없으면 링커에서 에러가 납니다. 뭔가 이상하다 싶어서 봤더니 Lex.c라는 파일이 보입니다. 그리고 쭉 보니까, lexer...

[루아1.1] Lua.lex 읽기

7 분 소요

루아 다운받기 루아 소스 코드는 인터넷에서 쉽게 찾을 수 있습니다. 구글님이 도와주시죠. 아래 링크에서 다운 받을 수 있습니다. 위 페이지에 보면 루아 1.0도 있습니다.

Back to Top ↑

Lua2.1

[루아2.1] Mem.c Mem.h

최대 1 분 소요

Mem.h ``` void luaI_free (void *block); void *luaI_malloc (unsigned long size); void *luaI_realloc (void *oldblock, unsigned long size);

[루아2.1] Mathlib.c

5 분 소요

Mathlib.c Mathlib.c 파일은 파일 이름이 안에 어떤 기능을 구현하고 있는지 설명하고 있습니다. 말그대로 수학 라이브러리를 구현한 파일입니다. 이 수학 라이브러리는 루아 구현에서 사용하는 것이 아니고 루아 언어에서 기본 라이브러리 형태로 제공합니다. 빌트인 라이브러리 ...

[루아2.1] Hash.c Hash.h

6 분 소요

Hash.h 루아는 배열과 리스트 자료 구조를 해시 테이블로 관리합니다. Hash.h와 Hash.c 파일은 해시 테이블을 구현하는 코드가 작성되 있습니다.

[루아2.1] Table.c Table.h

4 분 소요

Table.h 루아 구현 내부에서 사용하는 심볼 테이블과 문자열 테이블을 구현하는 파일이 Table.h와 Table.c입니다.

[루아2.1] Tree.c Tree.h

4 분 소요

Tree.h Tree.h, Tree.c 파일은 루아 2.1에서 새로 생긴 파일입니다. 루아 1.1에서 그냥 표준 라이브러리 호출로 처리했던 동적 메모리 관리를 트리로 대체한 것으로 보입니다. 검색을 빠르게 하려는 요량으로 보이는데, 코드를 읽으면서 어디에서 트리를 쓰는지도 같이 추...

[루아2.1] opcode.c (2)

13 분 소요

Opcode.c 루아 2.1을 릴리즈하면서 기능을 추가해서 그런지 Opcode.c 파일 내용이 더 많아 졌습니다. 그래서 읽는데 살짝 버거움이 느껴져, 읽는 방식을 바꿔보기로 했습니다. 루아 VM의 본체격인 lua_execute() 함수를 먼저 읽으면서 lua_execute() 함...

[루아2.1] opcode.c (1)

5 분 소요

Opcode.h Opcode.h에는 루아 VM 명령어 종류와 VM에서 쓰는 자료형 선언이 있습니다. 해당 자료형을 실제로 쓰는 코드를 읽기 전까지 자료형을 정확히 어떤 용도로 쓰는지 알 수 없기 때문에 Opcode.c 파일을 읽기 전에 미리 연습하는 느낌으로 빠르게 읽고 지나가겠습...

[루아2.1] Lua.stx(2)

9 분 소요

Lua.stx (2) 루아 2.1 문법을 정의한 Lua.stx 파일을 계속 읽겠습니다. 이번편 글로 다 읽길 바랍니다.

[루아2.1] Lua.stx(1)

10 분 소요

Lua.stx (1) 낱말 분석(lexical analysis)하는 Lex.c 파일을 읽었으니, 전편의 순서를 따라 다음은 구문 분석(syntax parsing)하는 yacc 입력 파일인 Lua.stx 차례입니다. 루아 1.1에서 2.1로 넘어가면서 lex의 입력 파일은 아예 소스...

[루아2.1] Lex.c

6 분 소요

Lua 2.1 루아 릴리즈를 보면 루아 1.1 다음에 바로 루아 2.1입니다. 루아 개발자들이 저처럼 그냥 아무 이유없이 메이저 버전을 올린 것이 아니라면 변경점이 많기 때문에 메이저 버전이 올라간 것이겠죠. 게다가 루아 2.1이 발표된 90년대 중반(정확히는 95년이군요)에는 버...

Back to Top ↑

Lua2.2

[루아2.2] func.h func.c

1 분 소요

func.h func.h와 func.c 파일은 루아 2.2에서 새로 생긴 파일입니다. 아마도 함수를 가비지 컬랙션에 포함하려고 함수 오브젝트를 관리하는 코드를 구현한 것으로 보입니다.

[루아2.2] hash inout tree table

4 분 소요

hash.c 코드가 많이 바뀌거나 큰 기능이 추가되지 않았습니다. Value 구조체에 Byte가 TFunc로 바뀐 것에 대응하는 코드를 변경했습니다. 이런 패턴입니다.

[루아2.2] opcode.h opcode.c

2 분 소요

opcode.h 변경 코드가 몇 개 없습니다. 주요 변경은 함수를 가비지 컬랙션 대상으로 추가하기 위해서 함수용 타입을 추가한 것입니다.

[루아2.2] lua.stx

5 분 소요

Lua.stx 루아 2.2까지도 계속 yacc을 이용해서 구문 분석을 하고 있습니다. 마이너 업데이트인데도 꽤 변경이 많습니다. 그래도 여러편으로 나눠서 읽을 정도 분량은 아닙니다.

[루아2.2] lex.c

2 분 소요

Lua 2.2 루아 2.1 소스 코드를 다 읽고 이제 루아 2.2 소스 코드입니다. 릴리즈 버전 넘버링은 마이너 업데이트입니다. 그래서 지난번에 계획한 대로 마이너 업데이트일 때는 전체 코드를 다 읽는 대신 변경 부분만 집중적으로 읽겠습니다. 시간을 절약하기 위해서죠. 그리고 제가...

Back to Top ↑

Lua2.4

[루아2.4] tree

2 분 소요

tree.c 루아 2.2와 비교해서 루아 2.4의 tree.c 파일은 거의 다시 작성한 수준으로 많이 바꿨습니다. 그래서 루아 2.2 코드와 일대일로 비교하는 것이 의미가 없어보입니다. 그래서 tree.c는 그냥 코드 전체를 읽겠습니다.

[루아2.4] table

4 분 소요

table.c 전체적으로 변경이 많습니다. 코드 가독성을 높인 변경들이 주로 눈에 띕니다. 그 외에는 소소한 변경이네요.

[루아2.4] func.h func.c

2 분 소요

func.h 함수 관련 처리 코드를 작성한 파일입니다. 헤더 파일에 새로 추가한 자료 구조가 보이네요.

[루아2.4] lex.c

3 분 소요

Lua 2.4 이제 네 번째 릴리즈입니다. 루아 2.2에서 루아 2.4로 버전이 올라갔습니다. 바뀐점이 뭔지 볼까요?

Back to Top ↑

Lua2.5

[루아2.5] lex

2 분 소요

루아 2.5 드디어 루아 2.x 대 버전의 마지막 릴리즈입니다. 루아 2.4 대비 루아 2.5는 바뀐 부분이 많이 없어 보입니다. 변경점 위주로 빨리 읽고 버전 3.0에서 다시 자세히 읽기를 하겠습니다. 그럼 이번에도 루아 개발자가 작성한 릴리즈 노드를 보겠습니다.

Back to Top ↑

Lua1.0

루아 소스 코드 읽기 시작

3 분 소요

서문 프로그래밍 언어를 만든다는 것은 어쩌면 아무런 의미없는 작업일지도 모릅니다. 세상에는 많은 프로그래밍 언어가 있고 그 중 제대로 사용되는 것은 극히 일부입니다. 사람들은 그저 재미로 혹은 그냥 만들고 싶어서 프로그래밍 언어를 만듭니다. 저도 지금까지 두 세 번 정도 프로그래밍...

Back to Top ↑