Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

こんにちは、ハブル Stephen Wolfram の投皿の翻蚳を玹介したす。 「Wolfram関数リポゞトリ: Wolfram蚀語を拡匵するためのオヌプンプラットフォヌムの立ち䞊げ」.

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

Wolfram蚀語の䞀貫性のための前提条件

今日、私たちはプログラミング蚀語ずずもに偉倧な成果の入り口に立っおいたす。 Wolfram蚀語。 ちょうど XNUMX 週間前にロヌンチしたした 開発者向けの無料のWolfram゚ンゞンナヌザヌがWolfram蚀語を倧芏暡な゜フトりェアプロゞェクトに統合できるように支揎したす。 今日は打ち䞊げです Wolfram関数リポゞトリ, Wolfram蚀語を拡匵するために䜜成された関数のための調敎されたプラットフォヌムを提䟛するためにたた私たちの゜フトりェア補品の開発に貢献できる誰でも関数のリポゞトリをオヌプンしたす

Wolfram関数リポゞトリはプログラミング蚀語ずしおだけでなく蚀語ずしおのWolfram蚀語のナニヌクな性質によっお可胜になったものです 本栌的なコンピュヌティング蚀語。 埓来のプログラミング蚀語では、重芁な新機胜を远加するには、通垞、䞀緒に䜿甚するず機胜する堎合ず機胜しない堎合がある远加ラむブラリ党䜓を䜜成する必芁がありたす。 ただし、Wolfram蚀語では 蚀語自䜓にはすでに倚くのこずが組み蟌たれおいたす、蚀語党䜓の党䜓的な構造に即座に統合される新しい関数を远加するだけで、その機胜を倧幅に拡匵できるずいうこずです。

たずえばWolfram関数リポゞトリにはすでに以䞋が含たれおいたす 532 個の新機胜 26 のテヌマ別カテゎリヌに構造化されおいたす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

同様にそれ以䞊 6000の暙準機胜Wolfram蚀語に組み蟌たれおおりリポゞトリの各関数にはそれらの詳现な説明ず䜜業䟋を含むドキュメントペヌゞがありたす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

このペヌゞにアクセスするには、䞊蚘のオブゞェクト(関数BLOB)をコピヌし、入力行に貌り付けおから関数を実行したす。この関数はすでにWolfram蚀語に組み蟌たれおおり、デフォルトでサポヌトされおいたす バヌゞョン12.0:

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

ここで泚意しおいただきたいのは、加工する際に ロゎQRコヌド たずえば「画像凊理ラむブラリ」をセットアップする必芁はありたせん。Wolfram蚀語には䞀貫性のある泚意深くアルゎリズム的な方法がすでに実装されおいるからです 画像凊理、さたざたなグラフィカル蚀語関数ですぐに凊理できたす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

サポヌトがあれば幞いです 玠晎らしくお才胜のあるコミュニティ, これは過去数十幎にわたっおWolfram蚀語に基づいお成長し拡匵しおきたした。 Wolfram関数リポゞトリにより近い将来その蚀語で利甚できる朜圚的に重芁で科孊や技術のさたざたな分野に特化した関数の範囲が倧幅に拡倧されるこずになる。 したがっお、蚀語の内容 (組み蟌み関数) ず蚀語の䞡方を䜿甚するこずが可胜になりたす。 開発原則、蚀語に基づいお実装されたす。 (ここで泚意すべき点はWolfram蚀語にはすでにそれ以䞊のものがあるずいうこずである 30幎の発展ず安定成長の歎史).
リポゞトリの関数にはWolfram蚀語で曞かれた倧小のコヌドが含たれる堎合がありたす たずえば、次のような呌び出しが考えられたす。 倖郚 API およびサヌビス、たたは他の蚀語の倖郚ラむブラリ。 このアプロヌチのナニヌクな特城はナヌザレベルの機胜にドリルダりンするずきにこのアプロヌチがWolfram蚀語の䞀貫した構造の䞊に構築されおいるため朜圚的な䞍䞀臎が存圚しないこずであるそしおすべおの関数は自動的に正しく動䜜する圌女はそうすべきだ。
Wolfram機胜リポゞトリのシェルずプログラミング構造は誰もが自分にずっお最もシンプルで䟿利な方法で共通の目的に貢献できるように蚭蚈されおいる メモ垳のテキスト ファむル (nb 拡匵子付き) WL に蚘入する。 組み蟌みの自動関数を䜿甚するず、リポゞトリに远加された新しい関数をチェックしお、蚀語ぞの統合を確実に行うこずができたす。 圓瀟は、新しい機胜の耇雑さよりも、自分の機胜を蚀語に統合できる幅広いナヌザヌに賭けおいたす。レビュヌプロセスはありたすが、次のようなこずには固執したせん。 綿密な蚭蚈分析 たたは、圓瀟が採甚するコア蚀語に組み蟌たれた機胜のより厳密なテストずは察照的に、新しいナヌザヌ機胜の完党性ず信頌性に関する厳栌な基準。

このアプロヌチには倚くのトレヌドオフず詳现がありたすが私たちの目暙はナヌザ゚クスペリ゚ンスのためにWolfram機胜リポゞトリを最適化し新しいナヌザ機胜が蚀語の開発に有意矩に貢献できるようにするこずです 私たちが成長するに぀れお、リポゞトリに組み蟌たれた関数を凊理および怜蚌するための新しい方法、特に倚数の関数を敎理しおナヌザヌが必芁ずする関数を芋぀けるための新しい方法を発明する必芁があるこずに疑いの䜙地はありたせん。 しかし、私たちが遞んだ道が良いスタヌトであるこずは心匷いです。 私は個人的に いく぀かの機胜を远加したした 元のデヌタベヌスに。 それらの倚くは、私が個人的に長い間開発しおきたコヌドに基づいおいたす。 そしお、それらをリポゞトリにプッシュするのに数分しかかかりたせんでした。 これらがリポゞトリにあるので、ファむルの怜玢やパッケヌゞのダりンロヌドなどを心配するこずなく、必芁に応じおい぀でもすぐにこれらの関数を䜿甚できるようになりたした。

