查看所有发布公告»

故事继续:宣布Wolfram Language and Mathematica第14版

第14.0版Wolfram语言数学软件可立即在桌面和云中使用。另请参阅有关版本13.1,版本13.213.3版.

建设一个越来越伟大的东西……35年并不断计算

今天,随着14.0版本的发布,我们庆祝了近四十年来我们旅程中的一个新的航路点Wolfram语言数学软件.自我们发布以来的两年版本13.0我们每六个月就在.1版本中稳步交付我们的研究和开发成果。今天,我们将这些以及更多内容聚合到14.0版中。

它是已经超过35年了自从我们释放后版本1.0这些年来,我们一直在继续建设一座越来越高的能力之塔,逐步扩大我们的视野范围和我们对世界的计算覆盖范围:

内置功能的数量

1.0版有554个内置功能;在版本14.0中,有6602个。每一个功能背后都有一个故事。有时,这是一个关于创建一个超级算法的故事,它封装了几十年的算法开发。有时,这是一个精心策划数据的故事,而这些数据以前从未被汇编过。有时,这是一个深入研究某些事物本质的故事,以发明新方法和新功能来捕获它。

从所有这些片段中,我们一直在稳步构建连贯的整体,即今天的Wolfram语言。在知识史的弧线中,它定义了一个广泛的、新的、计算的范式,用于将世界形式化。在实践层面上,它为实现计算思维提供了一个超级能力,并为所有领域X提供了“计算X”。

对我们来说,看到过去三十年来我们所建造的一切都取得了什么成就,我们深感满意。这么多发现,这么多发明,这么多成就,这么多学问。看到这一点,有助于推动我们努力解决更多问题,继续推动我们研发的每一个领域,并在我们的系统的新版本中交付成果。

我们的研发组合广泛。从构思几个月内完成的项目,到依赖多年(有时甚至几十年)系统开发的项目。我们所做的每件事的关键是利用我们已经做过的事情——通常是利用早年技术成就的顶峰,现在将其作为常规构建块,以达到以前几乎无法想象的水平。除了实用技术之外,我们还在不断地进一步利用我们这些年来一直在构建的庞大概念框架,并逐步将其封装在Wolfram语言的设计中。

这些年来,我们一直在努力工作,不仅是为了创造创意和技术,还为了打造一个实用和可持续的生态系统,在这个生态系统中,我们可以在现在和未来的长期内系统地做到这一点。我们继续在这些领域进行创新,通过新的不同渠道,以新的和不同的方式扩大我们所构建的产品的交付范围。在过去的五年里,我们也能够向世界开放我们的核心设计流程-定期直播我们以一种独特的开放方式在做什么。

事实上,在过去几年里,我们今天在14.0版中提供的所有内容的种子都已公开地与世界分享,这不仅代表着我们内部团队的成就,也代表着许多参与并评论过的人的成就我们的直播.

版本14.0的部分内容是继续扩展我们的领域计算语言以及我们对世界的计算形式化。但版本14.0还涉及精简和完善我们已经定义的功能。在整个系统中,我们使一些东西变得更高效、更健壮、更方便。是的,在复杂的软件中,各种各样的错误在理论上和实践上都是不可避免的。在14.0版中,我们修复了近10000个错误,其中大多数是通过我们日益复杂的内部软件测试方法发现的。

现在我们需要告诉世界

即使在过去几十年里我们在Wolfram语言中投入了大量的工作,仍然有另一个挑战:如何让人们知道Wolfram的功能当我们发布1.0版时我能写一个可管理大小的书这可以很好地解释整个系统。但对于14.0版,只要包含一个功能,就需要一个可能有20万页的书.

在这一点上,没有人(甚至我!)立即知道Wolfram语言所做的一切。当然,我们最大的成就之一就是在所有这些功能中保持了紧密一致的设计,最终只有一小部分基本原则需要学习。但是,在当今Wolfram语言的巨大规模上,了解什么是可能的,以及现在可以用计算术语表述什么,不可避免地非常具有挑战性。通常,当我向人们展示什么是可能的时,我会得到回应“我不知道Wolfram语言能做什么那个!”

因此,在过去的几年里,我们越来越重视建立大规模的机制来向人们解释Wolfram语言。它从一个非常精细的级别开始,提供“即时信息”,例如,通过您键入时提出的建议。然后,对于每个函数(或语言中的其他构造),都有页面解释函数,并提供了大量示例。现在,我们越来越多地添加“即时学习材料”,利用函数的具体性,对函数所做的更广泛的上下文提供自包含的解释。

顺便说一句,在现代,我们不仅需要向人类解释Wolfram语言,还需要向人工智能解释,我们非常广泛的文档和示例证明,在培训LLM使用Wolfram语方面非常有价值。对于人工智能,我们提供各种工具-像立即可计算的文档访问和可计算错误处理。使用我们的聊天笔记本技术,还可以通过语言(或视觉等)输入创建Wolfram语言代码。

但沃尔夫拉姆语言的整体情况如何呢?对于人和人工智能来说,能够在更高的层次上解释事情是很重要的,我们已经在这个方向上做了越来越多的工作。30多年来,我们指南页“总结特定领域的特定功能。现在我们添加“核心区页面“这为大范围的功能提供了一个更广阔的图景,每个功能实际上都涵盖了一个完整的产品,如果它不只是Wolfram语言的一个集成部分的话:

核心区域页面

但我们要走得更远整个课程提供现代动手Wolfram-Language入门介绍广泛领域。我们现在已经以一种新的、非常有效的“计算”方式涵盖了许多标准大学课程(以及相当多其他课程)的材料,这使得我们能够立即、实际地接触到以下概念:

Wolfram U课程

所有这些课程不仅包括讲座和笔记本,还包括自动分级练习,以及官方认证我们有一个定期的日历,上面记录了每个人在同一时间聚在一起的老师带领的同龄人研究小组关于这些课程。是的,我们的沃尔夫拉姆Uoperation现在正在成为一个重要的教育实体,在任何时候都有数千名学生。

除了整个课程,我们还有“迷你系列”讲座关于特定主题:

迷你系列视频讲座

我们也有课程-还有关于Wolfram语言本身的书,比如我的Wolfram语言简介今年第三版(有相关课程、在线版本等):

Wolfram语言简介

在另一个方向上,我们扩展了沃尔夫拉姆暑期学校添加沃尔夫拉姆冬季学校,我们大大扩展了我们的Wolfram高中暑期研究项目,添加全年计划,中学课程等-包括新的“计算冒险“每周活动计划。

然后是直播。我们一直在与我们的开发团队(有时还包括外部来宾)每周进行“研发直播”。我自己也做了很多直播(仅2023年就有232个小时),其中一些Wolfram语言功能的设计审查,还有一些回答技术和其他问题.

关于Wolfram语言的词汇,我们可以通过以下方式进行传播Wolfram社区,这是充满了有趣的贡献,并有越来越多的读者。有这样的网站Wolfram挑战.这是我们的Wolfram技术会议。还有更多。

过去四十年来,我们为构建整个Wolfram技术堆栈付出了巨大的努力。即使我们继续积极构建它,我们也正在投入越来越多的努力,告诉世界它的内容,并帮助人们(和人工智能)最有效地利用它。但从某种意义上说,我们所做的一切只是Wolfram Language广大用户社区正在做的和可以做的事情的种子。将Wolfram语言的力量传播到越来越多的人和地区。

LLM着陆

机器学习超功能分类预测2014年首次出现在Wolfram Language上(版本10). 到了第二年,开始有这样的功能图像标识语言识别在几年内,我们引入了整个神经网络框架神经网络存储库其中包括用于语言建模的各种神经网络,它允许我们构建以下功能语音识别和实验版本的查找文本答案但和其他人一样,我们在2022年底对ChatGPT及其卓越的能力感到惊讶。

很快,我们意识到一个重要的新用例和市场已经到来Wolfram|Alpha公司和Wolfram语言。目前,不仅是人类需要我们制造的工具;这也是人工智能。到2023年3月,我们与OpenAI合作,使用我们的Wolfram云要交付的技术ChatGPT插件它可以调用Wolfram | Alpha和Wolfram Language。像ChatGPT这样的LLM在再现人类语言、基本人类思维和一般常识方面提供了显著的新能力。但就像独立的人类一样,他们不是为了处理详细的计算或精确的知识而建立的。为此,像人类一样,他们必须使用形式主义和工具。值得注意的是,我们在Wolfram Language(和Wolfram | Alpha)中构建的形式主义和工具基本上非常适合他们的需要。

我们创建了Wolfram语言,以提供从人类思考到计算可以表达和实现的桥梁。现在这也是人工智能可以使用的。Wolfram语言不仅为人类提供了一种“计算思考”的媒介,也为人工智能提供了这样的媒介。我们一直在稳步进行工程设计,让人工智能尽可能轻松地调用Wolfram语。

