Lua는 임베딩하기에 좋지만, Redis에서 스크립팅 언어로 선택한 것은 후회가 많았음. 언어 자체가 마음에 들지 않음. 추상화 수준에서 기대하는 것과 비교해 마찰이 있는 것처럼 보임. 작은 설계 결정들이 누적되어 언어가 다소 적대적임. 그러나 빠르고, 통합이 쉽고, 작은 메모리 사용량과 신뢰성 때문에 여전히 선택할 가치가 있음. C-API 수준에서도 스택 접근 방식으로 인해 적대감이 존재함. FORTH와 같은 스택 언어에 노출된 적이 있지만 바인딩을 작성할 때 여전히 정신적 운동이 필요했음.
Lua를 좋아한다면 Terra를 보길 권장함. Terra는 Lua에 임베딩되고 메타 프로그래밍되는 저수준 시스템 프로그래밍 언어임. C/C++처럼 정적 타입, 컴파일 언어이며 수동 메모리 관리가 가능함. 그러나 C/C++과 달리 처음부터 Lua로 메타 프로그래밍되도록 설계됨. Terra 프로그램은 Apple의 C 컴파일러에 사용되는 동일한 LLVM 백엔드를 사용함. 이는 Terra 코드가 동등한 C 코드와 유사한 성능을 발휘함을 의미함.
Lua를 커스텀 게임 엔진과 통합하는 작업을 최근에 했으며, 다른 언어와의 통합이 얼마나 깔끔한지 공감함. 인터페이스가 깔끔하여 자동으로 바인딩을 생성하기 쉬움. Roslyn Incremental Source Generators를 사용하여 C#과 Lua 간의 바인딩을 자동으로 생성했으며, 인터페이스 설계 덕분에 전혀 어렵지 않았음. Lua 스택과 동적 타이핑, "테이블" 덕분에 C#과 Lua 간의 임의 데이터 클래스에 대한 마샬러를 생성하기 쉬웠음. 그러나 언어 자체에 대한 유효한 비판이 많음. 특히 1 기반 인덱싱을 좋아하지 않음. 이러한 문제를 해결하면서 유사한 인터페이스를 가진 임베디드 스크립팅 언어를 설계하는 것을 고려 중임.
Lua에 대한 애정이 더 생기지는 않았음. 오히려 불만이 강화되었음. Lua를 작성한 지 오래되었지만 직관적이지 않다고 생각했음. 왜 배열이 테이블인지, 왜 nil로 종료되며 1에서 시작하는지 이해할 수 없음. Lua가 과소평가되었다고 생각하지 않음. (구형) 게임 엔진에서 스크립트를 작성하는 데 매우 인기가 있음.
Lua 플러그인 명령어로 챗봇을 만들었지만 C++ 프로그램에 통합하는 데 끔찍한 경험을 했음. 사람들이 임베딩이 쉽다고 말하는 이유를 이해할 수 없음. 스택 조작을 많이 해야 함. 언어 자체가 번거롭고 실수를 했을 때 전혀 도움을 주지 않음. 다시는 Lua를 사용하지 않을 것이며 Lua를 사용하는 프로젝트를 피할 것임.
Lua는 약한 타이핑, 타입 힌트 및 오류 처리의 부재로 인해 상당한 양의 코드를 작성하기 어려움. 과소평가되지 않음. 시간이 지나면서 정적 타입 언어와 타입 힌트(Python, TypeScript)를 점점 더 좋아하게 되었음. 커뮤니티에 힌트 없는 Python이나 JS 코드를 작성하는 것은 해로움. 최근에 1.5k cloc의 JS를 TypeScript로 다시 작성했음. 항상 누락된 null, null 속성 접근 또는 의미적으로 의심스러운 null이 수십 건 있었음.
대부분의 스크립팅이 필요한 애플리케이션은 JavaScript를 임베딩해야 한다고 생각함. 기존 생태계에서 큰 이점이 있음. 사람들이 항상 좋아하지는 않지만 수백만 명이 이미 알고 있음. 배열 인덱싱과 nil 종료의 특이점과 Lua가 런타임에 알게 되는 수십 가지 다른 점을 다시 배울 필요가 없음. 모든 크기의 JS 엔진이 있으며, 대부분의 운영 체제는 설치 없이 접근 가능한 고품질 엔진과 임베딩 프레임워크를 제공함. 사용자에게 새로운 언어를 배우게 하는 대신 표준 언어를 사용하는 것이 좋음. 사용자와 자신 모두에게 시간을 절약할 수 있음.
Lua와 함께 작업하는 것을 즐겼으며 매우 좋은 언어라고 생각함. 특히 C/C++에 임베딩하는 인터페이스가 깔끔하고 유연함. 성능 문제는 있지만 고성능 비디오 게임에서 게임 로직에 Lua가 널리 사용되는 것을 고려할 때 이러한 문제는 해결 가능함. 그러나 혼란스럽고 언어를 어렵게 만드는 다른 문제들이 있음. Lua와 C 인터페이스를 배우는 것이 Lua를 배우는 것만큼이나 많기 때문에 배포 간 전환이 다른 언어보다 혼란스러움. 그럼에도 불구하고 언어가 과소평가되었다고 생각함.
Lua를 임베딩하는 것이 재미있었지만, wasm과 마찬가지로 전체 바이너리를 다시 컴파일하지 않고 새 코드를 실행해야 하는 경우가 거의 없었음. 가장 재미있었던 것은 C++로 게임 엔진을 만들고 모든 게임 로직에 Lua를 사용한 것이었음. 빠른 디버그 사이클이 매우 유용했음. 두 번째로 재미있었던 것은 Lua 로직을 다시 로드할 수 있는 IRC 봇을 만든 것이었음. 세 번째로 재미있었던 것은 Lua를 튜링 완전한 구성 언어로 사용하는 것이었음. 배열이 필요할 때 Lua로 배열을 만들었음. 가장 재미없었던 것은 3D 모델을 생성된 Lua로 내보내는 Blender 플러그인이었음.
Lua는 과대평가되었다고 생각함. 게임 산업에서 널리 사용되기 때문임. Lua의 유일한 장점은 C++에 쉽게 임베딩할 수 있다는 것임. 그 외에는 악몽임.
Hacker News 의견
Lua는 임베딩하기에 좋지만, Redis에서 스크립팅 언어로 선택한 것은 후회가 많았음. 언어 자체가 마음에 들지 않음. 추상화 수준에서 기대하는 것과 비교해 마찰이 있는 것처럼 보임. 작은 설계 결정들이 누적되어 언어가 다소 적대적임. 그러나 빠르고, 통합이 쉽고, 작은 메모리 사용량과 신뢰성 때문에 여전히 선택할 가치가 있음. C-API 수준에서도 스택 접근 방식으로 인해 적대감이 존재함. FORTH와 같은 스택 언어에 노출된 적이 있지만 바인딩을 작성할 때 여전히 정신적 운동이 필요했음.
Lua를 좋아한다면 Terra를 보길 권장함. Terra는 Lua에 임베딩되고 메타 프로그래밍되는 저수준 시스템 프로그래밍 언어임. C/C++처럼 정적 타입, 컴파일 언어이며 수동 메모리 관리가 가능함. 그러나 C/C++과 달리 처음부터 Lua로 메타 프로그래밍되도록 설계됨. Terra 프로그램은 Apple의 C 컴파일러에 사용되는 동일한 LLVM 백엔드를 사용함. 이는 Terra 코드가 동등한 C 코드와 유사한 성능을 발휘함을 의미함.
Lua를 커스텀 게임 엔진과 통합하는 작업을 최근에 했으며, 다른 언어와의 통합이 얼마나 깔끔한지 공감함. 인터페이스가 깔끔하여 자동으로 바인딩을 생성하기 쉬움. Roslyn Incremental Source Generators를 사용하여 C#과 Lua 간의 바인딩을 자동으로 생성했으며, 인터페이스 설계 덕분에 전혀 어렵지 않았음. Lua 스택과 동적 타이핑, "테이블" 덕분에 C#과 Lua 간의 임의 데이터 클래스에 대한 마샬러를 생성하기 쉬웠음. 그러나 언어 자체에 대한 유효한 비판이 많음. 특히 1 기반 인덱싱을 좋아하지 않음. 이러한 문제를 해결하면서 유사한 인터페이스를 가진 임베디드 스크립팅 언어를 설계하는 것을 고려 중임.
Lua에 대한 애정이 더 생기지는 않았음. 오히려 불만이 강화되었음. Lua를 작성한 지 오래되었지만 직관적이지 않다고 생각했음. 왜 배열이 테이블인지, 왜 nil로 종료되며 1에서 시작하는지 이해할 수 없음. Lua가 과소평가되었다고 생각하지 않음. (구형) 게임 엔진에서 스크립트를 작성하는 데 매우 인기가 있음.
Lua 플러그인 명령어로 챗봇을 만들었지만 C++ 프로그램에 통합하는 데 끔찍한 경험을 했음. 사람들이 임베딩이 쉽다고 말하는 이유를 이해할 수 없음. 스택 조작을 많이 해야 함. 언어 자체가 번거롭고 실수를 했을 때 전혀 도움을 주지 않음. 다시는 Lua를 사용하지 않을 것이며 Lua를 사용하는 프로젝트를 피할 것임.
Lua는 약한 타이핑, 타입 힌트 및 오류 처리의 부재로 인해 상당한 양의 코드를 작성하기 어려움. 과소평가되지 않음. 시간이 지나면서 정적 타입 언어와 타입 힌트(Python, TypeScript)를 점점 더 좋아하게 되었음. 커뮤니티에 힌트 없는 Python이나 JS 코드를 작성하는 것은 해로움. 최근에 1.5k cloc의 JS를 TypeScript로 다시 작성했음. 항상 누락된 null, null 속성 접근 또는 의미적으로 의심스러운 null이 수십 건 있었음.
대부분의 스크립팅이 필요한 애플리케이션은 JavaScript를 임베딩해야 한다고 생각함. 기존 생태계에서 큰 이점이 있음. 사람들이 항상 좋아하지는 않지만 수백만 명이 이미 알고 있음. 배열 인덱싱과 nil 종료의 특이점과 Lua가 런타임에 알게 되는 수십 가지 다른 점을 다시 배울 필요가 없음. 모든 크기의 JS 엔진이 있으며, 대부분의 운영 체제는 설치 없이 접근 가능한 고품질 엔진과 임베딩 프레임워크를 제공함. 사용자에게 새로운 언어를 배우게 하는 대신 표준 언어를 사용하는 것이 좋음. 사용자와 자신 모두에게 시간을 절약할 수 있음.
Lua와 함께 작업하는 것을 즐겼으며 매우 좋은 언어라고 생각함. 특히 C/C++에 임베딩하는 인터페이스가 깔끔하고 유연함. 성능 문제는 있지만 고성능 비디오 게임에서 게임 로직에 Lua가 널리 사용되는 것을 고려할 때 이러한 문제는 해결 가능함. 그러나 혼란스럽고 언어를 어렵게 만드는 다른 문제들이 있음. Lua와 C 인터페이스를 배우는 것이 Lua를 배우는 것만큼이나 많기 때문에 배포 간 전환이 다른 언어보다 혼란스러움. 그럼에도 불구하고 언어가 과소평가되었다고 생각함.
Lua를 임베딩하는 것이 재미있었지만, wasm과 마찬가지로 전체 바이너리를 다시 컴파일하지 않고 새 코드를 실행해야 하는 경우가 거의 없었음. 가장 재미있었던 것은 C++로 게임 엔진을 만들고 모든 게임 로직에 Lua를 사용한 것이었음. 빠른 디버그 사이클이 매우 유용했음. 두 번째로 재미있었던 것은 Lua 로직을 다시 로드할 수 있는 IRC 봇을 만든 것이었음. 세 번째로 재미있었던 것은 Lua를 튜링 완전한 구성 언어로 사용하는 것이었음. 배열이 필요할 때 Lua로 배열을 만들었음. 가장 재미없었던 것은 3D 모델을 생성된 Lua로 내보내는 Blender 플러그인이었음.
Lua는 과대평가되었다고 생각함. 게임 산업에서 널리 사용되기 때문임. Lua의 유일한 장점은 C++에 쉽게 임베딩할 수 있다는 것임. 그 외에는 악몽임.