コストを削枛しながら効率を向䞊

むンタヌネット以前にもWolfram蚀語のコヌドを共有する方法はあった私たちの最初の䞻芁な集䞭プロゞェクトは 数孊゜ヌス、1991 幎に CD-ROM などに基づいお Mathematica 甚に䜜成されたした。 もちろん、Wolfram関数リポゞトリに基づいお実装のために提案されたアプロヌチは、䞊蚘のタスクを実装するためのより匷力で信頌性の高いツヌルです。

30幎以䞊にわたり圓瀟はWolfram蚀語構造の完党性を維持するために熱心に取り組んできたしたこれはWolfram蚀語が単なるプログラミング蚀語ではなく 本栌的なコンピュヌティング蚀語。 したがっおWolfram関数リポゞトリを実装するアプロヌチの本質は開発ず共進化ができるように順次远加され蚀語のフレヌムワヌクに適合する新しい関数のプログラミングず開発に統䞀されたアプロヌチを䜿甚するこずである

各機胜の実装構造では、さたざたな蚈算凊理が発生したす。 ここで、関数は明確か぀均䞀な倖芳ず、ナヌザヌにずっお芖芚的に読みやすいものである必芁があるこずに泚意しおください。 これに関連しおWolfram蚀語の組み蟌み関数は関数を適切にプログラムする方法を瀺す6000以䞊の連続した䟋ずずもに提瀺されるこれらは私たちのものである ラむブプログラミングビデオ含たれたす 暙準プログラムを䜜成するための数癟時間のプロセス。 このアプロヌチにより最終的にWolfram機胜リポゞトリが適切なパフォヌマンスを発揮できるようになるのはすでに蚀語に組み蟌たれおいる倚数の远加の倚様なラむブラリを備えたWolfram蚀語の構造的性質によるものである。 たずえば、画像を凊理する関数がある堎合、たたは スパヌス配列たたは 分子構造ず 地理デヌタ たたはその他 - それらの䞀貫したシンボリック衚珟は蚀語内にすでに存圚しおおり、このおかげで、関数は蚀語内の他の関数ずすぐに互換性がありたす。

実際にうたく機胜するリポゞトリを䜜成するこずは、興味深いメタプログラミング䜜業です。 たずえば、プログラムに過剰な制限があるず、アルゎリズムに必芁な統䞀性や汎甚性を埗るこずができなくなりたす。 機胜制限の数が䞍十分な堎合ず同様に、十分に正しいアルゎリズム実行シヌケンスを実装するこずはできたせん。 これらのアプロヌチの劥協案を実装した以前のいく぀かの䟋は、圓瀟が実装したもので、非垞に安定しお動䜜したした。これらは次のずおりです。 プロゞェクトタングステンのデモンストレヌションは 2007 幎に開始され、珟圚は 12000 を超えるナヌザヌ察話型デモをオンラむンで実行しおいたす。 で Wolframデヌタベヌス Wolfram蚀語で䜿甚できる既補のデヌタベヌスが600以䞊あり Wolframニュヌラルネットワヌクストレヌゞ ほが毎週新しいニュヌラル ネットワヌクが補充され (珟圚、すでに 118 個ありたす)、それらは関数を通じおすぐに接続されたす。 ネットモデル Wolfram蚀語では

䞊蚘の䟋にはすべお基本的な特城がありたす。それは、プロゞェクトで収集されたオブゞェクトず関数が非垞に高床な構造化ずプロセスの分散を持っおいるずいうこずです。 もちろん、デモやニュヌラル ネットワヌクなどの構造の詳现は倧きく異なる可胜性がありたすが、珟圚のリポゞトリの基本的な構造は垞に同じです。 芪愛なるナヌザヌの皆さんWolfram蚀語に拡匵機胜を远加するようなリポゞトリの䜜成に぀いおどう思いたすか Wolfram蚀語は非垞に柔軟になるように蚭蚈されおいるためどのような方法でも拡匵したり倉曎したりするこずができる この状況はWolfram蚀語でさたざたな倧芏暡な゜フトりェアプロゞェクトを迅速に䜜成できる胜力にずっお非垞に重芁である。 ここで、蚀語の柔軟性が高たるに぀れお、そのような蚀語で実装されるプロゞェクトのコストは必然的に増加するこずに泚意しおください。 これは、ナヌザヌがそのような蚀語を䜿甚すればするほど、より専甚の機胜が提䟛されるずいう事実によるものですが、このアプロヌチには、プログラム モゞュヌルの䞀貫性を確保できないずいうマむナス面もあるこずを忘れおはなりたせん。

埓来のプログラミング蚀語のラむブラリには共通の問題がありたす。たずえば、XNUMX ぀のラむブラリを䜿甚する堎合、コヌドは正しく動䜜したすが、耇数のラむブラリを䜿甚しようずするず、それらが盞互に正しく盞互䜜甚するずいう保蚌はありたせん。 。 たた、本栌的なコンピュヌティング蚀語ずは異なり、埓来のプログラミング蚀語では、基本構造以倖の関数やデヌタ型に぀いお䞀貫した組み蟌み衚珟の存圚を保蚌する方法がありたせん。 しかし実際には、この問題は䞀芋したよりもさらに倧きい。぀たり、倧芏暡な垂盎機胜を構築する堎合、Wolfram蚀語に投入する集䞭プロゞェクトプログラミングの莫倧なコストがなければ、それを構築するこずは䞍可胜である。䞀貫性を達成したす。 したがっお、すべおの゜フトりェア モゞュヌルが垞に正しく連携しお動䜜するこずが重芁です。

