Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

你好,哈布爾! 我向您展示 Stephen Wolfram 帖子的翻譯 “Wolfram 函數儲存庫:推出擴展 Wolfram 語言的開放平台”.

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

Wolfram 語言一致性的先決條件

今天我們與程式語言一起站在了偉大成就的門檻上 Wolfram語言。 就在三週前,我們推出了 為開發者提供免費的 Wolfram 引擎幫助我們的用戶將 Wolfram 語言整合到他們的大型軟體專案中。 今天我們推出 Wolfram 函數儲存庫,為了為擴展 Wolfram 語言而創建的功能提供一個協調的平台,我們還為任何可以為我們的軟體產品的開發做出貢獻的人開放一個功能存儲庫。

Wolfram 函數儲存庫是由於 Wolfram 語言的獨特性質而成為可能,它不僅作為一種程式語言,而且作為一種 全面的計算語言。 在傳統的程式語言中,添加重要的新功能通常涉及創建整個附加庫,這些庫一起使用時可能會也可能不會工作。 然而,在 Wolfram 語言中 語言本身已經內建了許多內容,可以透過簡單地添加立即整合到整個語言的整體結構中的新函數來顯著擴展其功能。

例如,Wolfram 函數儲存庫已包含 532 新功能 分為 26 個主題類別:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

同樣超過 6000個標準功能,內建於 Wolfram 語言中,儲存庫中的每個函數都有一個文件頁面,其中包含它們的詳細描述和工作示​​例:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

若要存取該頁面,請複製上述物件(函數 BLOB),將其貼上到輸入行中,然後運行該函數 - 它已內建於 Wolfram 語言中,並且預設支援從 版本 12.0:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

這裡要注意的是,處理時 標誌二維碼 例如,您不需要設定「影像處理庫」 - 因為我們已經在 Wolfram 語言中實作了一致且仔細的演算法方式 影像處理,可以立即被各種圖形語言函數處理:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

希望在大家的支持下 精彩而才華橫溢的社區,在過去的幾十年中一直在發展和擴展(基於 Wolfram 語言)。 Wolfram 函數儲存庫將在可預見的未來顯著擴展該語言中可用函數的範圍(可能具有潛在意義,專門針對科學技術的各個領域)。 因此,可以同時使用語言的內容(其內建函數)和 發展原則,它們是基於語言實現的。 (這裡應該指出的是,Wolfram 語言已經有超過 30年發展歷程,穩定成長).
儲存庫中的函數可能包含用 Wolfram 語言編寫的小段或大段程式碼。 例如,這些可能是調用 外部 API 和服務或其他語言的外部程式庫。 這種方法的獨特之處在於,當您深入到使用者層級功能時,不會出現潛在的不一致,因為該方法建立在 Wolfram 語言的一致結構之上 - 並且每個函數都會自動正確工作 - 完全一樣有意的。她應該的。
Wolfram 特徵儲存庫的 shell 和程式設計結構的設計是為了讓每個人都能以最簡單、最方便的方式為共同事業做出貢獻 - 事實上,只需 透過填寫記事本文字檔案(帶有 nb 副檔名)WL。 內建自動函數可讓您檢查新增至儲存庫的新函數,以確保它們整合到語言中。 我們公司押注於能夠將其功能整合到語言中的廣泛用戶,而不是新功能的巨大複雜性 - 儘管有審查過程,但我們並不堅持諸如此類的事情 精心設計分析 或對新使用者功能的完整性和可靠性的嚴格標準,而不是對我們使用的核心語言中內建的功能進行更嚴格的測試。

這種方法有很多權衡和細節,但我們的目標是優化 Wolfram 功能儲存庫,既提高使用者體驗,也確保新的使用者功能對語言的開發做出有意義的貢獻。 隨著我們的成長,我毫不懷疑我們將不得不發明新的方法來處理和驗證儲存庫中內建的函數,尤其是組織大量函數並找到使用者需要的函數。 但令人鼓舞的是,我們選擇的道路是一個好的開始。 我個人 增加了幾個功能 到原始資料庫。 其中許多都是基於我個人開發了相當長一段時間的程式碼。 我只花了幾分鐘就將它們推送到儲存庫。 現在它們已經在儲存庫中了,我終於可以立即、隨時根據需要使用這些函數,而不必擔心搜尋檔案、下載套件等。

