Fluff 言語入門

この架空言語入門は ここ を参考にして書かれました。

概要

  • Fluff は FLVM という仮想マシンの上で動くよ!(そのはず)
  • Fluff タイプ・チェッカーっていうのがあるよ!(Fluff パッケージ/ビルドに含まれているはず)
  • オプションで Fluff 対応エディタ、 vscode-fluff がインストールされた VSCode がオススメ(したい)

最初の Fluff コード

Fluff のインストール

Fluff のインストール方法については Fluff スタートガイドをご覧ください。

Fluff をインストールすると Fluff タイプ・チェッカーが使用できるようになるため、実行する前にコードを静的にチェックすることができます。 これはコンパイラではありません。 むしろ、コードの実行中、または実行後ではなく、実行前に動的プログラミングエラーを補足しようとする超高速コードアナライザーです。

タイプチェッカーは fl-analyzer と呼ばれます。 fluff パッケージに付いてくる予定です。

Fluff タイプ・チェッカーの設定

それでは Fluff コードを保存するディレクトリを選択します。 このディレクトリで fl-analyzer init と実行するか、 touch .flconfig と実行してください。 これによって fl-analyzer がタイプ・チェックするコードのルートとして検索する空のファイルが作成されます。

コードを適切に分析するには、タイプ・チェッカーがグローバル分析を実行し、全てのコードを見ることができるようにする必要があります。

最初の Fluff プログラムを書く

あなたがお好きなテキストエディタ(Emacs、Vim、VSCode などで)を使用して次のコードで first.fl というファイルを作成しましょう:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
namespace Fluff::GettingStarted::MyFirstProgram;

[__EntryPoint__]
function main() : void {
    say "Welcome to Fluff!\n\n";

    ::printf( "Table of Squares\n"
        "----------------\n");

    for ( let i = -5; i <= 5; ++ i ) {
        ::printf( "  %2d       %2d  \n", i, i * i );
    }

    ::printf( "----------------\n" );

    exit( 0 );
}

このガイドはぷろぐらみんぐの知識があることを前提としています。 Fluff のルックアンドフィールは C++ と非常に似ていますが、C や C++、C#、Java、JavaScript、Perl、Raku で共有される多くの構文をサポートしています。 この例について注意すべき重要なポイントは次のとおりです:

  • このコードは Fluff::GettingStarted::MyFirstProgram という一意の任意の名前空間に属しています。
  • main は引数を持たない関数であり、戻り値の型は void であるため、値を返しません。 更にこの関数はプログラムが実行を開始する場所です。つまり、 main はエントリ関数です。
  • say は文字列と改行を標準出力に書き込みます。
  • printf も標準出力に書き込みますが、この場合、整数列を右揃えにするためのフォーマット制御を提供します。
  • for ループの変数 i は -5 から 1 ずつ加算されて最終的には 5 になり、反復ごとに i の値とその 2 乗された値が別々の行に一緒に書き出されます。

タイプ・チェッカーを実行する

VSCode で vscode-fluff{.verbatim} を使用している場合などはコードを書く時にタイプ・チェック情報が表示されます。(多分) コマンドラインからタイプ・チェッカーを実行する場合、コマンドは次のとおりです:

1
$ fl-analyzer ./first.fl

するとこのように表示されます:

1
Syntax OK

コードを実行する

コードをエラーなしでタイプ・チェック・クリーンにした後、次のようにコードを実行することができます:

1
$ fluff ./first.fl

出力は次のとおりです:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Welcome to Fluff!

Table of Squares
----------------
  -5       25
  -4       16
  -3        9
  -2        4
  -1        1
   0        0
   1        1
   2        4
   3        9
   4       16
   5       25
----------------