GN⁺: Dada - 새로운 실험적 프로그래밍 언어
(dada-lang.org)- Dada는 Rust와 같은 언어를 만들되, Java나 JavaScript처럼 느껴지고 C++보다는 덜 복잡한 언어를 목표로 하는 사고 실험(thought experiment)
- 커널이나 작은 임베디드 장치에서 사용될 것을 목표로 하지 않고, 최소한의 런타임을 요구하는 언어를 상상하면 어떤 모습일까?
- Dada는 소유권 기반 언어로 Rust와 몇 가지 유사점이 있음:
- Rust처럼 Dada는 가비지 컬렉터가 필요 없음.
- Rust처럼 Dada는 메모리 안전성과 데이터 레이스 프리를 보장함.
- Rust처럼 Dada 데이터 구조는 스택에 할당되고 평면 메모리 레이아웃을 사용함.
- 그러나 Dada는 다른 점도 많음:
- TypeScript처럼 Dada는 점진적으로 타입화된 언어임:
- 타입 주석 없이 인터프리터에서 Dada를 사용하여 언어의 작동 방식을 파악할 수 있음.
- 익숙해지면 타입 주석을 추가하고 Rust와 비슷한 성능을 내는 컴파일러를 사용할 수 있음.
- Dada는 WebAssembly를 주로 타겟으로 함:
- Dada로 네이티브 타겟을 빌드할 수 있지만, FFI 시스템은 WebAssembly 인터페이스 타입을 기반으로 함.
- Dada는 객체 지향적이지만 순수한 방식은 아님:
- Dada는 OO와 패턴 매칭과 같은 좋은 기능을 결합하여 Scala와 같은 언어에서 영감을 받음.
- TypeScript처럼 Dada는 점진적으로 타입화된 언어임:
- Rust와 비교하여 Dada의 몇 가지 제한 사항이 있음:
- Dada는 필수 런타임이 있으며 "베어 메탈 시스템"이나 커널을 대상으로 하지 않음.
- Dada는 인라인 어셈블리나 임의의 안전하지 않은 코드를 지원하지 않음.
Dada의 현재 상태는?
- 현재 Dada는 실제로 존재하지 않으며, 몇 가지 실험적인 프로토타입이 있음:
- PLT Redex에서 구현된 실험적인 운영 의미론이 dada-lang/dada-model에서 찾아볼 수 있음.
- Rust로 작성된 인터프리터는 dada-lang/dada 저장소에서 찾을 수 있으며, Dada 플레이그라운드에서 WebAssembly 기반 빌드를 시도할 수 있음.
GN⁺의 의견
- Dada는 현대 프로그래밍 언어의 트렌드를 반영하여 메모리 안전성과 데이터 레이스 방지 같은 Rust의 핵심 기능을 유지하면서도, 점진적 타입화와 객체 지향적 접근을 통해 개발자 친화적인 언어를 지향함.
- WebAssembly를 주 타겟으로 삼는 것은 웹 기반 애플리케이션 개발에 있어서 Dada가 가지는 잠재력을 보여주며, 이는 브라우저 호환성과 플랫폼 독립성을 중시하는 현대 웹 개발 트렌드와 부합함.
- Dada가 실제로 개발되고 널리 사용된다면, 기존의 Rust 개발자들에게는 더 높은 수준의 추상화와 편의성을 제공할 수 있으며, Java나 JavaScript 개발자들에게는 시스템 프로그래밍 언어로의 전환을 용이하게 할 수 있음.
- 그러나 Dada가 아직 초기 단계에 있고 실제 프로덕션 환경에서의 성능과 안정성이 검증되지 않았기 때문에, 기업이나 개발자들이 이를 채택하기 전에는 신중한 접근이 필요함.
- Dada와 유사한 목표를 가진 다른 언어로는 Kotlin이나 Swift가 있으며, 이들은 이미 널리 사용되고 있어 개발자들에게 좋은 대안이 될 수 있음.
Hacker News 의견
-
"사고 실험 언어"라는 아이디어에 대한 애정
- 실제 언어를 만드는 것은 큰 부담이며, 이상적인 언어가 어떻게 생겼을지 생각하는 것은 재미있음.
- "고급 레벨의 Rust"에 대한 다양한 상상이 있으며, 개인적으로는 동적 런타임과 단순한 타입을 선호하지만, 다른 사람들은 다른 요구사항을 가짐.
- 점진적 타입 시스템과 같은 추가 기능은 일부 언어에는 적합하지만, 처음부터 완전히 정적 타입 코드베이스의 보장을 선호함.
-
"Hello, Dada!" 예제에 대한 의문
- Python 사용자로서, 콘솔에 출력하는 것이 목표일 때
await
에 대해 신경 써야 하는 이유가 궁금함. - 이미 복잡성과 인지 부하가 시작되는 것으로 보임.
- Python 사용자로서, 콘솔에 출력하는 것이 목표일 때
-
반대되는 언어에 대한 바람
- Rust의 표현력 있는 타입 시스템과 문법을 가지되, 가비지 컬렉터와 런타임을 도입한 언어를 원함.
- 성능 비용을 지불하고 싶지 않으며, Rust의 타입 시스템을 가진 Go와 같은 언어를 선호함.
-
"async/await"에 대한 반대 의견
- 고급 언어에서는 Go의 그린 스레드가 더 적합하다고 생각함.
- 점진적 타이핑은 흥미롭지만 필수는 아님. 정적 타이핑은 부담스럽지 않고 성능에 대한 추론을 어렵게 할 수 있음.
- 점진적 타이핑보다 타입 추론이 더 나을 것이라고 생각함.
-
Java와 JavaScript와 같은 느낌에 대한 의견
- Java와 JavaScript는 매우 다른 느낌을 가지고 있음을 지적함.
-
GC의 부재가 Rust를 임베디드 시스템에서 즐거운 경험으로 만듦
- 다른 프로그램과 쉽게 연결 가능하며, 프로그램의 빠른 시작 속도는 Rust의 주요 장점 중 하나임.
- 가비지 컬렉션을 도입한 Rust는 이 장점을 포기하는 것이 될 수 있음.
-
Rust 사용 경험에 대한 혼합된 감정
- 메모리 안전 패턴을 좋아하지만, C++에 비해 구문이 더 어렵게 느껴짐.
- 코드를 정신적으로 읽기 어려움을 느낌.
- 데코레이터 마법과 기호 기반 구문이 적으면 초보자가 이해하기 쉬울 것임.
-
타입 주석을 추가하면 Rust와 유사한 성능을 낼 수 있다는 주장에 대한 관심
- JavaScript처럼 쉽게 작성할 수 있고, 추가 작업을 정당화할 때 Rust만큼 빠른 언어가 될 수 있음.
-
튜토리얼의 "print_point" 메소드에 대한 혼란
-
async
와await
의 의미에 대한 더 자세한 설명이 필요함. -
async
/await
가 느긋하게 계산된 값과 같은 역할을 하는지, 그리고 다양한 조합이 타입 오류를 일으키는지에 대한 질문.
-
-
새 프로그래밍 언어의 문법 예제를 찾는 데 대한 불만
- 새 프로그래밍 언어를 만들 때는 랜딩 페이지에 "Hello World" 문법 예제를 바로 제공해달라는 요청.