提高效率的同時降低成本

甚至在網路出現之前,就有了分享 Wolfram 語言程式碼的方法(我們的第一個主要集中式專案是 數學來源,1991 年基於 CD-ROM 等為 Mathematica 創建)。 當然,提出的基於 Wolfram 函數儲存庫的實作方法是實現上述任務的更強大、更可靠的工具。

30 多年來,我們公司一直努力維護 Wolfram 語言結構的完整性,這對於確保 Wolfram 語言不僅成為一種程式語言,而且成為一種 成熟的計算語言。 因此,實現 Wolfram 函數儲存庫的方法的本質是使用統一的方法來編程和開發新函數,這些函數將按順序添加並適合該語言的框架,以便它能夠發展和共同進化。

每個函數的實作結構中都會發生各種計算過程。 這裡要注意的是,功能必須具有清晰、統一的外觀和使用者的視覺可讀性。 在這種情況下,Wolfram 語言的內建函數提供了超過 6000 個關於如何正確編程函數的連續範例(這些是我們的 現場節目視頻其中包括 創建標準程序的過程需要數百小時)。 這種方法最終使 Wolfram 特徵儲存庫能夠表現良好的是 Wolfram 語言的結構性質,以及該語言中已內建的大量附加和多樣化的庫。 例如,如果您有一個處理圖像的函數,或者 稀疏數組分子結構地理數據 或其他一些 - 它們一致的符號表示已經存在於語言中,因此,您的函數立即與語言中的其他函數相容。

創建一個實際上運作良好的儲存庫是一項有趣的元程式設計任務。 例如,程式中過多的限制將無法獲得演算法所需的統一性和通用性。 正如功能限制數量不足一樣,您將無法實現足夠正確的演算法執行順序。 先前我們公司實施的幾個實施這些方法折衷方案的範例運行得相當穩定 - 這些是: 鎢專案演示,於 2007 年推出,現在在線運行,有超過 12000 個用戶互動演示。 在 沃爾夫拉姆資料庫 有超過 600 個現成的資料庫可以在 Wolfram 語言中使用,並且 Wolfram 神經網路存儲 幾乎每週都會補充新的神經網路(現在已經有 118 個),並且它們透過函數立即連接 網路模型 在 Wolfram 語言。

所有上述範例都有一個基本特徵 - 專案中收集的物件和功能具有非常高的流程結構化和分佈程度。 當然,演示、神經網路或其他東西的結構細節可能會有很大差異,但任何目前儲存庫的基本結構始終保持不變。 那麼,親愛的用戶,您對創建這樣一個為 Wolfram 語言添加擴充功能的儲存庫有何看法? Wolfram 語言被設計得極其靈活,因此可以以任何方式擴展和修改。 這種情況對於使用 Wolfram 語言快速創建各種大型軟體專案的能力極為重要。 這裡要注意的是,隨著語言靈活性的提高,用這種語言實現的項目的成本必然會增加。 這是因為使用者使用這種語言越多,他獲得的專用功能就越多,但我們不應該忘記,這種方法也可能有負面影響,即無法確保程式模組的一致一致性。

傳統程式語言中的庫有一個常見問題 - 例如,如果您使用一個庫,程式碼將正常工作,但如果您嘗試使用多個庫,則無法保證它們能夠正確交互。 此外,在傳統的程式語言中(與成熟的計算語言不同),無法保證除基本結構之外的任何函數或資料類型存在一致的內建表示。 但事實上,問題比乍看之下還要嚴重:如果要建立大規模的垂直功能,那麼如果沒有我們投入 Wolfram 語言的集中式專案程式設計的巨大成本,就不可能實現一致性。 因此,所有軟體模組始終正確地協同工作非常重要。

