其他分享
首页 > 其他分享> > d语言更改日志.

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可打印出.
开关语句接受运行时不变和常语句.
隐藏方法有,编译时警告.
purenothrow,未实现语义.
为线本加__thread存储类.用于测试,检查后端机器
obj2asmdumpobj可处理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

IUnknownextern(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.1SSE4.2汇编指令
一堆标准库修改

56

-gs编译器开关
应在受保护函数的开头和结尾检查不变量
加单独的选项来控制生成栈帧

57

64位目标中更好地使用XMM寄存器
immutable,弃用invariant.
obj2asmdumpobj支持Mach-O
CTFE支持类,接口和异常
弃用typedef
模板值参数特化不能隐式转换
动态数组和指针类型中删除了头常

58

加新=>λ语法.
1.用户属性语法.这里1.f非浮点字面.
-shared开关,而非-dylib.
OSX32位目标中更好地使用XMM寄存器
支持AVX指令的内联汇编器,仅限64位.
基类保护过时.
构/类不变量现在隐式为

59

模板化构造函数
实现统调
同名模板应允许重载同名成员
不支持Win9x

60

大量更改标准库
TypeInfo.rtInfo取运行时信息
支持AVX256SIMD指令
完全删除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构建可重现.相同源码+配置+编译器版本生成确定二进制.
模板化向量化数组操作,dmd64位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循环仍允许逗号运算符.最好拆分为两个语句,或用λ.
变参模板参数后,允许默认值.
弃用,用destroycore.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位版本.
可用纯D64位中断
仅用静态字段,则可在无运行时时用接口和类,未实例化类,不必有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-m64OPTLINK,其他不用了.用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

支持gnuabi标签
-preview=dip25已类似默认
ob用来保证有效内存对象.
现在有等价于scope constin了.

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