d语言更改日志.
0
给串加别名.
 加.idup创建不变副本
 加常/不变/止.
 每一值变量现在默认为止
 类和构不变声明现在必须有()
1
.init基于类型,而非初始值.
3
加外(系统)
 加标.特征
4
加-debuglib和-defaultlib命令行开关.
 允许多模块静态构造/析构函数
6
各种串改为不变.
 对函数和模板实现了重载集
7
传递常尾不变.
 重载一元*.
 支持完整闭包.
8
std.functional|typecons等新模块
 构/类/接口可为常.
 typeof(return),
 改变分析覆盖方式
9
重做,常/不变语义
 允许声明清单常量
10
类禁止重载opAssign.
 WinMain和DllMain可在模板插件中.
 加纯
11
大量增加函数,如std.algorithm.
 加nothrow,
 重新允许自动接口
 允许null<=>常/不变.
 如果每个参可隐式转换,则可隐式转换构字面.
 如果字段<=>常/不变转换,则构可以
 .tupleof可访问构/类私字段.
12
加构的postblits和析构器
13
加-ignore开关忽略不支持编译指示.用-v可打印出.
 开关语句接受运行时不变和常语句.
 隐藏方法有,编译时警告.
 加pure和nothrow,未实现语义.
 为线本加__thread存储类.用于测试,检查后端机器
 obj2asm和dumpobj可处理elf修复记录.
 偏序消歧重载函数.
14
加-man浏览手册
 加-lib开关生成库文件
 生成exe中,现只有一个obj文件,
15
模板别名参数现在可以是字面
 可推导函数模板返回值.
 重载时,非左值不再匹配ref/out参数.
 加模板约束.
16
内部运行库,加了.__vptr和.__monitor属性
18
支持操作数组
19
加了构构造器,__ctor,__dtor
20
改进AA,
 实现不变
 允许按引用返回
21
加-safe开关,和module(system) Identifier;语法
 foreach支持区间
 scope存储类,表示参数不会脱离调用函数域.
 给闭包参数用此,避免调用函数分配闭包.
 lazy表明域,因而不触发堆分配闭包.
 构的本是引用而非指针.
22
IUnknown用extern(System)接口.
 可语义检查纯/不抛.
 shared是类型构造器.
23
优化器利用不变和纯
 为减少模板膨胀,串字面类型为invariant(char)[].
26
过时转义串字面
 加嵌套构
27
std.math中函数,基本为纯/不抛.
 加别名本.
 float.init默认为nan(非数).
 窗口中,多源文件,用后台线程读源文件来加快编译.
29
标.算法转为区间原语.
 大量更改标准库.
 加模板函数字面
 byRecord很容易迭代结构文本
30
加-vtls编译器开关
 现在默认为线本存储
31
dmd->dmd2目录
 禁止隐藏本地符号的符号
 加止 开关,加若区间.
 禁止导致重要位丢失的隐式转换整
 加部分函数
32
发布窗口版本,改进assert(0)消息,
 ctfe支持a[i].var = e2/a[] = e.
 可在CTFE中用成员函数/重载运算符/嵌套函数
 CTFE解释为何编译时无法解释
 同步成员函数现在隐式为共享类型
33
标准库,现为Boost许可
 用-O编译时,可检测非法空解引用
 typeid(type)现在为叶类.
 改进整转串.
35
-X生成数格.
36
静态数组按值传递
37
?:是可修改左值.
 数组字面=>动态数组而非静态
 数组.长度支持op=.
 数组,关联数组用?:跨所有元素判定类型
 数组连接现在允许,元素隐式转换为数组元素类型
 []中不允许逗号运算符.
 ClassInfo->TypeInfo_Class
 typeid(obj)应返回对象动态类型.
 删除-safe开关,增加-noboundscheck开关.
 加x^^y运算,加opDispatch.
 属性,只能0/1参,非属性不能重载属性.