因此,Wolfram 功能儲存庫背後的想法是透過更容易開發為連貫模組的各個功能,以相對較小的程式碼片段簡單地向語言添加擴展,從而避免上述問題。 話雖如此,有些程式設計功能無法透過單獨的函數來方便地實現(我們公司計劃在不久的將來發布優化的程式設計演算法,以幫助實現大規模軟體包)。 然而,基於 Wolfram 語言中已內建的函數,有許多基於單一函數實現的程式設計可能性。 這裡的想法是,用相對較少的程式設計工作就可以創建許多新的且非常有用的功能,這些功能將為設計提供足夠的一致性,它們將彼此很好地協調,而且除此之外,它們將來能夠在該語言中輕鬆且廣泛地使用。

當然,這種方法是一種妥協。 如果實現一個更大的包,可以想像一個全新的功能世界,它將非常強大且有用。 如果需要獲得與其他所有內容相適應的新功能,但您不願意花費大量精力來開發項目,那麼不幸的是,這可能會導致項目範圍縮小。 Wolfram 功能儲存庫背後的想法是為專案的定義部分提供功能;這種方法將添加強大的功能,同時更容易在程式設計專案中保持良好的一致性。

幫助將自訂函數新增至函數儲存庫

我們的團隊一直在努力讓使用者輕鬆為 Wolfram 儲存庫功能做出貢獻。 在桌面上(已經在 版本 12.0),您只需依序瀏覽主選單標籤:檔案 > 新建 > 儲存庫項目 > 函數儲存庫項,您將得到“定義筆記本「(在工作台內以程式設計方式。您也可以使用模擬功能 - 建立筆記本[“功能資源”]):

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

您需要執行兩個主要步驟:首先,實際寫下函數的程式碼,其次,寫下說明函數應如何運作的文件。
點擊頂部的“開啟範例”按鈕以查看您需要執行的操作的範例:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

本質上,您正在嘗試創建類似於 Wolfram 語言中的內建函數的東西。 只是它可以做比內建函數更具體的事情。 同時,對其完整性和可靠性的期望也會低得多。
您需要為您的函數指定一個遵循 Wolfram 語言的函數命名準則的名稱。 此外,您還需要為您的函數開發文檔,類似於該語言的內建函數。 稍後我將更詳細地討論這一點。 現在,請注意在定義筆記本文件頂部的按鈕行中有一個按鈕 “風格指南”,它解釋了要做什麼,還有一個工具按鈕,它提供了用於格式化函數文件的工具。
當您確定所有內容已正確填寫並且準備就緒後,請按一下「檢查」按鈕。 您還沒有弄清楚所有細節是完全正常的。 所以“檢查”功能會自動運行並進行大量的樣式和一致性檢查。 通常,它會立即提示您確認並接受更正(例如:“此行必須以冒號結尾”,並且會提示您輸入冒號)。 有時她會要求你自己添加或更改一些東西。 我們將持續在「檢查」按鈕的自動功能中新增功能,但基本上其目的是確保您提交到功能儲存庫的所有內容都已嚴格遵循盡可能多的樣式指南

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

因此,執行“檢查”後,您可以使用“預覽”。 「預覽」會建立您為函數定義的文件頁面的預覽。 您也可以為在您的電腦上建立的檔案或位於雲端儲存中的檔案建立預覽。 如果您由於某種原因對預覽中看到的內容不滿意,只需返回並進行必要的更正,然後再次按一下「預覽」按鈕即可。
現在您已準備好將函數推送到儲存庫中。 部署按鈕為您提供四個選項:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

此步驟中重要的事情是您可以將函數提交到 Wolfram 函數儲存庫,以便任何人都可以使用它。 同時,您也可以為有限數量的使用者放置您的功能。 例如,您可以建立託管在您的電腦本機的函數,以便在您使用該特定電腦時可用。 或者您可以將其發佈在您的 雲端帳戶,以便您在連接到雲端時可以使用它。 您也可以透過您的雲端帳戶公開託管(部署)該功能。 它不會位於中央 Wolfram 功能存儲庫中,但您可以向某人提供一個 URL,允許他們從您的帳戶獲取您的功能。 (將來,我們還將支援整個公司的中央儲存庫。)

假設您想要將函數實際提交到 Wolfram 函數知識庫。 為此,請點擊儲存庫的“提交”按鈕。 那麼現在發生了什麼事? 您的申請將立即排隊等待我們專門的策展人團隊的審核和批准。

