본문으로 건너뛰기

승인 · 단계 · 문서

「Lua 언어 지원」으로 돌아가기


13. 결정 사항 — 승인 대기

번호결정어디에
두 모드 — LuaJIT 2.1(FFI 백엔드)과 순수 5.3+. 순수 5.1·5.2는 제외2절 — 소비 환경 조사(언리얼 임베드 LuaJIT 2.1.0-beta3)가 처음 권고 「5.3+만」을 뒤집었습니다
암호·해시·체크섬 전부 C 모듈, 모듈 없이 평문은 읽힘(지연 require)3절
C 모듈은 함수 4개, C 런타임에서 이식, 자족 단일 소스4절
컬럼 디코드는 순수 Lua, 계측 후 재평가5절
배열 1-기반, 옵셔널은 nil이 아니라 has 이웃6절
예약어 이름 유지 — 대괄호 문자열 키7절
uuid는 정규형 문자열8절
하네스는 벤더한 Lua 소스로 임베더를 빌드12절
없는 키는 오류 — 타입당 공유 엄격 메타테이블 + 생성 파일의 LuaLS 주석6절

구현하면서 갈라진 곳 — 3개

처음 적은 것구현
C 모듈 함수 3개4개sleepMs가 늘었습니다업데이터를 옮기면서 Lua에 sleep이 없다는 사실이 드러났고, 바쁜 대기가 대안이었습니다
int64 키 인덱스는 정렬 배열 + 이진 탐색십진 문자열 키 해시같은 성질(두 모드 공통·무손실)을 더 적은 코드로 줍니다. findBy… 안에서 정규화되므로 호출자는 모릅니다
rockspec (WriteManifest)내지 않습니다첫 소비자가 엔진 임베드 쪽이고, 소스 통합에서 매니페스트는 방해입니다. 필요해지면 9절이 다시 정합니다

그리고 하나가 설계 그대로이되 결과에 이름을 남길 만합니다 — 참조 배열의 값 리스트는 구멍을 가질 수 있습니다. Lua 테이블은 nil을 담지 못하므로 해석되지 않은 원소는 없는 원소이고, 원소 수는 언제나 키 리스트(…Index)의 것입니다. serial-ref 게이트와 언어 가이드가 그 계약을 들고 있습니다.

14. 단계

단계무엇상태
0스펙 확정 — 13절의 9개, 특히 ①됨. ①은 소비 환경 조사로 확정
1리더 — 헤더·인코딩 14종·presence 둘·uuid, 그리고 2절의 백엔드 2개됨. 생성기 전에 손 드라이버로 적합성 코퍼스와 optional두 모드에서 읽어 확인 — 두 모드의 출력이 바이트 단위로 같고, 이 코퍼스 하나가 인코딩 14종을 전부 밟습니다
2C 모듈 — tb_open·MD5 이식과 바인딩됨. 서명된 코퍼스의 MAC 검증, 변조·벗기기 거부, 봉인 파일 복호·keyCheck·재호출 통과, 다른 키 거부, MD5는 RFC 1321 벡터 7개 — 두 런타임에서. MSVC /W4 /WX 통과
3하네스 기반 — Lua 5.4.8 소스 벤더, 임베더, LuaToolchain됨. 호스트는 스위트가 한 번 빌드해 재사용하고, 소스가 더 새로우면 다시 빌드합니다
4생성기·뷰·템플릿 5개·LanguageProfile.Lua(15번째)됨. 생성기 약 990줄·뷰 약 300줄·템플릿 5개
5게이트 — 픽스처 recipe 11개에 타깃 추가, 12절의 아홉됨. 읽기 게이트 10개(중첩·옵셔널·예약어·키 타입 포함)가 전부 값 대조입니다
6업데이터와 그 게이트됨. 실제 HTTP 서버 상대 4개 — 바뀐 것만 받기·손상 거부·재시도·404 무재시도. 게이트의 fetch는 curl이고, 그것은 계약의 예시이지 업데이터의 일부가 아닙니다
7문서 — doc/languages/lua.md·side-by-side 항목·doc/dependencies.md 한 줄
8마무리 — 골든 재기록 → 비교본 재생성 → 샘플 재생성 → 기록 없이 재검증, 로드맵 항목진행 중

15. 문서 — C 컴파일러를 요구하는 첫 번째 언어 가이드

doc/languages/lua.md에 들어가는 것은 다른 14개와 같지만, 의존성 절이 Swift보다 한 발 더 갑니다 — 패키지 매니저가 아니라 컴파일 절차를 안내해야 합니다.

내용
왜 C 모듈인가3절의 근거. 안 빌드하면 무엇이 안 되는지(암호화·MAC·업데이터)까지
경로 ① 게임 엔진 임베드tabbit_native.c를 빌드에 넣고 등록 몇 줄 — 5.2+와 LuaJIT(5.1 API)의 등록이 달라서 둘 다 적습니다. 하네스의 임베더가 그대로 예시입니다
경로 ② 독립 인터프리터gcc·cl 각 한 줄로 .so/.dll을 만들어 package.cpath
경로 ③ 빌드 없이평문 파일만 — 무엇을 포기하는지
업데이터fetch 계약 — URL을 받아 본문, 또는 nil·메시지·재시도 여부를 돌려주는 함수
주의사항1-기반 배열의 한 칸, has 이웃 키, cdata의 LL 접미사, 참조 배열의 길이는 키 목록에서

doc/dependencies.md의 「생성된 코드의 의존」 표에는 한 줄이 들어갑니다 — 의존이 패키지가 아니라 동봉된 C 소스라는 점에서 Swift의 swift-crypto 줄과 형태가 다르고, 그 차이가 표에 남아야 합니다.

EOD