38
d运行时中加core.cpuid
 opApply每一迭代时首选.
 加动 引用函数.函数模板加动 引用.
 加isRef,isOut和isLazy特征
40
澄清:函数返回不是左值
 加共享静构造与析构,普通静现在为线本.
 加-map命令行开关.
 加@禁止属性
 ctfe可用闭包和函数指针(字面).
 ctfe可用懒参,符数组切片.
 加静/止函数实现至接口.
 ModuleInfo,从类=>构
41
allMembers/derivedMembers现在返回串元组.
 [__traits],可构造数组字面,每一语句可编译时迭代.
 接口成员可有合约.
 新重载操作符机制
 警告不再停止解析/语义,仍不生成输出
 -wi不将警告视为错误.
 插件模板前有mixin
 加!in操作符
 可比较关联数组等价性.
 用$表长度.
 用toDelegate()转函数=>闭包.
 实现构造函数属性
 为构字面,实现如immutable(S)(1,2,3)限定
 可用不同数组元素类型实现数组相等
 加简单检查拼写
 ++x应是左值
 [1,2,3]默认为整[]了.
43
静态数组的.init属性现在是数组字面.
46
加缺少导入声明的提示
 加速编译
 长度都是@属性.
47
op=改为op
 大量修改标准库
49
修改标准库
50
可用[]访问元组
 要过时掉C函数指针语法.
 取消内部联.
 加弱纯检查规则
51
所有std.数学都是@safe pure nothrow.
52
支持64位林操,实现异常链
 支持HTML5实体
53
允许调试条件中用不纯代码
 删除八进制字面
54
实现@安全,@属性
 自动推导@safe,pure,nothrow
 CTFE中允许标签(断/下)
 警告若中直下
 ctfe支持指针/堆分配构.
 内联汇编器加了SSSE3指令
 警告=>弃用:非止开关必须有默认,函数隐藏函数
 调用pure nothrow时警告,允许极为AA的键
 推导纯/安全.
 有-map开关才生成map文件.
 加-property开关.
 切换用posix.mak文件,
55
加了dman用于d手册.
 加数格保护
 加SSE4.1和SSE4.2汇编指令
 一堆标准库修改
56
加-gs编译器开关
 应在受保护函数的开头和结尾检查不变量
 加单独的选项来控制生成栈帧
57
64位目标中更好地使用XMM寄存器
 用immutable,弃用invariant.
 obj2asm和dumpobj支持Mach-O
 CTFE支持类,接口和异常
 弃用typedef
 模板值参数特化不能隐式转换
 从动态数组和指针类型中删除了头常
58
加新=>λ语法.
 加1.用户属性语法.这里1.f非浮点字面.
 用-shared开关,而非-dylib.
 OSX32位目标中更好地使用XMM寄存器
 支持AVX指令的内联汇编器,仅限64位.
 基类保护过时.
 构/类不变量现在隐式为常
59
应模板化构造函数
 实现统调
 同名模板应允许重载同名成员
 不支持Win9x
60
大量更改标准库
 TypeInfo.rtInfo取运行时信息
 支持AVX256位SIMD指令
 完全删除html输入
 一大堆弃用,
 更改了align属性的工作方式
 Win32程序无法在大于16字节的边界上对齐.
 禁止用模板接口函数,很难重载操作符.
61
dmd默认不推荐使用功能显示为警告
 -de旧默认,-dw显示新默认.配置文件中加-de,而编译时用-dw来覆盖.
62
更改typeof(),
 alias foo = int不适用子类型.避免别名可能的父构造器.
 63,可能的新语法alias this : x;.