當您的申請通過審批流程(通常需要幾天)時,您將收到有關其狀態的通訊以及可能對未來使用的建議。 但是,一旦您的功能獲得批准,它將立即發佈到 Wolfram 功能儲存庫,並可供任何人使用。 (這將出現在 新功能的新聞摘要 等等)

儲存中應該有什麼?

需要指出的是,我們公司對完整性、可靠性和整體品質有非常高的標準,在過去 6000 多年裡我們已經內建到 Wolfram 語言中的 30 多個功能中,全部滿足上述要求。 Wolfram 函數儲存庫的目標是使用 Wolfram 語言中已有的所有結構和功能,以便添加盡可能多的輕量級函數(即更高效能的函數)。

當然,Wolfram 函數儲存庫中的函數必須符合 Wolfram 語言的設計原則 - 以便它們能夠與其他函數充分互動以及使用者對函數應如何正常運作的期望。 然而,這些功能不必具有同等的完整性或可靠性。

在 Wolfram 語言的內建函數中,我們努力使程式設計函數盡可能通用。 話雖這麼說,當您在 Wolfram 函數儲存庫中時,其中包含一個僅處理一些非常具體但有用的情況的函數並沒有什麼問題。 例如,函數 從筆記本發送郵件 可以接收一種特定格式的文件並以特定方式建立郵件。 多邊形圖 建立僅具有某些顏色和標籤等的圖表。

與內建功能相關的另一點是,我們公司盡力處理所有非典型情況,正確處理錯誤的輸入等等。 在函數儲存庫中,有一個特殊函數處理解決問題的主要情況並忽略所有其他情況是完全正常的。

顯而易見的一點是,最好擁有做得更多、做得更好的函數,但是函數儲存庫的最佳化(與Wolfram 語言的內建函數相反)應該將更多函數與更多函數捆綁在一起,而不是深入研究各個具體功能的實現流程。

現在讓我們來看一個在儲存庫中測試函數的範例。 對此類函數的一致性期望自然遠低於內建語言函數。 在函數依賴 API 等外部資源的情況下尤其如此,持續進行一致的測試非常重要,這會在驗證演算法中自動發生。 在 nb 檔案中,您可以明確指定定義(在「附加資訊」部分中)並指定由輸入和輸出字串或類型的完整字元物件定義的盡可能多的測試 驗證測試,只要您認為合適。 此外,系統不斷嘗試將您提供的文件範例轉變為驗證過程(有時這可能非常消耗資源,例如,對於結果取決於隨機數或一天中的時間的函數)。

因此,函數存儲庫將具有許多實作複雜性。 有些只是一行程式碼,其他的可能涉及數千或數萬行,可能使用許多輔助函數。 什麼時候值得加入一個需要很少程式碼來定義的函數? 基本上,如果對於一個函數有 好記的名字,如果用戶在一段程式碼中看到它,就很容易理解,那麼它已經可以添加了。 否則,最好在每次需要使用程式碼時將程式碼重新附加到程式中。

函數儲存庫(顧名思義)的主要目的是向語言中引入新功能。 如果您想新增資料或 新實體, 使用 Wolfram 資料儲存庫。 但是如果您想為計算引入新類型的物件怎麼辦?

實際上有兩種方法。 您可能想要引入將在函數儲存庫中的新函數中使用的新物件類型。 在這種情況下,您始終可以寫下其符號表示形式,並在函數儲存庫中輸入或輸出函數時使用它。

但是,如果您想要表示一個對象,然後透過 Wolfram 語言中的現有函數定義您想要使用的對象,該怎麼辦? Wolfram 語言總是為此提供一個輕量級機制,稱為 升值。 有一些限制(特別是對於以下功能) 無法評估他們的論點),函數儲存庫允許您簡單地表示一個函數並為其定義值。 (在創建完全整合到整個 Wolfram 語言中的新主要設計時提高一致性期望通常是一個非常重要的過程,不能透過簡單地增加專案成本來實現,並且是我們公司作為專案一部分所做的事情對於語言的長期開發,此任務不是作為儲存庫開發的一部分設定的目標)。

