此文件记录对新泽西州标准ML系统自2014年1月起(110.78之后的版本)。早期的更改包括记录在历史——2015年前文件。主要是更改日志涵盖编译器、编译管理器(厘米),的MLRISC公司库和运行时系统。偶尔会有关于其他组件(例如,的SML/NJ图书馆ML-LPT公司),但是这些组件有自己的更改日志,应该查阅这些日志。

2022.1版;2022/08/25

[2022/08/25]

补充系统/iter-make脚本来迭代编译器。此脚本替换了旧的固定(fixpt)脚本,并且是必需的当更改系统的版本号时。

[2022/08/15]

更改日志文件(历史.txt)已拆分为两个文件;一份涵盖2015年之前的时期,另一份涵盖自2015年以来的变化然后。

[2022/08/15]

源存储库已迁移到github。通过这次迁移,我们已经实质性地重新组织了源代码树并构建了脚本。

这个基础目录已被删除;它的大多数组件(厘米,编译程序,运行时系统)已被提升至源树的顶层。其他顶级目录文件,图书馆,llvm公司,smlnj-lib公司、和工具.这个图书馆工具目录包含大多数非核心系统组件,例如cml公司,ml-年,.

这个配置/安装.sh脚本已被替换为build.sh(建筑.sh)脚本。构建过程被简化,因为只有组件不在吉特存储库是引导文件。我们有还从各种构建脚本。

[2022/07/25]

实施的基础库提案2021-001(将getWindowSz函数添加到Posix.TTY结构中)。

[2022/07/25]

实施的基础库提案2022-001(添加数学签名)。

[2022/07/06]

修复了一些不符合SML基础库规范。漏洞#318(IEEEReal.decimal_approx公司不会匹配基础库)和#319(类型小数后实数与基础库不匹配)。

[2022/07/05]

修复了错误#316(实际工时不返回预期值值,如果男子=0.0).

[2022/07/05]

修复了错误#317(从字符串到实数的转换不接受非有限值)。

[2022/06/29]

修复了错误#314(IEEEReal.float_class与不匹配基础库)。出于某种原因NAN公司构造函数接受了一个参数在我们的实施中。此代码可能是在基础库规范中更改的API,但在我们的代码。

[2022/06/29]

修复了打印嵌套时出现的打印问题结构定义。例如,打开操作系统结构在REPL中,会导致冒号之间出现额外的换行符以及信号发生器关键字。旧版本中不存在此行为。

[2022/06/27]

添加支持在出现垃圾时生成SIG_GC信号收藏。我还添加了一个函数

  val值 信号阈值 : 整数 -> 单元

新泽西州SML。内部构件。GC公司允许指定生成信号的阈值。默认值为1,这意味着对于任何主要的收集,都会产生一个信号。设置阈值到0意味着次要采集也会生成信号,将值设置为大于1将过滤掉年轻一代的收藏。信号GC忽略正在运行的处理程序,这不应该是问题对于阈值1或更高。

这些更改修复了错误#65(垃圾收集不会触发信号GC)和#291(相应的信号未发送事件)。

[2022/06/17]

修复了错误#290(异常的模式匹配不正确)。修复程序涉及对FLINT/opt/l合同.sml(功能swiInfo(瑞士信息))FLINT/opt/f合同.sml(功能fcSwitch)。收缩构造函数是异常构造函数,因为对于异常比较定义构造函数时,使用conrep字段是不准确的通过异常标识声明(例如。,异常B=A).

[2022/06/05]

已修复错误#314(IEEEReal.setRoundingMode(IEEE实际设置舍入模式)在Linux上是非操作系统)。

[2022/06/05]

修复了错误#312(CM.make公司无法处理以下文件名包含反斜杠)。我们已经更改了给定路径的语义到中的函数厘米要使用本机路径名语法(而不是厘米的通用语法)。

[2022/06/01]

修复了错误#284(编译器错误:Contract:UsageMap on 132)。问题是CPSTrans.CPSTrans公司函数正在生成用于按相反顺序加载溢出参数的代码。此外为了修复这个错误,添加了一些详细的代码文档。

[2022/05/20]

修复了错误#310(REPL尝试打印类型的值时出错Posix公司。文件系统。ST.状态).

[2022/05/10]

修复了错误#306(Word8VectorSlice(文字8矢量切片):映射子片将生成结果错误或SML/NJ崩溃)。

[2022/04/03]

通过删除来修复模块编译性能错误包装Str包装Fct细化器/模块/sigmatch.sml(减小大约25%),并删除对包装Str(功能中constr公司)英寸精算师/精算师/elabmod.sml,更换打电话给Instantiate.instAbsr.最后再见包装Str!

2021.1版;2021/12/31

[2021/12/31]

已切换到有限责任公司编译器的版本。这样做有两个主要后果:

  • 这个MLRISC公司我们使用了超过25年的代码生成器已替换为基于https:llvm.org的[LLVM库].

  • 我们已经放弃了对32位系统的支持。因为我们没有具有64位Windows端口,此版本仅支持“Unix”上的系统AMD64型处理器(我们已经测试Linux操作系统*macOS)。64位Windows版本是一个高度优先的版本,我们希望包括它将出现在下一个版本中。

+此外,我们已将版本编号方案更改为YYYY年。NN公司方案,其中YYYY年是发布年份NN公司是本年度的发布编号。

[2021/12/07]

修复了一个无法打印的错误烧焦价值观打印在REPL中。

[2021/11/23]

从CM中删除lambda拆分支持的最后痕迹。

[2021/11/23]

更改了二进制文件结构(和BINFILE(二进制文件)签名)以支持两者旧的binfile格式和新的格式(这两种格式都记录在这个dev-notes/binfile.adoc文件)。我们仍在使用旧格式,但很快就会切换到新的格式。新格式具有更多结构化头文件并删除对FLINT lambda的残留支持泡菜。

新的标题格式包括一个正确的版本号,它应该使迁移到新的bin文件格式更加容易。

[2021/11/07]

提交更改以修复错误#281(当构造函数名称拼写错误)。修订版r7357。

  • 被改进的绝对值通过添加错误构造函数实现数据类型错误ID.

  • 修订过的ElabData/staticenv/lookup.sml简化和改进一些功能(lookVal(查找值)查找ID路径,外观ValSymlookIdSym(查找IdSym))并添加了一个函数lookId符号操作返回一个选项。

  • 修订过的路径id和已删除makeAPPpat(制作APPpat)在里面ElabUtil公司.

  • 修订过的埃拉布帕特在里面ElabCore公司.

[2021/11/07]

从“merge/base”工作目录提交了大量更改包含从“newmc”手动合并到新的检查行李箱。主干的基本版本是r7349标记为生产$smlnj/sml/tags/预合并.合并的主干版本是r7352。

这些变化包括:

  • 一个完全重写的匹配编译器,将absyn转换为阿比森。中的旧匹配编译器文件FLINT/trans已删除。新的匹配编译器已记录在案在里面dev-notes/match-compiler/match-cocompiler.txt(和后续文件)。匹配的编译器代码位于新目录中base/compiler/Elaborator/matchcomp.FLINT/trans/translate.sml语言相关文件也进行了广泛修订,以适应新的匹配编译器。

  • PLAMBDA/FLINT类型模块FLINT/内核已修改为主要模块的签名(Lty公司,LtyKernel公司,LtyDef(有限定义),Lty基础,Lty外部)都是不相交的。功能和记录元数据FLINT结构中的结构(FLINT/燧石/燧石.sml)已移至内核/funrecmeta。{sig,sml}这涉及未成年人编辑FLINT中的几乎所有文件和CPS中的一些文件。请参见开发说明/FLINT以获取更多文档。

  • 缺陷#294(编译器错误:恢复)已通过删除中的几行代码FLINT/opt/f合同.sml.文件选项/集合.smlopt/fc合同.sml被“澄清”以使其有点易于维护/调试。

  • 这个可变电容器:可变电容器中定义的结构ElabData/syntax/varcon。{sig,sml}已重命名为Variable:Variable(ElabData/语法/变量。{sig,sml}),因为它不再包含与数据构造函数相关的功能。

  • 回归测试($smlnj/测试)有人跑了,有几个是真的修正了回归,包括一个类型错误(错误/测试/bug0573.sml). 许多回归失败仍然存在由于漂亮的打印机的差异,重新编写的错误消息,以及重载方案类型变量的新打印约定。更新了一些参考测试输出,但在某些时候,所有输出都是新的应生成输出。但首先,签名打印应该重新设计和实施。

[2021/09/23]

更改了二进制文件表示去除酸洗这个打火石中间代表。这个的目的该机制本来支持跨模块内联,但现在还没有启用多年。移除它是迈向迁移酸洗基础设施以使用ASDL公司.

[2021/09/23]

更改了标识版本的方式,以允许使用版本后缀(例如,“-rc1”表示“发布候选1”)。我拆下了减震器该机制可能有类似的用途,但受到了限制到整数后缀,并且尚未在最近的内存中使用。也已更改这个SMLNJ版本结构,它由版本工具.新接口支持版本后缀,并包含两个内部版本中的日期和发布日期版本信息记录。

版本110.99.2;2021/09/23

[2021/08/18]

修复浮点溢出记录大小为两倍的良性错误在64位系统上尽可能大。

[2021/08/10]

实际到大型Int实现到target-word-size版本(Real64ToIntInf模块)。对于64位目标,新的版本使用实数的位表示来计算结果。32位版本是使用浮点的旧代码操作。此更改修复了错误#279(Real.to大型Int收益范围内的任何值为零[-512,512]).