但除了LLM使用Wolfram语言之外,现在Wolfram语言也有可能使用LLM。我们已经在2023年6月发布了(13.3版)基于LLM的功能的主要集合沃尔夫拉姆语。一类是LLM函数,它有效地将LLM用作Wolfram语言中操作的“内部算法”:

在典型的Wolfram语言方式中,我们有LLM的符号表示:LLM配置[]代表一个具有各种参数、提示等的LLM。在过去的几个月里,我们一直在稳步地向所有流行的LLM添加连接,使Wolfram Language成为一个独特的中心,不仅用于LLM的使用,而且用于研究LLM的性能和科学。

您可以用Wolfram语言定义自己的LLM函数。但也有Wolfram提示库它在LLM功能中扮演着与Wolfram函数库用于普通Wolfram语言函数。有一个公共提示库,到目前为止已经有数百个精心策划的提示。但任何人都可以在Wolfram Cloud中发布他们的提示,并使其公开(或私下)访问。提示可以定义角色(“像[老套的]海盗一样说话”). 它们可以定义面向AI的功能(“用表情符号写”). 他们可以定义影响输出形式的修饰符(“俳句风格”).

Wolfram提示库

除了在Wolfram Language中“以编程方式”调用LLM之外,还有一个新概念(首次在13.3版中引入)“聊天笔记本”. 聊天笔记本代表了一种新的用户界面,它结合了传统的图形、计算和文档功能Wolfram笔记本LLM为我们带来了新的语言界面功能。

聊天笔记本的基本思想在13.3版中引入,现在在14.0版中扩展,即您可以拥有“聊天单元”(通过键入)其内容不会发送到Wolfram内核,而是发送到LLM:

写一首关于月亮上的鳄鱼的俳句

您可以使用“功能提示“-在聊天笔记本中直接从Wolfram Prompt Repository说:

一只猫吃了我的午餐

从14.0版开始,您还可以将Wolfram语言计算直接编织到与LLM的“对话”中:

用RandomWord制作俳句

(您键入\插入Wolfram语言,非常类似于您可以使用的方式<**>将Wolfram Language插入外部评估单元。)

聊天笔记本的一点是,顾名思义,它们实际上是以“聊天”为中心,并与LLM进行顺序交互。在普通笔记本中,在笔记本中的什么位置请求每个Wolfram语言评估并不重要;所有相关的是Wolfram内核进行计算的顺序。但在聊天笔记本中,“LLM评估”始终是笔记本中明确列出的“聊天”的一部分。

聊天笔记本的一个关键部分是聊天块:类型~笔记本中有一个分隔符,可以“开始新聊天”:

我叫斯蒂芬

聊天笔记本—具有所有典型的Wolfram笔记本编辑、结构化、自动化等功能—与“LLM接口”一样功能强大。但还有另一个维度,LLM能够调用Wolfram语言作为工具。

在一个层面上,聊天笔记本为使用Wolfram语言提供了一个“入口匝道”。Wolfram | Alpha,甚至更多,Wolfram|Alpha笔记本版-让你用自然语言提问,然后把问题翻译成Wolfram语言,并计算出答案。但在聊天笔记本中,您可以超越询问特定问题。相反,通过LLM,您可以“开始聊天”您想做什么,然后生成并执行Wolfram语言代码:

你如何制作一个有5个裂片的玫瑰花结?

工作流程通常如下。首先,你必须用计算术语来概念化你想要的东西。(是的,这一步需要计算思维,这是一项非常重要的技能,迄今为止很少有人学习过。)然后你告诉LLM你想要什么,它会尝试编写Wolfram语言代码来实现它。它通常会为你运行代码(但你也可以总是自己做)-你可以看看你是否得到了你想要的。但至关重要的是,Wolfram语言不仅要被计算机读取,还要被人类读取。尤其是因为LLM实际上似乎能够编写出相当好的Wolfram语言代码,所以您可以阅读他们编写的代码,看看是否是您想要的。如果是这样的话,您可以使用该代码,并将其用作您可能要设置的任何较大系统的“坚实的构建块”。否则,您可以自己修复它,也可以尝试与LLM聊天来完成它。

我们在上面的例子中看到的一件事是聊天笔记本中的LLM在这里对Wolfram语言评估器进行了“工具调用”。在Wolfram语言中,现在有一个为LLM定义工具的完整机制,每个工具都由LLM工具符号对象。在版本14.0中,有一个新的实验版本Wolfram LLM工具库使用一些预定义的工具:

Wolfram LLM工具库

在默认的聊天笔记本中,LLM可以访问一些默认工具,其中不仅包括Wolfram语言评估器,但也有类似的事情Wolfram文档搜索Wolfram|Alpha查询而且经常会看到LLM反复尝试编写“有效的代码”,例如有时不得不“求助”(就像人类一样)阅读文档。

14.0版本中的新功能是对多模式LLM的实验访问,该LLM可以获取图像和文本作为输入。当启用此功能时,它允许LLM“从生成的代码中查看图片”,查看它们是否符合要求,并可能进行自我更正:

使用随机着色的光盘创建图形

图像与Wolfram语言和Wolfram笔记本的深度集成为多模态LLM提供了各种可能性。在这里,我们以图像的形式给出一个情节,并询问LLM如何再现它:

创建类似的绘图

多模LLM的另一个方向是获取数据(在Wolfram语言接受的数百种格式)并使用LLM以Wolfram语言指导其可视化和分析。下面是一个从文件data.csv在计算机的当前目录中:

查看data.csv文件

直接使用Wolfram语言有一点很好,那就是你所做的一切(好吧,除非你使用随机整数等等)是完全可再现的;做同样的计算两次,你会得到同样的结果。LLM并非如此(至少目前如此)。因此,当人们使用LLM时,感觉它比使用Wolfram语言更短暂和短暂。一个人必须获得任何好的结果,因为他可能永远无法复制这些结果。是的,即使不能重新运行并获得相同的结果,也可以将所有内容存储在聊天笔记本中,这非常有帮助。但LLM结果的“永久性”使用往往是“离线”的。使用LLM“预先”找出一些东西,然后使用它给出的结果。

LLM的一个意外应用是建议函数名。根据LLM对人们谈论的内容的“经验”,它可以很好地建议人们可能觉得有用的功能。而且,是的,当它编写代码时,它有一个幻想这种函数的习惯。但在14.0版中,我们实际上添加了一个函数-数字总和-这是LLM向我们建议的。以类似的方式,我们可以期望LLM在与外部数据库、函数等建立连接时很有用。LLM“读取文档”,并尝试编写Wolfram语言的“粘合”代码,然后可以对其进行审查、检查等,如果正确,以后可以使用。

然后是数据管理,这是一个通过Wolfram | Alpha和我们的许多其他努力的领域,在过去几十年里,我们已经成为这方面的专家。LLM对此能提供多少帮助?它们当然不能“解决整个问题”,但将它们与我们已经拥有的工具相结合,在过去一年中使我们能够通过两个或更多因素来加快我们的一些数据管理管道。

如果我们看看现代Wolfram语言中的整个技术和内容堆栈,绝大多数都没有LLM的帮助,也不太可能。但在很多时候,LLM可以显著改进启发式或以其他方式解决问题。在14.0版中,开始有各种各样的“内部LLM”函数。

一个例子是文本摘要,这是我们考虑为许多版本添加的函数,但现在,由于LLM,它终于可以实现到一个有用的级别:

我们目前使用的主要LLM基于外部服务。但我们正在构建能力,以便在技术可行的情况下尽快在本地Wolfram Language安装中运行LLM。我们主线机器学习工作的一项功能是NetExternalObject(网络外部对象)-一种象征性地表示外部定义的神经网络的方法,可以在Wolfram语言中运行。NetExternalObject(网络外部对象)例如,允许您接入任何网络ONNX公司形成并有效地将其视为Wolfram语言神经网络中的一个组件。这是一个用于图像深度估计的网络,我们在这里从外部存储库导入它(尽管在本例中实际上有一个相似网络已经在Wolfram神经网络存储库):

现在我们可以将此导入的网络应用于图像这是用我们内置的图像编码器编码的,然后我们将结果可视化:

能够在本地运行网络通常非常方便,但有时需要相当高端的硬件才能做到这一点。例如,现在在Wolfram函数库它完全在本地进行图像合成,但要运行它,您确实需要一个具有至少8 GB VRAM的GPU:

顺便说一句,基于LLM原理(和变压器之类的思想),机器学习还有其他相关的进步,这些进步加强了Wolfram语言的整个领域,其中一个例子是图像分割,其中ImageSegmentation组件现在提供了强大的“内容敏感”分段:

微积分仍然很强