那麼,函數儲存庫中的函數程式碼可能包含哪些內容呢? Wolfram 語言中內建的所有內容,當然(至少如果它不代表 危險的安全 以及程式本身(作為計算環境)的性能以及函數存儲庫中的任何函數。 但是,還有其他功能:函數儲存庫中的函數可以呼叫 API,或者 沃爾夫拉姆雲來自另一個來源。 當然,這也存在一些風險。 由於無法保證 API 不會更改,且函數儲存中的函數將停止運作。 為了幫助識別此類問題,文件頁面(在「要求」部分)上針對任何不僅僅依賴內建 Wolfram 語言功能的功能提供了註釋。 (當然,當涉及真實數據時,即使使用此功能也可能會出現問題 - 因為現實世界的數據不斷變化,有時甚至其定義和結構也會發生變化。)

Wolfram 功能儲存庫的所有程式碼都應該用 Wolfram 寫嗎? 當然,外部API內部的程式碼不應該用Wolfram語言寫,它甚至不構成語言程式碼。 事實上,如果您在幾乎任何外部語言或庫中找到一個函數,您可以建立一個包裝器,讓您在 Wolfram 函數儲存庫中使用它。 (通常您應該使用內建函數來實現此目的 外部評估外部函數 以 Wolfram 語言代碼表示。)

那麼這樣做有什麼意義呢? 從本質上講,這允許您使用整個整合的 Wolfram 語言系統及其整套統一的軟體功能。 如果您從外部庫或語言獲得基本實現,則可以使用 Wolfram 語言豐富的符號結構來創建方便的頂級函數,使用戶可以輕鬆使用已實現的任何功能. 至少,在加載庫等的所有構建塊都存在的理想世界中,這應該是可行的,在這種情況下,它們將由 Wolfram 語言自動處理。 (需要注意的是,實際應用中可能會出現問題 設定外部語言 特定的電腦系統和雲端儲存可能會帶來額外的安全問題)。

順便說一句,當您第一次查看典型的外部庫時,它們通常看起來太複雜,無法僅使用幾個函數來涵蓋,但在許多情況下,大部分複雜性來自於創建庫所需的基礎設施以及所有功能。支援一下。 然而,當使用 Wolfram 語言時,基礎設施通常已經內建到套件中,因此不需要詳細公開所有這些支援函數,而只需為庫中「最頂層」的應用程式特定函數建立函數。

知識庫的“生態系統”

如果您編寫了經常使用的函數,請將它們提交至 Wolfram 函數儲存庫! 如果沒有產生更多的東西(語言開發),那麼即使這樣,您使用這些功能供個人使用也會方便得多。 然而,可以合理地假設,如果您定期使用這些功能,也許其他用戶也會發現它們很有用。

當然,您可能會發現自己處於無法或不想共享您的功能或無法存取私人資訊資源的情況。 即使在這種情況下,您也可以簡單地將功能部署在您自己的雲端帳戶中, 明確權利 訪問他們。 (如果您的組織有 Wolfram 企業私有雲,那麼它將很快能夠託管自己的私有功能存儲庫,該存儲庫可以在您的組織內部進行管理,並設置是否強制第三方用戶查看視圖。)

您提交到 Wolfram 函數儲存庫的函數不必是完美的; 它們必須是有用的。 這有點像經典 Unix 文件中的“錯誤”部分 - 在“定義部分”中有一個“作者註釋”部分,您可以在其中描述您已經了解的函數的限制、問題等。 此外,當您將功能提交至儲存庫時,您可以新增提交註釋,這些註釋將由專門的策展人團隊閱讀。

一旦功能發布,其頁面底部總是有兩個連結:“發送有關此功能的訊息“和”在 Wolfram 社區中討論」 如果您要附加註釋(例如,告訴我有關錯誤的資訊),您可以選取表示您希望與功能作者共享您的訊息和聯絡資訊的方塊。

有時您只想使用 Wolfram 函數儲存庫中的函數,例如內建函數,而不查看其程式碼。 然而,如果你想看看裡面,頂部總是有一個記事本按鈕。 單擊它,您將獲得提交到功能存儲庫的原始定義筆記本的副本。 有時您可以將其用作您需要的範例。 同時,您也可以自行開發修改此功能。 您可能希望將這些從儲存庫中找到的函數發佈到您的電腦或您的 aphid 雲端儲存帳戶中,也許您希望將它們提交到函數知識庫,也許作為原始函數的改進、擴展版本。

將來,我們計劃支援 Git 風格的功能存儲庫分叉,但現在我們試圖保持簡單,並且我們始終只為語言中內建的每個功能提供一個可接受的版本。 通常情況下(除非開發人員放棄維護他們開發的功能並響應用戶提交),該功能的原始作者控制其更新並提交新版本,然後進行審核,如果他們通過了審核流程,以該語言出版。

讓我們考慮一下開發功能的「版本控制」如何運作的問題。 現在,當您使用函數儲存庫中的函數時,其定義將永久儲存在您的電腦上(如果您使用雲,則儲存在您的雲端帳戶中)。 如果某功能有新版本可用,下次使用時您將收到一則訊息通知您。 如果您想將該功能更新至新版本,可以使用以下命令來完成 資源更新。 (「函數 blob」實際上儲存了更多版本控制訊息,我們計劃將來讓使用者更容易存取這些資訊。)

Wolfram 函數儲存庫的優點之一是任何地方的任何 Wolfram 語言程式都可以使用其中的函數。 如果程式出現在記事本中,則通常可以方便地將儲存庫函數格式化為易於閱讀的「函數二進位物件」函數(可能具有適當的版本集)。

您始終可以使用文字存取函數儲存庫中的任何函數 資源函數[...]。 如果您直接為 Wolfram 引擎編寫程式碼或腳本,這會非常方便,例如, 使用 IDE 或文字程式碼編輯器 (特別要注意的是,函數庫完全相容 為開發者提供的免費 Wolfram 引擎).

它是如何工作的呢?

在 Wolfram 儲存庫的函數內部,可以使用完全相同的函數 資源系統 鹼基,如 我們所有其他現有的儲存庫 (資料存儲, 神經網路儲存庫, 演示項目集合 等等),像所有其他 Wolfram 系統資源一樣, 資源功能 最終基於功能 資源對象.

考慮 資源功能:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

裡面可以看到一些使用函數的信息 資訊:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

如何設定資源功能? 最簡單的就是純粹的本地案例。 下面是一個範例,它採用一個函數(在本例中只是一個純函數)並將其定義為給定程式會話的資源函數:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

定義完成後,就可以使用資源函數:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

請注意,該函數 blob 中有一個黑色圖標 Wolfram Function Repository:Wolfram 語言擴展的開放存取平台。 這意味著BLOB函數指的是為目前會話定義的記憶體資源函數。 永久儲存在您的電腦或雲端帳戶上的資源功能具有灰色圖標 Wolfram Function Repository:Wolfram 語言擴展的開放存取平台。 Wolfram 功能存儲庫中的官方資源功能有一個橙色圖標 Wolfram Function Repository:Wolfram 語言擴展的開放存取平台.

那麼當您使用定義筆記本中的展開選單時會發生什麼? 首先,它會取得記事本中的所有定義,並從中建立一個符號 資源對象)。 (如果您使用的是基於文字的 IDE 或程序,那麼您也可以明確地建立 資源對象)

