為什么 Wolfram 語言是(類似于)開源的六個(gè)原因數(shù)年前,我曾寫過一篇文章,闡述為什么我認(rèn)為開源不適合 Wolfram 核心技術(shù)的商業(yè)模式(Wolfram 技術(shù)不開源的十二個(gè)原因)。也引發(fā)了一些關(guān)于不同模式優(yōu)點(diǎn)的(大多是理性的)討論。 受這些討論的影響,我意識(shí)到,盡管 Wolfram 不是開源,但大多數(shù)開源軟件實(shí)際使用中的優(yōu)點(diǎn)在 Wolfram 技術(shù)中也很明顯。所以,如果你不介意這個(gè)有點(diǎn)標(biāo)題黨的標(biāo)題,我想分六點(diǎn)闡述一下: 1. 可以免費(fèi)使用; 2.可以查看源代碼 3.可以對(duì)代碼進(jìn)行修改 4.你可以做出自己的貢獻(xiàn) 5.有技術(shù)支持的社區(qū) 6.我們一直積極開發(fā)各類功能 01你可以免費(fèi)使用 由于我們的中心商業(yè)模式是做優(yōu)秀的軟件并出售其使用許可,所以當(dāng)我說到有幾種方法可以免費(fèi)使用 Wolfram 語言你一定會(huì)感覺有點(diǎn)驚訝。當(dāng)然, Wolfram|Alpha 是免費(fèi)的,但我說的是完整的 Wolfram 語言。最簡(jiǎn)單的方法是創(chuàng)建一個(gè)免費(fèi)的 Wolfram 云賬戶。這樣你可以免費(fèi)通過瀏覽器或 API 使用完整的語言功能。確實(shí),你會(huì)有 CPU 時(shí)間和存儲(chǔ)的時(shí)間限制,因?yàn)槟闶褂玫氖敲赓M(fèi)賬戶而這些功能對(duì)我們而言都有成本,如果想要升級(jí)這些功能你可以選擇付費(fèi)。 想要本地使用?試試看 Raspberry Pi 版本。完整的 Wolfram 語言可以免費(fèi)在這個(gè)五刀的電腦上使用,不過會(huì)有一些商業(yè)使用限制。想在個(gè)人電腦上使用的話,在 macOS、Windows 或 Linux 操作系統(tǒng)上有 Wolfram 引擎。你可以在項(xiàng)目開發(fā)階段免費(fèi)使用這個(gè)工具;還有 Wolfram 播放器,只可以免費(fèi)用于運(yùn)行代碼,不可以編寫新代碼。 所以,雖然開源軟件不是“免費(fèi)做所有事”,但依然可以做很多事。 最重要的是,大家必須記住,由于很多人所在機(jī)構(gòu)的支持,他們才可以免費(fèi)使用技術(shù)棧的全部功能。很多優(yōu)秀的大學(xué)擁有站點(diǎn)許可證,所以這些大學(xué)的學(xué)生和教職工才可以在個(gè)人不交任何費(fèi)用的情況下免費(fèi)使用這些技術(shù)。我們甚至有國家級(jí)別許可使用——如果你是埃及境內(nèi)的學(xué)生、教師或?qū)W術(shù)研究者,你可以免費(fèi)使用 Mathematica——這就有 4000 萬的人口了。你可能會(huì)說,“這并不是免費(fèi)的,還是有人在付錢”。但開源不就是這樣嗎?到目前為止,Jupyter 和相關(guān)項(xiàng)目已經(jīng)花費(fèi)了數(shù)以百萬美元的費(fèi)用,只想簡(jiǎn)化 Mathematica 的筆記本,很煩惱的是,這些資金一部分就來源于我的個(gè)人納稅! 02可以查看源代碼 Wolfram 技術(shù)棧的很大一部分且越來越多的內(nèi)容都是用 Wolfram 語言編寫的,所有這些的源代碼都是可以查看的。只要關(guān)閉 ReadProtected 屬性并請(qǐng)求定義即可。從 Mathematica 第一版開始就可以使用這個(gè)功能了,但是有些時(shí)候,還有一個(gè)沒有記錄但是大家心知肚明的內(nèi)部函數(shù)讓你可以僅用鼠標(biāo)指向點(diǎn)擊的方式就可以瀏覽定義。這個(gè)函數(shù)現(xiàn)在記錄在Wolfram函數(shù)資源庫中了,用法是 ResourceFunction["PrintDefinitions"]。 比如,這就是 ResourceFunction["PrintDefinitions"][URLRead] 的結(jié)果: 點(diǎn)擊代碼中的函數(shù)可以查看其定義。以前用C語言編寫的函數(shù)或核心函數(shù)不能用這種方法查看,但當(dāng)然,一部分上述函數(shù)可以調(diào)用真實(shí)的開源資源庫比如 MXNet、MKL、GMP 和 ImageJ,這些資源都可以在其他地方進(jìn)行查看。 03可以對(duì)代碼進(jìn)行修改 Wolfram 語言中的任何公共或內(nèi)部函數(shù)都可以被替換。查找源代碼、編輯并運(yùn)行就可以替換內(nèi)置規(guī)則。不僅如此,Wolfram 語言的基礎(chǔ)設(shè)計(jì)加上其對(duì)操作符過載的普遍支持,甚至可以讓你在不需要查看源代碼的情況下修改或增強(qiáng)任意功能。 比如,假設(shè)我認(rèn)為我對(duì)值較小的實(shí)數(shù)的 Sin 有更好的執(zhí)行方法,但我并不想替換值較大的實(shí)數(shù)、復(fù)數(shù)和符號(hào)參數(shù)的內(nèi)置行為,那么我可以這么做: 你可以看到我是如何在不影響其他行為的情況下進(jìn)行我的新操作的。這比編輯源代碼要簡(jiǎn)單多了: 04你可以做出自己的貢獻(xiàn) 我之前在開源那篇文章中也說過,我們的核心語言不依賴于用戶的貢獻(xiàn),盡管我們喜歡詳細(xì)描述的錯(cuò)誤報(bào)告。但是在 Wolfram 語言的生態(tài)系統(tǒng)中用戶有很多其他方法做出自己的貢獻(xiàn)。截止這篇博文的時(shí)間,在之前提到的 Wolfram 函數(shù)資源庫中,已經(jīng)增加了超過 2000 條來自用戶和 Wolfram 程序員貢獻(xiàn)的函數(shù)。這些新函數(shù)都像已經(jīng)內(nèi)置一樣立即可以使用(但是實(shí)際上是自動(dòng)下載并在第一次使用的時(shí)候進(jìn)行安裝的),也都帶有源代碼。 比如,下面這個(gè)就是我貢獻(xiàn)的用來創(chuàng)建有內(nèi)嵌地圖的地理表面繪圖的函數(shù): |