10P by xguru 2023-11-18 | favorite | 댓글 3개
  • 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는 튜플과 대수 데이터 타입 등 다양한 타입에 대한 패턴 매칭을 지원
  • 패턴 매칭은 결정 트리로 컴파일되며, 컴파일러는 가능한 작은 크기를 유지하려고 함
  • 모든 패턴이 커버되도록 컴파일러가 보장함

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

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

Hacker News 의견
  • 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에 대한 관심 부족 언급.
  • 관련 토론 링크 추가 제공.