使用以下命令從電腦上的儲存庫本機部署函數 本地緩存 將資源對象另存為 本地對象 在您的檔案系統上。 使用指令完成部署到雲端帳戶 雲端部署 對於資源對象,公有雲部署是 雲端發布。 在所有情況下 資源暫存器 也用來註冊資源函數名,所以 資源函數[“姓名”] 將工作。

如果按一下函數儲存庫的「提交」按鈕,其下方會發生什麼 資源提交 調用資源對象。 (如果你使用的是文字輸入介面,你也可以調用 資源提交 直接地。)

預設情況下,提交是用與您的 Wolfram ID 關聯的名稱進行的。 但如果您代表開發團隊或組織提交申請,您可以 設定單獨的發布者 ID 而是使用它作為與您的視圖互動的名稱。

將任何函數提交到函數知識庫後,它將排隊等待審核。 如果您收到回覆評論,它們通常採用文字檔案的形式,並添加了額外的「評論儲存格」。 您可以隨時造訪以下網站查看您的申請狀態 資源系統會員門戶。 但是,一旦您的功能獲得批准,您將收到通知(透過電子郵件),並且您的功能將發佈到 Wolfram 功能儲存庫。

工作中的一些微妙之處

乍一看,您似乎可以只需要一個定義筆記本並將其逐字放入函數存儲庫中,但是,實際上涉及很多微妙之處 - 處理它們需要進行一些相當複雜的元編程,處理符號處理作為定義函數的程式碼,以及記事本本身的定義。 其中大部分發生在內部、幕後,但如果您要為功能知識庫做出貢獻,它可能會產生一些值得理解的含義。