63
警告带初化器的常和不变字段,应改为枚/静
 始终可寻址聚合中非静字段,占据空间.要加上静来访问,清单常量每次使用时分配,静更方便.
 隐式静导致混淆.
 构造对象时会考虑构造器限定符(常/不变),这样仅带常/不变的构造器不能造可变对象.
 无共享/不变则不能构造共享/不变.但带纯的可用来构造.纯可构造共享/不变.
 不要求按位比较成员(早期数组按位比较),现在按构比较.无opEquals时,用.tupleof来比较,
 复制数组,总要求切片语法.
 类型不能为typeof的参,必须是值.可这样typeof(foo(int.init)).类型不再按值传递,避免混乱.
 每一中索引不再是隐式引用,而默认是值类型.避免难以跟踪错误.
 关联数组在赋值前不再默认初始化.分配期间的默认初始化,可能导致错误.
 覆盖方法不再继承常属性,要覆盖常,要加上常.允许根据方法的常来引入新重载,而非覆盖.也就是区分常/非常版.可用alias super.foo foo;加入重载集.
 不能隐式转换typeof(null)=>T[].用(T[]).init来正确书写.
 模板 本可用来推导成员函数的限定符,如加上不变.
 数值切片现在是右值.即不能取地址,也不能按引用传递给函数.要同时接受左值/右值用auto ref.如不分配和调整切片大小,可用右值.
 调用点重新分配或调整此类切片时,按引用传递切片无可观察到的效果.
 仅在特定条件下,可不带本访问非静态字段.现在仅允许知道的offsetof,init,max,少数几个.调用非静态字段的静态方法时,最后有静也可以.
 不再隐式转换数组为指针,要显示用.ptr或&数组[0].
 可隐式转换返回唯一对象表达式为不变.仅一个指针的,可初化为不变.
 现在用户可初化void的静态数组,void[2] varr3 = void;,直接.init零初化.
 不用特化静空数组,来允许通用的.init.
 聚集现在可包含多个不变量,按序合并为大函数运行,但不能引用每个不变量包代码
 模板聚集方法,可推导属性.
 是式[is]式不再需要标识符
 可隐式转换已知大小动态数组为静态数组,或转换串为静态数组引用.
 可空初化元组.但不确定元组值.
 现在可在继承列表后放模板约束,以前很难发现继承列表.
 可比较元组等价性.内置.tupleof也可轻松比较.不同类型相等结构测试.也可通过切片比较元组的子集.
 可在常构造器中重新初化带有初始值设定项的字段.
 加isNested,发现带环境指针聚集和函数.
 模板可嵌套在函数中,更好封装.避免模块域符号污染
 UFCS现在适用于有域的本地导入,聚集内导入也可以,本地导入比模块集导入优先.
 加__FUNCTION__,__PRETTY_FUNCTION__和__MODULE__.
 弃用宏.
 测试单元主体是文档一部分,这样示例始终最新.用///表示文档化测试单元.
 -main测试库有用的主函数开关.
 -cov测试覆盖率.
 pragma(mangle, ...),自定义符号混杂名.如module是保留关键字.
64
定义和导入包模块.
 新同名模板语法.alias Tuple(T...) = T;,注意用别名.
 允许new Server(args).run();,new后的后缀式表达.如为默认要加().
 隐式函数模板实例化(ifti)现在支持外围的类型/域推导,call(T)(T t, T.Foo foo).这样.也可为别名.
 ddoc参数不同时,发出警告
 现在可隐式转换切片串字面为字符指针,简化与c库交互.
 现在可以相互重载模板化和非模板化函数
 跨模块模板声明,构成一个重载集.
 用-deps打印出依赖.
65
-run开关,跑无扩展名文件.主要是posix系统,类似rdmd在第1行.
 goto不能跳过声明变量.
 无论直接/间接实例化,现在可推断实例化函数的属性
 加const/inout限定符.
 可切片内置元组
 用__traits(compiles, 模块或包名)
 空初化常/不变现在占用对象空间.
 ctfe可处理重叠联.
 禁止插件构构造器和静opCall.static opCall模拟无参构造,推荐用工厂函数来创建结构体实例.