したがっおWolfram機胜リポゞトリの背埌にある考え方は䞀貫したモゞュヌルずしお開発しやすい個々の機胜を介しお比范的小さなコヌド郚分で蚀語に拡匵機胜を远加するだけで䞊で抂説した問題を回避するこずである。 ずはいえ、個別の機胜では䟿利にできないプログラミング機胜もありたす圓瀟では、倧芏暡な゜フトりェアパッケヌゞの実装を支揎するために、最適化されたプログラミングアルゎリズムを近い将来リリヌスする予定です。 ただしWolfram蚀語にすでに組み蟌たれおいる関数に基づいお個々の関数に基づいお実装されるプログラミングの可胜性は数倚くありたす。 ここでの考え方は、比范的少ないプログラミング劎力で、蚭蚈に十分な䞀貫性を提䟛し、それらが盞互に適切に調敎され、さらにこれに加えお、非垞に䟿利な新しい関数を倚数䜜成できるずいうこずです。将来的にはこの蚀語で簡単か぀広く䜿甚できるようになるでしょう。

もちろん、このアプロヌチは劥協です。 より倧きなパッケヌゞが実装されれば、非垞に匷力で䟿利なたったく新しい機胜の䞖界が想像できるでしょう。 他のすべおに適合する新しい機胜を取埗する必芁があるが、プロゞェクトの開発に倚くの劎力を費やす぀もりがない堎合、残念ながら、プロゞェクトの範囲が瞮小する可胜性がありたす。 Wolfram機胜リポゞトリの背埌にある考え方はプロゞェクトの定矩郚分に機胜を提䟛するこずである;このアプロヌチはプログラミングプロゞェクト内で良奜な䞀貫性を維持するこずを容易にしながら匷力な機胜を远加するこずになる。

カスタム関数を関数リポゞトリに远加するのに圹立ちたす

私たちのチヌムは、ナヌザがWolframリポゞトリの機胜に簡単に貢献できるように熱心に取り組んできたした。 デスクトップ䞊すでに存圚しおいたす バヌゞョン12.0)、メむン メニュヌ タブを順番に移動するだけです: [ファむル] > [新芏] > [リポゞトリ項目] > [関数リポゞトリ項目] が衚瀺されたす。定矩ノヌトブック" (ワヌクベンチ内でプログラム的に。アナログ関数を䜿甚するこずもできたす - ノヌトブックの䜜成[「機胜リ゜ヌス」]):

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

実行する必芁がある䞻な手順は XNUMX ぀ありたす。XNUMX ぀目は実際に関数のコヌドを曞き留め、XNUMX ぀目は関数がどのように動䜜するかを瀺すドキュメントを曞き留めたす。
䞊郚にある [サンプルを開く] ボタンをクリックしお、必芁な操䜜の䟋を衚瀺したす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

本質的にはWolfram蚀語の組み蟌み関数に䌌たものを䜜成しようずしおいる ただし、組み蟌み関数よりもはるかに具䜓的なこずを行うこずができたす。 同時に、その完党性ず信頌性に関する期埅ははるかに䜎くなりたす。
Wolfram蚀語の関数呜名ガむドラむンに埓った名前を関数に付ける必芁がある さらに、蚀語の組み蟌み関数ず同様に、関数のドキュメントを開発する必芁がありたす。 これに぀いおは埌ほど詳しく説明したす。 ここでは、定矩ノヌトブック ファむルの䞊郚にあるボタンの行に ボタンがあるこずに泚意しおください。 「スタむルガむドラむン」、䜕をすべきかを説明するボタンず、関数のドキュメントを曞匏蚭定するためのツヌルを提䟛する [ツヌル] ボタンがありたす。
すべおの項目が正しく入力されおいるこずを確認し、準備ができたら、「確認」ボタンをクリックしおください。 ただ詳现をすべお理解しおいないのはごく普通のこずです。 したがっお、「チェック」機胜が自動的に実行され、スタむルず䞀貫性の倚くのチェックが行われたす。 倚くの堎合、修正内容を確認しお受け入れるように求めるプロンプトがすぐに衚瀺されたす (たずえば、「この行はコロンで終わる必芁がありたす」ず、コロンの入力を求めるプロンプトが衚瀺されたす)。 時々、圌女はあなたに䜕かを自分で远加たたは倉曎するように䟝頌するこずがありたす。 [チェック] ボタンの自動機胜に新しい機胜を垞に远加しおいきたすが、基本的にその目的は、機胜リポゞトリに送信するすべおのものがすでに可胜な限り倚くのスタむル ガむドラむンに厳密に埓っおいるこずを確認するこずです。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

したがっお、「チェック」を実行した埌、「プレビュヌ」を䜿甚できたす。 「プレビュヌ」は、関数に察しお定矩したドキュメント ペヌゞのプレビュヌを䜜成したす。 コンピュヌタヌ䞊で䜜成されたファむルたたはクラりド ストレヌゞにあるファむルのプレビュヌを䜜成するこずもできたす。 䜕らかの理由でプレビュヌに衚瀺された内容に満足できない堎合は、戻っお必芁な修正を行っおから、[プレビュヌ] ボタンを再床クリックしおください。
これで、関数をリポゞトリにプッシュする準備が敎いたした。 「デプロむ」ボタンには XNUMX ぀のオプションがありたす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

このステップで重芁なこずは、関数をWolfram関数リポゞトリに送信しお、誰でも利甚できるようにするこずです。 同時に、限られた数のナヌザヌに察しお関数を配眮するこずもできたす。 たずえば、コンピュヌタ䞊でロヌカルにホストされる関数を䜜成しお、その特定のコンピュヌタを䜿甚するずきにその関数を利甚できるようにするこずができたす。 たたは、 クラりドアカりント, クラりドに接続しおいるずきに利甚できるようになりたす。 クラりド アカりントを通じお機胜をパブリックにホスト (デプロむ) するこずもできたす。 これは䞭倮のWolfram機胜リポゞトリにはありたせんがあなたのアカりントから機胜を取埗できるURLを誰かに䞎えるこずができたす (将来的には、瀟内党䜓で䞭倮リポゞトリもサポヌトする予定です。)

そこで実際に関数をWolfram関数ナレッゞベヌスに送信したいずしたす。 これを行うには、リポゞトリに察しお「送信」ボタンをクリックしたす。 それでは、珟時点で䜕が起こっおいるのでしょうか あなたの申請はすぐにキュヌに入れられ、専任のキュレヌタヌチヌムによる審査ず承認が行われたす。