第一個直接的微妙之處:當您填寫定義筆記本時,您可以使用類似的名稱在任何地方簡單地引用您的函數 我的函數,它看起來像 Wolfram 語言中函數的常規名稱,但對於函數存儲庫文檔,它被替換 資源函數[“我的功能”] 是使用者在使用該功能時實際使用的內容。

第二個微妙之處:當您從定義筆記本建立資源函數時,必須擷取並明確包含函數定義中涉及的所有相依性。 然而,為了確保定義保持模組化,您需要將所有內容放在一個唯一的 名稱空間。 (當然, 完成這一切的函數,位於函數存儲庫中。)

通常,您永遠不會看到任何用於配置此命名空間的程式碼的痕跡。 但是,如果由於某種原因您在函數內呼叫了未執行的符號,那麼您將看到該符號位於函數的內部上下文中。 然而,在處理定義記事本時,至少函數本身對應的符號是 可調整以獲得最佳顯示效果 作為內部上下文中的功能性 BLOB 而不是原始字元。

函數存儲庫用於定義新函數。 並且這些功能可能有選項。 通常這些參數(例如, 選項圖片尺寸) 將能夠用於內建函數,以及那些已經存在內建符號的函數。 但有時新功能可能需要新選項。 為了保持模組化,這些參數需要是在唯一的內部上下文中定義的符號(或類似整個資源函數,即它們本身)。 為簡單起見,函數儲存庫可讓您在字串定義中定義新選項。 為了方便用戶,這些定義(假設他們使用 選擇權價值 и 選項模式) 也經過處理,以便在使用函數時,參數不僅可以指定為字串,還可以指定為同名的全域符號。

大多數函數只是在每次呼叫時執行它們應該執行的操作,但有些函數需要在特定會話中運行之前進行初始化 - 為了解決這個問題,定義部分中有一個「初始化」部分。

儲存庫中的函數可以使用儲存庫中已有的其他函數;為了為包含兩個(或更多)相互引用的函數的函數儲存庫設定定義,您必須將它們部署在程式會話中,以便您可以像他們一樣參考 資源函數[“姓名”],然後您可以創建所需的這些函數的組合、示例(我不明白),並根據先前發布的函數將新函數添加到儲存庫中。 (或已經或以前——這兩個字都很笨拙)

發展前景。 當儲存庫變得非常大時會發生什麼?

今天我們剛推出 Wolfram 特徵儲存庫,但隨著時間的推移,我們預計它的大小和功能可能會急劇增加,並且隨著它的發展不斷增長,我們已經預計可能會出現各種問題。

第一個問題涉及函數名稱及其唯一性。 函數儲存庫的設計方式與 Wolfram 語言中的內建函數一樣,您只需指定函數名稱即可引用任何給定函數。 但這不可避免地意味著函數名稱在整個儲存庫中必須是全域唯一的,因此,例如,只能有一個 資源函數[“我最喜歡的功能”].

乍一看,這似乎是一個大問題,但值得注意的是,這基本上與互聯網域或社交媒體句柄等問題相同。 事實上,系統只需要一個註冊器 - 這是我們公司將為 Wolfram 函數知識庫扮演的角色之一。 (對於儲存庫的私人版本,其註冊商可能是管理員。)當然,可以在沒有任何內容的情況下註冊Internet 網域,但在函數儲存庫中,只有在存在實際定義的情況下才能註冊函數名稱。功能。