66
-boundscheck=[on|safeonly|off].更清晰.
 -vgc,分配代码点.
 加@nogc属性,不允许在里面分配GC堆
 -vcolumns显示错误消息列数.
 -color控制台着色.
 加了extern (C++, a.b.c),
 加了重载多维切片运算符
 支持窄转换的推导模板
 不推荐共享变量,读写修改,而是用原子操作.
 内置标量也可统一构造.
 AA用==|opEquals实现比较.
67
现在,堆中构调用析构器
 asm语句块,可有pure nothrow @nogc @trusted等属性.这样,相应属性函数可用asm块.
 包加绑定,可package(a.b)这样访问.这样,a.b中模块都可访问.
 参数中return ref表示可能返回参数的引用.模板可推导出中.这叫密封引用.
 with对象,临时生命期.
 优化垃集
 可用--DRT-gcopt=help查看垃集的配置.
extern(C) __gshared string[] rt_options = [ "gcopt=initReserve:100 profile:1" ];
上面设置配置.
68
-profile=gc,分析内存.
 用户定义类型析构器和后传输函数:.__xdtor和.__xpostblit
 加pragma(inline),与-inline一起用.
 现在推导动 返回属性.
 有auto的必须有函数体.
 现在索引类型元组可在点标识符前,如struct X(Types...).
 支持从函数默认参数推导模板参数,避免冗余.
 可在前端检测无效重转
 允许编译时检查
 区间化标准库函数.用区间可消除垃集分配.
 可用--DRT-gcopt=profile分析垃集调用.
 AA现在用开放寻址,垃集管理大分配性能较低.
 profile=gc选项.
69
DMD前端移植到D.基本支持Objective-C.弃用-property.但@property未变.
 改进dmd代码生成器.用SUB/MOV代替push优化安装参数和栈桢,nothrow函数,不生成bp栈帧
 现在是动态加载libcurl,
 支持链接至VS2015
 改进标准库文档.
70
支持创建alias less1 = (a, b) => a < b;函数字面别名.
 大大扩展窗口绑定.
71
修复检查导入全名.
 修复可选和重命名导入.
 限定名/基类名/with语句不再搜索导入声明.
 不再可见私有符号.
 清单常量可用于弃用消息及连接串.
72
不推荐用逗号表达式
 不推荐隐式抓,抓Throwable,改为catch (Throwable)
 弃用隐式连接串,用~
 取消联字段中的后传输/析构器/不变量.(this(this))/(~this())/(invariant())
 对齐可与ctfe式一起用,如align (n == 8 ? 2 : 1):.
 无间接值参忽略域.
 推迟分析导入模块中的别名
 __FILE_FULL_PATH__源文件全路径名.
 加-verrors=spec开关,推断编译的错误.如是否编译某句.
73
-mscrtlib= libname
 D_AVX
75
弃用分号的空语句
 TypeInfo.init现在指的是类型属性
76
支持static foreach
 增强-betterC功能,默认不连接标准库.
 允许后端发出AVX2指令.
77
混杂名,支持引用和标识符.
 带extern(D)在出现超过1次的情况下,用后向引用名.减少符号长度
 删除构造器/析构器的assert(this, "null this");前置断言.
 dmd构建可重现.相同源码+配置+编译器版本生成确定二进制.
 模板化向量化数组操作,dmd对64位用SSE2,用-march=native, -march=avx2支持
 实现不再弱化浮点除法,精度不重要时用-ffast-math|(1.0/scalar).
78
op分发现在符合域的解析规则.
 do替换body
 pragma(crt_constructor)和pragma(crt_destructor)在c主前后初化和清理代码.
 可在-betterC中用于替代shared static this()和shared static ~this().注意,执行时未初化d运行时.未指定构造器执行顺序.
 弃用不同类型指针减.
 可变模板参数不再需要别名
 可选ModuleInfo.
 更好C也可scope(exit).加了raii与试终.仍不支持异常,
 dmd可检测VS路径.允许dmd调用链接器.