アプリケヌションの承認プロセス (通垞は数日かかりたす) が進むに぀れお、そのステヌタスに関する通知ず、堎合によっおは将来の䜿甚に関する提案が届きたす。 しかし、機胜が承認されるず、すぐにWolfram機胜リポゞトリに公開され、誰でも䜿甚できるようになりたす。 そしおこれは 新機胜のニュヌスダむゞェスト など

ストレヌゞには䜕を入れるべきですか?

圓瀟は完党性、信頌性、党䜓的な品質に関しお非垞に高い基準を蚭けおおり、過去6000幎以䞊にわたっおWolfram蚀語にすでに組み蟌たれおいる30以䞊の関数はすべお䞊蚘の芁件を満たしおいるこずに泚意しおください。 Wolfram関数リポゞトリの目暙はWolfram蚀語にすでに存圚するすべおの構造ず機胜を利甚しおできるだけ倚くの軜量な関数぀たりより高性胜な関数を远加するこずである。

もちろんWolfram関数リポゞトリ内の関数はWolfram蚀語の蚭蚈原則に準拠しなければならないので他の関数や関数が適切に動䜜する方法に぀いおのナヌザの期埅ず完党に盞互䜜甚できる ただし、関数の完党性や信頌性が同等である必芁はありたせん。

Wolfram蚀語の組み蟌み関数ではプログラミング関数を可胜な限り䞀般的なものにするよう懞呜に努力しおいたす。 そうは蚀っおも、Wolfram関数リポゞトリ内に、非垞に特殊だが有甚なケヌスを単に凊理する関数が存圚するこずに問題はありたせん。 たずえば、関数 ノヌトブックからメヌルを送信 XNUMX ぀の特定の圢匏でファむルを受信し、XNUMX ぀の特定の方法でメヌルを䜜成できたす。 倚角圢図 特定の色やラベルなどのみを䜿甚しおグラフを䜜成したす。

組み蟌み機胜に関するもう XNUMX ぀の点は、圓瀟ではあらゆる特殊なケヌスぞの察応、誀入力ぞの適切な察応などにあらゆる努力を払っおいるこずです。 関数リポゞトリでは、問題解決の䞻なケヌスを凊理し、その他のすべおを無芖する特別な関数が存圚するのはたったく普通のこずです。

明癜な点は関数がより倚くのこずを実行しそれをより良く実行する方が良いずいうこずだが関数リポゞトリの最適化ではWolfram蚀語の組み蟌み関数ずは察照的に深く掘り䞋げるよりもより倚くの関数をより倚くの関数にバンドルする必芁があるそれぞれの特定の機胜の実装プロセス。

次に、リポゞトリ内の関数をテストする䟋を芋おみたしょう。 このような関数に察する期埅される䞀貫性は、圓然、組み蟌み蚀語関数よりもはるかに䜎くなりたす。 これは、関数が API などの倖郚リ゜ヌスに䟝存しおいる堎合に特に圓おはたりたす。䞀貫したテストを垞に実行するこずが重芁であり、これは怜蚌アルゎリズム内で自動的に行われたす。 nb ファむルでは、(「远加情報」セクションで) 定矩を明瀺的に指定し、入力文字列ず出力文字列、たたはタむプの完党な文字オブゞェクトのいずれかによっお定矩されたテストをいく぀でも指定できたす。 怜蚌テスト、あなたが適切だず思う限り。 さらに、システムは、ナヌザヌが提䟛したドキュメントの䟋を怜蚌プロセスに倉換しようず垞に詊みたす (これは、たずえば、結果が乱数や時刻に䟝存する関数の堎合など、非垞にリ゜ヌスを倧量に消費する堎合がありたす)。

その結果、関数リポゞトリの実装は倚くの耇雑さを持぀こずになりたす。 わずか XNUMX 行のコヌドであるものもあれば、倚くのヘルパヌ関数を䜿甚しお数千行たたは数䞇行に及ぶものもありたす。 定矩するコヌドがほずんど必芁ない関数を远加する䟡倀があるのはどのような堎合ですか? 基本的に、関数に次のようなものがある堎合、 良い蚘憶に残る名前ナヌザヌがコヌドの䞀郚を芋ればすぐに理解できるものであれば、すでに远加できたす。 それ以倖の堎合は、コヌドを䜿甚する必芁があるたびにプログラムにコヌドを再远加する方がよいでしょう。

関数リポゞトリの䞻な目的は (その名前が瀺すように)、蚀語に新しい機胜を導入するこずです。 新しいデヌタを远加したい堎合や、 新しい゚ンティティ、 䜿甚 Wolframデヌタリポゞトリ。 しかし、蚈算に新しいタむプのオブゞェクトを導入したい堎合はどうすればよいでしょうか?

実際には XNUMX ぀の方法がありたす。 関数リポゞトリ内の新しい関数で䜿甚される新しいオブゞェクト タむプを導入したい堎合がありたす。 この堎合、い぀でもそのシンボリック衚珟を曞き留めお、関数リポゞトリで関数を入力たたは出力するずきにそれを䜿甚できたす。

しかしオブゞェクトを衚珟しWolfram蚀語の既存の関数を通じおそれを操䜜するこずを定矩したい堎合はどうすればよいでしょうか? Wolfram蚀語にはこれを実珟するための軜量メカニズムが垞に備わっおいた アップバリュヌ。 いく぀かの制限がありたす (特に、 圌らの議論を評䟡できない)、関数リポゞトリを䜿甚するず、関数を簡単に衚珟し、その倀を定矩できたす。 Wolfram蚀語党䜓に完党に統合された新しい䞻芁な蚭蚈を䜜成する際に䞀貫性ぞの期埅を高めるこずは䞀般に非垞に重芁な手順であり単にプロゞェクトのコストを増やすだけでは達成できず圓瀟もプロゞェクトの䞀環ずしお行っおいるこずである蚀語の長期的な開発の堎合、このタスクはリポゞトリの開発の䞀郚ずしお蚭定される目暙ではありたせん)。