什么时候?数学1.01988年发布的这本书让人惊叹不已,是的,现在人们可以用计算机进行符号积分了。没过多久,我们就开始讨论不定积分,然后是定积分,现在是Wolfram语言比任何人都能做得更好的积分那是不是意味着我们已经“完成”微积分了?嗯,不。首先是微分方程和偏微分方程花了十年时间才将象征性的ODE提升到超越人类的水平。而象征性的PDE直到几年前才出现。我们在建设过程中的某个地方离散微积分,渐近展开积分变换我们还实现了统计、概率、信号处理和控制理论等应用所需的许多特定功能。但即使是现在,仍有一些边界。

在第14版中,微积分有了显著的进步。一类涉及答案的结构。是的,一个人可以有一个正确表示微分方程解的公式。但它是最好的、最简单的还是最有用的形式?好吧,在版本14中,我们努力确保它被禁用,从而大大减少了生成的表达式的大小。

另一个进步与扩大“预打包”微积分操作的范围有关。从1.0版开始,我们就可以进行衍生品了。但在版本14中,我们添加了隐式微分是的,使用常微分和方程求解可以很容易地给出这个问题的基本定义。但是通过添加显式隐式D我们正在将所有这些打包,并处理棘手的角落案例,以便在任何需要的地方使用隐式差异化成为常规:

第14版中新增的另一类预打包微积分操作是基于向量的积分。这些都可以在“自己动手”的模式下完成。但在版本14中,它们现在是流线型的内置函数——顺便说一句,它也涵盖了角落案例等。实际上,使它们成为可能的是另一个领域的开发:我们要添加的长达十年的项目几何计算Wolfram Language提供了一种自然的方式来描述几何结构,如曲线和曲面:

版本14中新增的相关功能是轮廓集成:

功能如轮廓集成只要“找到答案”。但是,如果一个人正在学习或探索微积分,那么能够用更多的循序渐进的方式。在版本14中,可以从非活动积分开始

并显式执行更改变量等操作:

有时,实际答案以非活动形式表示,尤其是无限和:

现在在版本14中,函数截断和让您获得这样一个和,并生成一个截断的“近似值”:

功能如整合-以及线路集成表面集成-从某种意义上说,它们是“经典微积分”,被教授和使用了三个多世纪。但在第14版中,我们也支持所谓的“新兴”微积分运算,如分数微分:

核心语言

我们可以从哪些原语中最好地构建我们的计算概念?在某种程度上,这是我40多年来一直在问的问题,也是什么决定了Wolfram语言核心的功能和结构。

随着时间的推移,我们看到了越来越多的可能,我们认识到并发明了新的有用的基本体。是的,世界和人们与计算机互动的方式也发生了变化,开辟了新的可能性,带来了对事物的新理解。哦,今年有一些LLM可以“获得世界的知识感”,并建议新的功能,以适应我们用Wolfram语言创建的框架。(顺便说一句,我们的观众也提出了很多很棒的建议设计审查实时流.)

添加了一个新构件版本13.1-我个人认为这很有用螺纹连接的。当函数为listable-as时Plus(加)是-顶级列表组合在一起:

但有时您希望将一个列表“插入”到另一个列表的最低级别,而不是最高级别。现在有一种方法可以指定它,使用螺纹连接的:

在某种意义上,螺纹连接的是在列表上具有“环境效应”的新一波符号构造的一部分。一个非常简单的例子(2015年引入)是没有什么:

另一个于2020年推出的是剪接:

Wolfram语言设计的一个老生常谈是处理无限计算循环的方式。而且在版本13.2我们引入了符号结构终止的评估为了更好地定义如何终止失控评估:

奇怪的是,在我们最近的物理计算表示中物理项目,非终结性评估的直接类比使得我们生活的似乎无止境的宇宙成为可能。

但“在评估中”到底发生了什么,终止与否?我一直想要一个好的表现。事实上又回来了2.0版我们介绍了跟踪为此目的:

但评估者应该展示多少细节呢?回到2.0版,我们引入了选项追踪原始跟踪评估器所遵循的每条路径:

但这往往太过分了。在14.0版中,我们引入了新的设置追踪原始自动,它不包括在不执行任何操作的输出评估中:

这可能看起来很迂腐,但当一个人有任何大小的表达时,这是一个关键的修剪。例如,下面是一个简单算术计算的图形表示追踪原始真的:

这是相应的“修剪”版本追踪原始自动:

(是的,这些图的结构是与我们在物理项目中构建的因果图等内容密切相关.)

为了将计算原语添加到Wolfram语言中,14.0版中的两个新条目是Comap公司ComapApply公司.功能地图采用函数(f)并在列表上“映射”:

Comap公司这是“数学上的协同”版本吗?它获取函数列表并将其“映射”到单个参数上:

为什么这很有用?例如,可能需要对单个列表应用三个不同的统计函数。现在很容易做到这一点,使用Comap公司:

顺便说一下,就像地图,还有一个操作员表单Comap公司:

Comap公司当它处理的函数只接受一个参数时,效果很好。如果一个函数有多个参数,ComapApply公司是人们通常想要的:

谈到“co-like”功能版本13.2位置最小.分钟给出列表中最小的元素;位置最小而是指出最小元素的位置:

Wolfram语言的一个重要目标是尽可能多地“发挥作用”。当我们发布版本1.0可以假设字符串只包含普通ASCII字符,或者可能定义了外部字符编码。而且,是的,不知道“字符串本身”中应该包含哪些字符可能会很麻烦。到那时3.0版1996年,我们成为Unicode的贡献者和早期采用者,Unicode为“16位”字符提供了标准编码。多年来,这对我们很有帮助。但随着时间的推移,尤其是表情16位的增长,还不足以对人们想要使用的所有字符进行编码。所以几年前,我们开始推出对32位Unicode的支持版本13.1我们将它集成到笔记本中,实际上使字符串比以前丰富了很多:

是的,现在您可以在任何地方使用Unicode:

视频作为基本对象

返回时间版本1.0发布时,一兆字节的内存很大。但35年后,我们经常处理千兆字节。其中一个实用的东西是用视频进行计算。我们首先介绍了视频在中进行实验12.1版2020年。在过去的三年里,我们一直在系统地扩大和加强我们用Wolfram语言处理视频的能力。可能最重要的一个进步是,视频周围的东西现在尽可能多——“只是工作”,在处理如此大量数据的压力下不会“吱吱作响”。

我们可以直接将视频捕获到笔记本中,我们可以在笔记本电脑内的任何位置强劲地播放视频。我们还添加了存储视频的位置选项,以便您和任何其他想要访问视频的人都可以方便地访问。

视频编码有很多复杂性,我们现在稳健而透明支持500多个编解码器我们还可以自动执行许多方便的操作,例如旋转人像模式视频,以及能够应用图像处理操作,例如图像裁剪跨越整个视频。在每个版本中,我们都在进一步优化某些视频操作的速度。

但一个特别重要的焦点是视频生成器:制作视频和动画的编程方式。一个基本示例是动画视频,其输出与使有生气,但作为视频对象,可以直接显示在笔记本中,也可以以MP4或其他格式导出:

动画视频

动画视频是基于通过计算表达式来计算视频中的每一帧。另一类视频生成器采用现有的视觉构造,并简单地“巡视”它。旅游视频“旅游”图像、图形和地理图形;Tour3D视频(14.0版中的新功能)巡视3D几何:

Wolfram语言的一个非常强大的功能是能够将任意函数应用于视频。如何做到这一点的一个例子是视频帧地图,它跨视频帧映射函数,在版本13.2:

虽然Wolfram Language不是作为交互式视频编辑系统,但我们已经确保可以用该语言进行简化的程序化视频编辑,例如在14.0版中,我们在视频加入和定时覆盖覆盖视频.

So Much Got更快、更强、更流畅

随着Wolfram语言的每一个新版本,我们都添加了新的功能,以进一步扩展该语言的领域。但我们也在一些不太明显的方面投入了大量精力:使现有功能更快、更强、更流畅。

在14版中,我们可以看到两个例子,日期和数量。我们引入了符号日期的概念(日期对象等)。从那以后的几年里,我们在这个结构上建立了很多东西。在这样做的过程中,很明显有一些特定的流程和路径是特别常见和方便的。起初,最重要的是确保相关功能的存在。但随着时间的推移,我们已经能够看到应该精简和优化什么,并且我们一直在稳步做到这一点。

此外,在我们开发新的和不同的应用程序时,我们看到了需要填充的“角落”。例如,天文学是我们在第14版中显著发展的一个领域,而支持天文学需要增加一些新的“高精度”时间能力,例如时间系统选项,以及新的面向天文的日历系统另一个例子关注日期算术。如果你想在1月30日后增加一个月,该怎么办?你应该在哪里降落?不同类型的业务应用程序和合同会产生不同的假设,因此我们添加了一个方法功能选项,如DatePlus(日期加)来处理这个问题。同时,在认识到数据算法涉及某些计算的“内部循环”之后,我们对其进行了优化,在版本14.0中实现了100倍以上的加速。