79
dmd现在显示哪个参数不匹配.不适用有重载时.
 注意逗号表达式与逗号运算符.已弃用逗号式.for循环仍允许逗号运算符.最好拆分为两个语句,或用λ.
 变参模板参数后,允许默认值.
 弃用删,用destroy或core.memory.__delete替代.-dylib已弃用,用-shared生成共享库.
 可实验-dip1008,@nogc异常.
 检测__traits(isDisabled)函数,是否禁止函数
 按int64_t/uint64_t处理long/ulong,D与C++互操作更简单.
 对extern(D)符号,加个_前缀
 过时HexString字面
 -i自动导入模块,还可-i=-foo.bar排除.
 dmd -Xi=compilerInfo -Xi=buildInfo -Xi=semantics -Xi=modules生成更多信息.
 Windows不需要sdk构建64位.有MinGW
 DMD与运行时进一步分离,可一个空object.d.最小运行时.
 dmd -conf= -lib math.d.举了几个例子,需要时付成本.
 弃用导入私有.
 @safe代码上不能用数组的.针.相反用&arr[0]是可以的.
 大量标准库修改.
80
大量弃用.过时类分配器/析构器
 编译时,可用^^
 支持extern (Objective-C)
81
静态块中禁止构造函数.在块外声明构造器
 禁止this和super作类型.在之外加上typeof就行.
 加基于表达式的合约语法
 改进extern(C++)构造与析构混杂,extern (C++)语义等价重载.opCmp与!不等价,是例外.
 混杂extern (C++) class已工作.
 支持迭代模板重载__traits(getOverloads)
 __traits(getLinkage, ...),对构,类和接口都工作
 隐式抓是错误.
 不同枚举隐式比较现在会导致错误
 内联汇编器,支持IRETQ.是IRET的64位版本.
 可用纯D写64位中断
 仅用静态字段,则可在无运行时时用接口和类,未实例化类,不必有TypeInfo.
 也可用非共享静态成员,但此时为线本成员
 冗余@safe等存储类,现在是错误.
 object.destroy()支持extern(C++)类
 弃用std.c,用core.stdc.
82
-betterC可比较正字节类型与构.
 弃用条件式后跟赋值式,易歧义
 现在可在调试块中用不安全代码
 弃用opDot(D1),可用别名本.
 枚成员上可过时,@禁止,用定属.
 弃用C样式数组.
 extern(C++)正确混杂常非针模板参数
 禁用objc的.offsetof和.tupleof
 函数参数,可支持用定属.变量也可有用定属.
83
要链接C++代码,要知道abi平台.
 弃用-gc
 实现新C++混杂语法.
pragma(linkerDirective, "/alternatename:_pWeakValue=_pDefaultWeakValue");
链接器指令.发送到目标文件.
 正确构造部分构造对象.因此构造器与析构器是协变的.
 __traits(getTargetInfo, "键")取编译目标信息.
 dub构建选项:buildOptions "betterC".支持更好C.
84
可从__traits直接创建别名.alias newWay = __traits(getMember, Foo, "a");,这样更简洁.
 check=[assert|bounds|in|invariant|out|switch(切换默认值)][=[on|off]],加上开关,覆盖-boundscheck,-release和-unittest
 添加-checkaction=D|C|halt,断言失败后动作.
 -color始终彩色输出.
 用-mixin输出生成的插件代码.
 弃用无效的二进制文字0b
 弃用extern(Pascal)
 过时绕过私有导入.
 POSIX上正确混杂模板.
85
-verrors=context错误消息中,显示有问题行.cast不再生成隐式构造函数调用,仅当cast(S)调用时,生成隐藏构造调用.
 -preview和-revert加入预览开关.
 dip25密封,dip1000域指针,1008为@nogc.
 默认启用预览,要通过所有持续集成.
 -revert退出该功能.-transition表示过度特征.
