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
添加环境变量.
标签:__,弃用,函数,更改,数组,日志,隐式,模板,语言 来源: https://blog.csdn.net/fqbqrr/article/details/121291576