[2021/04/29]

在从Absyn到PLambda的翻译中,有一个功能(内洛普)用于构建numeric的primop和type数据结构类型。每个基本运算符都调用此函数,尽管它的结果只取决于数字类型。我补充道用于缓存结果索引的数字类型的哈希表。此更改编译器的速度提高了约3%(例如,编译编译器在配备2.4GHz Intel i9处理器的MacBookPro上从58秒变为55秒)。

110.99.1版;2021/04/12

[2021/04/10]

更改了AMD64型框架布局,包括一个单词来容纳溢流例外。此值由有限责任公司后端为检查的算术运算生成异常。

[2021/04/10]

增加了对跑步的支持SML/新泽西M1级Mac通过罗塞塔2模拟器。更改是为了识别处理器组件amd64型在中配置/arch-n-opsys脚本。注意,当系统在罗塞塔的领导下,基本上工作正常,尝试运行马克尔编译编译器后命令导致崩溃。

[2021/04/10]

对通用安装程序中的逻辑进行了一些小的重组。

[2021/03/25]

修复了一个bug打火石数字类型被转换为CPS公司类型。具体来说,小于默认整数的类型尺寸(例如,单词8)应该标记为有标记代表。

[2021/02/12]

修复错误#280(110.99配置/安装.sh-64在macOS 10.15.7上失败)。我无法重现这个问题,但经过一些调查问题似乎是从中提取的构建工具不一致用户的路径。为了防止出现此问题,我创建了应收账兰利布绝对工具。

[2021/01/12]

修复了在实现CharBuffer(字符缓冲区)单缓冲液结构。基本上,如果没有足够的储备对于内容空间,填充缓冲区可能需要二次方时间。我们现在将缓冲区增加到当前大小的1.5倍256K额外增长的上限。

110.99版;2020/12/24

[2020/12/23]

更改了的布局SML公司上的堆栈帧AMD64型架构,使其与有限责任公司溢出寄存器。本质上,这只是涉及交换交换区的顺序和ML内容。我们抓住了这个机会,然而,要在中本地化此信息的表示编译器。

[2020/12/23]

更改了binfiles头中“魔术字符串”的格式。新格式为“-版本“,其中体系结构名称限制为最多七个字节,版本限制为最多8个字节。字符串用空格填充到总数长度为16字节。

[2020/12/22]

各种精美打印机错误修复:

  • 缺陷#274(打印时出现小的打印错误结构规范)

  • 缺陷#276(缺少控制REPL中额外换行的选项)

  • 缺陷#277(漂亮打印模块时多余的空白签名)

[2020/12/19]

修复了错误#254(来自LargeInt的实际值产生负面结果)。问题是因为的数字大小国际信息网只有一位小于默认int和比例因子rbase(红色)当时正在使用内联T。实际64.from_int功能(因此rbase(红色)结果是负面的)。因此,它将返回错误的结果只要IntInf表示涉及多个数字。这是32位和64位系统上的一个错误。解决方法是切换到使用内联T。实64.自int{32,64}转换rbase(红色)以及将数字转换为实数。

[2020/12/19]

修复了错误#267(返回错误的计算结果位置.int对于32位模式)。问题是在32位上64位除法由IntInf模块实现然后将结果转换为64位。使用的转换确实不测试结果中的溢出。

[2020/10/13]

更改了返回的跨度的语义ml-ulex公司因此跨度的第二个分量是最右边字符的位置在标记中(而不是标记后面的字符)。具体来说,span \((p_1,p_2)\)指定\以字符开头的(p_2-p_1+1)个字符位置\(p_1\)并运行到\(p_2\)(含)。此更改避免了标记范围结束时的潜在问题在文件中的最后一个字符处(当输入跨越多个文件)。

[2020/09/10]

简化了二进制文件通过删除选项来表示具有多个代码对象。许多年前,我们将将编译单元编码为多个独立函数这样垃圾收集器就可以回收执行一次(或未被引用)。实际拆分中的代码CpsSplitFun公司函子(CPS/clos/CPS-split.sml)在某些时候被一个虚拟实现所取代,所以我们有有一段时间没有生成多个代码对象。因此,我们简化了代码生成器,只假设一个代码对象并已更改二进制文件仅将代码导入/导出到支持单个代码对象二进制文件.

还对引导加载程序进行了此更改(内核/引导。c(c)).

110.98.1版;2020/08/25

[2020/08/25]

恢复了110.98年所做的一些漂亮的打印更改至110.97版本(漂亮打印新建漂亮打印目录重组没有改变)。这些变化修复错误#266(SML/NJ 110.98中的漂亮打印回归),#268(多态型漂亮印刷回归),以及#271(结构绑定的漂亮打印机回归)。

[2020/08/02]

修复了错误#269(文字64.fromString导致溢流对于大于232-1). 此错误是由32位版本的代码未针对64位版本进行更新。扫描两个整数的十六进制和八进制表示言语受到影响。

[2020/07/22]

为添加了一个额外的下降通道STREQL公司普里莫普。这个生成primop以实现对字符串的模式匹配文字。以前它在MLRISC公司代码生成器,但我们现在要展开CPS公司.此更改的原因是在有限责任公司代码生成器因为需要引入phi节点,所以会比较复杂在其中一个分支中。

在中展开CPS公司与以前有所不同现在,我们将要测试的文字字符串烘焙到相等性测试中。

还更改了primop的表示形式以包含字符串正在测试并移除STRNEQ公司普里莫普。

110.98版;2020/07/16

[2020/07/10]

更改了配置/安装.sh脚本,以便默认大小对于任何报告其机器为“x86_64个."

[2020/07/10]

修复了错误#260(执行除法位置.int崩溃Linux上使用FPE)。修复需要添加SIGFPE作为第二个的来源溢流Linux/amd64机器上的异常。

[2020/07/08]

修复了以前的结构和签名漂亮打印问题引入了广泛的漂亮打印机/漂亮打印围绕修订版6291进行修改。

受影响的文件包括ElabData/modules/ppmod.sml,ElabData/types/pptype.sml,顶级/打印/ppdec.sml,基础知识/print/pputil。{信号发生器,sml公司}.

模块的漂亮打印看起来仍然很脆弱,所以可能会有更漂亮的打印问题需要稍后解决。函子和函子签名的特殊、漂亮打印声明还没有经过测试。

[2020/07/07]

添加了一个新降低通过跟踪CPS公司优化,但之前闭包转换。此通行证包括之前的通行证32位匹配线上的64位操作以及涉及以下内容的转换国际信息网。它还增加了降低div公司国防部到本地机器部门(,引用雷姆)以及捕获转换。

此更改的目的是简化准备过程中的代码生成用于迁移到有限责任公司-基于后端。

[2020/07/06]

修复错误#261(正在打印奇怪的“calc_strictness”消息)。重写函数ElabUtil.calc_strictness公司并将其移动到类型实用性计算严格性.

[2020/07/02]

这个HTML开发精美印刷图书馆的结构搬进了自己的图书馆(pp-提取物-lib.cm)并重命名为HTML3版本。此更改删除了pp-lib.cm(磅/平方厘米)html-lib.cm(毫米),这使我们可以删除所有提及毫米-磅/厘米来自编译器厘米文件夹。

[2020/07/02]

已完成从primop中删除三角运算符。此更改还允许从MLRISC公司x86的代码生成器。

[2020/07/01]

禁止使用基本触发的硬件指令上的函数x86处理器。这样可以简化交叉编译来自非x86处理器托管并为删除操作铺平道路从编译器的原语操作符。

[2020/06/30]

改进了CPS公司加强度收缩阶段优化到ContractPrim公司。这些包括识别何时乘除2的幂可以替换为班次。以前,提供了这类优化通过MLRISC公司,但我们计划简化CPS公司代码前IR通过替换生成div公司国防部本机操作机器算法,这将防止MLRISC公司从制作优化。

[2020/05/16]

这个MLRISC公司的指令选择器x86处理器amd64型目标错误地认为伊迪夫指令设置第页,共页(溢出)最大负数除以时的条件代码~1.事实上,这样的除法操作陷阱,这没关系,因为运行时系统将陷阱映射到溢流例外。自从没有必要检查溢出,它已从文件中删除MLRISC/amd64/mltree/amd64-gen.smlMLRISC/x86/mltree/x86.sml.

请注意MLRISC公司的非跟踪签名部门操作可以实际上是溢出陷阱,但在这次更改之前是这样的。

[2020/05/16]

更改了的语义--调试命令行选项ml-自动.以前,此选项将操作替换为打印表达式,但由于生成的代码中存在类型错误,限制了它的实用性。新的行为是保留现有操作,只添加打印代码。

[2020/04/27]

添加了一个传递给详细说明程序,用于检查绑定,但从未被引用。此检查可通过以下方式控制这个控制。Elab.unused警告标志。未使用的顶级变量未报告(除非它们绑定在当地声明)。

由于误报,检查当前被禁用由类型检查器中的转换引起。例如,以下函数声明:

乐趣 足球 n个 = 
      乐趣 (f) x个 =  x个 - 1
        x个 = (f) x个 + 1
      在里面
        (f) n个
      结束;

由以下内容表示Absyn公司:

val值 足球 = 
      val值 足球 = (fn公司 n个 => 
              地方的
                val值 临时管理计划 = 
                      val值 记录 (f) = (fn公司 x个 => 国际.- ( x个,1))
                            = (fn公司 x个 => 国际.+ ((f) x个,1))
                      在里面 ((f),)
                      结束
              在里面
                val值 (f) = #1 临时管理计划
                val值  = #2 临时管理计划
              结束
            在里面 (f) n个
            结束)
      在里面 足球
      结束

其中的实例绑定到#2个tmp未使用。这种转变包裹RECDec功能。未使用的变量实现受到以下因素的影响雅各布·凡版本110.82的Buren修补程序.

[2020/04/24]

这个兰姆达变量.lvar类型表示为整数;从最早开始编译器的日子里,这种表示是具体的,这意味着类型系统无法提供任何保证整数和`伊瓦尔没有被混淆。截至此次更改,`LambdaVar.lvar现在是一个抽象的相等类型(在内部,它仍然是和整数).关于更改的一些评论:

  • 这个兰姆达变量结构现在包括实现哈希表(兰姆达变量。泰铢),有限映射(λ无功。地图)、和有限集合(兰姆达变量。设置).

  • 大多数变更涉及更换IntHashTable(整数哈希表),国际红色黑集,国际红色黑地图添加了等效子结构兰姆达变量结构(例如,IntHashTable(整数哈希表)=⇒兰姆达变量。泰铢).

  • 在一些地方,调试代码假设lvar可以打印为整数。

  • pickle代码需要一种在整数和lvars;这是一个抽象被打破的地方。

  • 最严重的滥用是lvar类型整数在中代码生成器,其中使用算术生成唯一的负数可以用作哈希键的数字,以便给定伊瓦尔能够映射到两个不同的标签。我用两张桌子解决了这个问题。

[2020/04/24]

修复了错误#256(参考交换不正确)。原件错误的来源是基础库示例代码,其中也已修复。

110.97版;2020/04/21

[2020/04/21]

更改了tyvars的打印;例如,一个OVLDV公司引入了tyvar出现重载运算符“*”获取相等属性将打印为“Z[OL(*)]”。

[2020/04/20]

消除了AbsDec和AbsDec构造函数

  • 已消除绝对12月中的构造函数分析/ast/ast。{信号发生器,sml公司}ABSdec公司中的构造函数ElabData/syntax/absyn。{信号发生器,sml公司}这些构造函数的“抽象”声明在SML/NJ 0.93中实施,但因有利而被淘汰SML’97之后的不透明“密封”签名归属。

  • 消除了这些构造函数的所有其他出现整个编译器(前端、FLINT和cm)。

[2020/04/20]

文件结构重组:顶层编译器/Semant目录被删除。剩余相关子目录香精/泡菜,已移至Elab数据、和Semant/prim公司,他的两个文件,prim-env.sml文件primop绑定.sml已移至现有的ElabData/prim(ElabData/prim)目录。CM文件编译器/core.cmElabData/ElabData.cm相应地进行了更改。

[2020/04/20]

已修复错误#220

  • 重载解决机制的主要重新设计。重载声明的语法已更改(部分延迟为110.98). 更改了VarCon.var中的OVLDvar,添加了文件重载classes.sml和重载var.sml到Elaborator/types。ElabData/Types/Types中更改的Types.tvKind。{sig,sml},将OVLD tvKind拆分为OVLDV(过载变量/运算符)、OVLDI(重载整型文字)和OVLDW(重载文字)。改良处理Unify中的重载元变量(Elaborator/types/unifie.sml)。

  • 重载类型元变量的更改打印(统一类型变量(类型.tyvar)).

  • 文件夹:ElabData/类型/类型。{信号发生器,sml公司}ElabData/types/overloadclasses.sml语言数据(新)ElabData/types/overloadvar.sml(新)ElabData/types/overload.sml 细化器/细化/elabcore.sml

[2020/04/09]

修复了错误#214

  • 当VALvar绑定被隐藏到打印“<隐藏>”(功能ppVar(ppVar)在里面其他实用程序/print/ppdec.sml).

  • 小型清理不要咯咯作响中的函数香精/泡菜/匹克莫德.sml.

[2020/04/08]

修复了错误#209

  • 添加的功能选中禁止ConsElabUtil公司(精雕细琢者/精雕细刻者/埃拉布蒂尔。{sig,sml})检查是否符号位于禁止的构造函数集中(,真的,,,::、和裁判).

  • 被改进的elab异常dec检查禁止的异常构造函数名称。重写函数埃拉布埃布以简化。

  • 在函数中添加了对禁止的构造函数名称的测试埃拉布康斯特在内部elabDB数据库.

  • 已将类型列表和布尔的规范更改为数据类型复制中的规格system/基础/实现/{list,bool}.sig避免出现“禁止”导致的错误建造师。

[2020/04/07]

一些人在ml-lex/词汇.sml代码。更换了一次性有限映射的实现红色黑色地图Fn函子来自这个SML/NJ图书馆.还摆脱了多态等式的使用通过将令牌相等测试更改为模式匹配。

[2020/04/05]

转动了几个函子(Elab模式Fn,ElabTopFn公司,信号匹配Fn,等进入结构并删除多余的functor应用程序文件(和目录)中Semant/精心制作Semant/模块.

[2020/04/05]

修复了错误#195#196

  • #195:添加缺少DOdec公司功能中的大小写获取拒绝订单在里面ElabMod公司(阐述者/阐述/elabmod.sml l.~563)

  • #196:已修改伊拉布多德在里面细化器/细化/elabcore.sml返回空的静态环境(SE空)

[2020/04/02]

heap2execheap2asm公司程序。

  • 修改了配置/安装.sh要删除的脚本箱子/堆2exec当所需的助手箱子/加热器安装。

  • 补充-静态-动态作为选项heap2exec(这些与--与a链接--与so链接)

  • 重写heap2asm公司更具前瞻性。

[2020/04/02]

已解决的错误#247(@SMLVersion应报告64/32位)添加新的命令行选项(@SML字号)到.run sml(运行sml)命令脚本。指定此选项将导致字号待打印(或3264)然后程序将退出。

[2020/03/19]

修复错误#252(Boyer Benchmark编译失败)。这次撞车是由CPS/主/建筑-侧面.sml编码导致为生成不正确的操作码保存/负载偏移量为>= 256.

[2020/03/04]

修复了最大数组/向量长度的计算64位目标。我们一直在使用32位的计算目标。

[2020/01/14]

修复错误#245(惰性数据类型会导致编译器错误)。问题是许多符号(例如,放弃)曾经是_核心结构,但需要支撑编译器中的惰性(和分析)功能。这些符号有已恢复,并添加了一条评论来解释其原因正在包括在内。

[2019/12/23]

修复错误#244(编译器错误:ppval.sml中的PPObj:ppFields)。代码生成器对raw64记录使用了错误的长度标记在64位机器上(长度的两倍)。

[2019/12/21]

清理配置/构建机械中的各种问题当归内酯.这包括对错误的修复#240(非默认64位安装构建失败)

[2019/12/18]

修复bug#239(日期至时间不正确(系数为10E9)。感谢Johannes 5 Joemann的报告和修复。

110.96版;2019/12/13

[2019/12/12]

修复了^C(和其他信号可能被忽略)的问题。修复方法是在VProc状态向量中使用单词大小的字段,以便程序集代码中的单词大小的移动操作不会破坏相邻字段。

[2019/12/12]

修复错误#234(将NaN转换为字符串将导致无限64位机器上的环路)。问题出在MLRISC/amd64/mltree/amd64-gen.sml,参数是无序的。

[2019/12/12]

从中删除了断言检查amd64型运行时生成文件。自110.94发布以来,没有出现任何错误,因此我们将假设事情按其应有的方式运行。

[2019/12/01]

错误修复程序#237(heap2exec脚本在110.95失败)。修复由基里尔·博拉耶夫提供。

[2019/11/23]

将上的默认安装大小更改为64位macOS操作系统10.14莫哈韦和后来的人。

[2019/11/14]

修复了电子氙气源(错误#233). 使用这个大单词模块更改自单词3264字,有有几个地方的东西坏了。

[2019/11/14]

增加了对64位可执行文件的支持自由BSD。作为其中的一部分通过努力,我们为上的32位版本自由BSD是在X86.prim.asm公司文件被重写。我们也从BSD公司信号处理至POSIX公司信号处理,因为这是我们用于大多数其他系统的。

[2019/11/12]

固定的配置/安装.sh脚本,它没有传递大小选项.link-sml链接,这给“-64"标志。这个问题后来被报告为bug#235#236.

[2019/11/10]

许多年前,SML/新泽西有一个字节码解释器,但主要是很久以前就从系统中删除了。然而,也有一些它在运行时系统中的残留物。这些现在已被删除。

做出这一改变后,“目标”和不再需要“主机”体系结构。因此,这些已合并为单个架构属性。这件事的影响合并如下:

  • 这个目标_xxx主机_xxxC预处理器符号替换为单个建筑_xxx运行时系统中的符号。

  • 这个新泽西州SML。系统信息结构现在提供获取架构名称获取建筑尺寸功能。

  • 以下内容新泽西州SML。系统信息函数已弃用,将在110.97中删除:获取主机大小,获取主机架构、和获取目标架构.

110.95版;2019/11/09

[2019/11/09]

修复错误#230(新文字列表代码无法处理一对雷亚尔)。

[2019/11/09]

简化了Cygwin的运行时系统构建规则。

[2019/11/08]

已创建脚本配置/prepare-win-install.sh,实现准备中源文件和bin文件的提取和分解用于Windows安装。

[2019/11/07]

修复错误#229(实际值字符串错误)。这个错误是实际上是两个不相关的问题。问题是Real.to字符串收益实际posInf对于0.0e123213213123213123123已经是固定在RealScan(实时扫描)模块(系统/基础/实现/real-scan.sml).第二个错误是110.93年引入的回归,其中SIGFPE公司信号被指定为进入之内指示,然而Linux操作系统实际信号西格斯格夫对于进入之内。请注意可能存在相关问题BSD公司系统,其中SIGBUS公司可以是信号,但我们需要访问测试机器进行验证。

[2019/11/07]

修复错误#230(编译MLton源时出现分段错误SML/NJ 64位)。问题是,当一个大向量在创建时,程序集代码没有正确还原堆栈在尝试调用运行时系统进行分配之前进行状态。

[2019/11/04]

运行库现在使用地图_无用于在64位Linux上分配内存。此更改修复了不允许的Linux版本的问题访问/dev/零(例如在Chrome图书).

110.94版;2019/10/31

[2019/10/23]

修改了安装的通用(base/system/smlnj/installer/generic-install.sml)以支持条件目标。现在可以编写如下测试

如果是UNIXunix-utils结尾

当前可以测试的符号有尺寸_32,尺寸_64,UNIX系统、和窗户。请参阅配置/目标文件以获取更多详细信息。

[2019/10/23]

修复了错误#227(CPS收缩量过大基于word8的时间测试)。

[2019/10/22]

修改了CPS收缩阶段,以优化以下情况数值转换应用于常量值。

[2019/10/21]

修改了Unix安装程序脚本(基本/system/smlnj/installer/nix-install.sml)将size参数传递给配置脚本。使用了此参数ASDL公司配置。

[2019/10/21]

检修了安装脚本(配置/安装.sh)以及各种脚本模板(例如,配置/_run-sml)允许设置默认大小。这个配置/安装.sh脚本现在支持以下内容论据:

-默认 大小

指定默认大小sml公司和其他命令,其中大小是其中之一3264.

-32

安装32位版本的系统。

-64

安装64位版本的系统。

可以通过运行以下命令在同一位置安装两个版本这个安装.sh编写两次脚本。例如,命令

%配置/安装.sh-32%config/install.sh-默认64

将安装两个版本,默认为64位版本。一个然后会使用命令sml-32型运行32位版本的系统。请注意,必须先安装默认版本。

[2019/10/21]

添加了对的支持-64固定(fixpt)中的脚本基础/系统.

[2019/10/17]

添加了对的支持-64cmb品牌中的脚本基础/系统.

[2019/10/17]

重命名为真实表示构造函数到原始64,与匹配运行时系统中正在发生的事情。也重命名为到真实功能至Real64.

[2019/10/15]

更新了新泽西州SML。系统信息结构,方法是从奥斯金对应于过时系统的数据类型。还添加了一个获取主机大小返回主机体系结构的本机单词的函数大小(位)(例如、32或64)。

[2019/10/13]

添加了-64测试ml中的脚本基础/系统.run sml(运行sml)脚本。因此,可以指定使用命令的32位SML/NJ版本sml-32型以及使用命令的64位版本sml-64。目前,32位是默认值,因为64位系统不稳定。

[2019/10/13]

从中删除了过时的操作系统新泽西州SML。系统信息.os_kind数据类型。此更改将类型减少为两个构造函数:UNIX系统WIN32系列。还添加了一个函数获取主机大小系统信息结构,返回以位为单位的主机字大小(,或者3264). 单词大小现在在编译器的启动时的横幅消息。

[2019/10/12]

修复了错误#130(未能升起绑定例外)。补充一个函数可反驳的ElabData/types/typesutil。{sig,sml}使用它来限制val绑定的类型泛化细化器/types/typecheck.sml.该修复程序不能正确处理OR模式的可反驳性,但val绑定中的OR模式是一个值得怀疑的特性。

此更改还修复了错误#188(缺少的警告非穷尽的valbind模式),错误#190(意外异常SML/NJ中的列表模式匹配无效),以及#199(编译器漂亮打印结果中的错误)。

[2019/10/04]

修改了cmb品牌支持传递编译器控件的脚本标记到build命令。标志应在路径到sml公司命令(如果已发出)。

[2019/10/04]

已完成新文字字节码引擎的实现。有一个控制标志(控制。CG.newLiterals公司允许在新旧字节码之间切换)。

[2019/10/04]

修复错误#225(数学.ln在Windows上给出错误答案)。问题是Unix和Microsoft的方式不一致汇编程序解释了FLD公司说明。

[2019/10/03]

清理Basis Posix库代码(SML和运行时)以在以下方面保持一致:系统字.word类型正用于在SML代码和运行时系统之间通信信息。

110.93版;2019/09/05

[2019/09/04]

添加对指定32位或64位目标作为命令行选项的支持.arch-n-opsys法.link-sml链接脚本。默认大小为目前为32位,但一旦64位支持稳定下来,情况就会发生变化。

[2019/09/03]

对涉及标记整数/单词的转换进行通用代码生成,尺寸在哪里默认整数大小。只有这种情况发生于单词8.单词32位目标上的值,但对于64位目标上的32位值。

[2019/09/02]

重写INLLSHIFT(换档),INLRSHIFTL(换挡)、和内举primops公司(编译器/FLINT/trans/transprim.sml). 扩展过程现在可以正确处理小于的类型上的移位操作默认标记整数大小。此更改还允许单词8要内联的轮班操作。

[2019/09/02]

修复了算术右移操作的不断折叠中的一个错误。当最重要的符号出现时,该符号没有扩展为单词已设置。

[2019/08/25]

修复了中的一个错误实际到人工支出函数(指数已关闭一,这意味着尾数是预期的两倍值)。此修复程序还修复了中的一个问题Real.to大型Int,其中在某些情况下,该函数将进入无限循环。

更新
2022/06/29

此更改可能也修复了错误#208(实际到人工支出在某些情况下会产生不正确的结果)。

[2019/08/24]

修复了错误#173(操作系统。进程.睡眠仅适用于整数)。对于具有精细睡眠功能的系统,例如纳秒睡眠(2) 系统调用操作系统。进程.睡眠Posix公司。进程.睡眠函数现在支持亚秒粒度。

[2019/08/18]

重组CPS收缩阶段,使整数/字转换更加统一。还修复了一个错误哪里Int32.fromLarge(字32.toLargeInt 0wxffffff)返回~1而不是提高溢流。问题是那个测试(m,n)o副本(n,p)正在融合副本(m,p)什么时候m=p,而不是TRUNC(米,磅).

[2019/08/14]

Int64比较并不总是正确的,这导致了一些积极的结果值被打印为负数(基本上当符号设置了较低单词的位)。

[2019/08/13]

补充不安全的。国际信息结构,它提供对内部表示国际信息网类型。请注意这种表述在未来可能会发生变化。

[2019/08/12]

修复了错误#223(增量生成在Windows上失败)。曾经有过一个失踪的人关闭手柄()获取文件的时间戳时。

110.92版;2019/08/10

[2019/08/08]

改变基本/系统/所有交叉要使用的脚本cmb交叉脚本。还修改了cmb交叉构建压缩tar的脚本文件,当给定-z(z)选项,并清除中间产物文件夹。

[2019/07/16]

重组了amd64型机器代码生成实现和填充了许多缺失的编码。它应该是完整的SML/新泽西代码生成,但需要更多的工作来支持完整集中描述的操作amd64.mdl语言文件。

[2019/07/16]

x86处理器MLRISC后端。删除了MULB(蘑菇),MULW公司、和MULL公司无符号乘法指令,因为它们不是二进制操作。这个MULL公司说明包含在这个MULL1公司中的构造函数多DivOp数据类型。同样的变化已应用于amd64型后端。

[2019/07/15]

amd64型机器描述:

  • 删除了PUSHB公司,PUSHW公司、和推动指令,因为匹配流行音乐不支持操作。

  • 删除了呼叫操作,因为它与呼叫.

  • 删除了CLTD公司CQTO公司操作,因为这些名称只是的同义词干熄焦CDO公司.

  • 已替换INTO公司操作(在64位模式下无效)字节INT.

[2019/07/13]

用于交叉编译到其他架构的新脚本;脚本仍被调用cmb品牌,但现在支持特定于目标的前端中的依赖项(,表示数字类型和末端烷)。制定了交叉编译方案由Matthias Blume编写,然后编码到脚本中。

[2019/07/11]

运行时系统现在为amd64体系结构构建。大部分这些变化与32位上的平面BIBOP之间的差异有关平台和64位平台上的两级BIBOP。

[2019/07/09]

修复bug#224(大Int中的64字失败)。问题是中的记录类型不正确定制付款服务/opt/infcnv.sml(它是RK_记录而不是RK_自动挡块).

[2019/07/08]

更改了代表数据类型构造函数单词32原始(其中涵盖32位平台上的32位和64位数字)。我们现在转换为具体数字类型。

[2019/06/28]

删除了对多态数组使用运行时类型传递。此更改的效果是使用阵列.Array当元素类型为 真实的(例如,排序Int32.int数组速度快1.2倍),但当类型为真实的.使用单态类型RealArray.array(实数组数组)在reals数组上获得最佳性能。

版本110.91;2019/06/20

[2019/06/20]

我们添加了一个新的primop,实际_位将浮点值强制转换为相同大小的单词值。此primop允许Assembly.logb函数在中实现SML公司.

我们还重构了数学要共享的结构针对不同级别的硬件支持。

[2019/06/19]

重写x86和AMD64目标的程序集代码。以前,这里是Unix和Windows的独立源文件;这些已经被替换了通过单个通用文件(每个架构一个)。这个联合税。小时文件也被替换为x86语法。小时,它涵盖了x86和AMD64。

这个AMD64.prim.asm公司文件现在可以编译了,尽管还有一些次要的一旦我们有了一个有效的代码生成器,就必须修复这些问题。我们还修复了与垃圾收集器相关的一些问题在64位目标上使用2级BIBOP。

[2019/06/18]

间隔时间代码中的一些清理。与另一个保持一致特定于时间的函数,我将运行时系统API切换为使用无符号64位纳秒指定时间值。我也有为添加了一个实现c-libs/smlnj-runtime/itick。c(c),其中不见了。最后,移动了Windows特定的文件win32计时器。c(c)运行时/内核运行时/马赫步.

[2019/06/16]

增加了目标特定的64位实现基础库目录中的模块基础/实现/目标64位.

[2019/06/16]

补充PackWord64大压缩字64小结构到基础库。请注意,这些功能的实现是特定于目标的。

[2019/06/16]

补充bigEndian公司目标签名。

110.90版;2019/06/12

[2019/06/12]

修复了Concurrent ML库以使用64位位置(均为Unix和Windows)版本。

[2019/06/11]

将年份偏移从SML移动到运行时系统。此更改是因为Windows使用1601作为0年,而UNIX使用1900。我们还切换到使用以纳秒为单位的无符号64位时间作为Basis代码和运行时系统之间的接口。此更改与其他传递时间值的地方一致在运行时代码和SML代码之间。

[2019/06/07]

修复了CM的符号过滤问题(请参阅错误#222).

当库l2厘米导入两个符号B类11.cm然后导出相同的但是一个不同的B类(可以根据导入的B类). 此外,为了使问题同时发生B类在内部11.cm必须来自同一SML源文件。

使用上述设置,运行时

厘米.制作 “二厘米”;

有可能不是看到新的在中定义12厘米人们仍然会看到来自1厘米.

[2019/06/04]

窗户实施这个基础库和运行时系统:

  • 添加特定于目标的把手支撑结构把手类型,这是一个指针大小的单词值。

  • 支持使用64位文件位置的更改。

  • 替换了表示时间值的参数对(秒和微秒),单个64位微秒计数。

[2019/06/04]

已实施Basis Library提案2019-001(修正PRIM_IO签名).此建议更改了效用读卡器中的函数Position.int选项,这是支持大文件所必需的。

[2019/06/03]

添加了primop支持(PTR_TO_WORD(PTR_TO_WORD)单词_TO_PTR)对于指针(_pointer)110.89中添加的类型。这些Primop是暴露在新的内联T。指针结构。我们定义了一个指针Imp在Basis实现内部使用的结构和a不安全的。指针用户可见的结构。

110.89版;2019/06/01

[2019/06/01]

切换职位要绑定到的结构国际64和已更新运行时系统使用64位整数作为文件偏移量,以及时间值(以纳秒为单位)。此更改修复了错误#33(inputLine函数溢出异常)和#36(不能打开非常大的文件)。

[2019/06/01]

添加了摘要指针(_pointer)类型转换为基元类型。这种类型将用于表示运行时系统指针(例如,的把手Windows实现中的值)。

[2019/05/31]

删除了体系结构和操作系统的生成文件和代码不再受支持的(例如、DEC Alpha和HPPA架构)。

[2019/05/31]

已切换固定Int大单词结构别名为64位(,固定Int现在已绑定到国际64大单词已绑定64字).

[2019/05/30]

我们现在假设至少有C99码支架(用于出于实际目的,这一假设甚至在Windows上也是正确的)。在这种假设下运行时已从宏切换到内联函数(请参见runtime/include/ml对象。小时). 此更改允许32位整数的优雅处理,这些整数是堆分配的在32位机器上,但在64位机器上进行标记。

[2019/05/29]

修复了实现中的各种错误64字操作。加减运算符正确使用算术移位,而不是逻辑右移。此外,翻译由于输入错误,64位移位操作不正确变量名称。

[2019/05/27]

创建了简化版本的MLRiscGen公司函子。此版本文件中的functor代码gen/main/mlrisc-gen-fn.sml不包括内存消歧和GC类型代码。旧版本(代码Gen/main/mlriscGen.sml)没有使用这些默认情况下生成的代码。

此更改的目的是删除32位的未使用代码依赖关系。

[2019/05/25]

为未签名添加收缩REM(快速眼动)NEG公司中的操作定制付款服务/opt/contract-prim.sml.

110.88版;2019/05/15

[2019/05/15]

移动了编译器/DEVNOTES目录到开发说明并将其重命名旧编译器注释.

[2019/05/15]

增加了64位版本的数字格式扫描次数。我们使用32位32位或更少的版本和64位版本最多64位的数字。因此,在32位计算机上,默认整数单词类型使用数字格式32扫描数量32,打开时他们使用的64位机器数字格式64扫描数量64.此更改还需要将一些通用代码拆分为扫描工具结构,并将实数扫描拆分为这个ScanReal公司结构(reals的格式已经独立了结构)。

[2019/05/15]

重新实现64位整数单词类型将其放置在(大多数)与其他精度相同。在这个新的实施中,基本类型整数64字64现在是主要(取而代之的是属于摘要由装箱的32位字对表示的类型)。这些类型上的算术和比较操作表示为primop和一直保存到闭包转换之前。在这一点上编号64Cnv结构(编译器/CPS/opt/numcnv.sml)用于将64位操作和常量扩展为32位操作。大多数64位primop是内联扩展的,但乘法和除法运算转换为从核心64核心词64模块(系统/smlnj/init).

因为类型是原始的,所以我们能够更改运行时使用打包记录的表示(RK_自动挡块)代表它们既节省了空间,也有助于提高性能。

请参阅dev-notes/num64.md文件以获取有关实施。

[2019/05/09]

重新组织了基础库源文件(系统/基础)隔离依赖于目标单词大小。

依据/实施目录,我创建了子目录(例如,目标32位)保存特定的实现目标。这些目录包括绑定结构.sml文件取代了许多绑定-*.sml中的文件依据/实施.

基础/出口目录,我替换了许多个人文件(每个文件都有一个模块重命名)绑定-通用.sml(用于target-independent绑定)和特定于target的文件(或绑定目标-32位.sml绑定目标-64-bit.sml).

[2019/05/05]

一些CPS优化模块(展开EtaSplit公司作为机器规范上的仿函数编写,但实际上,它们从来没有引用他们的函子参数。因此,它们已被转换结构。

[2019/05/04]

我们现在使用内联T.标识首字母大写Fn.id公司,所以编译器可以优化它。

[2019/05/03]

固定印前回归110.87;的值烧焦类型缺少它们的引号。

110.87版;2019/05/03

[2019/05/03]

制造了字符.chr操作符内联(添加了primop以支持110.86中的变化)。

[2019/05/03]

中基本运算符的主要重命名内联结构(如中所述dev-notes/primop-list.md). 还清理了基础库实现以删除大多数(但不是全部)32位依赖项。

[2019/05/03]

将案例添加到顶级漂亮打印机以处理新的基本110.86中添加的类型(例如,单词8矢量查拉里).还更改了处理基元类型的方式,以使用表由类型控制符键控,而不是嵌套条件序列。

110.86版;2019/05/02

[2019/05/01]

补充单词8矢量查拉里到基本类型编译器知道。这些将用于重写内联T结构。

[2019/05/01]

已替换Primop.Primop公司施工人员数字下标NUMUPDATE(数字更新)具有

`sml公司|numkind的NUMSUBSCRIPT|numkind的NUMSUBSCRIPTV|numkind的NUMUPDATE|numkind的INLNUMSUBSCRIPT|numkind的INLNUMSUBSCRIPTV|numkind的INLNUMUPDATE`

此设计与多态订阅的命名约定相匹配和更新。

[2019/05/01]

补充普里莫普。内循环实施字符.chr作为内联函数。这一变化还需要移动氯代甲烷例外情况核心模块,以便可以访问平移阶段。将启用Char.chr的内联版本在110.87版本中(我们需要内部primop才能实现使用它)。

[2019/05/01]

对基本运算符的表示进行了重大修改(均在这个Primop公司CPS。P(P)结构)。原始算术和比较操作现在在算术运算结构(ElabData/prim/arithops.sml). 定义了三种数据类型在本模块中

  • arithop—可能引发溢出的整数算术运算

  • pureop-纯算术运算

  • cmpop-比较操作

这些类型用于Primop公司CPS。P(P)模块,这使得表示之间的转换更加直接。

一些细节:

  • 内联除法和模运算被添加到Primop.Primop公司数据类型;这些在中的扩展这个TransPrim公司模块(FLINT/trans/transprim.sml公司)添加了被零除的显式检查。

  • 这个FSGN公司运算符已添加到Primop.Primop公司数据类型,自从新的厘米波普数据类型不包括它(CPS IR已经将FSGN作为单独的分支构造函数)。

  • 无符号比较操作现在使用这个UINT公司 数字标识,这与他们表示为CPS公司.

  • 重命名为primop圆形真实_圆形.

  • 在pickler中修改了操作员的编码,结果以更紧凑的方式使用数字代码。

[2019/04/28]

删除了未使用的记录类型构造函数(RK_SPILL公司,RK_EXN公司、和遥控_锁定)来自CPS.记录_种类数据类型。也已重命名RK_I32块RK_自动挡块RK_块RK_RAW64块.各种其他重命名以删除32位假设。

[2019/04/28]

已重命名DTAG_制图32DTAG_绘图,因为64位系统上的语义将需要与字号对齐的原始数据。也已重命名ML_分配原始32ML_分配原始ML_收缩原始32ML_收缩原始出于类似的原因。

[2019/04/28]

从中删除了未使用的标志控制结构;这些大部分都来了控制。CG公司60面旗帜中约有20面不再使用。

[2019/04/27]

合同构造成自己的结构ContractPrim公司结构。

[2019/04/27]

将primops到PLambda的翻译拆分为自己的文件(编译器/FLINT/trans/transprim.sml).

[2019/04/27]

固定回归:文字32.toInt 0wx8002DE32;会回来的187954相反提高溢流问题是溢出的方式错误中正在生成陷阱MLRiscGen公司.

[2019/04/26]

一些小的初步清理。

  • 更改了的类型普里莫普。圆形普里莫普。真实取位宽度,而不是numkinds,因为种类总是一样的。此外,这些字段现在称为(而不是来自kind托金)与其他转换primop一致。

  • 已重命名防抱死制动系统晶圆厂,因为它只用于浮点数。

  • 重命名了CPS基元运算符圆形实际时间(_I)和操作员真实INT_TO_真实.

  • 重命名为普里莫普。真实普里莫普。INT_TO_真实这样就不会混淆其他名为真实.

[2019/04/23]

对中核心64位int和word模块的改进系统/smlnj/init.已替换国际64+,国际64-,64字+、和64字。具有版本来自《黑客之乐》使用较少的条件分支。阿尔索替换了关系运算符(<,等)更直接实现。

[2019/04/21]

修复错误#213(国际32.div加薪Div公司而不是溢流当划分时最小Int通过~1). 由于编译器生成对被零除的显式测试,我们知道唯一的算法陷阱必须由其他操作引起。因此,我们可以将任何算术陷阱映射到溢流.

还删除了用于乘法和部门。代码生成器始终使用本机硬件说明,因此不需要汇编代码。

[2019/04/21]

再次尝试实现使用在REPL中以明智的方式工作。

随着这些变化,使用应如下所示。如果调用使用遭遇编译错误(在初始文件或嵌套文件中调用使用),则编译器错误消息为打印和呼叫使用将立即返回().如果调用使用在执行期间引发异常编译代码的调用使用),则将在以下位置报告异常顶层。全球状态或环境的任何变化发生错误之前,将被轧制返回。

指定为命令行参数的文件sml公司命令将被视为使用被调用。如果有错误,则会报告错误,并且sml公司命令将以非零退出状态终止(至少在Unix上)。

此更改修复了错误#193,#217、和#219.此更改与#183,其中已在版本110.82中修复。

[2019/04/21]

更改为CPS primops:移动了F_SGN公司运算符(一元)来自fcmp公司数据类型到分支数据类型(并将其重命名FSGN公司).

[2019/04/21]

已将CPS IR转换为与兼容的格式ASDL公司。基本上,这涉及到转换数据类型构造函数名称转换为大写标识符。

这些更改是最终切换到基于LLVM的计划中的一步将被指定为pickle CPS代码作为其输入的代码生成器。

[2019/04/08]

开始将CPS IR迁移到ASDL版本。更改了的名称CPS。P.arith公司CPS。P.cmpop公司施工人员应占上风alpha ID(其中许多是符号标识符)。还将新的CPSUtil公司模块(CPS/CPS/CPS-util.sml).最后,移动了文字.sml文件来自FLINT/主要CPS/主(其中它属于)。

请注意CPS。P.arithop公司数据类型现在与Primop.快捷方式数据类型

[2019/04/07]

通过移动与CPS相关的将代码放入自己的目录树(编译器/CPS)并更换FLINTComp公司函子飞行选择结构和CPSCompFn公司函子。从FLINT到CPS的转换是CPSCompFn公司functor,它从FLINT到机器代码段。

110.85版;2018/12/21

[2018/12/21]

被改进的配置/安装.sh在尝试时查找Mojave之前的SDK安装在macOS 10.14 Mojave上。

[2018/12/21]

已更新运行时/objs/cygwin.def这样运行时系统将构建在32位Cygwin上。还更新了安装脚本以建议使用当用户尝试在Cygwin64上安装时,会显示32位版本的Cyghin。

[2018/11/10]

X代码10.1,这是苹果的开发环境macOS 10.14操作系统莫哈韦,不包括构建32位可执行文件所需的库,例如SML/NJ运行时,尽管32位程序仍将运行。

为了支持在Mojave上构建,我添加了一个新的Makefile(mk.x86-箭头18)并修改了配置/安装.sh脚本以在必要时使用此生成文件。此新生成文件需要那个MacOSX10.13.sdk电脑目录来自X代码9已经复制到X代码10 SDK目录。请注意,更新X代码从AppStore中删除10.13 SDK可能会被删除,因此您应该保留放在安全的地方。

这个X代码SDK住在平台/MacOSX.平台/开发人员/SDK开发商目录。可以确定到使用命令的当前开发人员目录

%xcode选择-p
[2018/10/10]

从编译器中删除了几个不受支持的基元运算符。在CPS IR中,这些是自由的,阿德里克,集合伪,设置标记、和获取伪。中不支持伪注册操作代码生成器,而其他都是no-op。相应的操作员GETPSEUDO公司,SETPSEUDO公司,设置标记、和处置已删除ElabData/prim/primop.sml并从中删除了它们的绑定Semant/prim/primop-bindings.sml以及内联T不安全的结构。

这个AllocProf(分配专家)编译器中的模块也被禁用,因为依赖于伪寄存器在运行时。此外阿德里克中的基元操作FLINT/cps/闭合.sml启用静态分析时被删除。

这些更改作为修订版4886提交。

[2018/10/08]

修复错误#216(运行时系统致命错误,顶层较大值)。问题出在建筑文字的代码中。

[2018/09/23]

将用于包装/解包整数值和浮点值的CPS运算符更改为字号要灵活。我们现在使用单个(和打开包装)操作员由参数化的数字标识价值。我们还更改了/打开包装运算符到/拆箱.旧操作符到新操作符的映射如下所示:

打开包装

拆箱

iwrap公司

换行(INT defaultIntSz)

乌恩瓦普

展开(INT defaultIntSz)

i32包裹

包裹(内景32)

i32展开

展开(INT 32)

转发

包裹(浮动64)

葬礼

展开(浮动64)

[2018/09/13]

功能中64BIT的进一步清理原子能质量在里面PEqual公司.(base/compiler/FLINT/trans/pequal.sml).补充数字种类,整数EqTy、和uintEqTy(单元设备类型)功能。这个数字种类函数应扩展一次整数64字64被视为原始类型。

[2018/09/12]

修复了模块中的64BIT问题匹配组件(base/compiler/FLINT/trans/matchcomp.sml).补充int64类型单词64类型要运行的案例数字Con.

[2018/09/12]

修复了模块中的64BIT问题相等(base/compiler/FLINT/reps/equal.sml).仅导出一个函数:等分支路,在中调用一次代表/包装.sml在呼叫时键入specialized分支POLYEQUAL公司.

[2018/09/12]

CPS优化器具有根据FLINT检查CPS的机制类型,这需要维护从lvar到其FLINT的映射类型。此代码已经很久没有进行位只读了,甚至无法处理简单表达式类似1+2因此,我删除了映射(散列表)和修改它的残留代码在各种CPS优化过程中。

[2018/09/12]

修改了InfCnv公司(现命名为IntInfCnv公司)要删除的结构32位依赖项。

[2018/09/11]

被改进的Pequal公司(英寸base/compiler/FLINT/trans/pequal.sml)和翻译(英寸base/compiler/FLINT/trans/translate.sml)要删除32位依赖项。虽然还需要进一步的修改正确处理整数64字64类型,当默认IntSz= 64.

[2018/09/11]

重新实施了交换机模块(int基/编译器/FLINT/cps). 这个新的实现遵循与以前相同的基本设计,但代码更好地组织和记录,现在它使用具体的CPS公司表示,而不是在抽象上参数化他们。它现在还对装箱使用二进制搜索(例如。,32英镑)开关。

110.84版;2018/09/03

[2018/09/03]

重新实现了数组/向量切片模块以使用(base、start、length)表示(就像system/smlnj/init/Substring.sml中的Substring一样)。阿尔索修复了切片findi函数中的一个错误,其中索引被传递给谓词函数未调整为相对于切片。

[2018/09/02]

改进的实施字符矢量切片.mapCharVectorSlice.mapi字符矢量切片不生成中间结果列表。

[2018/08/28]

ASDL库和asdlgen公司工具已添加到系统。此版本的工具实现了SML支持,但C++支持不完整。ASDL有一个CM工具,它认识到.asdl语言文件后缀。

[2018/08/28]

安装程序的两个更改(base/base/system/smlnj/installer):

  1. 程序的构建脚本现在已命名build.sh(建筑.sh)(而不是建造)在Unix系统上。

  2. 这个配置已添加操作以支持模块配置。

[2018/08/27]

补充重命名CM工具支持的扩展样式。此扩展名样式允许从基名称生成任意文件名。

[2018/08/19]

修复了单态缓冲区实现中的一个错误:函数字符缓冲区.add1文字8缓冲区.add1长度不正确测试。

[2018/06/15]

修复了编译器错误(arg ty列出了错误的长度)英寸unifyTy(统一Ty)那个当类型构造函数之一为错误类型.发生此错误的原因是错误等于任何其他类型构造函数,它(错误地)暗示类型的数量参数应该相等。

110.83版;2018/06/01

[2018/05/29]

固定的#206(解析显式类型变量和val rec已损坏)。这个错误也是旧错误列表中的1261号错误。

[2018/05/29]

修复了Date.toString中的小错误(缺少月份日期的前导“0”)。此问题是旧错误列表中的错误号1444。

[2018/05/29]

已清理匹配编译器代码(FLINT/trans/matchcomp.sml文件)并添加了键入和函数注释。增加了调试和打印基础设施,包括新的FLINT/trans/mcprint.sml文件文件和新文件控制。MC.调试标志。

[2018/05/29]

修复了允许括号括起来的分析器val记录模式。

[2018/05/28]

修复了扫描仪为错误转义生成正确错误消息的问题字符串文字中的序列。

[2018/05/26]

修复了旧的错误号1383:字符toC字符串#“\000”返回"\\0",而不是"\\000",导致字符串到CString产生无效结果。

[2018/05/19]

修复错误#201(缺少AMD64.cm库)。

[2018/05/18]

补充单缓冲器签名,带实例CharBuffer(字符缓冲区)Word8缓冲区,至基础实施(基础库提案2018-001).

[2018/05/16]

修复了接受“0w”作为十六进制前缀的错误单词值单词.fromString/扫描(忽略大小写,仅“0x”和“0wx”是有效的前缀)。此更改修复了错误号1375从旧的错误列表中。

[2018/05/13]

修复了在分析涉及操作关键字。解析器比定义更具限制性。此更改修复了旧错误列表中的错误号1370。

[2018/05/12]

lexer在“*)”上给出了一个不匹配的结束注释错误应该将其扫描为标记“*”)。此更改修复了旧bug列表中的bug编号330。

注释:关于什么是正确的行为,存在一些歧义应该在这里。这个标准ML的定义(1997)只是说无与伦比的打开注释应显示为错误,但标准ML定义述评(1991)在附录D。SML/新泽西在版本0.71中开始发出错误信号,但我们选择恢复接受这个序列,以匹配1997年的定义(以及其他系统的行为)。

[2018/05/07]

这个同一标志函数在国际31国际32模块。

[2018/05/07]

修复了各种次要的分析和扫描问题:

  • 类型变量的正确语法

  • 签名/结构/函数ID应始终为alpha ID

  • 相等ID(=)不能出现在绑定上下文中。请注意我们仍然允许语法val op==因为它需要解析文件system/smlnj/init/built-in.sml.

[2018/05/05]

对int/word文本的处理方式进行了彻底检查编译器。我们现在使用国际信息网表示中的值所有IR。这种变化也会导致更好的CPS收缩,因为现在,我们对有符号和无符号值都执行常量折叠各种尺寸。我们还能够摆脱那些棘手的代码担心标记的大整数值可能导致溢出在代码生成期间。

[2018/04/21]

改进了涉及文字值的错误报告。我们现在描述错误中的值时使用原始源文本消息。

[2018/04/20]

修复错误#191(处理大型实数时编译器崩溃)。我们现在对将四舍五入为零的实际文字发出警告实际文字太大而无法表示的错误。那里仍然需要做一些工作来支持亚正常文字值(目前四舍五入为零)。

[2018/04/14]

将实际文字的表示从字符串更改为实际照明。t吨.

[2018/04/13]

删除了Absyn和FLINT中的真实模式,因为它们是不允许的SML'93,且不在AST代表中。

[2018/04/12]

修复错误#194(实际值字符串溢出或挂起)。那里这里有两个问题。首先溢流引发了异常扫描大指数时,但它未由扫描代码。第二个问题是大规模的缩放循环一旦无穷大(或零)为到达,所以可能需要很长时间。

[2017/10/22]

已将Version-1文本构建代码移动到气相色谱法/旧-手性。c(c).编译器生成版本2后,可以删除此文件文字字节码。

[2017/10/16]

移动了int或word文本是否在的范围内的检查它的类型从absyn→plambda翻译到重载分解器(编译器/精化器/类型/重载.sml).

[2017/10/14]

全面检查编译器处理int/word的方式的第1部分文字。最终目标是使用国际信息网表示文字贯穿编译器的所有阶段。在这一步中,我们更改了中的文字表示Absyn公司代表(较早表示已使用IntInf.int)。

110.82版;2017/10/16

[2017/10/01]

修复了中未编号的错误IntInf.mod公司内部信息.rem功能,其中Div公司例外是在两种情况下都被抚养参数是0.

[2017/09/20]

处理原语操作时的各种清理,例如拆卸时ptnum公司从Absyn转换为FLINT的机制。

[2017/09/20]

补充目标模块,它指定目标的属性(例如,默认int类型的大小(以位为单位)。返工了生成内联T结构特定于目标。

[2017/09/18]

删除了不属于在中内联T因此,编译器永远不会使用结构和。

[2017/09/18]

修复了错误#123(缺少非穷尽绑定警告)。这个mkVB中的函数FLINT/trans/translate.sml语言正在添加冗余默认值通过调用进行规则ElabUtil.completeMatch(ElabUtil.completeMatch)在默认规则具有已显式添加到let绑定的匹配项中。

[2017/09/18]

修复了错误#183(sml REPL返回的状态代码)。此修复程序恢复版本110.79的行为sml foo.sml文件退出时使用中存在类型检查错误时的非零状态foo.sml文件.它还清除与关联的错误消息使用在那里的时候是一个语法错误。

[2017/08/28]

修复了错误#185(使命令行帮助文本与手册页相同)。添加了缺少的选项(@SML版本@SML后缀)到为命令“sml-h”打印的帮助消息。阿尔索调整了帮助消息和man中选项的顺序页面,以便订单匹配。

[2017/08/12]

更改了在次要GC中测试分配空间地址的方式。我们现在不使用BIBOP,而是进行指针范围测试。32位系统,此更改会导致性能小幅度提高(~0.13%),但我们预计64位硬件将受到更大的影响,其中BIBOP的成本探针将更高,有更多寄存器可供保存托儿所边界。

[2017/08/12]

修复了构建文本中的一些问题。这些问题大多是错误的断言中有一些积极的内容,但其中也有一个错误可以想象,对可用空间进行了跟踪导致撞车(但可能性很小)。

[2017/06/07]

更新了_arch-n-os脚本以识别macOS 10.13(High Sierra)作为有效目标。

[2017/05/17]

修复了JSON字符串值打印方式中的一个错误。之前的代码假设C样式转义有效,但对于“\”(以及控件和非ASCII字符)。新的实现假定字符串值是UTF-8,并对外部字符使用“\\u”转义序列JSON转义并打印ASCII字符。

版本110.81;2017/05/01

[2017/04/28]

修复了错误#129(允许将符号标识符作为strid)。

[2017/04/07]

修复了错误#179(ml-ulex将调试消息写入stdOut)。两者都有ml-ulex公司ml-自动现在指导他们的调试和状态消息标准错误(而不是标准输出).

[2017/02/09]

Linux发行版开始要求标记堆栈在应用程序中不可执行。因为运行时系统包括程序集代码,此标记没有发生。我们添加了.部分指示PPC.prim.asm公司X86.prim.asm公司文件为https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart#补丁.感谢Daniel Moerner报告此问题并提供指向修复的指针。

[2016/10/15]

补充--调试命令行选项ml-自动.此标志导致生成打印的调试操作生产的左侧非终结符。

[2016/09/15]

使用64位支持。更改包括生成代码取决于目标字长和BIBOP上的抽象在运行时系统中的表示。

[2016/09/15]

进一步清理FLINT与前端的分离。删除了对的所有引用模块属性列表(模块-plists.sml)英寸前端和酸洗,并移动模plistsSemant/模块FLINT/变速器.模块属性列表现在仅使用在里面FLINT/trans/translate.sml语言.

版次:4314

更改的文件:

  • 编译器/ElabData/modules/modules.sml(已清理)

  • 编译器/精化器/print/ppmod.sml(已清理)

  • 编译器/FLINT/trans/module-plists.sml(已从移动Semant/模块)

  • 编译器/Semant/modules/instance-param.sml(已删除)

  • 编译器/Semant/pickle/pickmod.sml(不再提及属性列表)

  • 编译器/Semant/pickle/unpickmod.sml(同上)

  • 编译器/Semant/statenv/prim.sml

  • 编译器/Semant/types/tp-var-info.sml(已删除)

  • 编译器/core.cm(修改为移动模块-plists.sml)

[2016/09/14]

消除了的依赖性Plambda类型通过添加类型T索引类型这是一个简化的代表Plambda类型.tkind在精化过程中使用。T索引类型值转换为要求Plambda类型.tkind在里面trans/transtypes.sml格式。类型仍有典型路径类型,但它是使用定义的T索引类型现在。新结构SigPropList(信号属性列表)替换模块属性列表(Semant/modules/module-plists.sml)用于实例化.sml.实例化现在直接定义为结构,因此函子中的应用程序Semant/modules/instance.sml不再存在。

更改的文件:

  • ElabData/basics/debindex.sig(从移居到这里细化器/基础)

  • ElabData/basics/debindex.sml(同上)

  • ElabData/basics/sig-plist.sml(新)

  • ElabData/basics/tkind.sml(新增)

  • Elab数据/类型/类型.sig

  • Elab数据/types/types.sml

  • 实验室/模块/实例化.sml

  • 细化器/print/ppmod.sml

  • FLINT/trans/transtkind.sml(新)

  • FLINT/trans/transtypes.sml格式

  • 顶级/交互/evalloop.sml

  • ElabData/ElabData.cm

  • 细化者/细化.cm

  • 芯.cm

[2016/09/14]

添加了对Successor ML记录表达式双关语法的支持。对于例如,现在可以定义一个函数(f)作为

乐趣 (f) x个 = {x个}

这相当于定义

乐趣 (f) x个 = {x个 = x个}
[2016/09/14]

修复了解析器中的错误。阿斯特里克斯(*)不允许作为记录标签当使用记录格式双关语语法时。

[2016/09/14]

添加了对的支持做实验 继任者ML语法。

[2016/09/12]

已修复错误#153(延迟启用后续ML功能)。我们现在使用一个函数控制设置成功ML切换到/从继任者MLREPL模式。该函数重置解析器,因此下一个输入将正确解析。这个控制.succML旗帜不再可见在REPL中。

[2016/09/12]

修复了错误#149(数据类型复制公开隐藏的构造函数)。添加了布尔字段剥去的中tyckind的DATATYPE变量编译器/ElabData/types/types.sml使用默认值.剥去的当数据类型与简单类型签名匹配中的规范,以及数据类型剥去的设置在数据类型复制中不允许设置为true。

更改的文件:

  • 编译器/ElabData/types/types.sig

  • 编译器/ElabData/types/types.sml

  • 编译器/ElabData/types/typessutil.sml

  • 编译器/ElabData/types/core-basictypes.sml

  • 编译器/精化器/types/basictypes.sml

  • 编译器/Ellaborator/types/eqtypes.sml

  • 编译器/精化器/模块/evalent.sml

  • 编译器/精化器/模块/sigmatch.sml

  • 编译器/精化器/模块/实例化.sml

  • 编译器/Elaborator/print/ppabsyn.sml

  • 编译器/实验室/打印/pptype.sml

  • compiler/Elaborator/extensiol/elabcore.sml

  • compiler/Elaborator/expective/elabmod.sml

  • compiler/Elaborator/extensiol/elabtype.sml

  • compiler/Elaborator/expective/elabsig.sml

  • 编译器/Semant/pickle/pickmod.sml

  • 编译器/Semant/pickle/unpickmod.sml

  • 编译器/MiscUtil/print/ppobj.sml

  • 编译器/FLINT/trans/transtypes.sml

  • 编译器/FLINT/trans/pequl.sml

[2016/08/31]

补充%记号类型指示ml-自动; 此指令允许用户在外部指定令牌数据类型,这是必需的与两个不同的lexer共享ml-自动解析器。

[2016/08/20]

将接口更改为AMD64发电机在里面MLRISC公司; 这个signBit(符号位)否定符号位回调现在返回MLTree.rexp(MLTree.rexp)(而不是标签)。

110.80版;2016/08/19

[2016/08/16]

固定的#151(在Mac OS X上从源代码安装时出错)。修复包含对配置/安装.sh脚本和mk.x86-达尔文生成文件。通过此修复,我们包括软件开发工具包论点/usr/bin/as仅当操作系统版本为10.10(优胜美地)或稍后。

[2016/08/10]

添加了建议解压缩地图,解压缩Mapi,找到、和芬迪语功能列表对模块。

[2016/08/10]

添加了建议map左侧,映射右侧,app左侧、和appRight(应用权限)函数到要么模块。

[2016/08/09]

修复了错误#145(伪注释出现内部异常而不是检查诊断类型)。添加缺少OVLD_UB(_UB)中的大小写功能失败消息在里面编译器/精化器/types/unify.sml.

[2016/08/04]

修复了错误#166(无法在包含以下内容的目录中安装SML/NJ空格)。感谢Eugene Sharygin提供补丁。

[2016/06/21]

修复了amd64中32位除法之前不正确的股息符号扩展MLRISC中的代码生成器

[2016/06/16]

修复了错误#150(将标题添加到批处理脚本)。

[2016/05/11]

实施了的更改基础库建议书2016-001。该提案增加了popCount(波普计数)函数到单词签名。

[2016/05/03]

修复了错误#156(sml在SIGSTOP之后恢复,但出现虚假异常报告)。修复有点麻烦:我修改了非bt_hdl中的函数评估.sml匹配爱荷华州异常适合这种情况的形状。

[2016/04/07]

修复了错误#154(出现错误时,返回ml-ulex的代码)。

[2016/04/07]

修复了错误#155(错误打印中的文字错误消息)。

[2016/04/02]

修复了--ml-lex模式标志ml-ulex公司. The\小时转义序列应该映射到字符范围[\128-\255],但没有。

[2015/11/09]

已修复错误#147(不支持字符串中的十六进制转义)。我们以前不支持字符串文字中的Unicode转义。我们现在这样做,将非ascii代码点映射到UTF-8编码将范围为0..255的转义值映射到相应的8位字符。标记超出该范围的值作为错误。

2016年8月4日修订

[2015/10/28]

上的噪声异常堆栈跟踪的部分修复错误例外。此更改处理的案例正在应用使用变成一个不存在的人文件,以及正在生成的程序中出现编译错误时CM.make公司.仍需处理的是以下情况CM.make公司应用于不存在的文件。

110.79版;2015/10/04

[2015/10/04]

已修补基本/编译器/FLINT/clos/closure.sml以便Twelf公司再次构建。修复错误#140(中的查找失败闭合.sml编译时Twelf公司).

[2015/09/28]

添加了对的支持继任者ML工具到CM。此工具允许指定源文件傻瓜.sml继任者ML中的源代码以下方式:

foo.sml:成功mlfoo.sml:sml(suc-ml)foo.sml(suc-ml)
[2015/09/28]

添加了目录基础/旧基础支持向后兼容的视图基础库。您可以通过替换线

美元/基础.cm

具有

美元/基础-2004.cm

在CM文件中。

[2015/09/28]

的新实施日期结构,用于修复错误#138(的错误行为日期.fromTimeLocal)和#139(日期日期已损坏)。请注意,应该多考虑一下给予正确的语义日期.Date处理时偏移。例如,如果偏移+23小时会产生相同的结果日期偏移-1小时?目前,我们的实施产生了这两种情况的结果(一天内)不同。

[2015/09/25]

已实施的更改基础图书馆建议书2015-003。该提案为以下签名:

签名 阵列
签名 列表
签名 列表_对
签名 单阵列
签名 单矢量(_V)
签名 选项
签名 字符串
签名 文本
签名 矢量

以及以下结构:

结构 阵列 : 阵列
结构 CharArray(字符阵列) : 单阵列
结构 字符矢量 : 单矢量(_V)
结构 列表 : 列表
结构 列表对 : 列表_对
结构 选项 : 选项
结构 Real64阵列 : 单数组(_A)
结构 Real64矢量 : 单矢量(_V)
结构 字符串 : 字符串
结构 文本 : 文本
结构 矢量 : 矢量
结构 Word8数组 : 单数组(_A)
结构 单词8矢量 : 单矢量(_V)

虽然这些更改不太可能破坏现有代码,但代码可能会中断的几个场景。即,当使用打开引入冲突以及用户代码何时实现受影响的基础库之一签名。这两个例子都发生在SML/新泽西源代码;前者在中ml-年来源和后者MLRISC公司来源。

[2015/09/25]

添加了的可选实现PackReal64大PackReal64小.此添加解决了功能请求#82(实施密封组件缺失)。实施使用建议的方法迈克尔·沙利文.

[2015/09/24]

修复了错误#45(专门化阶段的编译器错误)。这个bug在中编译器/FLINT/opt/fcontract.sml这是一个糟糕的结果eta收缩和内联之间的相互作用。作为修复的一部分,我稍微清理了FLINT这部分的代码。

[2015/09/21]

对生成的错误消息的改进ml-ulex公司lexer生成器。

[2015/09/21]

补充裁判结构和裁判基础实施签字(Basis Library建议书2015-007).

[2015/09/21]

补充Fn公司结构和FN公司签署基础实施(基础图书馆建议书2015-005).

[2015/08/22]

修复了错误#136(在中错误地提出异常实际.fmt时间.fmt).

[2015/08/14]

补充要么结构和或者基础实施签字(Basis Library建议书2015-002).

[2015/07/23]

修复了错误#135(无法在Linux PowerPC上构建)。

[2015/07/08]

将Linux 4.*内核添加到可识别的操作系统列表中.arch-n-opsys法脚本(修复错误#134).

[2015/06/11]

将Mac OS X 10.11(El Capitan)添加到操作系统列表中.arch-n-opsys法脚本。

[2015/05/27]

添加了对的支持继任者ML词汇扩展。可以启用这些使用命令行选项-Cparser.suck-ml=真或通过分配

控制.救援ML := 真的;

在REPL。扩展如下:

  • 数字文字中的下划线(“_”)作为分隔符;例如,123_456,0wxff_ff_f3,123_456.1, …​

  • 行尾注释,使用(*).期末评论正确嵌套到常规块注释中。例如,以下内容块注释格式正确:

    (*
    fun f x=x(*)我的身份函数*)
    *)
  • 整数和单词的二进制文字;例如,0b0101_1110,或0wb1101年.

此更改是要添加的程序的开始继任者ML功能到SML/新泽西;请参见https://github.com/SMLFamily/Proposed-Definition-of-Successor-ML了解更多细节。