Wolfram|Alpha有能够处理单位从那以后2009年首次推出-现在有一万多个。2012年,我们推出了数量用Wolfram语言中的单位表示数量。在过去的十年里,我们一直在稳步解决一系列复杂的问题。例如,什么100摄氏度+20摄氏度刻薄?嗯,20°C和100°C并不是一回事。现在,在Wolfram语言中,我们有一种系统的方法来处理这个问题,通过区分温度和温差单位,我们现在可以写100°C+.

首先,我们优先考虑数量就是让它尽可能广泛地工作,并尽可能广泛的将其集成到整个系统的计算、可视化等中。但随着其功能的扩展,其用途也随之扩展,不断推动对特定常见情况下的操作进行优化的需求。事实上版本13和版本14,我们大大加快了与数量通常是1000倍或更多。

谈到加速,在多线程CPU上运行的新算法可能产生的另一个例子是多项式。自年以来,我们一直在使用Wolfram语言中的多项式版本1,但在版本13.2在多项式因式分解等操作上,速度大大提高了1000倍。

此外,版本14.0中的一个新算法大大加快了速度数值解多项式方程和超越方程,以及MaxRoots(最大根数)选项,例如,允许我们从一百万次多项式中提取几个根

或者寻找超越方程的根,如果不预先指定其值的界限,我们甚至无法尝试:

另一个最近增强的“老”功能涉及数学函数。自从1.0版以来,我们已经设置了数学函数,以便可以将其计算到任意精度:

但在最近的版本中,我们希望“更加精确”,并能够严格计算出输入值范围内可能的输出范围:

但我们有效地做到这一点的每一个函数都需要一个新的定理,我们一直在稳步增加所涵盖的函数的数量,现在已经超过130个,这样当你需要在计算中使用它时,它就“起作用”了。

树的故事继续

树很有用。我们仅在12.3版但现在它们已经存在,我们正在发现越来越多的地方可以使用它们。为了支持这一点,我们一直在向其添加越来越多的功能。

一个自版本13是树的渲染。我们加强了总体图形设计,但更重要的是,我们引入了许多新的选项,以确定如何进行渲染。

例如,这里有一个随机树,我们在其中指定,对于所有节点,只应显式显示3个子节点:其他子节点被删除:

这里我们添加了几个选项来定义树的渲染:

默认情况下,树中的分支用整数标记,就像表达式中的部分一样。但在版本13.1我们添加了对关联定义的命名分支的支持:

我们最初对树的概念是以明确处理元素为中心的,可以附加“有效载荷”。但显而易见的是,在某些应用程序中,最重要的是树的结构,而不是其元素。所以我们添加了未标记的树要创建“纯树”:

树很有用,因为许多类型的结构基本上都是树。从那以后版本13我们增加了将树与各种结构相互转换的功能。例如,下面是一个简单的数据集对象:

你可以使用表达式树要将其转换为树:

而且树表达式将其转换回:

我们还添加了转换为JSON和XML以及将文件目录结构表示为树的功能:

有限域

版本1.0我们有整数、有理数和实数。3.0版我们添加了代数数(隐式表示为)-十几年后,我们添加了代数数域和超越根。对于版本14,我们现在添加了另一个(期待已久的)“与数字相关”的构造:有限字段。

以下是模7整数字段的符号表示:

现在这是该字段的一个特定元素

我们可以立即计算:

但我们对有限域所做的工作真正重要的是,我们已经将它们完全集成到系统中的其他功能中。例如,我们可以对系数位于有限域中的多项式进行因子分解:

我们也可以做一些事情,比如找到有限域上方程的解。例如,这里是有限域GF(17)上费马曲线上的一个点):

这里是一个矩阵的幂,其中包含相同有限域上的元素:

离开地球:太空人的故事

自年以来新增了一项主要功能版本13是天文计算。它始于能够高精度计算行星等物体的位置。尽管要处理许多不同的坐标系,但即使知道“位置”的含义也很复杂。默认情况下天文位置给出了您当前时间在天空中的位置在这里位置:

但是,人们可以问一个不同的坐标系,比如全球星系坐标:

下面是土星和木星之间50年的距离图:

直接类比为地理图形,我们添加了天文制图图中显示了土星当前位置周围的一片天空:

现在,这显示了土星在几年内的位置顺序——是的,包括逆行:

有许多样式选项天文制图。这里我们添加了“银河天空”的背景:

这里我们包括了星座的渲染(是的,我们有一位艺术家绘制了它们):

版本14.0中有一些特别的新内容与日食的扩展处理有关。我们总是尽可能快地提供新功能。但在这种情况下,有一个非常具体的最后期限:2024年4月8日,美国可以看到日全食。我们已经有能力对日食进行全球计算一段时间了(实际上不久前就开始了2017年日食). 但现在我们也可以用Wolfram语言进行详细的本地计算。

例如,这里有一张2024年4月8日日食的详细地图:

现在,这是几个小时内日食强度的曲线图,其中有一个与全食期相关的小“壁垒”:

这里有一张全食区域的地图,在日全食达到最大值后的每一分钟:

数百万物种变得可计算

2009年Wolfram|Alpha发布时,我们首次引入了生物有机体的可计算数据。但在第14版中,经过几年的工作,我们大大扩展和深化了我们掌握的有关生物有机体的可计算数据。

例如,以下是我们如何确定哪些物种的猎豹是捕食者:

下面是这些照片:

这是一张在野外看到猎豹的国家地图:

我们现在有了数据-从众多来源策划-研究了一百多万种动物,以及所描述的大多数植物、真菌、细菌、病毒和古菌。例如,对于动物,我们有近200个特性被广泛填写。其中一些是分类学特性:

一些是物理特性:

一些是遗传特性:

有些是生态特性(没错,猎豹不是顶级捕食者):

能够获得单个物种的属性是很有用的,但当进行大规模分析时,我们精心策划的可计算数据的真正威力就会显现出来。就像这里的生物基因组长度图一样,在我们的生物集合中,基因组长度最长的生物:

或者这里是人类肠道微生物组中生物体基因组长度的直方图:

这里是鸟类寿命与体重的散点图:

根据猎豹不是顶端捕食者的观点,这是一张食物链中“上方”的图表:

化学计算

年,我们开始将化学计算引入Wolfram语言12.0版,和版本13我们对原子、分子、键和官能团有很好的覆盖。现在,在第14版中,我们增加了化学公式、化学量和化学反应的内容。

这是一个化学公式,基本上只给出了“原子数”:

下面是具有该公式的特定分子:

让我们从这些分子中选择一个:

现在,在第14版中,我们有一种方法来表示给定类型的特定数量的分子,即1克甲基环戊烷:

化学转化可以转换为不同的数量规格,这里是摩尔:

这里是分子数:

但现在更重要的是,在第14版中,我们不仅可以表示分子的单个类型和数量,还可以表示化学反应。在这里,我们给出了一个反应的“草率”的不平衡表示,以及反应天平为我们提供了平衡版本:

现在我们可以提取反应物的公式:

我们还可以根据分子进行化学反应:

但有了分子和反应的符号表示,我们现在可以做一件大事:将反应类表示为“模式反应”,并使用与一般表达式的模式相同的概念来处理它们。例如,下面是氢卤代反应的符号表示:

现在我们可以将这种模式反应应用于特定分子:

下面是一个更详细的示例,在本例中使用SMARTS字符串输入:

这里我们只应用一次反应:

现在我们反复这样做

在这种情况下,会产生越来越长的分子(在这种情况中,分子恰好是多肽):

知识库不断增长

每天的每一分钟,都有新数据添加到Wolfram知识库。其中大部分是自动来自实时订阅源。但我们也有一个非常大规模的正在进行的管理工作,其中包括循环中的人类。多年来,我们为我们的数据管理管道构建了复杂的(Wolfram Language)自动化,今年我们通过使用LLM技术提高了一些领域的效率。但很难做好策展工作,我们的长期经验是,要做到这一点,最终需要人类专家参与,而我们已经做到了。

那么自那以后有什么新情况版本13.0? 291842位新的杰出的当代和历史人物;264467件音乐作品;118538张音乐专辑;104024颗命名恒星;有时,实体的添加是由可靠数据的新可用性驱动的;通常是由于需要在其他功能中使用该实体(例如,要渲染的星形)天文制图). 但不仅仅是添加实体,还有填充现有实体属性值的问题。在这里,我们总是在不断取得进展,有时集成新的大规模辅助数据源,有时从主要数据源直接管理我们自己。

最近我们需要进行直接管理的一个例子是关于酒精饮料的数据。我们拥有数十万种食品和饮料的大量数据。但我们的大规模数据来源中没有包含酒精饮料的数据。因此,这是一个我们需要找到主要来源(在这种情况下,通常是产品的原始生产者)并为自己策划一切的领域。

例如,我们现在可以要求不同品种伏特加的风味分布(事实上,就我个人而言,我不是这种东西的消费者,我甚至不知道伏特加有什么味道……):