では、関数リポゞトリの関数コヌドには䜕が含たれる可胜性があるでしょうか? Wolfram蚀語に組み蟌たれたすべおのものもちろん、少なくずもそれが衚しおいない堎合には 脅嚁 のために セキュリティヌ プログラム自䜓のパフォヌマンス (コンピュヌティング環境ずしお)、および関数リポゞトリの関数も同様です。 ただし、他の機胜もありたす。関数リポゞトリ内の関数は API を呌び出すこずができたす。 Wolframクラりドたたは 別の情報源から。 もちろん、これにはいく぀かのリスクが䌎いたす。 API が倉曎されず、関数ストア内の関数が動䜜しなくなるずいう保蚌はないためです。 このような問題を特定しやすくするためにWolfram蚀語の組み蟌み機胜以倖に䟝存する機胜に぀いおはドキュメントペヌゞ「芁件」セクションに泚蚘がある (もちろん、実際のデヌタに関しおは、この機胜であっおも問題が発生する可胜性がありたす。なぜなら、珟実䞖界のデヌタは垞に倉化しおおり、堎合によっおはその定矩や構造さえも倉化するからです。)

Wolfram機胜リポゞトリのコヌドはすべおWolframで曞かれるべきでしょうか 確かに、倖郚 API 内のコヌドは、蚀語コヌドすら䜜成しない Wolfram 蚀語で蚘述すべきではありたせん。 実際、ほがすべおの倖郚蚀語たたはラむブラリで関数を芋぀けた堎合、それをWolfram関数リポゞトリで䜿甚できるようにするラッパヌを䜜成できたす。 (通垞、これには組み蟌み関数を䜿甚する必芁がありたす。 倖郚評䟡 たたは 倖郚関数 Wolfram蚀語コヌドで。

それで、これをするこずに䜕の意味があるのでしょうか 基本的にこれにより統合されたWolfram蚀語システム党䜓ずその統合された゜フトりェア機胜セット党䜓を䜿甚できるようになりたす 倖郚ラむブラリたたは蚀語から基本実装を取埗した堎合はWolfram蚀語の豊富な蚘号構造を䜿甚しおナヌザがすでに実装されおいる機胜を簡単に䜿甚できるようにする䟿利なトップレベル関数を䜜成するこずができる 少なくずもこれはロヌディングラむブラリなどのすべおの構成芁玠が存圚する理想的な䞖界では実珟可胜なはずでありその堎合それらはWolfram蚀語によっお自動的に凊理されるこずになる (実際には問題が発生する可胜性があるこずに泚意しおください) 倖郚蚀語のセットアップ 特定のコンピュヌタ システムやクラりド ストレヌゞでは、远加のセキュリティ問題が発生する可胜性がありたす)。

ちなみに、兞型的な倖郚ラむブラリを初めお芋るず、ほんの数個の関数でカバヌするには耇雑すぎるように思えるこずがよくありたすが、倚くの堎合、耇雑さの倚くは、ラむブラリずすべおの関数に必芁なむンフラストラクチャを䜜成するこずに起因しおいたす。それをサポヌトしたす。 ただしWolfram蚀語を䜿甚する堎合むンフラストラクチャは通垞すでにパッケヌゞに組み蟌たれおいるためこれらのサポヌト関数をすべお詳现に公開する必芁はなくラむブラリ内の「最䞊䜍」のアプリケヌション固有関数の関数のみを䜜成するだけでよい。

ナレッゞベヌスの「゚コシステム」

定期的に䜿甚する関数を䜜成した堎合は、それを Wolfram Function Repository に送信しおください。 これ以䞊の䜕か蚀語開発が埗られない堎合でも、個人䜿甚の機胜を䜿甚した方がはるかに䟿利です。 ただし、これらの機胜を定期的に䜿甚するず、おそらく他のナヌザヌもその機胜が圹立぀ず考えるのが論理的です。

圓然のこずながら、自分の機胜を共有できない、たたは共有したくない状況に陥ったり、個人的な情報リ゜ヌスにアクセスできたりする堎合もありたす。 そのような堎合でも、自分のクラりドアカりントに機胜をデプロむするだけで枈みたすので、 暩利の指定 それらにアクセスしたす。 (あなたの組織が Wolfram Enterpriseプラむベヌトクラりドその埌、すぐに独自のプラむベヌト機胜リポゞトリをホストできるようになり、組織内から管理しお、サヌドパヌティ ナヌザヌにビュヌを匷制的に衚瀺するかどうかを蚭定できるようになりたす。)

Wolfram関数リポゞトリに送信する関数は完璧である必芁はありたせん。 それらはただ圹に立たなければなりたせん。 これは、叀兞的な Unix ドキュメントの「゚ラヌ」セクションに䌌おいたす。「定矩セクション」には、関数に぀いおすでに知っおいる制限事項や問題などを説明できる「䜜成者のメモ」セクションがありたす。 さらに、機胜をリポゞトリに送信するずきに、専任のキュレヌタヌ チヌムが読む送信メモを远加できたす。

機胜が公開されるず、そのペヌゞの䞋郚には垞に XNUMX ぀のリンクが衚瀺されたす。この機胜に぀いおメッセヌゞを送信する"そしお"Wolframコミュニティで議論する」 メモを添付する堎合 (䟋: バグに぀いお教えおください)、メッセヌゞず連絡先情報を機胜の䜜成者ず共有するこずを瀺すボックスにチェックを入れるこずができたす。

堎合によっおはコヌドを芋ずにWolfram関数リポゞトリの関数組み蟌み関数などを䜿甚したい堎合がありたす ただし、内郚を芋たい堎合は、垞に䞊郚にメモ垳ボタンがありたす。 それをクリックするず、機胜リポゞトリに送信された元の定矩ノヌトブックの独自のコピヌを取埗できたす。 堎合によっおは、ニヌズに応じた䟋ずしお䜿甚するこずもできたす。 同時に、この関数を独自に倉曎しお開発するこずもできたす。 コンピュヌタヌ䞊のリポゞトリたたは aphid クラりド ストレヌゞ アカりントで芋぀けたこれらの関数を投皿したり、元の関数の改良拡匵バヌゞョンずしお関数ナレッゞ ベヌスに送信したりするこずもできたす。

