An open API service indexing awesome lists of open source software.

https://github.com/kisaragieffective/origlang


https://github.com/kisaragieffective/origlang

programming-language static-typed toy-language

Last synced: 9 months ago
JSON representation

Awesome Lists containing this project

README

          

# origlang (仮称)

[`@KisaragiEffective`](https://github.com/KisaragiEffective) による個人的な研究プロジェクト。

## 目的

* 既存のプログラミング言語に対する理解を深める
* 先端的なアイデアが実用的かどうかの実験

## 言語設計のコンセプト

* 既存の言語の良いところをピックアップする
* ユーザーエクスペリエンスの観点から見て必須ではない制限を取り除く
* 明示的に緩めない限り強いセマンティクスをもたせる
* ❌
* C++'s `noexcept`
* Java's `final`
* ⭕️
* Kotlin's `open`
* Rust's `mut`
* Java's `throws`
* nb. no plan to introduce checked exception
* 対称性よりも実用性を優先する
* 例えば、Lispはほぼすべての物事が伝統的にコンスリストで処理されるが、この言語はそうではない
* 例えば、Zigはジェネリクスの型引数を宣言する際、`comptime T: type`という記法を[使う](https://ziglang.org/documentation/master/#Generic-Data-Structures)が、この言語はそうではない
* グローバル空間に何もかもぶちまけない
* 例えば、PHPは(おそらく過去の互換性の観点から) 名前空間を使えるにも関わらず標準ライブラリの関数が全てグローバル空間に置かれているが、この言語はそうではない
* ポインタではない形におけるマルチバイト文字の対応 (UTF-8)
* 適切なセマンティクスを考慮した診断
* 最初から組み込まれたリンター

## 現状の機能

* **静的型付け**
* 符号付き整数
* UTF-8文字列
* 真偽値
* タプル
* ユニット値
* 四則演算
* 等価性判定
* `if`式
* ブロック式
* レキシカルスコープ
* ...

## 実装

`package` 以下にサブクレートとして存在しています。大まかな解説は`package/README.md`を参照してください。

## 初めての方へ

`docs` 以下に言語自体のドキュメントを用意しました。随時拡張予定です。