但除了填写现有类型的实体和属性之外,我们还稳步添加了新的实体类型。最近的一个例子是地质构造,其中13706个:

例如,现在我们可以指定霸王龙已找到

我们可以在地图上显示这些区域:

工业强度多领域PDE

PDE很难。很难解决这些问题。甚至很难明确你到底想解决什么问题。但我们一直致力于“消费化”PDE,使其更易于使用,这是一项长达数十年的使命。这里面有很多东西。您需要能够轻松指定复杂的几何图形。您需要能够轻松定义数学上复杂的边界条件。你需要有一种流线型的方法来建立从基础物理中得出的复杂方程。然后你必须尽可能自动地进行复杂的数值分析,以有效地求解方程。但这还不是全部。您还经常需要可视化您的解决方案,从中计算其他内容,或在其上运行参数优化。

这是对我们用Wolfram语言构建的内容的深入使用,它涵盖了系统的许多部分。其结果是独特的:一种真正简化和集成的PDE处理方法。一个人没有处理一些(通常非常昂贵)“仅用于PDE”的包;我们现在拥有的是一种“消费化”的方式,可以在工程、科学或其他方面需要PDE时处理PDE。是的,能够将机器学习、图像计算、管理数据、数据科学、实时传感器馈送、并行计算或Wolfram笔记本与PDE联系起来,只会让它们变得更有价值。

我们吃过“基本的、生的”NDSolve公司“自1991年以来。但是,花了几十年时间构建的所有结构都围绕着它,以便方便地设置并有效地解决现实世界中的PDE,并将它们连接到其他所有东西中。它需要开发一整套底层算法功能,例如我们更加灵活和集成的超越前工业强度的计算几何和有限元方法但除此之外,还需要创建一种语言来指定实际的PDE。在这里,Wolfram语言的象征性和我们的整个设计框架使一些非常独特的东西成为可能,这使我们能够极大地简化和消费偏微分方程的使用。

这一切都是关于为PDE及其边界条件提供象征性的“构造工具”。我们大约在五年前开始这项工作,逐步涵盖越来越多的应用领域。在版本14中,我们特别关注固体力学、流体力学、,电磁学和(单粒子)量子力学。

这是固体力学的一个例子。首先,我们定义要处理的变量(位移和基础坐标):

接下来,我们指定要用于描述将要使用的固体材料的参数:

现在我们可以使用符号PDE规范来设置PDE,比如SolidMechanicsPDE组件-此处,对于向一侧拉动的实体对象的变形:

是的,“下面”,这些简单的符号规范变成了复杂的“原始”PDE:

现在,我们已经准备好实际求解特定区域的PDE,即对于具有特定形状的对象:

现在,我们可以直观地看到结果,它显示了对象在拉动时的拉伸方式:

我们设置东西的方式,我们物体的材料是橡胶之类的东西的理想化。但在Wolfram语言中,我们现在有了指定材料各种详细属性的方法。因此,例如,我们可以在材料的特定方向(例如在实际使用纤维时)将钢筋作为单位向量添加到材料中:

然后我们可以重新运行以前的操作

但现在我们得到的结果略有不同:

14.0版中新增的另一个主要PDE领域是流体流动。让我们做一个2D示例。我们的变量是二维速度和压力:

现在我们可以在一个特定的区域设置流体系统,所有的墙壁上都有无滑移条件,除了顶部,我们假设流体从左向右流动。唯一需要的参数是雷诺数。我们不只是求解单个雷诺数的PDE,而是创建一个参数解算器,它可以取任意指定的雷诺数:

下面是雷诺数100的结果:

但按照我们设置的方式,我们还可以生成一个完整的视频作为雷诺数的函数(是的,还有并联通过并行生成不同的帧来加快速度):


我们在PDE中的大部分工作都涉及到迎合实际工程情况的复杂性。但在14.0版中,我们还添加了支持“纯物理”的功能,特别是支持用薛定谔方程完成的量子力学。例如,这里是2D单粒子薛定谔方程():

下面是我们要解决的过度显示显式离散化区域:

现在我们可以通过添加一些边界条件来求解方程:

现在我们可以看到高斯波包在障碍物周围的散射:

流线型系统工程计算

系统工程是一个大领域,但Wolfram语言的结构和功能提供了独特的优势,在过去十年中,这些优势使我们能够为各种类型的系统的建模、分析和控制设计建立相当完整的工业实力支持。它是Wolfram语言的集成部分,可以通过语言的计算和接口结构访问。但它也与我们的独立Wolfram系统建模器产品,它为系统建模和探索提供了基于GUI的工作流。

与System Modeler共享的是特定于域的大型集合建模库例如,因为版本13,我们在电池工程、,水利工程飞机工程-以及教育图书馆机械工程,热工,数字电子学、和生物学(我们还为以下区域添加了库:商业和公共政策模拟.)

特定于域的建模库

系统工程的典型工作流程从建立模型开始。模型可以从头开始构建,也可以从模型库中的组件组装而成,可以在Wolfram System Modeler中可视化,也可以用Wolfram Language编程。例如,下面是一个通过挠性轴转动负载的电动机模型:

一旦有了模型,就可以对其进行模拟。下面是一个例子,我们设置了模型的一个参数(负载的惯性矩),并计算了另外两个参数的值作为时间的函数:

版本14.0中的一项新功能能够看到参数(或初始值等)的不确定性对系统行为的影响。所以这里,作为一个例子,我们说参数的值是不确定的,而是按照正态分布分布的,然后我们看到输出结果的分布:

我们所看到的带有挠性轴的电机可以被认为是一个“多域系统”,它结合了电气和机械组件。但Wolfram语言(和Wolfram系统建模器)也可以处理“混合系统”,将模拟和数字(即连续和离散)组件结合在一起。这里有一个来自控制系统世界的相当复杂的例子:一个直升机模型以闭环连接到数字控制系统:

直升机型号

整个模型系统可以用以下符号表示:

现在我们计算模型的输入输出响应:

以下是具体的输出响应:

但现在我们可以“钻取”并查看具体的子系统响应,这里是零阶保持装置(上面标记为ZOH),完成了它的小数字步骤:

但如果我们想自己设计控制系统呢?在版本14中,我们现在可以将所有Wolfram语言控制系统设计功能应用于任意系统模型。下面是一个简单模型的例子,在这种情况下是在化学工程中(一个连续搅拌的罐):

现在我们可以利用这个模型,为其设计一个LQG控制器,然后为其装配一个完整的闭环系统:

现在我们可以模拟闭环系统,并看到控制器成功地将最终值设置为0:

图形:更美丽、更生动

图形一直是Wolfram语言故事的重要组成部分,三十多年来,我们一直在逐步增强和更新其外观和功能,有时借助于硬件(例如GPU)功能的进步。

版本13我们在2D图形中添加了各种“装饰性”(或“注释性”)效果。一个例子(用于在事物上添加标题)是光晕:

另一个例子是拖放阴影:

所有这些都是以符号方式指定的,可以在整个系统中使用(例如在悬停效果等中)。是的,您可以设置许多详细参数:

版本14.0中一个重要的新功能是方便的纹理映射。我们已经低级多边形-多边形纹理持续了十五年。但现在,在14.0版中,我们可以直接将纹理映射到整个曲面上。以下是将纹理包裹到球体上的示例:

这里将相同的纹理包裹到更复杂的表面上:

一个重要的微妙之处是,有很多方法可以将“纹理坐标面片”的数量映射到曲面上。该文档说明了新的命名案例:

纹理坐标面片

下面是赤平投影到球体上的情况:

下面是金星的“表面纹理”示例

这里它被映射到一个可以旋转的球体上:

这是一只“花”兔子:

像纹理映射这样的东西有助于使图形在视觉上引人注目。自版本13以来,我们还添加了各种“实时可视化”功能,自动“将可视化带到生活中”。例如,现在默认情况下,任何绘图都有一个“坐标鼠标悬停”:

像往常一样,有很多方法可以控制这种“突出显示”效果:

欧几里得复数:合成几何的进展

有人可能会说,这已经有两千年的历史了。但四年前(版本12)我们开始引入可计算版本的欧几里德式合成几何.

其思想是通过提供一组(潜在隐含的)约束来象征性地指定几何场景:

然后,我们可以生成与约束一致的随机几何体实例,在版本14中,我们大大增强了确保几何体“典型”且不退化的能力:

但现在版本14的一个新功能是,我们可以找到由约束确定的几何量值:

这是一个稍微复杂一点的案例:

现在我们求解图中两个三角形的面积:

我们总是能够为场景的特定元素提供明确的样式:

现在,版本14中的一个新功能是能够提供通用的“几何样式规则”,这里只需为每个元素指定随机颜色:

Ever-Smoother用户界面

我们使用Wolfram语言的目标是尽可能简单地通过计算表达自己。要做到这一点,很大一部分是语言本身的连贯设计。但还有另一部分,那就是能够尽可能轻松地在笔记本中输入想要输入的Wolfram语言。在每一个新版本中,我们都会对此进行增强。

一个正在不断开发的领域是交互式语法突出显示。近二十年前,我们首次添加了语法高亮功能,随着时间的推移,我们逐渐使其变得越来越复杂,无论是在键入时还是在执行代码时都会做出响应。一些突出显示始终具有明显的意义。但是,特别是基于光标位置的动态突出显示有时更难理解。在第14版中,利用近年来已成为常态的较亮调色板,我们调整了动态突出显示,这样更容易快速判断表达式结构中的“位置”:

动态高亮显示

在“知道自己拥有什么”的主题上,增加了另一个增强版本13.2-是笔记本中不同视觉对象的不同框架着色。那个东西有图形吗?还是图像?还是一张图表?现在,人们可以从框架的颜色中判断出何时选择它:

差异化框架着色

Wolfram语言的一个重要方面是,内置函数的名称拼写得很清楚,很容易说出它们的作用。但是,通常名称必须很长,因此在键入时能够自动完成它们很重要。在13.3中,我们添加了“模糊自动补全”的概念,它不仅可以“完成”一个人键入的姓名,还可以填充中间字母、更改大小写等。因此,例如,只需键入显示以开头的自动完成菜单列表日志日志图:

自动完成菜单

首次出现在中的主要用户界面更新版本13.1-并且在后续版本中得到了增强-是每个笔记本的默认工具栏:

默认工具栏

工具栏提供了对计算控件、单元格格式和各种输入(如内联单元格、,、超链接、画布等)-以及菜单选项云发布,菜单选项文档搜索和菜单选项“聊天”(即LLM)设置。

在大多数情况下,将工具栏显示在您正在使用的任何笔记本中都很有用。但在左手边有一个很小的可以最小化工具栏:

最小化工具栏

14.0分有一个偏好设置可以使工具栏在您创建的任何新笔记本中最小化,这实际上为您提供了两全其美的效果:您可以立即访问工具栏,但您的笔记本没有任何“额外”的内容可能会分散您的注意力。

另一件事版本13是对笔记本中输出的“摘要”形式的处理。一个基本的例子是,如果生成一个非常大的结果会发生什么。默认情况下,实际上只显示结果的摘要。但现在底部有一个条形图,提供了如何处理实际输出的各种选项:

默认情况下,输出仅存储在当前内核会话中。但是通过按下图标化按钮,你会得到一个图标化的表单,它将直接出现在你的笔记本中(或者可以复制到任何地方),并且“里面有完整的输出”。还有一个在笔记本中存储完整表达按钮,它将“无形”地将输出表达式存储在摘要显示的“后面”。

如果表达式存储在笔记本中,那么它将跨内核会话持久化。否则,您将无法在不同的内核会话中获得它;您唯一能看到的是摘要显示:

摘要显示

对于大型“计算对象”来说,情况也类似。就像这里有一个最近的具有一百万个数据点的函数:

默认情况下,数据只是存在于当前内核会话中的内容。但现在有一个菜单可以让您将数据保存在不同的持久位置:

保存数据菜单

还有云

运行Wolfram语言的方法有很多。即使在版本1.0我们有远程内核的概念:在一台机器上运行的笔记本前端(在那些日子里基本上是总是Mac或NeXT)以及运行在不同机器上的内核(在那些日子里,有时甚至通过电话线连接)。但十年前,又向前迈出了一大步:Wolfram云.

云的使用实际上有两种不同的方式。第一是提供类似于我们长期桌面体验的笔记本体验,但只在浏览器中运行。第二个在交付API以及其他以编程方式访问的功能—即使在十年前的开始,也可以通过以下方式访问API功能.

Wolfram Cloud一直是密集开发的目标现在将近15年了.它也随之而来Wolfram应用程序服务器Wolfram Web引擎,它专门为API提供了更精简的支持(没有用户管理等功能,但有集群等功能)。

所有这些,尤其是Wolfram Cloud-have成为我们的核心技术能力,支持我们的许多其他活动。例如Wolfram函数库Wolfram Paclet存储库都基于Wolfram Cloud(事实上,我们的整个资源系统). 当我们来到为ChatGPT构建Wolfram插件今年早些时候,使用Wolfram Cloud,我们可以在几天内部署插件。

版本13Wolfram Cloud有很多非常不同的应用程序。一个用于功能ARP发布,它采用3D几何并将其与适当的元数据一起放入Wolfram Cloud中,以允许手机从云URL的二维码中获得增强的真实性版本:

增强现实三联画

在云笔记本方面,使用量稳步增加,尤其是嵌入式云笔记本,例如,嵌入式云笔记本在Wolfram社区、和在整个Wolfram示范项目。我们的目标一直是让云笔记本像简单的网页一样易于使用,但要拥有我们在过去35年中在笔记本中开发的深度功能。几年前,我们在相当小的笔记本电脑上实现了这一点,但在过去几年中,我们在处理甚至数百兆字节的笔记本电脑方面一直在不断进步。这是一个关于缓存、刷新和躲避web浏览器变迁的复杂故事。但此时,绝大多数笔记本电脑都可以无缝地部署到云中,并将立即显示为简单的网页。

外部代码的伟大集成故事

从那时起,就可以从Wolfram语言调用外部代码版本1.0但在版本14中,在集成外部代码的范围和易用性方面有了重要的进步。总的目标是能够使用Wolfram语言的所有功能和一致性,即使在计算的某些部分是在外部代码中完成的。在版本14中,我们做了大量工作来简化和自动化外部代码集成到语言中的过程。

例如,一旦某个东西被集成到Wolfram语言中,它就变成了一个可以像任何其他Wolfram Language函数一样使用的函数。但对于不同类型的外部代码来说,其背后的内容必然是截然不同的。一个用于解释语言(如Python)的设置。还有一种类似C的编译语言和动态库。(然后还有其他一些用于外部过程、API以及“可导入的代码规范”,比如神经网络。)

让我们从Python开始。我们有外部评估自2018年开始评估Python代码。但当您真正开始使用Python时,需要处理所有这些依赖项和库。是的,这是Wolfram语言及其连贯设计令人难以置信的优势令人痛苦地显而易见的地方之一。但在版本14.0中,我们现在有了一种封装所有Python复杂性的方法,这样我们就可以在Wolfram语言中交付Pythons功能,隐藏所有Pytython依赖项的混乱,甚至Pythone本身的版本控制。

例如,假设我们想创建一个Wolfram Language函数表情化使用Python函数的表情符号在emoji Python库中。我们可以这样做:

现在你可以打电话了表情化在Wolfram语言中,它将运行Python代码:

这样做的方法是你第一次打电话表情化,创建一个具有所有正确功能的Python环境,然后缓存以供后续使用。重要的是表情化完全独立于系统(或者考虑到Python实现的变化,尽可能独立于系统)。例如,这意味着您可以部署表情化在Wolfram函数库中,就像部署纯Wolfram语言编写的东西一样。

在动态库中调用C兼容函数涉及到非常不同的工程。但在13.3版中,我们也使用函数将其简化国外功能加载。与转换本机C数据类型、管理数据结构的内存等相关的各种复杂性。但我们现在有了用Wolfram语言实现这一点的非常干净的方法。

例如,下面是如何设置对函数的“外部函数”调用RAND_字节在OpenSSL库中:

在这里,我们使用Wolfram语言编译器技术来指定将在外部函数中使用的本机C类型。但现在我们可以将这一切打包到Wolfram Language函数中:

我们可以像调用其他Wolfram语言函数一样调用此函数:

在内部,各种复杂的事情都在发生。例如,我们正在分配一个原始内存缓冲区,然后将其输入到C函数中。但当我们进行内存分配时,我们正在创建一个符号结构,将其定义为“托管对象”:

现在,当这个对象不再被使用时,与它相关的内存将被自动释放。

而且,是的,对于Python和C来说,其背后都有相当大的复杂性。但好消息是,在版本14中,我们基本上能够自动处理它。结果是,暴露出来的是纯粹、简单的Wolfram语言。

但这其中还有一个重要部分。在特定的Python或C库中,通常有特定于该库的数据结构的详细定义。因此,要使用这些库,必须深入研究这些定义的所有潜在的特殊复杂性。但在Wolfram语言中,我们对事物有一致的符号表示,无论是图像、日期还是化学物质类型。当您第一次连接外部库时,必须将其数据结构映射到这些库。但一旦完成,任何人都可以使用已经构建的内容,并与他们正在做的其他事情无缝集成,甚至可以调用其他外部代码。实际上,我们正在利用Wolfram语言的整个设计框架,并应用它,即使我们使用的是不基于Wolfram的底层实现。

对于认真的开发人员

