# Inko - Concurrent 소프트웨어 개발을 위한 프로그래밍 언어

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=11913](https://news.hada.io/topic?id=11913)
- GeekNews Markdown: [https://news.hada.io/topic/11913.md](https://news.hada.io/topic/11913.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2023-11-18T10:03:02+09:00
- Updated: 2023-11-18T10:03:02+09:00
- Original source: [inko-lang.org](https://inko-lang.org/)
- Points: 10
- Comments: 3

## Topic Body

- Concurrent 소프트웨어를 쉽게 구축할 수 있게 해주며, 예측 불가능한 성능, 런타임 오류, 데이터 경쟁, 타입 오류에 대한 걱정 없이 개발 가능  
- 자동 메모리 관리, move semantics, 정적 타이핑, 타입 안전 동시성, 효율적인 오류 처리 등의 특징  
### 결정적 자동 메모리 관리  
  
- Inko는 가비지 컬렉션에 의존하지 않고, 단일 소유권과 이동 의미론에 기반한 메모리 관리를 사용  
- 소유된 값은 범위를 벗어나면 삭제되며, 불변 또는 가변으로 빌려질 수 있음  
- 단일 소유권 사용으로 예측 가능한 동작과 성능을 제공하며, 가비지 컬렉션 설정에 시간을 낭비하지 않음  
  
### Inko는 안전함  
  
- Inko를 사용하면 NULL 포인터, 사용 후 해제 오류, 런타임 오류, 데이터 경쟁 등 다른 언어에서 흔히 발견되는 오류에 대한 걱정이 없음  
- 선택적 데이터에 대해 Option 타입을 제공하며, 불변 및 가변 참조를 지원하여 필요에 따라 변경을 제한할 수 있음  
  
### 동시성을 쉽게 만듦  
  
- Inko는 경량 프로세스를 사용하여 동시성을 구현하고, Erlang과 Pony에서 영감을 받은 동시성 모델을 사용  
- 프로세스는 서로 격리되어 메시지를 통해 통신하며, 컴파일러는 타입 검사를 통해 정확성을 보장  
- 프로세스 간 데이터 전송 시 데이터의 고유성을 보장하여 데이터 경쟁을 불가능하게 함  
  
### 오류 처리를 올바르게 함  
  
- Inko는 Joe Duffy의 "The Error Model" 기사에서 영감을 받은 오류 처리 방식을 사용  
- 오류는 "Result"라는 대수 타입으로 표현되며, try와 throw를 통한 문법적 단순화를 제공  
- 처리할 수 없거나 처리해서는 안 되는 중대한 오류는 프로그램을 중단시키는 "panics"를 지원  
  
### 효율적임  
  
- Inko는 C나 Rust와 같은 저수준 언어와 경쟁하기보다는 Ruby, Erlang, Go와 같은 언어에 대한 매력적인 대안을 제공하고자 함  
- LLVM을 백엔드로 사용하는 네이티브 코드 컴파일러를 사용하며, 빠른 컴파일 시간과 좋은 런타임 성능 사이의 균형을 제공  
- 네이티브 코드는 프로세스 스케줄링, 논블로킹 IO 등을 처리하는 Rust로 작성된 작은 런타임 라이브러리에 정적으로 연결됨  
  
### 패턴 매칭  
  
- Inko는 튜플과 대수 데이터 타입 등 다양한 타입에 대한 패턴 매칭을 지원  
- 패턴 매칭은 결정 트리로 컴파일되며, 컴파일러는 가능한 작은 크기를 유지하려고 함  
- 모든 패턴이 커버되도록 컴파일러가 보장함

## Comments



### Comment 20690

- Author: ahwjdekf
- Created: 2023-11-18T14:01:15+09:00
- Points: 1

rust로 rust와 비슷한 걸 만들었다 ??

### Comment 20685

- Author: regentag
- Created: 2023-11-18T10:47:54+09:00
- Points: 1

패키지 관리가 Github에 종속적이라는게 좀 그렇네요. 인터넷에 연결하지 못하는 환경도 좀 고려했음 좋겠어요…

### Comment 20680

- Author: xguru
- Created: 2023-11-18T10:04:02+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=38270265)   
- Inko의 동시성 모델은 Erlang과 Pony에서 영감을 받았으며, 가벼운 프로세스를 사용함.  
  - 프로세스는 서로 격리되어 있고 메시지를 통해 통신함.  
  - 프로세스와 메시지는 클래스와 메소드로 정의되며, 컴파일러가 타입 검사를 통해 정확성을 보장함.  
  - 데이터는 프로세스 간에 유일하게 전송되어 데이터 레이스가 불가능하며, 깊은 복사의 필요성을 제거함.  
  - 다중 생산자와 다중 소비자 채널을 지원하여 프로세스 간 명시적 참조 없이 통신이 가능함.  
  
- Inko 패키지를 추가하려면 GitHub 저장소를 생성해야 함.  
  - Inko의 패키지 관리자는 GitLab 등 다른 Git 저장소도 지원하지만, 목록은 GitHub 저장소를 사용하여 구성됨.  
  - 커뮤니티가 마이크로소프트 제품과 Git에 종속되려는 경향에 대한 우려 표현.  
  
- Inko 관련 토론 링크 제공:  
  - "Show HN: Inko 0.10.0 – build concurrent software with confidence" (2022년 9월, 3개의 댓글)  
  - "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (2019년 9월, 7개의 댓글)  
  - "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (2019년 5월, 1개의 댓글)  
  - "Show HN: Inko – A safe and concurrent object-oriented programming language" (2018년 8월, 45개의 댓글)  
  
- Rust와의 유사성에 대한 의문 제기:  
  - Inko가 Rust와 충분히 비슷하여 Rust 대신 Inko를 선택할 이유에 대한 질문.  
  - Rust에서 어렵거나 번거로운 프로그램이 Inko에서는 쉽게 작성될 수 있는 예시 필요.  
  
- Inko에 대한 관심과 Golang이 되었으면 하는 바람 표현:  
  - Inko가 GitLab에서 시작된 것으로 보이며, Golang이 되었으면 하는 바람과 함께 GC의 필요성 언급.  
  - Gleam과의 차별점에 대한 질문과 JVM 생태계를 활용할 수 있는 방안에 대한 관심.  
  
- Inko의 이름이 텔루구어로 "하나 더"라는 뜻이라는 재미있는 사실 공유.  
  
- Rust와의 문법적 차이점에 대한 논의:  
  - Rust와 Inko의 문법적 차이점에 대한 세부적인 비교.  
  - 함수 선언, 제네릭 표현 등의 작은 차이점에 대한 언급.  
  
- Inko의 설계 결정에 대한 긍정적인 평가:  
  - C/Java 계열 언어와 유사한 문법으로 많은 사람들에게 친숙함을 제공.  
  - 오류 처리 섹션의 명명 결정에 대한 의문 제기.  
  
- 사전 빌드된 바이너리의 필요성 언급:  
  - LLVM 문제로 인한 컴파일 어려움과 그로 인한 Inko에 대한 관심 부족 언급.  
  
- 관련 토론 링크 추가 제공.
