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/27]
[2022/07/24]
[2022/07/24]
[2022/07/22]
[2022/07/22]
[2022/07/22]
[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 或更高。
[2022/06/17] -
修复了错误 #290 (异常的模式匹配不正确)。 修复程序涉及对 FLINT/opt/l合同.sml (功能 swiInfo(瑞士信息) ) 和 FLINT/opt/f合同.sml (功能fcSwitch)。 收缩 当 构造函数是异常构造函数,因为对于异常比较 定义构造函数时,使用conrep字段是不准确的 通过异常标识声明(例如。, 异常B=A ).
[2022/06/01] -
修复了错误 #284 (编译器错误:Contract:UsageMap on 132)。 问题是 CPSTrans.CPSTrans公司 函数正在生成 用于按相反顺序加载溢出参数的代码。 此外 为了修复这个错误,添加了一些详细的代码文档。
[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版本是一个高度优先的版本,我们希望包括 它将出现在下一个版本中。
[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路径 , 外观ValSym → lookIdSym(查找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 .文件 选项/集合.sml 和 opt/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] -
各种精美打印机错误修复:
[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/02] -
修复了错误 #269 ( 文字64.fromString 导致 溢流 对于 大于2 32 -1). 此错误是由 32位版本的代码未针对64位版本进行更新。 扫描两个整数的十六进制和八进制表示 言语受到影响。
[2020/07/22] -
为添加了一个额外的下降通道 STREQL公司 普里莫普。 这个 生成primop以实现对字符串的模式匹配 文字。 以前它在 MLRISC公司 代码生成器, 但我们现在要展开 CPS公司 .此更改的原因 是在 有限责任公司 代码生成器 因为需要引入phi节点,所以会比较复杂 在其中一个分支中。 在中展开 CPS公司 与以前有所不同 现在,我们将要测试的文字字符串烘焙到相等性测试中。 还更改了primop的表示形式以包含字符串 正在测试并移除 STRNEQ公司 普里莫普。
110.98版; 2020/07/16
[2020/07/10]
[2020/07/10] -
更改了 配置/安装.sh 脚本,以便默认大小 对于任何报告其机器为“ x86_64个 ."
[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.sml 和 MLRISC/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.cm 和 ElabData/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 -
添加的功能 选中禁止Cons 到 ElabUtil公司 ( 精雕细琢者/精雕细刻者/埃拉布蒂尔。 {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] -
[2020/04/02] -
与 heap2exec 和 heap2asm公司 程序。 -
修改了 配置/安装.sh 要删除的脚本 箱子/堆2exec 当所需的助手 箱子/加热器 是 不 安装。 -
补充 -静态 和 -动态 作为选项 heap2exec (这些与 --与a链接 和 --与so链接 ) -
重写 heap2asm公司 更具前瞻性。
-
[2020/04/02] -
已解决的错误 #247 (@SMLVersion应报告64/32位) 添加新的命令行选项( @SML字号 )到 .run sml(运行sml) 命令脚本。 指定此选项将导致字号 待打印(或 32 或 64 )然后程序将退出。
[2020/03/19] -
修复错误 #252 (Boyer Benchmark编译失败)。 这次撞车 是由 CPS/主/建筑-侧面.sml 编码 导致为生成不正确的操作码 保存 / 负载 偏移量为 >= 256 .
[2020/03/04] -
修复了最大数组/向量长度的计算 64位目标。 我们一直在使用32位的计算 目标。
[2020/01/14] -
修复错误 #245 (惰性数据类型会导致编译器错误)。 问题是许多符号( 例如 , 放弃 )曾经是 从 _核心 结构,但需要支撑 编译器中的惰性(和分析)功能。 这些符号有 已恢复,并添加了一条评论来解释其原因 正在包括在内。
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/11/23] -
将上的默认安装大小更改为64位 macOS操作系统 10.14 莫哈韦和后来的人。
[2019/11/14] -
增加了对64位可执行文件的支持 自由BSD 。作为其中的一部分 通过努力,我们为 上的32位版本 自由BSD 是在 X86.prim.asm公司 文件被重写。 我们也从 BSD公司 信号处理至 POSIX公司 信号处理,因为这是我们用于大多数其他系统的。
[2019/11/10] -
许多年前, SML/新泽西 有一个字节码解释器,但主要是 很久以前就从系统中删除了。 然而,也有一些 它在运行时系统中的残留物。 这些现在已被删除。 做出这一改变后,“目标”和 不再需要“主机”体系结构。 因此,这些 已合并为单个架构属性。 这件事的影响 合并如下: -
这个 目标_xxx 和 主机_xxx C预处理器符号 替换为单个 建筑_xxx 运行时系统中的符号。 -
这个 新泽西州SML。 系统信息 结构现在提供 获取架构名称 和 获取建筑尺寸 功能。 -
以下内容 新泽西州SML。 系统信息 函数已弃用,将 在110.97中删除: 获取主机大小 , 获取主机架构 、和 获取目标架构 .
-
110.95版; 2019/11/09
[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 ) 以支持条件目标。 现在可以编写如下测试 如果是UNIX unix-utils 结尾 当前可以测试的符号有 尺寸_32 , 尺寸_64 , UNIX系统 、和 窗户 。请参阅 配置/目标 文件以获取更多详细信息。
[2019/10/22] -
修改了CPS收缩阶段,以优化以下情况 数值转换应用于常量值。
[2019/10/21] -
修改了Unix安装程序脚本( 基本/system/smlnj/installer/nix-install.sml ) 将size参数传递给配置脚本。 使用了此参数 由 ASDL公司 配置。
[2019/10/21] -
检修了安装脚本( 配置/安装.sh )以及各种 脚本模板( 例如 , 配置/_run-sml )允许设置 默认大小。 这个 配置/安装.sh 脚本现在支持以下内容 论据: -默认 大小 -
指定默认大小 sml公司 和其他命令,其中 大小 是其中之一 32 或 64 . -32 -
安装32位版本的系统。 -64 -
安装64位版本的系统。
可以通过运行以下命令在同一位置安装两个版本 这个 安装.sh 编写两次脚本。 例如,命令 %配置/安装.sh-32 %config/install.sh-默认 64 将安装两个版本,默认为64位版本。 一个 然后会使用命令 sml-32型 运行32位版本的 系统。 请注意,必须先安装默认版本。
[2019/10/21] -
添加了对的支持 -64 向 固定(fixpt) 中的脚本 基础/系统 .
[2019/10/17] -
添加了对的支持 -64 向 cmb品牌 中的脚本 基础/系统 .
[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系列 。还添加了一个函数 获取主机大小 到 系统信息 结构,返回以位为单位的主机字大小( 即 ,或者 32 或 64 ). 单词大小现在在编译器的 启动时的横幅消息。
[2019/10/12] -
修复了错误 #130 (未能升起 绑定 例外)。 补充 一个函数 可反驳的 到 ElabData/types/typesutil。 {sig,sml} 和 使用它来限制val绑定的类型泛化 细化器/types/typecheck.sml . 该修复程序不能正确处理OR模式的可反驳性,但 val绑定中的OR模式是一个值得怀疑的特性。
[2019/10/04] -
修改了 cmb品牌 支持传递编译器控件的脚本 标记到build命令。 标志应在 路径到 sml公司 命令(如果已发出)。
[2019/10/04] -
已完成新文字字节码引擎的实现。 有一个控制标志( 控制。 CG.newLiterals公司 允许 在新旧字节码之间切换)。
[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] -
补充 不安全的。 国际信息 结构,它提供对 内部表示 国际信息网 类型。 请注意 这种表述在未来可能会发生变化。
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/08] -
更改了 代表 数据类型构造函数 单词32 到 原始 (其中 涵盖32位平台上的32位和64位数字)。 我们现在 转换为 具体数字类型。
版本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源文件。 使用上述设置,运行时
厘米 . 制作 “二厘米” ;
[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]
[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
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_制图32 到 DTAG_绘图 ,因为64位系统上的语义 将需要与字号对齐的原始数据。 也已重命名 ML_分配原始32 到 ML_分配原始 和 ML_收缩原始32 到 ML_收缩原始 出于类似的原因。
[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上)。
[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/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]
[2018/09/02] -
改进的实施 字符矢量切片.map 和 CharVectorSlice.mapi字符矢量切片 不生成中间结果列表。
[2018/08/28] -
ASDL库和 asdlgen公司 工具已添加到 系统。 此版本的工具实现了SML支持,但 C++支持不完整。 ASDL有一个CM工具,它 认识到 .asdl语言 文件后缀。
[2018/08/28] -
安装程序的两个更改( base/base/system/smlnj/installer ): -
程序的构建脚本现在已命名 build.sh(建筑.sh) (而不是 建造 )在Unix系统上。 -
这个 配置 已添加操作以支持模块配置。
-
[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] -
修复了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/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/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 )英寸 前端和酸洗,并移动 模plists 从 Semant/模块 到 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 切换到/从 继任者ML REPL模式。 该函数重置解析器,因此下一个输入将 正确解析。 这个 控制.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/06/21] -
修复了amd64中32位除法之前不正确的股息符号扩展 MLRISC中的代码生成器
[2016/05/11] -
实施了的更改 基础库建议书2016-001 。该提案增加了 popCount(波普计数) 函数到 单词 签名。
[2016/05/03] -
修复了错误 #156 (sml在SIGSTOP之后恢复,但出现虚假异常 报告)。 修复有点麻烦:我修改了 非bt_hdl 中的函数 评估.sml 匹配 爱荷华州 异常 适合这种情况的形状。
[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/09/28] -
添加了对的支持 继任者ML 工具到CM。此工具允许 指定源文件 傻瓜.sml 是 继任者ML 中的源代码 以下方式: foo.sml:成功ml foo.sml:sml(suc-ml) foo.sml(suc-ml)
[2015/09/28] -
添加了目录 基础/旧基础 支持向后兼容 的视图 基础库 。您可以通过替换 线 美元/基础.cm 具有 美元/基础-2004.cm 在CM文件中。
[2015/09/25] -
已实施的更改 基础图书馆建议书2015-003 。该提案为 以下签名: 签名 阵列 签名 列表 签名 列表_对 签名 单阵列 签名 单矢量(_V) 签名 选项 签名 字符串 签名 文本 签名 矢量 以及以下结构: 结构 阵列 : 阵列 结构 CharArray(字符阵列) : 单阵列 结构 字符矢量 : 单矢量(_V) 结构 列表 : 列表 结构 列表对 : 列表_对 结构 选项 : 选项 结构 Real64阵列 : 单数组(_A) 结构 Real64矢量 : 单矢量(_V) 结构 字符串 : 字符串 结构 文本 : 文本 结构 矢量 : 矢量 结构 Word8数组 : 单数组(_A) 结构 单词8矢量 : 单矢量(_V) 虽然这些更改不太可能破坏现有代码,但 代码可能会中断的几个场景。 即,当使用 打开 引入冲突以及用户代码何时实现受影响的基础库之一 签名。 这两个例子都发生在 SML/新泽西 源代码; 前者 在中 ml-年 来源和后者 MLRISC公司 来源。
[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/14] -
补充 要么 结构和 或者 基础实施签字 ( Basis Library建议书2015-002 ).
[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 了解更多 细节。 -