Short Introduction
본 난해한 프로그래밍 언어는 몇 가지의 한글 음운과 문장 부호만을 활용해 프로그래밍을 할 수 있는 언어입니다. 이 프로젝트에서는 언어를 기획하고 이를 실행시킬 수 있는 구동 환경을 제작하였습니다.
제한된 키워드로 다양한 기능 구현을 위하여 프로그래밍에 있어서 최소한의 기능인 Variable, Array, Bitwise Operator, Goto Syntax, Fuctions (단 한글 언어를 활용한 자체적 함수 정의 불가능)이 지원됩니다.
Content
- 프로젝트 진행 동기
Brain Fuck나 아희와 같은 여러 난해한 프로그래밍 언어를 알게된 이후로 한글을 활용한 새로운 난해한 프로그래밍 언어를 제작해보고, 복잡하고 비효율적이지만 이론상 어떠한 프로그램이든 제작이 가능한, 즉 튜링 가능한 프로그래밍 언어를 개발해보고자 하여 본 프로젝트를 기획하였습니다. 추가적으로 이 프로젝트를 통해 프로그래밍 언어, 특히 인터프리터의 처리 과정을 이해해보고 탐색해볼 수 있을것이라 생각하여 이 프로젝트를 진행하였습니다.
- 프로젝트의 진행 과정
처음으로는 메모리를 관리하기 위한 MemorySystem Class를 제작하였습니다. 그 이후 주어진 코드를 불러와 구문을 분석하고, 명령과 기호 체계를 구조화하여 실행하기 용이한 형태로 변형하는 Encoder Class를 제작하였습니다. 마지막으로 이렇게 변형된 코드를 활용하여 이를 읽고 실시간으로 실행하는 실질적인 프로그램의 동작부분인 Interpreter Class를 제작하였습니다. 또한, 이와 더불어 Encoding 및 Interpreting 과정에서 문법적인 실수로 발생하는 오류를 안내하고 특별한 처리를 하기 위한 ErrorSystem Class를 제작하였습니다. 이후로는 하나의 독립된 프로그램을 작동하는 Function 개발을 위한 C++ Static Library인 HFDL(Hangul Function Development Library)를 개발하고, 이를 활용해 Hangul Standard Functions Set을 구성하였습니다. 이렇게 개발이 완료된 프로젝트에 대하여 두 수를 더하는 코드, 1부터 100까지 출력하는 코드, 두 수 및 리스트를 서로 바꾸는 (Swap) 코드 등을 작성하여 디버깅을 거쳤습니다.
- 프로젝트의 결과
몇가지 테스트 코드에 대하여 오류 없이 잘 실행됨을 확인할 수 있었습니다. 최종적으로 Hangul Source Code를 실행할 수 있는 Hangul Virtual Machine, Hangul Function을 제작하는데 활용할 수 있는 HFDL (Hangul Fuction Development Library)를 제작 완료하였습니다. 성능을 확인해보면 내부적으로 소스코드를 최적화하는 알고리즘이 존재하지 않고, Garbage Collector 역시 구현되지 않았기에 시간적으로 공간적으로 그리 효율적 언어라고 말하기는 힘듭니다. 실제로 실행해보면 C/C++은 물론이고, 같은 인터프리터 언어인 Python에 비해 훨씬 느린 속도를 보임을 알 수 있었습니다.
- 프로젝트 진행 소감
기회가 된다면 여기서 멈추는 것이 아니라 소스코드에 대하여 Hangul Virtual Machine을 통해 보다 쉽게 프로그램을 실행시킬 수 있는 Interface를 제작하면 좋지 않을까 싶습니다. 이 Interface는 단순한 코드 실행 뿐만 아니라, 빌드 기능도 지원할 것이며, 추가적으로 함수 제작을 위한 HFDL을 원본에서 복사하여 원하는 위치에 제공해주고, 제작한 함수를 Function Set에 추가/삭제/함수명 변경 등의 기능을 수행할 것입니다. 또한, 코드 최적화 기술을 연구하여 내부 매커니즘을 수정하고, 코드를 자체적으로 최적화하여 실행하며, Garbage Collector 등을 구현해보아도 좋을 것이라 생각합니다.
Attachments
https://github.com/CLiF-1593/HangulVirtualMachine
https://github.com/CLiF-1593/HangulFunctionDevelopmentLibrary
About
본 글은 2022년도 1학기에 22 유태우 연구회원이 진행한 프로젝트입니다.