> dmd -preview=help
> dmd -revert=help
> dmd -transition=help
有帮助页面.建议与窗口对接用WCHAR
86
不能在聚集内私有导入
 生成的opEquals比别名本的opEquals优先级更高.
 实现复制构造函数.this(非默认引用参数,默认参数...).专门针对构,显式初化,按值传递时.按值返回,且不能nrvo优化时用复制构造.当定义复制构造后,禁用后传输.
 复制构造可用不同限定符重载.可以用this(ref return scope inout A rhs) immutable {},inout替换多个.
 无显式复制&&(有一非联具复制构造)则隐式生成复制构造.否则@禁止.联字段不能有复制构造,否则报错.定义复制构造则非pod.
 弃用16进制串.
 可按引用返回函数字面.如alias add2 = ref () => x += 2;.
 -lowmem,低内存.
 getMember,getOverloads特征,可访问私有成员.
 import std;可一次导入所有.搞个常用就行了嘛.
 dub除了-m32mscoff和-m64用OPTLINK,其他不用了.用dub --arch=x86也可以打开.
87
新语法:alias NewStyleFunAlias = int(string);声明函数类型别名.新语法可使用函数模板类型的快捷方式.如alias SetterProto(T) = void(T t);.
 -preview=markdown,ddoc可支持md.
 弃用域限制类的声明.但允许构.
 弃用this和super作类型
 is(sym==module)和is(sym==package),判断符号是模块/包.__traits(isModule, sym) 和 __traits(isPackage, sym)也同样工作.
 本地模板现可接收本地符号
 弃用static this()中初化不变.可前面加共享.
 全默认构构造算错误.
 模板别名,可用基本类型实例化.类型比别名匹配优先
 32位Linux现在用XMM,而非x87.
 用户可用-preview=dip1000.
88
弃用部分重载,现在用opUnary+串.
 匿名联中成员不再调用后传输/析构器.
89
IsExpression现在正确匹配const,inout,和shared.
 改名optlink.exe
90
可从懒取闭包.
92
支持gnu的abi标签
 -preview=dip25已类似默认
 ob用来保证有效内存对象.
 现在有等价于scope const的in了.
93
std.traits.isCopyable是可复制
 正确检查接口实现
 允许初化共享变量
 加-vtemplates开关来收集和列举模板统计信息
94
添加__traits(child,parent,member)
 调试块中可抛.
 pragma(inline, true)始终内联,与inline无关.
 隐式覆盖报错.
 限制向量隐式转换.
 ddoc默认支持Markdown
95
改进生成C++头
 模板内部触发弃用现在显示实例化跟踪,
 接受-extern-std=20,C++20.
 pragma(inline, canInline("func1")),这里也可为编译时.
96
不推荐同时拥有复制构造函数和生成的postblit(后传输).@disable this(this)告诉用复制,定义后传输则用后传输,定义复制则为复制.都有,后传输优先.删除所有复制,则后传输.
 dmd数格输出,包含保护级别.
 弃用按别名接收本地符号的本地模板
 改进生成C++头文件
 用运行时分配锁同步语句.
 单表达式函数缩短函数实现,这样int foo() => 1;.
 libunwind展开堆栈.
97
弃用歧义?:与=
 强限制包属性会覆盖弱限制
 pragma(mangle)现在可应用于聚合
 弃用复和虚.
 现在支持while(auto n=expression)
 已重新设计格式化浮点数
 搞好std.format文档了.
 拆分std.math
 std.sumtype加入标准库.
98
加别名赋值,可赋值而非递归了.
 导入C
 弃用(args)=>{},这样:(args) => () { /* body */ }.
 -preview=dtorfields现在默认启用,部分产生时正确析构.
 弃用可变变量作猜若.
 越界,更好消息.
 弃用类分配器
 -target=交叉编译.
 不默认初化第一联成员,触发错误.
 dub添加环境变量.
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号