# 터키어 문법 격(case)에 기반한 프로그래밍 언어 Kip

> Clean Markdown view of GeekNews topic #25929. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25929](https://news.hada.io/topic?id=25929)
- GeekNews Markdown: [https://news.hada.io/topic/25929.md](https://news.hada.io/topic/25929.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-01-19T02:32:37+09:00
- Updated: 2026-01-19T02:32:37+09:00
- Original source: [github.com/kip-dili](https://github.com/kip-dili/kip)
- Points: 1
- Comments: 1

## Topic Body

- **Kip**은 터키어의 **문법 격과 서법(mood)** 을 타입 시스템에 통합한 **실험적 프로그래밍 언어**로, 자연어 형태론과 타입 이론의 결합을 탐구함  
- 터키어의 **명사 격 변화와 모음 조화**를 코드 구조에 반영해, 함수 인자 관계를 격 접미사로 구분하고 **인자 순서의 유연성**을 지원함  
- **패턴 매칭**, **다형 타입**, **귀납적 자료형**, **입출력 효과** 등 현대 함수형 언어의 주요 기능을 터키어 문법 형태로 표현함  
- **Foma** 형태소 분석기와 **Haskell Stack**을 이용해 빌드하며, **WASM 기반 브라우저 실행 환경**과 **바이트코드 캐시(.iz)** 기능을 제공함  
- 언어학과 프로그래밍 언어 설계의 교차점을 보여주는 **연구·교육용 프로젝트**로, 자연어 기반 언어 설계 가능성을 실험하는 사례임  

---
### Kip 개요
- Kip은 터키어 단어 **‘kip’(서법)** 에서 이름을 따온 언어로, **터키어 문법 격을 타입 시스템에 포함**시킨 실험적 언어  
  - 터키어의 **명사 격 변화(ismin halleri)** 와 **모음 조화(vowel harmony)** 를 프로그래밍 언어 설계에 통합  
  - **연구 및 교육 목적**의 프로젝트로, 실제 배포용 언어는 아님  
- **터키어 및 영어 튜토리얼**이 제공되어 Kip 프로그램 작성법을 학습 가능  
- 문법과 동작은 실험적 단계로, **향후 변경 가능성**이 있음  

### 언어 특징
- **터키어 문법 격을 타입으로 사용**
  - 주격, 목적격, 여격, 처격, 탈격, 속격, 도구격, 소유격 등 8가지 격을 지원  
  - 각 격은 접미사로 표시되며, 함수 인자 간 관계를 명시적으로 구분  
- **유연한 인자 순서**
  - 격 접미사가 인자 관계를 명확히 하므로, 인자 순서를 바꿔도 동일한 의미 유지  
  - 예: `(5'le 3'ün farkını) yaz.` 와 `(3'ün 5'le farkını) yaz.` 는 동일한 결과  
- **귀납적 자료형 정의**
  - 터키어 구문으로 대수적 자료형을 정의  
  - 예:  
    ```
    Bir doğal-sayı
    ya sıfır
    ya da bir doğal-sayının ardılı
    olabilir.
    ```
- **다형 타입 지원**
  - 제네릭 자료구조 정의 가능  
  - 예: `(öğe listesi)` 형태로 리스트 자료형 정의  
- **패턴 매칭**
  - 조건 접미사 `-sa/-se`를 사용해 패턴 매칭 수행  
  - 중첩 패턴, 바인더, 와일드카드(`değilse`) 지원  
- **상수 정의**
  - `diyelim` 키워드로 명명된 상수 선언  
  - 예: `sıfırın ardılına bir diyelim.`  
- **입출력 및 효과 처리**
  - `-ip/-ıp/-up/-üp` 접미사로 순차 실행, `olarak`으로 바인딩  
  - 예:  
    ```
    selamlamak,
      isim olarak okuyup,
      ("Merhaba "yla ismin birleşimini) yazmaktır.
    ```
- **기본 타입**
  - 정수(`tam-sayı`): `toplamı`, `farkı`, `çarpımı` 등 연산 지원  
  - 문자열(`dizge`): `uzunluğu`, `birleşimi`, `tam-sayı-hali` 제공  
  - 입출력: `yazmak`, `okumak` 명령 지원  
- **주석 및 리터럴**
  - 주석: `(* ... *)`  
  - 리터럴: `"merhaba"'yı yaz.` 형태로 격 접미사 포함  

### 설치 및 실행
- **필수 도구**
  - **Foma**: 유한상태 형태소 분석 툴킷  
  - **Stack**: Haskell 빌드 도구  
- **빌드 방법**
  - `install.sh` 스크립트 실행 또는 `stack build` 명령으로 수동 빌드  
  - `vendor/trmorph.fst`에 **TRmorph 변환기** 포함  
- **실행**
  - REPL: `stack exec kip`  
  - 파일 실행: `stack exec kip -- --exec path/to/file.kip`  
  - PATH 설치: `stack install`  

### WASM Playground
- `playground/` 디렉터리에 **브라우저 실행용 빌드** 포함  
  - `kip-playground`를 `wasm32-wasi`로 컴파일  
  - HTML/JS 하니스로 브라우저 내 Kip 실행 가능  
  - 세부 빌드 절차는 `playground/README.md` 참고  

### 바이트코드 캐시(.iz)
- 각 `.kip` 파일의 **타입 검사 결과를 캐시**하여 `.iz` 파일로 저장  
  - 소스나 의존성이 변경되지 않으면 캐시 재사용  
  - `.iz` 파일 삭제 시 새로 파싱 및 타입 검사 수행  
  - 컴파일러 해시 포함으로, 버전 변경 시 자동 무효화  

### 예제 프로그램
- 자연수 정의, 상수 선언, 덧셈 함수, 결과 출력 예시 포함  
  ```
  Bir doğal-sayı
  ya sıfır
  ya da bir doğal-sayının ardılı
  olabilir.

  sıfırın ardılına bir diyelim.
  birin ardılına iki diyelim.
  ikinin ardılına üç diyelim.

  (bu doğal-sayıyla) (şu doğal-sayının) toplamı,
    bu sıfırsa,
      şu,
    öncülün ardılıysa,
      (öncülle) (şunun ardılının) toplamıdır.

  (ikiyle üçün toplamını) yaz.
  ```

### 프로젝트 구조
- **app/** : CLI 진입점 (`Main.hs`)  
- **src/Kip/** : AST, 캐시, 인터프리터, 파서, 렌더러, 타입 검사기 포함  
- **lib/** : 기본 모듈(`giriş.kip`, `temel.kip`, `temel-liste.kip` 등)  
- **tests/** : 성공(`succeed/`) 및 실패(`fail/`) 테스트 케이스  
- **vendor/** : `trmorph.fst` 형태소 변환기  

### 테스트
- `stack test` 명령으로 실행  
  - `tests/succeed/`: 통과해야 하는 테스트  
  - `tests/fail/`: 실패해야 하는 테스트  

### 형태소 분석
- Kip은 **TRmorph**를 사용해 터키어 형태소 분석 수행  
  - 다의적 단어(예: “takası”)는 가능한 모든 해석을 유지한 채 파싱  
  - 타입 검사 단계에서 의미를 결정  
  - 특정 해석을 강제하려면 아포스트로피(`'`) 사용 (`taka'sı`, `takas'ı`)  

### 라이선스
- LICENSE 파일 참조

## Comments



### Comment 49430

- Author: neo
- Created: 2026-01-19T02:32:37+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46661897) 
- 모두 안녕, 나는 **Kip의 개발자**임  
  원래는 playground와 랜딩 페이지를 완성한 뒤 공개하려 했지만, 지금까지 만든 브라우저 기반 playground를 공유함  
  [https://alpaylan.github.io/kip/](https://alpaylan.github.io/kip/)  
  JavaScript로의 **transpilation**은 이제 막 시작해서 아직 작동하지 않지만, 언어 자체는 대부분 실행 가능함  
  버그가 있다면 [repo의 issue](https://github.com/alpaylan/kip/issues)에 알려주면 좋겠음
  - 몇 년간 **터키어**를 공부했는데, 그 문법적·교착적 특성 덕분에 프로그래밍 언어로 만들면 흥미로울 거라 생각했음  
    나는 그걸 “Ç”라고 부르려 했지만 실제로 만들진 않았음. 누군가 시도한 걸 보니 반가움
  - “Kip”이 터키어로 “문법적 **서법(mood)** ”을 뜻한다고 해서 찾아봤는데, 번역 서비스마다 “mode”, “modal”, “tense”, “module” 등 다양하게 나옴  
    개인적으로는 “tense(시제)”가 가장 가깝다고 생각함  
    관련 참고 자료로 [BBC Bitesize의 설명](https://www.bbc.co.uk/bitesize/articles/zh4thbk#zyh2s82)을 봤음
  - 문법은 흥미롭지만, 숫자 연산 구문이 어떻게 동작하는지 궁금함  
    예를 들어  
    ```  
    (5'le 3'ün farkını) yaz.  
    (3'ün 5'le farkını) yaz.  
    ```  
    이런 문장에서 **‘farkını’(차이)** 의 의미와 조사 위치에 따라 5-3인지 3-5인지 구분하는지 궁금함  
    자연어 기반 구문이라 수학적 정의를 서술하는 언어처럼 느껴짐
  - 업데이트된 **웹페이지와 playground**가 새로 공개됨  
    [https://kip-dili.github.io/](https://kip-dili.github.io/)
  - 정말 멋진 작업임. 예전부터 이런 영역을 탐구해보고 싶었음

- 언어의 구조가 여전히 **앵글로색슨식 문법 순서**를 따르는 것 같음  
  터키어 문법에 더 맞게 다음과 같은 형태를 보고 싶음  
  ```  
  Fibonacci-Dizisi (n):  
    n 0'a eşitse: dur.  
    değilse:  
      bu-sayıyı yazdır.  
      şu-sayıyı, (bu-sayı + şu-sayı), (n - 1) ile Fibonacci-Dizisi'ne devam et.  
  ```  
  이런 시도 자체가 훌륭한 출발점이라 축하함

- 이 프로젝트가 정말 **멋짐**  
  나도 [Logicaffeine Studio](https://logicaffeine.com/studio)에서 비슷한 아이디어를 실험 중임  
  **Logos lang**도 참고해보면 좋겠음. Haskell을 선택한 것도 마음에 듦

- 예전 세대라면 **Lingua::Romana::Perligata**를 기억할지도 모름  
  [https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm](https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm)

- 나도 몇 년 전 비슷한 아이디어를 실험했었음  
  [https://github.com/celaleddin/sembolik-fikir](https://github.com/celaleddin/sembolik-fikir)  
  앞으로 며칠간 더 살펴볼 예정임
  - 흥미로운 접근임. 접미사 기반의 **형태소 추정**을 하는 것 같음  
    Kip에서는 [TRmorph](https://github.com/coltekin/TRmorph)를 이용해 형태소 분석을 완전히 수행하고, 타입 검사 단계에서 모호성을 해결함  
    그래서 거의 **아포스트로피**가 필요하지 않음. 구현은 힘들었지만 재미있는 문제였음

- 약간의 터키어를 읽을 수 있는데, 이 프로젝트 덕분에 하루가 즐거워졌음  
  터키어의 **격 체계**가 강하고 표준화되어 있어서 이런 언어 설계가 가능하다는 게 흥미로움
  - 이런 **유연한 어순**은 터키어뿐 아니라 굴절이 강한 언어들—슬라브어, 산스크리트어, 핀란드어, 헝가리어 등—에서도 가능함
  - 사실 영어에서도 어순 유연성이 꽤 있음  
    예를 들어 “Colonel Mustard killed him in the study at 5:00 with his own knife.” 같은 문장은 순서를 바꿔도 의미가 유지됨  
    라틴어나 러시아 시에서도 이런 복잡한 어순이 자주 등장함

- 처음엔 편견을 가지고 링크를 클릭했는데, 정의가 **깔끔하고 이해하기 쉬움**  
  독일어 버전도 있으면 재미있을 것 같음
  - 나도 같은 생각임. 단순히 Rust 같은 언어의 키워드를 터키어로 바꾼 수준일 줄 알았는데, 실제로는 훨씬 정교함

- 언어 자체보다는 문법 관련 참고로 [Language Log 글](https://languagelog.ldc.upenn.edu/nll/?p=73)을 공유함

- 여자친구가 터키인이라 터키어를 배우고 있었는데, 이제 **프로그래밍 감각**으로 학습 속도를 높일 수 있을 것 같음  
  정말 놀라움
  - 나도 터키인과 결혼했는데, 이런 **기술+언어 조합**은 상상도 못했음  
    중급 단계에서 멈춰 있던 학습을 다시 이어갈 좋은 동기부여가 됨

- **AI 시대**에는 각 나라가 자국의 언어적 전통을 반영한 프로그래밍 언어를 만들 수 있음  
  이는 개발 문화의 **자율성과 다양성**을 크게 확장시키는 일임
