International Essays

全新功能無處不在:推出 Wolfram 語言 & Mathematica 14.3 版

2025年8月5日

這是一個重大版本發佈

14.2 版於 2025 年 1 月 23 日發佈 ​現在,今天距離上次的發佈剛過六個多月,我們推出第 14.3 版。儘管這個 .x 版本號看似微小,但這是一個重大的發佈,包含許多重要的新功能和更新,特別是在系統的核心領域。
我特別高興能夠報告在此版本中,我們提供了異常大量,長期以來備受期待的功能。為什麼它們沒有更早出現?嗯,因為要達到我們的標準,開發過程確實困難。但現在這些功能已經準備好讓大家使用了。
一直在關注我們軟體設計評論直播(自從 14.2 版本來已纍積 42 小時)的朋友,或許可以感受到我們為了設計到最好所投入的努力。事實上,近四十年來,從開始開發 1.0 版本,我們一直持續付出這樣的心力。我認為這樣的成果在軟體界是獨一無二的。一個徹底一致,37 年來一直維持相容性且連貫的系統。
現在這是一個非常龐大的系統,甚至連我有時也會忘記它能做的一些令人驚嘆的事情。目前經常幫助我的是去年底推出的 Notebook Assistant。如果我想弄清楚怎麼做某件事,只需要將想要做的模糊描述輸入到 Notebook Assistant。Notebook Assistant 在「明確化」問題的表現非常出色,也同時產生相關的片段 Wolfram 語言程式碼。
通常我描述的太模糊,使得產生的程式碼無法完全符合我的需求。不過這些程式碼幾乎總是能讓我找到正確的方向,稍作修改後就能成為我所需要的。
這是一個非常好的工作流程,結合最新的 AI 與 Wolfram 語言的獨特性質才得以實現。我提出模糊的問題,Notebook Assistant 給我精確的程式碼。但關鍵是這些程式碼並非一般的程式設計語言程式碼,而是 Wolfram 語言的計算語言程式碼。這是特別設計給人類閱讀的程式碼,並以盡可能高的層次,用計算的方式表達這個世界。AI 將會以 AI 所採用的啟發式方式來運作.但當你選出你想要的 Wolfram 語言程式碼時,你得到的是一個精確、可以繼續建構和信賴的基礎。
Wolfram 語言的設計一致性在許多方面都極為重要,著實令人驚嘆。正是這種一致性,讓語言的不同層面能夠順暢地互相配合。這也讓學習語言的新領域變得容易。如今,這個特質也讓 AI 能夠像人類一樣,輕鬆地把這門語言當作工具來使用。
Wolfram 語言在設計上如此一致,並且內建了如此豐富的功能,這還帶來了另一個結果:就是很容易擴充。在過去六年中,已有相當驚人的三千兩百多個附加函數發佈在 Wolfram 函數儲存庫。而且,是的,這些函數中可能有不少最終會發展成完整的內建函數,儘管有時可能需要十年或更長的時間。但現在 Notebook Assistant 已經了解這些函數目前的形式—並可以自動展示在你操作時可能適用的位置。
好的,但讓我們回到 14.3 版本。這裏有很多內容值得討論……

黑色來臨:推出深色模式

我從 1976 年開始使用有螢幕的電腦。那時侯的螢幕都是黑色的,上面顯示的文字是白色的。當「工作站」電腦在 1982 年出現時,情況顛倒了,我開始使用看起來更像印刷頁面的顯示器,黑色文字搭配白色背景。這樣的顯示方式持續了好幾十年。然後,大約五年多前,「深色模式」開始流行—人們又回到 1970 年代的顯示器風格,當然現在是全彩、高解析度等等。我們在筆記本中早已提供「深色模式樣式」。但現在的 14.3 版本,我們全面支援深色模式。如果你把系統設為深色模式,那麽 14.3 版本的所有筆記本預設值都會自動以深色模式顯示:
你可能會想:設定深色模式不是很簡單嗎?不就是把背景換成黑色,文字換成白色嗎?其實,這還有非常多的細節。最終是一個相當複雜的使用者介面以及演算法上的挑戰,我認為我們已經在 14.3 版中很好地解決了。
這裏有一個基本問題:當你切換到深色模式時,圖形應該發生什麼變化?你會希望坐標軸變成白色,但是曲線保持原本的顏色(否則,如果有文字根據顏色來引用曲線,會發生什麼?)。而這正是 14.3 版本中所做的:
In[]:=
Plot[{Sin[x],Cos[x],Tan[x]},{x,0,10}]
In[]:=
Plot[{Sin[x],Cos[x],Tan[x]},{x,0,10}]
不需要說,其中一個棘手的問題是必需選擇曲線的顏色,可以在淺色和深色模式下都好看。而事實上在14.2 版本中,當我們「美化」圖形的預設顏色時,部分原因就是為了提前因應深色模式的需求。
在 14.3 版(我們將在下文中討論)裏,我們持續改進圖形顔色,涵蓋許多複雜的情況,並且始終確保同時支援深色與淺色模式:
In[]:=
ArrayPlot3D[Total[CellularAutomaton[<|"Dimension"3,"GrowthCases"{1,2,3}|>,{{{{1}}},0},15]]]
In[]:=
ArrayPlot3D[Total[CellularAutomaton[<|"Dimension"3,"GrowthCases"{1,2,3}|>,{{{{1}}},0},15]]]
但是由計算產生的圖形並不是唯一會受到深色模式影響的事物。例如,還有無數的使用者介面元素也都必需調整,以便在深色模式下看起來同樣美觀。總體而言,有成千上萬種的顏色受到影響,都需要以一致且美觀的方式來處理。為達到此目標,我們最終發明了一整套方法和演算法(將來我們會以資料包的形式對外界提供)。
舉例來說,這樣的結果就是像筆記本這類的東西,基本上可以自動被設定為適用於深色模式:
但在底層發生了什麼?可想而知,這涉及到符號表示。通常在指定顏色時會像這樣:
RGBColor
[1,0,0]
。但在 14.3 版中,你也可以改用這樣的符號表示:
In[]:=
LightDarkSwitched[Red,LightBlue]
在淺色模式下,這將顯示為紅色;在深色模式下,則為粉紅色:
In[]:=
Style["Text",25,LightDarkSwitched[Red,Pink]]
In[]:=
Style["Text",25,LightDarkSwitched[Red,Pink]]
如果在
LightDarkSwitched
中只有一個顏色,那麽自動演算法就會被使用,此時在深色模式下會產生偏粉紅的顏色:
In[]:=
Style["Text",25,LightDarkSwitched[Red]]
In[]:=
Style["Text",25,LightDarkSwitched[Red]]
這會指定深色模式的顏色,並自動推斷出合適對應的淺色模式顏色:
In[]:=
Style["Text",25,LightDarkSwitched[Automatic,Yellow]]
In[]:=
Style["Text",25,LightDarkSwitched[Automatic,Yellow]]
但是如果你不想在每個使用的顏色都明確地插入 LightDarkSwitched 呢?(例如你已經有一個包含各種顏色的大型程式碼庫。)那麼你可以使用新的樣式選項
LightDarkAutoColorRules
來更全面地指定要如何切換顏色。例如,這個選項只有對「指定的顏色」(這裡只有
Blue
)自動進行明暗模式切換,不會對其他顏色(例如
Red
)這樣做: