開発に協力・参加


ぜひ, 開発に参加してください!

目標

安全で, 信頼性のあるプログラムを書きやすいようなプログラミング言語。

とりあえず Ruby のサブセットを作ることにしたので、このセクションは関係なくなりました。

言語仕様

Ruby v1.8.0 のリリースが2003年, v1.6.0 のリリースが2000年。20年以上が経過。もはや Ruby はトップ集団の一つでもありません。

新しいプログラミング言語に備えていてほしい特質; GPT-4で新しいプログラミング言語「TenetLang」を生み出す、チャットAIは既にプログラミングの何たるかをかなり理解している模様

  1. シンプルさと読みやすさを重視 -- 単純な構文, パタンマッチング
  2. 複数のプログラミングパラダイムをサポート -- オブジェクト指向, 関数型プログラミング
  3. 強力な型付けと型推論 -- Haskell は強力な型づけ
  4. 第一級関数とクロージャー -- 強力な関数型プログラミングの基礎
  5. 不変のデータ構造 -- 意図しない副作用のリスクを軽減
  6. 同時実行と並列処理の組み込みサポート -- Akka (for Scala, Java), アクターベースのコンポーネントによる並行・分散アプリケーションの構築をサポートするためのライブラリ
  7. 拡張可能なモジュラー構文 -- DSL を作成できる
  8. 統合されたセキュリティ機能 -- 自動メモリ管理, 境界チェック
  9. ガベージコレクションとメモリの安全性
  10. 他のプログラミング言語との相互運用性 -- FFI

プログラミング言語のパワー (Arcからの挑戦) という観点から;

あらゆる汎用目的の高級言語にとってのテストは、機能 x があるとか 問題 y を解けるとかではなく、それでプログラムの長さがどうなるかなのだ。

もっとコンパイル時にエラーを検出できるように, それから, もっと並列に動作できるようにしたい。

参考になるプログラミング言語

  1. Scala -- The Scala Programming Language

    Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications. JVM で動作。[2022-09] Scala v3.0.0 (Dotty) が 2021年5月にリリース。しかし、非互換な変更が多く、アプリケィションが付いてきていない。最新の Play 2.8 でも Scala 2.12 と 2.13 のサポート。まだまだ様子見。

  2. Groovy [2020.9更新] Apache に移った。将来性が低下。おわこん
  3. C++

    今も大きく進化が続いている。複数の実装もある。とはいえ増築に次ぐ増築で仕様がふくらみ過ぎている。cpp2/cppfront や Carbon といった新しい提案が出てきている。

  4. Haskell --も最近は人気がないが-- のような関数型言語。

Python 界隈にも、新しく静的型づけのスーパーセット Mojo が登場; Pythonを過去のものにするMojo🔥が爆誕|東京 AI 研究所 Python の14,000 倍速い。

Ruby に似たプログラミング言語:

Goby
Ruby のサブセット。メタプログラミング、クラス変数を削除。他方で duck-typing は維持。やや微妙。公式サイト消失。リポジトリは残っているが更新されていない。プロジェクト終了。
Crystal
静的型づけ。Ruby 流のメタプログラミングは廃止。スクリプトの字面は Ruby に似ているが、相互に非互換 (サブセットでもスーパセットでもない)。書き味はだいぶ異なる。

Better ruby としてとても良いが, 徐々に移行することができないのが難点。

Amber - Crystal Web Application Framework Rails の代替。The default ORM for Amber is Granite.

Shiika
静的型づけ。メソッド仮引数の型指定も必須。

当面 (v1.0まで) の目標

  • CRuby 3.1 とのある程度の互換性. 飽きたら止める. ただし, C APIは互換にはしません (できません)。
  • FFI
  • 変数の型チェック, 型推論
  • 本物のマクロ
  • メソッドのオーバーロード
  • コードをmarshaling (serialize) して, ネットワーク越しにやり取りできるようにする。

コルーチンは欲しいですが、継続までは不要。

minilangの内部

minilang は、まだ、全然きちんと動きません。現時点での内部の特徴は,

  • C++ で作った. C++11 (C++0x) コンパイラが必要.
  • AST (Abstract Syntax Tree) ベース。バイトコードは使っていない。
  • 参照カウンタ + GCの組み合わせ

大まかな流れ: (ソースコードの読み込み) -> [抽象構文木 (AST)] -> (静的型検査) -> (評価)

読み込み・AST の構築

Bison + 手書き字句解析器の組み合わせ。

今だと ANTLR もいいかもしれない。Unicode 対応, パーサと lexer を分けられるように見える。JavaScript, Python, Java and C#. Fedora パッケージでは C++, Go もいけそう。

実装Note - ruby構文解析の難しさ

静的型検査

[[未実装]]

評価

ライブラリ

作業場

minilang は, GitLab でソースコードをホストしています。まずは GitLab にユーザ登録してください。(無料)

バグ報告

GitLab.com にユーザ登録後, minilang スペースでチケットを作成してください。

コミッタになる

コミッタも大募集。

貢献者ライセンス同意書 (Contributor License Agreement) にサインしてお送りください。