👻

新しいプログラミング言語「flux」- Rustの安全性とPythonの柔軟性を両立させる試み

に公開1件

はじめに

「もっと安全に、もっと手軽に、AI/ML開発ができないだろうか?」

そんな思いから、新しいプログラミング言語 flux の開発を始めました。fluxは、Rust製のインタプリタ言語で、システムのパフォーマンスと安全性、そしてPythonの豊富なライブラリ資産を両立させることを目指しています。

この記事では、fluxを開発した背景にある思想、そのユニークな特徴、そして基本的な使い方から今後の展望までをご紹介します。

なぜ「flux」を作ったのか? - 開発の動機と哲学

現代のソフトウェア開発、特にAI/ML分野では、Pythonがデファクトスタンダードとなっています。NumPy、PyTorch、TensorFlowといった強力なライブラリ群は、研究開発に欠かせない存在です。

しかし、動的型付け言語であるPythonには、実行時までエラーが発覚しにくいという課題があります。大規模なシステムや、高い信頼性が求められるアプリケーションを構築する際には、この点が開発のボトルネックになることも少なくありません。

一方で、Rustは「安全性」と「パフォーマンス」をコンパイラレベルで保証する画期的な言語です。しかし、その厳格さゆえに、Pythonのような手軽さやスクリプティングの容易さに欠ける側面もあります。

fluxは、この両者の「いいとこ取り」を目指す言語です。
Rustの強力な型システムとエコシステムを基盤にすることで、実行エンジンの安全性とパフォーマンスを確保。その上で、Pythonの資産を活用できるシームレスな連携機能を提供することで、生産性と信頼性を両立させることを目標としています。

「flux」の主な特徴

fluxはまだ若い言語ですが、その設計にはいくつかのこだわりが込められています。

1. Rust製による安全性とパフォーマンス

fluxのインタプリタはRustで実装されています。これにより、メモリ安全性といった低レイヤーの課題を言語処理系レベルで担保しています。将来的には、Tree-walking interpreterからバイトコードVMへの移行も計画しており、実行速度のさらなる向上を目指しています。(詳細は後述のロードマップにて)

2. Pythonとのシームレスな連携

fluxの最大の強みの一つが、Pythonとの相互運用性(インターオペラビリティ)です。内部でpyo3を利用し、Pythonのモジュールを直接呼び出すことができます。

// fluxのコード例
let np = import("numpy");
let a = np.array([1, 2, 3]);
print(a); // Pythonのnumpy.ndarrayがそのまま扱える

これにより、PyTorchやNumPyといったPythonの膨大なライブラリ資産を、fluxのコードから直接、かつ安全に利用することが可能になります。

3. モダンで直感的な文法

fluxは、PythonやJavaScript、Rustといったモダンな言語からインスピレーションを得た、シンプルで直感的な文法を採用しています。

// 変数宣言
let x = 10;
let y = "Hello, flux!";

// 関数定義
fn add(a, b) {
  return a + b;
}

// 条件分岐
if x > 5 {
  print("x is greater than 5");
} else {
  print("x is not greater than 5");
}

使ってみよう! - インストールから実行まで

インストール

現在、fluxを利用するにはソースコードからビルドする必要があります。

git clone https://github.com/cmc-labo/flux.git
cd flux
cargo build --release

Hello, World!

main.flというファイルを作成し、以下のコードを記述します。

// main.fl
print("Hello, World!");

以下のコマンドで実行します。

./target/release/flux main.fl

コンソールにHello, World!と表示されれば成功です。

今後の展望 - ロードマップ

fluxはまだ始まったばかりのプロジェクトです。fluxをより実用的で強力な言語に育てるため、以下のロードマップを計画しています。

  1. モジュールシステムと import 文 (最優先)

    • 理由: 大規模な開発にはコードの分割が不可欠です。現在は1つのファイルしか実行できません。
    • 内容: import math や import "other_file.fl" のような仕組みを実装し、プロジェクトを複数のファイルに分割できるようにします。
  2. Pythonインターオプの強化

    • 理由: 「Pythonのライブラリ(PyTorch, NumPy等)を使える」ことがfluxの大きな強みになるため、現状のpyo3を使った連携をよりシームレスにする必要があります。
    • 内容: Python側で発生した例外をfluxの miette エラーとして表示する機能や、List <-> Python Listのような、より高度な型変換をサポートします。
  3. テンソル操作の拡充 (AI/ML向け)

    • 理由: AI/ML用途を掲げるなら、ndarray のラッパーをより強力にする必要があります。現在は基本的な操作しかできません。
    • 内容: スライシング(a[0:10, :])、ブロードキャスト、基本的な線形代数演算などを追加し、より複雑な計算をfluxネイティブの構文で記述できるようにします。
  4. 静的型チェック(または型ヒント)

    • 理由: 「Rustのような安全性」を目指すなら、実行前にある程度の型不整合を見つけたいところです。動的なままでは安全性の面でPythonとの差別化が難しくなります。
    • 内容: let x: int = 5 のような型宣言を導入し、パース時に簡単な型チェックを行う機能を実装します。
  5. バイトコードVMへの移行

    • 理由: 現在は抽象構文木(AST)を直接実行する「Tree-walking interpreter」ですが、これは低速です。AI/ML計算以外の部分(ループや条件分岐など)の実行速度を向上させる必要があります。
    • 内容: ASTを一度バイトコードにコンパイルしてから実行する仮想マシン(VM)を実装し、パフォーマンスを大幅に改善します。

おわりに

fluxは、安全性と生産性の両立という、挑戦的な目標を掲げたプログラミング言語です。この記事を読んで少しでも興味を持っていただけたら、ぜひGitHubリポジトリを覗いてみてください。

このプロジェクトはまだ始まったばかりであり、コントリビューションを歓迎します。Issueの報告、機能提案、そしてもちろんPull Requestまで、どんな形でも構いません、fluxを育てていきませんか?



この記事がお役に立てば幸いです。

Discussion