抽象的なウィキペディア/更新情報/2021年05月11日
◀ | 抽象的なウィキペディアの更新情報 | ▶ |
- フェーズδが完了しました。
ウィキ・ファンクションズのサイトに向けて開発作業を始めた際、ウィキファンクションズ立上げに至るまでの作業を、11のフェーズに分割し、ギリシャ語のアルファベットの最初の11文字にちなんで名付けました。
- フェーズα(アルファ)が完了することで、ウィキでシステム提供する型(Types)のインスタンスを作成できるようになりました。
- フェーズβ(ベータ)で、ウィキ上で型を作成し、これらの型のインスタンスを作成することが可能になりました。
- フェーズγ(ガンマ)では、プレジェネリック関数モデルの主要な型全てが利用可能となりました。
- 今週、フェーズδ(デルタ)を完了しました。
フェーズδの目標は、組込実装を評価する機能を提供することでした。
これは何を意味するのでしょうか? ウィキ・ファンクションズの全ての関数には、いくつかの実装があります。 実装を表現するには3種類の方法があります。
- ウィキファンクションズのユーザーによって書かれたプログラミング言語のコードとして:関数の実装は、ウィキファンクションズがサポートする任意のプログラミング言語で行うことができます。 最終的には、多数のプログラミング言語をサポートすることを目指していますが、小さく始めます。
- 開発チームによって書かれた組込関数として:これは、エバリュエータが実装をブラックボックスとして処理することを意味します。 各エバリュエータが使用できる全ての組込関数を実装する必要があるため、必要な組込関数の数が非常に少ないことを望んでいます。また、新しいエバリュエータ(および新しいプログラミング言語)をできるだけ簡単に追加したいと考えています。 現在利用可能な組込関数のリストを以下に示します。 このリストは最終的なものではないかもしれませんが、増えないことを願っています。
- 他の機能の合成として:これは、新しい機能を実装するために、既存の機能を構成ブロックとして使用することを意味します。 いくつかの合成した実装の例を公開しました。 ブール関数の実装例は、特に教育上有益かもしれません。
フェーズδでは、関数呼出しを評価するためのインターフェイスとインフラストラクチャをとにかく作成し、組込実装を可能にしました。 現在利用可能な組込み関数は次のとおりです。:
If : Boolean, Any, Any ➝ Any
— 2文字ある場合、第1引数がtrueの場合は第2引数を返し、そうでない場合は第3引数を返します。Value by key : Key reference, Any ➝ Any
— 指定オブジェクトの指定されたキーの値を返します。Reify : Any ➝ List(Pair(Key reference, Any))
— オブジェクトをキーと値のペアのリストに変換します。 オブジェクトを分解します。Abstract : List(Pair(Key reference, Any)) ➝ Any
— キーと値のペアのリストをオブジェクトに変換します。 オブジェクトを構築します。Cons : Any, List ➝ List
— オブジェクトの順序付きリストの前にオブジェクトを挿入します。Head : List ➝ Any
— リストの1番目のアイテムを取得します。Tail : List ➝ List
— 1番目のアイテムが削除されたリストを取得します。Empty : List ➝ Boolean
— リストにアイテムが含まれていない場合に返します。First : Pair ➝ Any
— ペアの1番めの値を抽出します。Second : Pair ➝ Any
— ペアの2番目の値を抽出します。Convert : String ➝ List(Character)
— 文字列を文字のリストに変換します。Convert : List(Character) ➝ String
— 文字のリストを文字列に変換します。Same : Character, Character ➝ Boolean
— 2つの文字を比較し、等しい場合は返します。Unquote : Quote ➝ Any
— 引用符を外します。
これらの組込実装の全ては、単純ですが、最初のドラフト版であり、現在、軽くテストされているだけです。 それらをテストして問題を見つけた場合、Phabricator上で報告するか、メーリングリストにメールを送ってください。 次の数週間でこれらを改善します。
2つのスクリーンショットは、関数呼び出しを評価できる新しい特別ページを示しています。 ここでは、例として2つのスクリーンショットを挙げます。 最初のものは、If関数の呼出しを示しています。 条件はtrueに設定します。そうすると関数呼出しは、falseの時に返す値(alternative)(文字列“that“として与えられる)ではなく、 trueの時に返す値(consequent)(文字列“this“として与えられる)を返す必要があります。 実際、関数呼出しの下のオーケストレーションの結果は、文字列“this“を表す正規化された結果を示しています。
2番目の例は、フェーズ計画のフェーズ完了条件から直かに持ってきたものです。 ここでは、空のリストが実際に空であるかどうかを確認します(Z813/Empty関数を呼出しており、引数Z813K1/listは空のリストです)。 結果はtrueです(i.e. the Z40/Boolean with the Z40K1/identity Z41/true):
立上げ前にUXを改善することをお約束します! この生のJSON出力は、ほとんどデバッグと内部開発のためのもので、ユーザーエクスペリエンスのためのデザイン言語に取り組んでいます。
現在、フェーズε(イプシロン)に移行しています。 このフェーズでは、ユーザー作成のプログラミング言語での実装をサポートすることを目標としています。 私たちの当初の計画は、JavaScriptとPythonで書かれたコードをサポートすることです。
誰かが書いた任意コードをインターネット上で実行することは、セキュリティとパフォーマンスの大きなリスクがあるので、財団全体の同僚とともにセキュリティとパフォーマンスの徹底的なレビューを通してこのフェーズの作業をフォローアップします。
現在、WikiLambdaシステムが稼働している公式の公開テストインスタンスはありません。 Lucas Werkmeisterは、ボランティアで定期的に更新される公開テストインスタンスnotwikilambdaを提供してくれました。深く感謝しています。ただ、そのインスタンスはオーケストレーターのバックエンドをサポートするようにまだ更新されていません(その方法をまだ文書化する必要があるため)。 セキュリティとパフォーマンスのレビューが完了するまで、私たち自身のインスタンスを稼働することはありません(ただ、他の人がそうすることを止めるものではありませんし、誰かが設定したいのであれば、通常チャンネルでサポートを提供することはできます)。
現在のフェーズの終了後、フェーズζ(ゼータ)に移行し、これにより3番目の型実装である合成(compositions)が可能になります。
チーム、ボランティア、私たちを連れてきてくれた大いなる努力に感謝しています。そして私はプロジェクトの次のステップにワクワクしています!
(注:来週はニュースレターはありません。)