我們在管理 Wolfram 函數知識庫方面的部分職責是確保為函數選擇的名稱在給定函數定義的情況下是合乎邏輯的,並且它遵循 Wolfram 語言命名約定。 我們在 Wolfram 語言中命名內建函數方面擁有 30 多年的經驗,我們的管理者團隊也將把這些經驗帶到函數儲存庫中。 當然,總有例外。 例如,對某些函數使用簡短的名稱似乎更可取,但最好使用更長、更具體的名稱來“捍衛”,因為您將來不太可能遇到想要創建類似函數名稱的人。

(這裡應該注意的是,簡單地添加一些成員標籤來消除函數歧義不會達到預期的效果。因為除非您堅持始終分配標籤,否則您將需要為任何給定函數定義預設標籤,並指派作者標籤,這又需要全球協調。)

隨著 Wolfram 函數知識庫的增長,可能出現的問題之一是函數的可發現性,系統為此提供了 搜索功能 (定義檔可能包括關鍵字等)。 對於 Wolfram 語言中的內建函數,文件中有各種交叉引用來幫助「宣傳」這些函數。 函數存儲庫中的函數可以引用內建函數。 但反過來呢? 為此,我們將嘗試不同的設計,以在內建函數的文件頁面中公開儲存庫函數。

對於 Wolfram 語言中的內建函數,有一個所謂的檢測層,由 「幫助頁面」網絡,它提供與特定領域相關的功能的有組織的清單。 正確平衡手冊頁總是很困難,隨著 Wolfram 語言的發展,手冊頁通常需要完全重新組織。 將儲存庫中的函數分為廣泛的類別,甚至一致地分解這些類別非常容易,但擁有正確組織的語言參考頁面更有價值。 目前尚不清楚如何最好地為整個函數知識庫創建它們。 例如, 建立資源物件庫 在功能儲存庫中,任何人都可以發布包含他們從儲存庫中「選擇」的網頁:

Wolfram Function Repository:Wolfram 語言擴展的開放存取平台

Wolfram 函數儲存庫被配置為持久性函數儲存庫,其中的任何函數都將始終有效。 當然,新版本的功能可能會可用,我們預計某些功能當然會隨著時間的推移而過時。 如果這些函數在程式中使用,它們可以工作,但它們的文件頁面將連結到新的、更高級的函數。

Wolfram 功能儲存庫旨在協助您快速發現新功能並學習使用 Wolfram 語言的新方法。 我們非常樂觀地認為,功能性儲存庫中探索的一些內容最終將成為核心 Wolfram 語言的內建部分。 在過去的十年裡,我們有過類似的系列 最初在 Wolfram 中引入的功能 | Α。 從這次經驗中學到的教訓之一是,要達到我們在 Wolfram 語言內建的所有內容中所關注的品質和一致性標準,需要做大量的工作,這通常比最初實現想法的努力更加困難。 即便如此,函數知識庫中的函數可以作為未來函數的非常有用的概念證明,該函數最終可能會建構到 Wolfram 語言中。

這裡最重要的是,函數儲存庫中的函數現在可供每個使用者使用。 原生語言功能可能會更好、效能更高,但功能儲存庫將允許使用者立即存取所有新功能。 而且,最重要的是,這個概念允許每個人添加他們想要的任何新功能。

在Wolfram 語言歷史的早期,這個想法不會像現在這樣有效,但在現階段,人們在該語言上投入瞭如此多的努力,並且對語言設計原理有瞭如此深刻的理解,以至於現在看來非常有效。大型用戶社群可以添加保持設計一致性的功能,使其對廣泛的用戶有用。

Wolfram 語言使用者社群中有一種令人難以置信的人才精神(?)。 (當然,這個社區包括許多各個領域的領先研發人員。)我希望 Wolfram Feature Repository 能夠為釋放和傳播這種人才精神提供一個有效的平台。 只有共同努力,我們才能創造出能夠顯著擴展 Wolfram 語言計算範式的應用領域的東西。

30 多年來,我們在 Wolfram 語言方面取得了長足的進步。 現在,讓我們一起走得更遠。 我強烈鼓勵世界各地所有受人尊敬的 Wolfram 語言使用者使用函數儲存庫作為平台,以及新的軟體項目,例如面向開發人員的免費 Wolfram 引擎。

來源: www.habr.com

添加評論