将来的には、機胜リポゞトリの Git スタむルのフォヌクをサポヌトする予定ですが、珟時点ではシンプルに保぀よう努めおおり、蚀語に組み蟌たれる各機胜の承認枈みバヌゞョンは垞に XNUMX ぀だけです。 倚くの堎合、(開発者が開発した機胜の保守を攟棄しおナヌザヌの提出に応じない限り)、機胜の元の䜜成者がその機胜の曎新を管理し、新しいバヌゞョンを提出し、その埌レビュヌされ、レビュヌ プロセスに合栌するず、 、蚀語で公開されおいたす。

開発された機胜の「バヌゞョン管理」がどのように機胜するかずいう問題を考えおみたしょう。 珟時点では、関数リポゞトリの関数を䜿甚するず、その定矩はコンピュヌタヌ (クラりドを䜿甚しおいる堎合はクラりド アカりント) に氞続的に保存されたす。 新しいバヌゞョンの機胜が利甚可胜な堎合は、次回その機胜を䜿甚するずきに、そのこずを通知するメッセヌゞが届きたす。 関数を新しいバヌゞョンに曎新したい堎合は、次のコマンドを䜿甚しお実行できたす。 リ゜ヌス曎新。 (「関数 BLOB」には実際にはさらに倚くのバヌゞョン管理情報が保存されおおり、将来的にはナヌザヌがこれにアクセスできるようにする予定です。)

Wolfram関数リポゞトリの玠晎らしい点のXNUMX぀はWolfram蚀語プログラムならどこでもそのリポゞトリの関数を䜿甚できるこずである。 プログラムがメモ垳に衚瀺される堎合、倚くの堎合、リポゞトリ関数を読みやすい「関数バむナリ オブゞェクト」関数ずしおフォヌマットするず䟿利です (おそらく適切なバヌゞョンが蚭定されおいたす)。

テキストを䜿甚しお関数リポゞトリ内の任意の関数にい぀でもアクセスできたす リ゜ヌス関数[...]。 そしおこれは䟋えば次のようにWolfram゚ンゞン甚にコヌドやスクリプトを盎接曞く堎合に非垞に䟿利です IDE たたはテキスト コヌド ゚ディタヌを䜿甚する (関数リポゞトリは完党な互換性があるこずに特に泚意しおください) 開発者向けの無料のWolfram゚ンゞン).

それはどのように動䜜したすか

Wolframリポゞトリ内の関数内では党く同じものを䜿甚しおこれが可胜です リ゜ヌスシステム のように塩基 他のすべおの既存のリポゞトリ (デヌタストア、 ニュヌラルネットリポゞトリ, デモプロゞェクトのコレクション など)、他のすべおのWolframシステムリ゜ヌスず同様に、 リ゜ヌス関数 最終的には機胜に基づいお リ゜ヌスオブゞェクト.

怜蚎する リ゜ヌス関数:

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

内郚では、関数を䜿甚しおいく぀かの情報を確認できたす 情報:

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

リ゜ヌス機胜の蚭定はどのように機胜したすか? 最も単玔なものは、玔粋にロヌカルなケヌスです。 以䞋は、関数 (この堎合は単なる玔粋関数) を取埗し、それを特定のプログラム セッションのリ゜ヌス関数ずしお定矩する䟋です。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

定矩を行ったら、リ゜ヌス関数を䜿甚できるようになりたす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

この関数 BLOB には黒いアむコンがあるこずに泚意しおください。 Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム。 これは、BLOB 関数が珟圚のセッションに察しお定矩されたメモリ内リ゜ヌス関数を参照するこずを意味したす。 コンピュヌタたたはクラりド アカりントに氞続的に保存されおいるリ゜ヌス フィヌチャには、灰色のアむコンが付いおいたす。 Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム。 Wolfram機胜リポゞトリには公匏リ゜ヌス機胜のオレンゞ色のアむコンがありたす Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム.

では、定矩ノヌトブックで [展開] メニュヌを䜿甚するずどうなるでしょうか? たず、メモ垳内のすべおの定矩を取埗し、そこからシンボリックなファむルを䜜成したす。 リ゜ヌスオブゞェクト。 (テキストベヌスの IDE たたはプログラムを䜿甚しおいる堎合は、明瀺的に リ゜ヌスオブゞェクト)

コンピュヌタヌ䞊のリポゞトリからの関数のロヌカル デプロむメントは、次のコマンドを䜿甚しお実行されたす。 ロヌカルキャッシュ リ゜ヌスオブゞェクトずしお保存するには ロヌカルオブゞェクト ファむル システム䞊で。 クラりド アカりントぞのデプロむは、次のコマンドを䜿甚しお行われたす。 クラりドデプロむ リ゜ヌス オブゞェクトの堎合、パブリック クラりド デプロむメントは クラりドパブリッシュ。 すべおの堎合においお リ゜ヌス登録 リ゜ヌス関数名の登録にも䜿甚されるため、 リ゜ヌス関数["名前"] 働くでしょう。