一行(或更少)的Wolfram语言代码可以做很多事情。但该语言的一个显著特点是它具有基本的可伸缩性:既适用于非常短的程序,也适用于非常长的程序。自从版本13以来,在处理超长程序方面有了一些进步。其中之一涉及“代码编辑”。

标准Wolfram笔记本对于探索性的、解释性的和许多其他形式的工作都能很好地工作。当然,在标准笔记本中编写大量代码是可能的(例如,我亲自编写)。但当一个人在做“软件工程风格的工作”时,使用相当于纯代码编辑器的东西更方便,也更熟悉,这在很大程度上与代码执行和解释分离开来。这就是为什么我们有“包编辑器”,可以从文件>新建>包/脚本。您仍在笔记本电脑环境中操作,拥有所有复杂的功能。但是,为了提供更多的文本“代码体验”,无论是在编辑方面,还是在.wl文件中实际保存的内容方面,都对内容进行了“剥皮”。

下面是运行中的包编辑器的典型示例(在本例中应用于我们的GitLink包):

程序包编辑器

有几件事是显而易见的。首先,它非常面向线条。(代码的)行是编号的,除非在显式换行处,否则不会中断。标题与普通笔记本中的标题类似,但保存文件时,它们将以注释的形式存储,并具有特定的样式化结构:

代码行数

仍然可以在包编辑器中运行代码,但输出不会保存在.wl文件中:

未保存的输出

自那以后发生了变化版本13工具栏得到了很大增强。例如,现在有了“智能搜索”,它知道代码结构:

智能搜索

您还可以要求转到行号,您将立即看到附近的代码行:

代码行附近

除了代码编辑之外,自版本13以来,另一组对严肃的开发人员来说非常重要的新特性涉及自动化测试。主要的进步是引入了一个完全符号化的测试框架,其中单个测试被表示为符号对象

可以以符号形式操作,然后使用以下函数运行测试评估试验报告:

在版本14.0中,有另一个新的测试功能-中间测试-它允许您在更大的测试中插入检查点数量:

通过评估此测试,我们发现还运行了中间测试:

Wolfram函数库:2900函数和计数

这个Wolfram函数库取得了巨大的成功。我们于2019年推出作为在Wolfram语言中提供特定的、单独贡献的函数的一种方法。现在,Repository中有2900多个这样的功能。

在过去的35年中,Wolfram语言的近7000个功能经过了艰苦的开发,形成了今天的Wolfram Language,始终注意用一致的设计原则创建一个连贯的整体。从某种意义上说,函数库的成功是所有这些努力的红利之一。因为正是底层语言及其设计原则的连贯性和一致性使得每次只添加一个函数并使其真正起作用成为可能。你想添加一个功能来执行一些结合图像和图形的非常具体的操作。好吧,在Wolfram语言中,图像和图形都有一致的表示,您可以利用它。通过遵循类似Wolfram语言的原则来命名函数,您可以创建一个易于Wolfram用户理解和使用的函数。

使用Wolfram Function Repository是一个非常无缝的过程。如果你知道函数的名称,你可以用资源函数; 如果需要,将加载函数,然后只运行:

如果该函数有可用的更新,它会给您一条消息,但仍要运行旧版本。该消息有一个按钮,允许您在更新中加载;然后您可以重新运行输入并使用新版本。(如果您正在编写希望“烧入”某个函数的特定版本的代码,可以只使用资源版本的选项资源函数.)

如果希望代码看起来更优雅,只需计算资源函数对象

并使用格式化版本:

顺便说一下,按下+然后提供有关函数的更多信息:

功能信息

函数库中函数的一个重要特性是它们都有文档页面,这些页面的组织方式与内置函数的页面非常相似:

SolarEclipseIcon功能页面

但是如何创建函数库条目呢?只需转到文件>新建>存储库项目>功能库项你会得到一个定义笔记本:

定义笔记本

我们已经将其优化为尽可能容易填写,尽量减少样板文件,并尽可能自动检查正确性和一致性。结果是,在不到一个小时的时间内创建一个简单的Function Repository项是非常现实的,主要时间花在编写好的解释性示例上。

当你按下提交到存储库您的函数将被发送给Wolfram函数库审查团队,该团队的任务是确保存储库中的函数按照他们说的做,以符合通用Wolfram语言设计原则的方式工作,具有良好的名称,并有充分的文档记录。除了非常专业的功能外,我们的目标是在一周内(有时甚至更早)完成审查,并在功能准备好后尽快发布。

Function Repository中有一个新的(和更新的)函数摘要,每周五发送一次,阅读起来很有趣(您可以订阅在这里):

Wolfram功能库电子邮件

Wolfram函数库是一个经过管理的公共资源,可以从任何Wolfram语言系统访问(顺便说一句,每个函数的源代码都是可用的,只需按源笔记本按钮)。但是,功能库的基础设施还有另一个重要的用例:私人部署的“资源功能”。

这一切都是通过Wolfram云。您使用完全相同的定义笔记本,但现在不是提交给公共Wolfram函数库,而是将您的函数部署到Wolfram Cloud。你可以将其设为私有,这样只有你或某个特定的组才能访问它。或者你可以将其设为公共,这样任何知道其URL的人都可以立即访问并在他们的Wolfram语言系统中使用它。

事实证明,这是一种非常有用的机制,既适用于小组项目,也适用于创建已发布的材料。从某种意义上说,这是一种非常轻量级但健壮的方法,可以将打包好的代码分发到可以立即使用的函数中。(顺便说一句,要查找您从Wolfram Cloud帐户发布的功能,只需转到部署的资源云文件浏览器中的文件夹。)

(对于想要管理自己的功能库的组织来说,值得一提的是,整个Wolfram功能库机制,包括用于进行审查的基础设施等,也可以通过Wolfram企业私有云.)

那么公共Wolfram函数库中有什么?有许多“特殊功能”是为了特定的“利基”目的而设计的,但如果它们是你想要的,那么它们非常有用:

有一些功能可以添加各种可视化效果:

一些功能设置用户界面:

一些功能链接到外部服务:

一些函数提供了简单的实用程序:

还有一些功能正在探索中,以便可能纳入核心系统:

作为研究或探索性开发的一部分,还添加了许多“前沿”功能。例如我写的文章(包括这一个),我强调所有图片和其他输出都由“点击复制”代码支持,这些代码可以复制它们,并且这些代码通常包含来自公共Wolfram函数库或(可公开访问的)私人部署的函数。

Paclet存储库到达

Paclet是一项我们使用了十多年半的技术,用于将更新的功能分发给现场的Wolfram语言系统。版本13我们开始为任何人提供创建paclet的工具。自版本13以来,我们引入了Wolfram语言小程序库作为paclets的集中存储库:

Wolfram Paclet存储库

什么是paclet?它是Wolfram Language功能的集合,包括函数定义、文档、外部库、样式表、调色板等,可以作为一个单元分发,并立即部署到任何Wolfram语言系统中。

Paclet Repository是一个集中的地方,任何人都可以在这里发布Paclet以供公众分发。那么这与Wolfram函数库? 它们是有趣的互补性——具有不同的优化和不同的设置。功能库更轻量级,Paclet库更灵活。函数库用于提供单独的新函数,这些函数独立地适合Wolfram语言的整个现有结构。Paclet Repository用于提供大规模的功能,可以定义自己的整个框架和环境。

Function Repository也得到了全面管理,在发布之前,我们的团队会对每个功能进行审查。Paclet Repository是一个即时部署系统,没有发布前审查。在Function Repository中,每个函数都是通过其名称指定的,我们的审查团队负责确保名称选择正确且没有冲突。在Paclet Repository中,每个贡献者都有自己的名称空间,他们的所有函数和其他材料都位于该名称空间中。例如,我贡献了函数随机Hypergraph到功能库,可以像资源函数["随机Hypergraph"]。但如果我将此功能放在paclet存储库中的paclet中,则必须像这样访问它Paclet符号[“StephenWolfram/超图”, "随机Hypergraph"].

Paclet符号顺便说一下,这是一种方便的方法,可以“深入访问”paclet中的各个功能。Paclet符号临时安装(并加载)paclet,以便您可以访问其中的特定符号。但更多情况下,人们希望永久安装paclet(使用Paclet安装),然后显式加载其内容(使用需要)只要有人想用它的符号。(paclet中的所有辅助元素,如文档、样式表等,都是在安装时设置的。)

paclet存储库中的paclet是什么样子的?每个paclet都有一个主页,通常包括一个总体摘要、paclet中的功能指南以及一些paclet的总体示例:

蛋白质可视化页面

单个功能通常有自己的文档页面:

AmidePlanePlot页面

就像在主要的Wolfram语言文档中一样,可以有一个完整的指导页面层次结构,也可以有类似教程的内容。

