게임 엔진을 만들어서 전체 게임을 스크립팅 언어로 작성하는 걸 결심했을 때, JavaScript(QuickJS), Python(Boost.Python), Lua(Sol2) 세 가지 중에서 고민했음
Lua를 임베딩하는 게 정말 쉽고, C++ 래퍼와 함께 써도 매우 간편함
얼마 안 걸려서 '이 정도면 바로 쓸 수 있겠다' 싶은 엔진을 갖추게 됨
게다가 Lua VM은 아주 가벼움
자세한 내용은 carimbo 프로젝트에서 볼 수 있음
엔진이나 애플리케이션에서 Lua를 스크립트로 지원한다는 걸 보면 Fennel을 사용할 수 있다는 점이 마음에 듦
Fennel은 Lua로 트랜스파일되는 언어임 Fennel 공식 링크
개인적으로 Boost.Python은 스크립팅 도구로 별로라고 생각함
이 점이 판단에 영향을 줄 수도 있다고 봄
Sol2가 Lua VM인지, 아니면 표준 Lua VM의 래퍼일 뿐인지 궁금함
'Lua는 단순한 고수준 언어가 아니라 임베디드 개발 전략'이라는 문구는 납득하기 어렵다고 느낌
이런 식의 표현이 들어간 글은 진지하게 받아들이기 힘듦
전체적으로 '나는 Lua를 오래 써봤으니 이제 결론 내릴 수 있다'는 느낌의 글임
MicroPython에 대해서는 실제로 경험이 별로 없어 보이는데 몇 가지 과장된 비판이 있음
예를 들어 "MicroPython 프로젝트는 시스템 코드와 스크립트 레이어가 뒤섞여 유지보수가 어렵다"는 얘기엔 근거가 약함
언어나 프로젝트 관리/구조 설계의 영향일 수 있는데, 원인은 엄밀하게 평가돼야 한다고 생각함
이 글은 실제 기사보다 Xedge Lua 프레임워크 광고처럼 느껴짐
그냥 광고임
전반적으로 글이 chatgpt 스타일 같음
광고 글의 경우, 사람이 썼든 LLM이 썼든 상관없어 보임
댓글들도 언급했듯이 chatgpt 느낌이라 글을 읽으며 별로 즐겁지 않았음
PLDB Top 1000 리스트에서 Lua가 MicroPython보다 더 높은 순위에 있음 이 비교 글에서 Github 유저 SkipKaczinksi는 Lua가 대체로 더 빠르다고 봄 Hackaday 글의 Michael Polia도 Lua가 작고 빠르다고 언급함 Toit 언어는 MicroPython보다 30배 빠르다고 주장함
Toit의 창립자는 V8의 초기 개발 책임자였음
"임베디드(embedded)"와 "임베더블(embeddable)" 개념은 구분이 필요함
MicroPython은 임베디드 플랫폼에서 사용되지만, Lua처럼 기존 애플리케이션에 통합하는 '임베더블 런타임'은 아님
MicroPython의 목적은 전통적인 C 런타임을 대체해 최소한의 C 래퍼로 초기화만 하고 나머지 비즈니스 로직을 MicroPython 스크립트로 작성하게 하는 것임
Lua의 lua_State처럼 여러 인터프리터를 동시에 쓸 수 있는 구조나 샌드박싱이 없음
즉, MicroPython은 '게임 엔진 내에서 스크립트로 빠른 반복 개발'보다는 'IoT 보드에서 파이썬으로 센서 데이터 읽기'에 최적화돼 있음
MicroPython이 Lua처럼 임베더블은 아니지만, 아예 불가능하지는 않음
완전히 박스 밖에서 쓸 수는 없고, 글루 코드 정도는 필요함
참고 자료로 embed 포트 예시를 볼 수 있음
Lua는 임베디드 용도로도 훌륭한 언어라고 생각함
Lua 기반 제품도 좋다고 생각하지만, 이 글에서 '왜 Lua가 MicroPython을 이기는지' 설득력이 떨어짐
MicroPython을 C로 확장하는 건 생각보다 쉽고, 공식 모듈 개발 방식과 똑같이 외부 모듈도 개발하면 됨
그래서 펌웨어 커스텀 빌드시 어렵지 않게 추가할 수 있음
그리고 Python 계열 라이브러리(numpy 등)가 안 된다는 지적이 있었지만, 실제로는 numpy와 scipy 일부를 리이벤트한 ulab 라이브러리도 존재함
개인적으로 들은 이야기는 마케팅 문구로 느껴짐
마이크로컨트롤러에서 충분한 리소스가 있으면 micropython을 씀
전력, 메모리, CPU 제어가 정말 중요하면 결국은 C/C++을 씀
네트워크 관련 개발은 C/C++에서 어렵지만 빠르고 안전하게 할 수 있는 옵션이 부족했는데(최근엔 내장 TLS 지원도 더 좋아졌을 것 같음)
Lua는 C를 부드럽게 포장한 느낌임
라이브러리가 풍부하면 좋지만, 직접 Lua 툴체인, 마이크로컨트롤러 툴체인, 필요한 라이브러리를 모두 포팅해야 하는 부담이 큼
그래서 이 부분이 마케팅 글이면 Xedge 제품을 써서 외주 주라는 메시지라고 생각함
'micropython을 쓰려면 리소스가 넉넉해야 한다'는 이야기에
그냥 2350에서도 잘 돌아간다고 짧게 언급함
정말 '진지하게' 임베디드 개발에 micropython이나 lua를 쓰는 사람이 있는지 궁금함
20년 가까이 프리랜서로 Lua 중심의 임베디드 제품을 만들었음
VOIP 기기, 홈 오토메이션, 산업용 라우터, 디지털 비디오 레코더 등 다양한 분야에서 Lua를 활용함
보통 시스템은 Linux 커널, libc, Lua 인터프리터, 그리고 몇몇 외부 라이브러리로 구성됨
Lua 애플리케이션 소스는 3만~10만 줄 정도로, 요즘 기준으론 '작은' 제품도 있음(플래시 8MB, 램 64MB 등)
Lua는 이런 환경에서 잘 동작함
모두 현역 제품이고, 고객에게도 돈이 되고 있음
Lua와 C의 연동은 매우 쉽고, 비동기 적으로 작업하는 데도 현대 언어들이 아직도 고민할 수준을 Lua는 예전부터 해결해옴
언어는 단순하면서도 강력하고, 코루틴, 클로저, 메타테이블 등으로 다양한 패러다임을 쓸 수 있음
이런 스케일의 프로젝트라면 여전히 Lua + C/C++ 조합을 선택할 것임
다른 생태계(Elixir, Rust, Nim)도 써봤지만, Lua만큼 강력하고 유연한 언어는 못 찾음
우리는 MicroPython으로 class B 의료기기까지 개발하고 있음
임베디드 세계는 범위가 매우 넓음
안전에 민감하면 규정상 못 쓰지만, 테스트 장비 등은 규제에 상관없으니 편한 걸 씀
IoT 영역에서도 모두 각자 편리한 걸 쓴다고 보면 됨
MicroPython이 큐브샛(소형 위성) 등 위성 임무에도 실제로 쓰임
관련 컨퍼런스와 팟캐스트 사례도 존재함
수천 개 제품이 Lua를 내부적으로 사용하거나 일부에라도 쓰고 있음
최근 LuaJIT도 조사해봤는데 저평가됐다고 생각함
'진지한 임베디드 개발자'는 대부분 컴파일 언어를 쓴다고 생각함
결국은 바이트코드로 컴파일되니 일종의 컴파일된 언어라고 볼 수도 있음
취미로는 그냥 Arduino(Platformio)를 이용함
마이크로컨트롤러에서는 컴파일하고 플래시 올리는 게 금방이라 굳이 인터프리터가 필요하진 않음
언젠가 C++을 대체할만한 다른 컴파일 언어도 써보고 싶음
Raspberry Pi Pico에서 잘 동작하는 추천 언어 있을지 궁금함
전문가까지는 아니지만, Rust가 가장 인기 있는 대안 중 하나라고 느낌
트렌디하고 C++의 문제도 많이 고쳤으며 툴링도 괜찮은 편임
Zig도 재밌어 보여서 시도해보고 싶음
Raspberry Pi는 사양이 좋아서 시스템 언어가 아니어도 돌아갈 수 있음
Kotlin도 좋아하고, 기본적으로는 JVM이 필요하지만 native 빌드 가능함
다만 Pico에서 GPIO 제어는 파일시스템을 직접 건드려 써야 할 수도 있음(덧붙여 Pico에서 Kotlin 지원은 확실하지 않음)
Lua는 본질적으로 훨씬 더 단순한 언어임
Python은 '한 가지 방법만 있다'는 신념을 갖고 있지만 실제로는 이것저것 다 넣어둔 '만능툴' 같은 느낌임
이게 오히려 시작하기 쉽고, 라이브러리도 많아서 쉽게 개발할 수 있지만
리소스가 부족한(작은) 환경에는 잘 어울리지 않음
화려한 의자를 꼭 판자로 에임스 체어로 변형시키는 데에는 한계가 있음
Python은 쉽고 Lua는 단순함
'쉬움'의 문제는 내부 복잡성이 숨어 있다는 것이고, '단순함'은 사용자에게 더 많은 노력이 필요함을 의미함
Python은 버전 호환성이 취약해서 3.x에서 3.x+1로 넘어갈 때 문제가 자주 발생함
Lua도 완벽하진 않지만, 그래도 여러 Lua 버전을 지원하는 사례가 많아서 급격한 버전 업그레이드를 강제받지 않는 장점이 있음
Hacker News 의견
게임 엔진을 만들어서 전체 게임을 스크립팅 언어로 작성하는 걸 결심했을 때, JavaScript(QuickJS), Python(Boost.Python), Lua(Sol2) 세 가지 중에서 고민했음
Lua를 임베딩하는 게 정말 쉽고, C++ 래퍼와 함께 써도 매우 간편함
얼마 안 걸려서 '이 정도면 바로 쓸 수 있겠다' 싶은 엔진을 갖추게 됨
게다가 Lua VM은 아주 가벼움
자세한 내용은 carimbo 프로젝트에서 볼 수 있음
엔진이나 애플리케이션에서 Lua를 스크립트로 지원한다는 걸 보면 Fennel을 사용할 수 있다는 점이 마음에 듦
Fennel은 Lua로 트랜스파일되는 언어임
Fennel 공식 링크
개인적으로 Boost.Python은 스크립팅 도구로 별로라고 생각함
이 점이 판단에 영향을 줄 수도 있다고 봄
Sol2가 Lua VM인지, 아니면 표준 Lua VM의 래퍼일 뿐인지 궁금함
'Lua는 단순한 고수준 언어가 아니라 임베디드 개발 전략'이라는 문구는 납득하기 어렵다고 느낌
이런 식의 표현이 들어간 글은 진지하게 받아들이기 힘듦
전체적으로 '나는 Lua를 오래 써봤으니 이제 결론 내릴 수 있다'는 느낌의 글임
MicroPython에 대해서는 실제로 경험이 별로 없어 보이는데 몇 가지 과장된 비판이 있음
예를 들어 "MicroPython 프로젝트는 시스템 코드와 스크립트 레이어가 뒤섞여 유지보수가 어렵다"는 얘기엔 근거가 약함
언어나 프로젝트 관리/구조 설계의 영향일 수 있는데, 원인은 엄밀하게 평가돼야 한다고 생각함
이 글은 실제 기사보다 Xedge Lua 프레임워크 광고처럼 느껴짐
그냥 광고임
전반적으로 글이 chatgpt 스타일 같음
광고 글의 경우, 사람이 썼든 LLM이 썼든 상관없어 보임
댓글들도 언급했듯이 chatgpt 느낌이라 글을 읽으며 별로 즐겁지 않았음
PLDB Top 1000 리스트에서 Lua가 MicroPython보다 더 높은 순위에 있음
이 비교 글에서 Github 유저 SkipKaczinksi는 Lua가 대체로 더 빠르다고 봄
Hackaday 글의 Michael Polia도 Lua가 작고 빠르다고 언급함
Toit 언어는 MicroPython보다 30배 빠르다고 주장함
Toit의 창립자는 V8의 초기 개발 책임자였음
"임베디드(embedded)"와 "임베더블(embeddable)" 개념은 구분이 필요함
MicroPython은 임베디드 플랫폼에서 사용되지만, Lua처럼 기존 애플리케이션에 통합하는 '임베더블 런타임'은 아님
MicroPython의 목적은 전통적인 C 런타임을 대체해 최소한의 C 래퍼로 초기화만 하고 나머지 비즈니스 로직을 MicroPython 스크립트로 작성하게 하는 것임
Lua의 lua_State처럼 여러 인터프리터를 동시에 쓸 수 있는 구조나 샌드박싱이 없음
즉, MicroPython은 '게임 엔진 내에서 스크립트로 빠른 반복 개발'보다는 'IoT 보드에서 파이썬으로 센서 데이터 읽기'에 최적화돼 있음
완전히 박스 밖에서 쓸 수는 없고, 글루 코드 정도는 필요함
참고 자료로 embed 포트 예시를 볼 수 있음
Lua는 임베디드 용도로도 훌륭한 언어라고 생각함
Lua 기반 제품도 좋다고 생각하지만, 이 글에서 '왜 Lua가 MicroPython을 이기는지' 설득력이 떨어짐
MicroPython을 C로 확장하는 건 생각보다 쉽고, 공식 모듈 개발 방식과 똑같이 외부 모듈도 개발하면 됨
그래서 펌웨어 커스텀 빌드시 어렵지 않게 추가할 수 있음
그리고 Python 계열 라이브러리(numpy 등)가 안 된다는 지적이 있었지만, 실제로는 numpy와 scipy 일부를 리이벤트한 ulab 라이브러리도 존재함
개인적으로 들은 이야기는 마케팅 문구로 느껴짐
마이크로컨트롤러에서 충분한 리소스가 있으면 micropython을 씀
전력, 메모리, CPU 제어가 정말 중요하면 결국은 C/C++을 씀
네트워크 관련 개발은 C/C++에서 어렵지만 빠르고 안전하게 할 수 있는 옵션이 부족했는데(최근엔 내장 TLS 지원도 더 좋아졌을 것 같음)
Lua는 C를 부드럽게 포장한 느낌임
라이브러리가 풍부하면 좋지만, 직접 Lua 툴체인, 마이크로컨트롤러 툴체인, 필요한 라이브러리를 모두 포팅해야 하는 부담이 큼
그래서 이 부분이 마케팅 글이면 Xedge 제품을 써서 외주 주라는 메시지라고 생각함
그냥 2350에서도 잘 돌아간다고 짧게 언급함
정말 '진지하게' 임베디드 개발에 micropython이나 lua를 쓰는 사람이 있는지 궁금함
20년 가까이 프리랜서로 Lua 중심의 임베디드 제품을 만들었음
VOIP 기기, 홈 오토메이션, 산업용 라우터, 디지털 비디오 레코더 등 다양한 분야에서 Lua를 활용함
보통 시스템은 Linux 커널, libc, Lua 인터프리터, 그리고 몇몇 외부 라이브러리로 구성됨
Lua 애플리케이션 소스는 3만~10만 줄 정도로, 요즘 기준으론 '작은' 제품도 있음(플래시 8MB, 램 64MB 등)
Lua는 이런 환경에서 잘 동작함
모두 현역 제품이고, 고객에게도 돈이 되고 있음
Lua와 C의 연동은 매우 쉽고, 비동기 적으로 작업하는 데도 현대 언어들이 아직도 고민할 수준을 Lua는 예전부터 해결해옴
언어는 단순하면서도 강력하고, 코루틴, 클로저, 메타테이블 등으로 다양한 패러다임을 쓸 수 있음
이런 스케일의 프로젝트라면 여전히 Lua + C/C++ 조합을 선택할 것임
다른 생태계(Elixir, Rust, Nim)도 써봤지만, Lua만큼 강력하고 유연한 언어는 못 찾음
우리는 MicroPython으로 class B 의료기기까지 개발하고 있음
임베디드 세계는 범위가 매우 넓음
안전에 민감하면 규정상 못 쓰지만, 테스트 장비 등은 규제에 상관없으니 편한 걸 씀
IoT 영역에서도 모두 각자 편리한 걸 쓴다고 보면 됨
MicroPython이 큐브샛(소형 위성) 등 위성 임무에도 실제로 쓰임
관련 컨퍼런스와 팟캐스트 사례도 존재함
수천 개 제품이 Lua를 내부적으로 사용하거나 일부에라도 쓰고 있음
최근 LuaJIT도 조사해봤는데 저평가됐다고 생각함
'진지한 임베디드 개발자'는 대부분 컴파일 언어를 쓴다고 생각함
취미로는 그냥 Arduino(Platformio)를 이용함
마이크로컨트롤러에서는 컴파일하고 플래시 올리는 게 금방이라 굳이 인터프리터가 필요하진 않음
언젠가 C++을 대체할만한 다른 컴파일 언어도 써보고 싶음
Raspberry Pi Pico에서 잘 동작하는 추천 언어 있을지 궁금함
전문가까지는 아니지만, Rust가 가장 인기 있는 대안 중 하나라고 느낌
트렌디하고 C++의 문제도 많이 고쳤으며 툴링도 괜찮은 편임
Zig도 재밌어 보여서 시도해보고 싶음
Raspberry Pi는 사양이 좋아서 시스템 언어가 아니어도 돌아갈 수 있음
Kotlin도 좋아하고, 기본적으로는 JVM이 필요하지만 native 빌드 가능함
다만 Pico에서 GPIO 제어는 파일시스템을 직접 건드려 써야 할 수도 있음(덧붙여 Pico에서 Kotlin 지원은 확실하지 않음)
Nim이 꽤 괜찮은 옵션으로 보임
관련 자료는 picostdlib의 Nim 지원 참고
Lua는 본질적으로 훨씬 더 단순한 언어임
Python은 '한 가지 방법만 있다'는 신념을 갖고 있지만 실제로는 이것저것 다 넣어둔 '만능툴' 같은 느낌임
이게 오히려 시작하기 쉽고, 라이브러리도 많아서 쉽게 개발할 수 있지만
리소스가 부족한(작은) 환경에는 잘 어울리지 않음
화려한 의자를 꼭 판자로 에임스 체어로 변형시키는 데에는 한계가 있음
Python은 쉽고 Lua는 단순함
'쉬움'의 문제는 내부 복잡성이 숨어 있다는 것이고, '단순함'은 사용자에게 더 많은 노력이 필요함을 의미함
Python은 버전 호환성이 취약해서 3.x에서 3.x+1로 넘어갈 때 문제가 자주 발생함
Lua도 완벽하진 않지만, 그래도 여러 Lua 버전을 지원하는 사례가 많아서 급격한 버전 업그레이드를 강제받지 않는 장점이 있음