関数リポゞトリの [送信] ボタンをクリックするず、その䞋で䜕が起こるか リ゜ヌス送信 リ゜ヌスオブゞェクトに察しお呌び出されたす。 (テキスト入力むンタヌフェむスを䜿甚しおいる堎合は、次のように呌び出すこずもできたす。 リ゜ヌス送信 盎接。

デフォルトでは、提出はWolfram IDに関連付けられた名前で行われたす。 ただし、開発チヌムたたは組織を代衚しおアプリケヌションを提出しおいる堎合は、次のこずができたす。 別のパブリッシャヌ ID を蚭定する 代わりに、ビュヌを操䜜するための名前ずしお䜿甚したす。

関数のいずれかを関数ナレッゞ ベヌスに送信するず、レビュヌのためにキュヌに入れられたす。 応答ずしおコメントを受け取った堎合、そのコメントは通垞、「コメント セル」が远加されたテキスト ファむルの圢匏になりたす。 にアクセスするず、い぀でも申請のステヌタスを確認できたす。 リ゜ヌス システム メンバヌ ポヌタル。 しかし機胜が承認されるず電子メヌルで通知され機胜はWolfram機胜リポゞトリに投皿されたす

仕事䞊の埮劙な点

䞀芋するず、定矩ノヌトをそのたた関数リポゞトリに入力できるように芋えるかもしれたせんが、実際には非垞に倚くの埮劙な点が含たれおおり、それらを凊理するには、シンボリック凊理を凊理するかなり耇雑なメタプログラミングを行う必芁がありたす。関数を定矩するコヌドずしお 、メモ垳自䜓が定矩されたす。 このほずんどは内郚で舞台裏で行われたすが、機胜ナレッゞ ベヌスに貢献する堎合は、理解しおおく䟡倀のある圱響がいく぀かある可胜性がありたす。

最初の埮劙な点: 定矩ノヌトブックに蚘入するずきは、次のような名前を䜿甚しおどこでも関数を参照できたす。 マむファンクションこれはWolfram蚀語の関数の通垞の名前のように芋えたすが関数リポゞトリのドキュメントではこれが眮き換えられたす リ゜ヌス関数[「マむファンクション」] ナヌザヌが関数を操䜜するずきに実際に䜿甚するものです。

XNUMX 番目の埮劙な点: 定矩ノヌトブックからリ゜ヌス関数を䜜成する堎合、関数定矩に含たれるすべおの䟝存関係を取埗し、明瀺的に含める必芁がありたす。 ただし、定矩をモゞュヌル化したたたにするためには、すべおを䞀意の圢匏に眮く必芁がありたす。 名前空間。 もちろん、 すべおを行う関数は関数リポゞトリにありたす)。

通垞、この名前空間の構成に䜿甚されたコヌドの痕跡はたったく衚瀺されたせん。 しかし、䜕らかの理由で関数内で実行䞍足のシンボルを呌び出した堎合、このシンボルは関数の内郚コンテキストにあるこずがわかりたす。 ただし、定矩メモ垳を凊理する堎合、少なくずも関数自䜓に察応するシンボルは 最適な衚瀺のために調敎可胜 内郚コンテキストの生の文字ではなく、機胜的な BLOB ずしお。

関数リポゞトリは、新しい関数を定矩するためのものです。 たた、これらの関数にはオプションがある堎合がありたす。 倚くの堎合、これらのパラメヌタヌ (たずえば、 方法 たたは 画像サむズ) は、組み蟌み関数だけでなく、組み蟌みシンボルが既に存圚する関数にも䜿甚できたす。 ただし、新しい機胜には新しいオプションが必芁になる堎合がありたす。 モゞュヌル性を維持するために、これらのパラメヌタは、䞀意の内郚コンテキスト (たたはリ゜ヌス関数党䜓、぀たりそれ自䜓) で定矩されたシンボルである必芁がありたす。 簡単にするために、関数リポゞトリでは文字列定矩で新しいオプションを定矩できたす。 そしお、ナヌザヌの䟿宜のために、これらの定矩はナヌザヌが䜿甚したず仮定しお オプション倀 О オプションパタヌン) も凊理され、関数を䜿甚するずきにパラメヌタを文字列ずしおだけでなく、同じ名前のグロヌバル シンボルずしおも指定できるようになりたす。

ほずんどの関数は、呌び出されるたびに実行すべきこずを実行するだけですが、䞀郚の関数は特定のセッションで実行する前に初期化する必芁がありたす。この問題を解決するために、定矩セクションに「初期化」セクションがありたす。

リポゞトリの関数は、リポゞトリ内にすでに存圚する他の関数を䜿甚できたす。盞互に参照する XNUMX ぀ (たたはそれ以䞊) の関数を含む関数リポゞトリの定矩をセットアップするには、それらをプログラム セッションにデプロむしお、次のこずができるようにする必芁がありたす。それらに関する参照 リ゜ヌス関数["名前"]、次に、必芁なこれらの関数の組み合わせ、䟋私は理解できたせんでしたを䜜成し、以前に投皿されたものに基づいお新しい関数をリポゞトリに远加できたす。 たたはすでにたたは以前 – どちらの蚀葉も䞍噚甚です

開発の芋通し。 リポゞトリが非垞に倧きくなった堎合、䜕が起こるでしょうか?

今日、私たちはWolfram機胜リポゞトリを立ち䞊げたばかりですが、時間の経過ずずもにそのサむズず機胜が劇的に増加する可胜性があり、開発が成長するに぀れお、すでに発生する可胜性があるず予想されおいるさたざたな問題が発生するこずが予想されたす。

最初の問題は、関数名ずその䞀意性に関するものです。 関数リポゞトリはWolfram蚀語の組み蟌み関数ず同様に名前を指定するだけで任意の関数を参照できるように蚭蚈されおいる ただし、これは必然的に、関数名がリポゞトリ党䜓でグロヌバルに䞀意である必芁があるこずを意味したす。぀たり、たずえば関数名は XNUMX ぀だけである必芁がありたす。 リ゜ヌス関数[「マむフェむバリット機胜」].

これは最初は倧きな問題のように思えるかもしれたせんが、むンタヌネット ドメむンや゜ヌシャル メディア ハンドルなどの問題ず基本的に同じ問題であるこずを認識する䟡倀がありたす。 そしお実際のずころ、システムにはレゞストラが必芁なだけです - そしおこれが圓瀟がWolfram関数ナレッゞベヌスに察しお果たす圹割のXNUMX぀です。 (リポゞトリのプラむベヌト バヌゞョンの堎合、そのレゞストラは管理者である可胜性がありたす。) もちろん、むンタヌネット ドメむンは䜕も持たなくおも登録できたすが、関数リポゞトリでは、実際の定矩がある堎合にのみ関数名を登録できたす。関数。

Wolfram関数ナレッゞベヌスの管理における私たちの圹割の䞀郚は関数に遞択された名前が関数の定矩を螏たえお論理的でありWolfram蚀語の呜名芏則に埓っおいるこずを保蚌するこずである。 私たちはWolfram蚀語で組み蟌み関数に名前を付けおきた30幎以䞊の経隓があり私たちのキュレヌタヌチヌムはその経隓を関数リポゞトリにも取り入れる予定です。 もちろん䟋倖は垞にありたす。 たずえば、䞀郚の関数には短い名前を付けたほうが望たしいように思えるかもしれたせんが、将来同じような関数名を付けようずする人に遭遇する可胜性が䜎いため、より長く、より具䜓的な名前で「防埡」する方が良いでしょう。 。

(関数の曖昧さをなくすためにメンバヌタグを远加するだけでは、意図した効果が埗られないこずに泚意しおください。垞にタグを割り圓おるこずに固執しない限り、特定の関数に察しおデフォルトのタグを定矩し、䜜成者タグも割り圓おる必芁があるためです) 、これもたた䞖界的な調敎が必芁になりたす。)

Wolfram関数の知識ベヌスが増倧するに぀れおそらく発生するであろう問題のXNUMX぀はシステムが提䟛する関数の発芋可胜性である 怜玢機胜 (定矩ファむルにはキヌワヌドなどが含たれる堎合がありたす)。 Wolfram蚀語の組み蟌み関数に぀いおは関数の「宣䌝」に圹立぀あらゆる皮類の盞互参照がドキュメント内にある 関数リポゞトリ内の関数は、組み蟌み関数を参照できたす。 しかし、その逆はどうでしょうか これを行うために、さたざたな蚭蚈を詊しお、組み蟌み関数のドキュメント ペヌゞでリポゞトリ関数を公開したす。

Wolfram蚀語の組み蟌み関数にはいわゆる怜出局が提䟛されたす 「ヘルプペヌゞ」のネットワヌク、特定の領域に関連する機胜の敎理されたリストを提䟛したす。 マニュアルペヌゞのバランスを適切に調敎するこずは垞に困難であり、Wolfram蚀語が成長するに぀れお、マニュアルペヌゞを完党に再線成する必芁があるこずがよくありたす。 リポゞトリの関数を倧たかなカテゎリに分類したり、それらのカテゎリを䞀貫しお分類したりするこずは非垞に簡単ですが、蚀語リファレンス ペヌゞを適切に線成するこずの方がはるかに䟡倀がありたす。 関数ナレッゞ ベヌス党䜓に察しおそれらを䜜成する最適な方法はただ明らかではありたせん。 䟋えば、 リ゜ヌスオブゞェクトギャラリヌの䜜成 機胜リポゞトリでは、誰でもリポゞトリからの「遞択」を含む Web ペヌゞを投皿できたす。

Wolfram関数リポゞトリ: Wolfram蚀語拡匵のためのオヌプンアクセスプラットフォヌム

Wolfram関数リポゞトリは氞続関数リポゞトリずしお蚭定されおおりその䞭の関数は垞に動䜜したす。 もちろん、機胜の新しいバヌゞョンが利甚可胜になる可胜性があり、圓然、䞀郚の機胜は時間の経過ずずもに廃止されるこずが予想されたす。 これらの関数はプログラムで䜿甚されおいれば機胜したすが、そのドキュメント ペヌゞには新しい、より高床な関数ぞのリンクが衚瀺されたす。

Wolfram機胜リポゞトリは新しい機胜を玠早く発芋しWolfram蚀語の新しい䜿甚方法を孊習できるように蚭蚈されおいたす 機胜リポゞトリで怜蚎されおきたもののいく぀かは最終的にはコアWolfram蚀語の組み蟌み郚分ずなるのが理にかなっおいるだろうずいうこずは非垞に楜芳的である 過去XNUMX幎間、同様のセットがありたした もずもずWolframで導入された機胜 | アルファ。 そしおこの経隓から孊んだ教蚓のXNUMX぀はWolfram蚀語に組み蟌たれたすべおのものにおいお私たちが重点を眮いおいる品質ず䞀貫性の基準を達成するには倚くの䜜業が必芁でありそれは倚くの堎合アむデアを実装するための最初の努力よりも難しいずいうこずです。 それでも、関数ナレッゞベヌス内の関数は、最終的にWolfram蚀語に組み蟌たれる可胜性のある将来の関数の非垞に有甚な抂念実蚌ずしお機胜する可胜性がありたす。

ここで最も重芁なこずは、関数リポゞトリ内の関数は、すべおのナヌザヌがすぐに䜿甚できるものであるずいうこずです。 ネむティブ蚀語機胜の方がはるかに優れおおり、パフォヌマンスが優れおいる可胜性がありたすが、機胜リポゞトリを䜿甚するず、ナヌザヌはすべおの新機胜にすぐにアクセスできるようになりたす。 そしお最も重芁なこずは、このコンセプトにより、誰もが望む新しい機胜を远加できるようになりたす。

Wolfram蚀語の歎史の初期にはこのアむデアはこれほどうたく機胜しなかっただろうが珟段階では蚀語に倚倧な努力が泚がれおおり蚀語蚭蚈原則も深く理解されおいるので今では非垞にうたく機胜しおいるように芋えるナヌザヌの倧芏暡なコミュニティが、蚭蚈の䞀貫性を維持しお幅広いナヌザヌにずっお圹立぀機胜を远加するこずが可胜です。

Wolfram蚀語ナヌザコミュニティには信じられないほどの才胜?の粟神が存圚する (もちろんこのコミュニティにはさたざたな分野の倚くの䞻芁な研究開発専門家が含たれおいたす。)Wolfram機胜リポゞトリがこの才胜の粟神を解き攟ち広めるための効果的なプラットフォヌムを提䟛するこずを願っおいたす Wolfram蚀語コンピュヌティングパラダむムが適甚できる領域を倧幅に拡倧するものを䜜成できるのは䞀緒にだけです。

30幎以䞊にわたり、私たちはWolfram蚀語に関しお倧きな進歩を遂げおきたした。 さあ、䞀緒に、さらに先ぞ進みたしょう。 私は䞖界䞭の尊敬されるWolfram蚀語ナヌザ党員に、開発者向けの無料Wolfram゚ンゞンのような新しい゜フトりェアプロゞェクトだけでなく、そのためのプラットフォヌムずしお機胜リポゞトリを䜿甚するこずを匷くお勧めしたす。

出所 habr.com

コメントを远加したす