注意,在paclet文档中的示例中,经常会看到这样的结构。这些符号代表paclet中的符号,以如下形式呈现Paclet符号[“WolframChemistry/Protein Visualization”,“酰胺平面图”]允许以“独立”的方式访问这些符号。顺便说一句,如果您直接评估这样的表单,它将强制(临时)安装paclet,然后返回paclet中出现的实际原始符号:

那么,如何创建适合提交给paclet存储库的paclet? 您可以纯粹通过编程来完成,也可以从文件>新建>存储库项目>Paclet存储库项目,它启动了相当于一个完整的paclet创建IDE。第一步是指定组装paclet的位置。你给出了一些基本信息

提交paclet信息

然后创建Paclet资源定义笔记本,您可以从中给出函数定义、设置文档页面、指定您希望Paclet主页的样子等:

Paclet资源定义笔记本

有许多复杂的工具可以让您创建具有与Wolfram语言本身相同的功能广度和深度的全功能paclet。例如,使用文档工具可以构建功能齐全的文档页面(功能页面、指南页面、教程等):

文档工具

组装好paclet后,您可以检查、构建、私下部署它,或者将其提交给paclet存储库。提交后,它将自动在Paclet Repository服务器上设置,几分钟内,您创建的描述Paclet的页面将显示在Paclet Repository网站上。

那么目前Paclet知识库中有什么?我们公司的团队和更广泛的Wolfram语言社区的成员都贡献了很多好的、非常严肃的东西。事实上,现在Paclet Repository中的134个Paclet中有许多已经足够了,可以写一整篇这样的文章。

Paclet知识库中有一类内容是我们正在进行的内部开发项目的快照,其中许多最终将成为Wolfram语言的内置部分。一个很好的例子是我们的LLM和聊天笔记本功能其在过去一年中的快速开发和部署是通过使用Paclet Repository实现的。另一个代表我们化学团队正在进行的工作(Paclet Repository中的AKA WolframChemistry)的例子是化学功能小册子,包含以下功能:

是的,这是交互式的:

或者,也来自WolframChemistry:

另一个“开发快照”是差异工具-用于制作和查看字符串、单元格、笔记本等之间差异的paclet:

一个主要的paclet是Quantum框架-它为我们的Wolfram量子框架

Wolfram量子框架

并为量子计算提供广泛支持(至少与多路系统和我们的物理项目有一些连接):

谈到我们的物理项目支持200多个功能位于Wolfram功能库中。但也有小吃,比如WolframInstitute/Hypergraph公司:

外部提供的包的示例如下自动化-有250多个函数用于进行与有限自动机相关的计算:

另一个贡献的paclet是函数分析器,它从符号解析器规范变为实际解析器,这里以相反的模式使用,以生成随机“句子”:

Phi4工具是一个更专业的包,用于在场论:

另外一个例子是MaXrd公司,用于结晶学和x射线散射:

再举一个例子组织者paclet—用于制作和操作管理器笔记本的实用程序paclet。但与我们在这里看到的其他paclet不同,它没有公开任何Wolfram语言函数;相反,当您安装它时,它会在“调色板”列表中放置一个调色板:

组织者

吸引注意

截至今日,第14版已经完成,并已面世。那么接下来是什么?我们已经有很多项目在背后进行了多年的开发。一些扩展和加强了Wolfram语言中已有的内容;有些人把它带向了新的方向。

一个主要关注点是扩展和简化语言的部署:统一语言在计算机上的交付和安装方式,打包它以便可以有效地集成到其他独立应用程序中,等等。

另一个主要关注点是通过Wolfram语言扩展对大量数据的处理,并无缝集成核心外处理和延迟处理。

那当然有算法开发一些是“经典”的,直接建立在我们几十年来开发的功能塔上。有些更“基于人工智能”。自1.0版以来,我们一直在创建启发式算法和元算法,越来越多地使用机器学习的方法。神经网络方法能走多远?我们还不知道。我们经常在算法选择等方面使用它们。但它们在算法的核心方面能起到多大的作用呢?

我想起了我们在1987年开发1.0版时所做的事情。对于数学函数的特殊情况,在数值分析中有一个悠久的传统,即费力地推导级数近似。但我们希望能够计算数百个不同函数的任意精度的任何复杂值的参数。所以我们是怎么做到的? 我们从级数推广到有理近似,然后以一种非常“机器学习式”的方式,我们花了几个月的CPU时间系统地优化这些近似。好吧,我们一直在尝试再次做同样的事情,尽管现在是在更雄心勃勃的领域——现在使用的不是有理函数,而是大型神经网络作为我们的基础。

我们还一直在探索使用神经网络来“控制”精确算法,实际上是进行启发式选择,这些选择要么指导精确算法,要么可以通过精确算法进行验证。到目前为止,我们所生产的产品都没有超过我们现有的方法,但似乎很快就会实现。

我们在元编程的各个方面做了很多工作。有一个项目
让LLM帮助构建Wolfram语言代码-并对其进行评论,分析如果代码没有达到预期的效果,会出现什么问题。然后是代码注释,LLM可以帮助进行诸如预测最可能的类型之类的操作。还有代码编译。多年来,我们一直在为Wolfram语言开发一个全面的编译器,在每个版本中,我们所拥有的功能都会逐渐增强。我们一直在进行某种程度的自动编译在特定情况下(尤其是涉及数值计算的情况)超过30年。最终,全面的自动编译将成为可能。但到目前为止,我们的编译器技术的一些最大收益是用于我们的内部开发,在那里,我们现在可以通过编译(尽管是仔细编写的)Wolfram语言代码获得最佳的实际性能。

LLM令人惊讶的成功经验之一是有意义的人类语言的潜在结构比我们想象的要多。我一直对创建我称之为“符号话语语言“这提供了日常话语的计算表示。LLM还没有明确做到这一点。但他们鼓励这样的想法,即这应该是可能的,而且他们也为实现这一点提供了实际帮助。无论目标是能够表示叙事文本,还是合同,或文本规范,这都是一个扩展我们构建的计算语言以包含更多类型的概念和结构的问题。

我们的持续发展努力通常有几种驱动因素。有时,这是一个在某些已知方向上继续构建能力塔的问题(例如,解决PDE)。有时,我们建造的塔突然让我们看到了新的可能性。有时,当我们真正使用我们已经构建的东西时,我们会意识到有一种明显的方法来打磨或扩展它,或者在我们现在可以看到的有价值的东西上“加倍努力”。还有一些情况,技术世界发生的事情突然带来了新的可能性,就像LLM最近所做的那样,并且也许XR最终会做到最后,在一些案例中,与科学相关的新见解提出了新的方向。

我以为我们的物理项目充其量只有几个世纪后才会有实际应用。但事实上,物理和计算之间的对应关系给我们提供了思考实际计算方面的新方法。事实上,我们现在正在积极探索如何利用这一点来定义一个新的并行和分布式计算级别Wolfram语言,以及象征性地表示不仅是计算结果,还包括正在进行的计算过程。

有人可能会认为,经过近四十年的激烈开发,在开发Wolfram语言方面已经没有什么可做的了。但事实上,在我们达到的每一个水平上,都有越来越多的可能性,我们看到的可能也越来越多。事实上,这是一个特别富饶的时刻,有着前所未有的广阔的滨水空间。版本14是一个重要且令人满意的航路点。但是,随着我们继续我们的长期使命,使计算范式发挥其潜力,并构建我们的计算语言来帮助实现这一目标,前面还有很多美好的事情要做。

Stephen Wolfram(2024),“故事继续:宣布Wolfram语言和数学第14版”,Stephen Wolfram写作。writings.stephenwolfram.com/2024/01/the-story-continues-announcing-version-14-of-wolfram-language-and-methematica(写作.stephenwolfram.com/2024/01/sthe-story内容-annoncing-version-14-of-语言和数学)
文本
Stephen Wolfram(2024),“故事继续:宣布Wolfram语言和数学第14版”,Stephen Wolfram写作。写作s.stephenwolfram.com/2024/01/the-story-continues-announcing-version-14 of wolfram-language-and-mathematica
CMS公司
斯蒂芬·沃尔夫拉姆。“故事继续:宣布Wolfram Language and Mathematica第14版”,Stephen Wolfram写作。2024年1月9日。writings.stephenwolfram.com/2024/01/the-story-continues-announcing-version-14-of-wolfram-language-and-mathematica。
亚太地区
Wolfram,S.(2024年1月9日)。故事继续:宣布Wolfram Language and Mathematica第14版。斯蒂芬·沃尔夫拉姆的作品。writings.stephenwolfram.com/2024/01/the-story-continues-announcing-version-14-of-wolfram-language-and-mathematica。

发布时间:重点,数学软件,新技术,Wolfram语言

3条评论

  1. 我是这样看的。自动语言扩展

  2. 如果外星人来到地球上,需要一个单一的真实来源,以一种易于计算的形式访问世界上所有的知识和技术能力,而不是用书籍搜索整个网络和图书馆,他们将可以访问Wolfram系统。

  3. 精彩的!