ante - 安全で簡単なシステム言語

(A safe, easy systems language)

Created at: 2015-08-12 00:59:53
Language: Rust

アンティ

ビルドステータス


Anteは、改良タイプ、ライフタイム推論、およびその他の楽しい機能を探索するための低レベルの関数型言語です。簡単な味は次のとおりです。

type Person = name: string, job: ref string

// Infer that the data referenced via `&` should not be freed inside this function
make_person name =
    Person name &"programmer"

// bob is only used at this scope, so it can be safely freed afterward
bob = make_person "bob"

// unlike ownership systems, aliasing is allowed with lifetime inference
bob_twin = bob
assert (bob.name == bob_twin.name)

一般に、anteは低レベル(GCなし、デフォルトでは値はボックス化されていません)ですが、後で低レベルの詳細で最適化できる高レベルのアプローチを奨励することにより、可能な限り読みやすくしようとします。

詳細については、ウェブサイト語学ツアーをご覧ください。


ロードマップ

  • [x]空白に敏感なレクサー
  • [x]パーサー
  • [x]名前解決
  • [x]完全型推論
    • [x]複数のパラメーターと限定された機能依存性を持つ特性
    • []コンパイルが成功した後、推論された型をプログラムソースに書き込むコンパイラオプション
  • [x] LLVM Codegen
  • [x]ガベージコレクターなし
    • ref
      [] sの地域推論
    • Rc t
      []許可するまたは
      Box t
      必要な場合のRAII
  • [x]言語ドキュメンテーション
  • [〜]リファインメントタイプ(進行中)
  • [x]より高速なデバッグビルドのためのCraneliftバックエンド
  • []代数効果
  • []インクリメンタルコンパイルメタデータ
  • [] REPL

持っていてよかったですが、現在は必要ありません:

  • []clangapiとの合理的な自動C/C++相互運用
  • []標準ライブラリに組み込まれたビルドシステム
    • Anteは、必要なライブラリとともに常に自分自身をビルドできる必要があります。主な問題は、ビルドシステムが、他の言語をビルドしたり、yacc/bisonなどの任意のプログラムを実行したりするというより複雑なタスクをどのように促進するかです。

貢献

コンパイラはまだかなり初期の状態なので、どんな貢献者も大歓迎です。既知の問題/改善(以下の「クイックタスク」リストにリストされているものもあります)または有用と思われる標準ライブラリ関数のいずれかに自由に貢献してください。

コードベース内の各ファイルには、ファイルの目的と使用されるアルゴリズムを説明するモジュールコメントがプレフィックスとして付けられます。

src/main.rs
読み始めるのに良い場所です。

PRが

examples
ディレクトリ内のテストに合格していることを確認してください。これらのテストには、goldentestsライブラリがanteコンパイラを実行し、各ファイルの出力をそのファイルのコメントに含まれる期待される出力と照合するために使用するコマンドが含まれています。

貢献するクイックタスク


コミュニティ

アンティの開発をフォローするのに最適な場所は、公式の不和です:https ://discord.gg/BN97fKnEH2 。/ r / anteには、ほとんど非アクティブなsubredditもあります。これは、開発の更新ではなく、主に言語に関する質問に使用されます。また、このリポジトリで問題を報告したり、質問したりすることもできます。


建物

Anteは現在、ビルド中にオプションでllvm13.0を必要とします。すでにこれをソースとともにインストールしている場合は、

cargo install --path .
単独で構築しても問題ない可能性があります。カーゴが適切なllvmバージョンが見つからないという苦情がある場合は、経由でllvmバックエンドなしでanteをビルドするか、次のセクションで説明するよう
cargo install --path . --no-default-features
に、ソースからllvmをビルドする
llvmenv
かを選択できます。
cmake

LinuxとMac

$ cargo install llvmenv
$ llvmenv init
$ llvmenv build-entry -G Makefile -j7 13.0.0
$ llvmenv global 13.0.0
$ LLVM_SYS_130_PREFIX=$(llvmenv prefix)
$ cargo build

デフォルトでスペースが含まれるパスに設定されている場合 、llvmへのパスが見つからないという苦情

llvmenv prefix
の際にエラーが発生する可能性があります。
cargo build
これが発生した場合は、
llvmenv prefix
スペースを含まない新しいディレクトリにインストールを手動で移動し、
LLVM_SYS_130_PREFIX
この新しい場所に更新して再実行してみて
cargo build
ください。

ウィンドウズ

注:LLVMはWindows上で構築するのが難しいことで有名です。次のことを試してもllvmをビルドできないWindowsユーザーの場合は、を介してllvmバックエンドなしでanteを試すことを強くお勧めし

cargo install --path . --no-default-features
ます。

そうは言っても、Windowsでllvmenvを介してllvmをビルドする1つの方法は次のとおりです。

$ cargo install llvmenv
$ llvmenv init
$ llvmenv build-entry -G VisualStudio -j7 13.0.0
$ llvmenv global 13.0.0
$ for /f "tokens=*" %a in ('llvmenv prefix') do (set LLVM_SYS_130_PREFIX=%a)
$ cargo build

llvmenv version
またはを実行して、llvmの現在のバージョンを確認できます。
llvm-config

CMake

上記の手順でうまくいかない場合は、cmakeを使用してソースからllvmをビルドしてみてください。Windowsを使用している場合は、VisualStudio2017以降が既にインストールされている必要があります。

$ git clone https://github.com/llvm/llvm-project --branch=release/10.x
$ mkdir llvm-build
$ cd llvm-build
$ cmake ../llvm-project/llvm

この時点で、cmakeはz3またはWindows SDKを見つけられなかったというエラーが発生する可能性があります。その場合は、それらをインストールする必要があります。Windows SDKの場合、Visual Studioインストーラー([変更]-> [個々のコンポーネント]の下)からインストールできます。私はバージョン10.0.17763.0を使用しましたが、新しいバージョンでも機能する可能性があります。最後のcmakeコマンドを再実行して、すべてが正しくインストールされていることをテストします。これが完了したら、llvmとanteのコンパイルに進みます。

$ cmake --build .
$ cmake --build . --target install
$ cd ..
$ set LLVM_SYS_130_PREFIX=/absolute/path/to/llvm-build
$ cargo build