2025년을 비췄던 달빛과 약속
달빛약속과 함께
달빛약속이 뭔데
제가 물주면서 키우고 있는 한글 프로그래밍 언어입니다.
https://dalbit-yaksok.postica.app/
숫자로 말해요
- 커밋 수: 508개
- 정힌: 87%
- AI: 13%
- Jules: 5.7%
- Copilot: 3.8%
- Codex: 3.4%
- PR 수: 45개
- 릴리즈 수: 65번(0.2.0-RC.1 → 4.0.0)
(이 바로 다음 블럭은 클로드가 썼습니다)
📆 요일별 커밋 분포
월요일 ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 14 😴
화요일 █████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 43
수요일 ███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 63
목요일 ████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 71
금요일 ███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 93
토요일 ████████████████████████████████████████ 167 🔥
일요일 ███████████████████████████████░░░░░░░░░ 129
🎁 보너스: 재미있는 사실들
| 🎲 | 사실 |
|:--:|:-----|
| 🦉 | 23시에 가장 많은 커밋 (63개) - 진정한 야행성! |
| 📅 | 토요일에 167개 커밋 - 주말이 본업? |
| 😴 | 월요일 커밋 14개 - 월요병 확인 |
| 📝 | 가장 긴 커밋 메시지 288자 (한글) |
| ⚡ | 1월 11일 하루 28개 커밋 - 최고 기록 |
| 🔄 | deno.json 494번 수정 - 버전 범프의 흔적 |
| 🤖 | AI가 75개 커밋 기여 (13%) |
| 💤 | 2월, 8월 휴식 - 재충전의 시간 |
(여기부터는 다시 제가 씁니다)
이름이 바뀌었어요. yaksok.ts → dalbit-yaksok
원래 이 프로그램의 이름은 yaksok.ts였습니다. 그 이유인것이, Puzzlet Chung, Ipkn 선생님께서 태초에 yaksok 프로그래밍 언어를 고안하셨고, 그 구현체는 파이썬이였습니다. 저는 약속 프로그래밍 언어의 사상과 문법이 마음에 들었습니다. 그러나 파이썬은 싫어했습니다.. 그래서 내가 가장 좋아하는 프로그래밍 언어인 타입스크립트로 재작성하였습니다. 이 프로그램의 시초였고, 그것이
저는
...
아 이게
1월: Monaco Editor 지원
프로그래밍 언어만 있으면 조금 아쉽습니다. 프로그래밍 언어를 더 잘 활용할 수 있기 위해서는 훌륭한
그 외에도..
- 한 단어짜리 함수를 잘 파싱할 수 있음
- 음수 표기법(
-10)을 잘 파싱할 수 있음 - 이름이 일부 겹치는 함수를 선언해도 알아서 잘 파싱함
등등 지금은 상상도 할 수 없는 버그를 수정하였습니다.
2월
군대에서 애인이랑 전화하느라 바빴습니다.,
3월: 1.0 릴리즈, 조금 쓸만해짐
문법의 현대화
약속은.. 독자문법이 몇개 있었습니다. 예시로,
- 배열 인덱싱이 1-base였다.
- 동등비교연산자가
=였다.1=1는 비교문이다. - 할당연산자가
:였다.이름: '홍길동'처럼 작성한다. - 함수 실행을 중단하는 문법과 함수 실행 결과값을 지정하는 문법이 별개였다. 반환값을
결과: 0처럼 지정한다.
이것들 싹 다 없앴습니다. 파이썬처럼 0-base로 인덱싱 하고,==으로 동등비교 하고,=로 할당하고,반환하기로함수 종료합니다.
코드멍
Throttled Stepping(디버깅용으로 코드 실행 속도를 낮추는 기능)과, Running Code Inspection(현재 실행중인 코드 구문을 강조) 기능이 추가하였습니다. 이제 코드 실행 속도를 느리게 해서 어떤 부분이 어떻게 실행되는지 지켜볼 수 있습니다. 코드멍이 가능해졌습니다.
4월: 1.3.1, 어느정도 쓸만해짐
이제 오류가 떠요
..이때까지는 오류가 잘 안떴었습니다. 정확히는,
BaseContext
교육용 프로그램을 만들 때는 한 스코프나 환경을 여러번 재사용해야 할 때가 있습니다. 그럴 때 사용하기 참 좋은 기능을 추가하였습니다. 예를 들어 교육용 코딩게임에서 사전 제공 함수를 추가해야 한다면(캐릭터 이동 등), BaseContext로 함수를 담은 소스코드를 미리 만들어두고, 사전 제공 환경으로 여러번 재사용할 수 있습니다.
5월: 큰거 없음. 이 때 전역했어요!
- 반복문 안에
반복 그만(break)이 없으면 오류를 냅니다,. - 배열을 여러줄에 개행해서 적을 수 있습니다.
6월: 규격화의 달
실행 인터페이스 규격화
기존에 중구난방이던 코드 실행 함수들을 완전히 재작성하였습니다. 이제 YaksokSession이라는 하나의 클래스가 모든 함수 실행을 관리합니다.
const session = new YaksokSession()
session.addModule('main', '"안녕!" 보여주기')
await session.runModule('main')
Extension API: 확장 프로그램 규격화
FFI를 더 쉽게 작성할 수 있도록 확장을 규격화 하였습니다. 이 때 당시에는 약속-자바스크립트 연결 확장(QuickJS를 활용하여 구현함)만 있었지만, 추후 Extension API를 활용하여 약속-파이썬 연결 확장, 약속-데이터 분석 확장도 개발하였습니다.
7월: 잡기능의 달
Dictionary가 돼요!!
자기소개 = {
이름: "홍길동"
나이: 14
}
자기소개['나이'] 보여주기
복합대입연산자가 돼요!!
나이 = 10
나이 += 10
나이 -= 10
나이 *= 10
나이 /= 10
의 값 종류(Typeof) 연산자도 생겼어요!!
나이 = 10
나이 의 값 종류 보여주기
실행제어 API 추가
- Pause and Resume: 코드 실행을 잠시 멈추고 다시 실행할 수 있습니다
- Abort Controller 지원: 코드 실행을 중단할 수 있습니다
8월
여기도 비어있습니다. 왜 안했을까요..
9월: 파이썬
const session = new YaksokSession()
session.extend(new Pyodide(['numpy']))
이렇게 확장을 설정해주면
from numpy import array
배열 = array([1, 2, 3, 4, 5, 6])
변형된_배열 = 배열.reshape(2, 3)
변형된_배열 보여주기
이렇게 그냥 쓸 수 있습니다
솔직히저는이게개쩌는거라고생각하는데
10월: 우리 AI 영양간식
사실 요즘 프로그래밍을 하는건 인간이 아니라 AI죠.
Machine Readable Errors
사실 인간이 보는 오류를 그대로 AI에게 먹이면, 토큰 낭비가 엄청납니다. 엄청나요 그냥. 그래서 뺄거 다 빼고, 정말 필요한 내용만을 JSON 포맷으로 직렬화해서 보여주기로 했습니다.
사람이 보는 오류가 이런 모양이라면:
🚨 문제가 발생했어요 (main 파일) 🚨
> "과 먹 기"라는 변수나 약속을 찾을 수 없어요.
┌─────
│ 8
│ 9 5번 반복
│ 10 먹을_음식을 먹일_사람과 먹 기
│ 11
└─────
기계는 이런 오류를 봅니다:
interface MachineReadableError {
message: string
position?: ${number}:
fileName?: string
child?: MachineReadableError
}
첫째아들을 위한 MCP
AI가 약속을 실행하고 문법을 공부할 수 있도록 MCP를 개발하였습니다.
https://mcp.dalbit-yaksok.postica.app/mcp
Cloudflare Worker로 개발하였습니다.
그 외에도..
- 리스트 곱셈 가능:
[0] * 5 == [0, 0, 0, 0, 0] - 리스트 덧셈 가능: `[0] + [1] == [0, 1]
11월: 한국어스럽게
함수 호출 조사 자동 분리
올해 업데이트중 가장 마음에 드는 기능입니다
약속, (받을사람)에게 전화하기
...
내_친구 = "수미"
내_친구에게 전화하기
이게 이렇게 내_친구와 에게를 띄어쓰지 않아도 잘 실행됩니다.
정말 저는 이 기능이 너무나도 마음에 듭니다. 이제 인터프리터는 한글이 아니라 비로소 한국어를 제대로 할 수 있게 되었다고 생각합니다.
그 외에는...
- 이해할 수 없는 함수 이름이 입력되었을 경우 수정을 제안합니다:
'뭐시기 뭐시기'라는 약속을 찾을 수 없어요. 아마도 '뭐시기 저시기'일 수 있어요. - 그 외에도 많은 오류메시지 개선이 있었습니다
12월: 이벤트 시스템
약속 밖에서 안으로 이벤트를 찔러넣을 수 있습니다.
# 이벤트 선언
이벤트(TEST_EVENT), 테스트 이벤트
# 이벤트 구독
테스트 이벤트
"이벤트 실행됨" 보여주기
session.eventCreation.sub('TEST_EVENT', (args, callback, terminate) => {
callback() // 이벤트 핸들러 실행
callback() // 여러 번 호출 가능
callback()
terminate() // 리스너 종료
})
앞으로는?
이제 언어 코어에서 구현할 기능들은 많이들 구현 해둔것 같아서, 앞으로는 데이터 분석 / GUI 프로그래밍 /
연결된 페이지 (Inlinks)
연결된 페이지가 없습니다.