
翻译
文章平均质量分 70
fqbqrr
这个作者很懒,什么都没留下…
展开
-
dip1034加底部类型
原文地址作者:丹尼斯抽象用底层类型来解决d类型系统的部分漏洞和限制.对表示运行时错误/非终止函数有用.由于用例少,已拒绝先前的dip1017.本dip来补充.内容背景纯函数,代表输入->输出,而计算机,还可能永远计算.因而加上个⊥来表示函数计算过程中,未返回/赋值成功.如:bool isPrime(int x);bool foo(int x) { return isPrime(x);}虽然bool只返回真/假,但还可能未计算完(出错了).用⊥表示无穷循环/崩溃(内存不足原创 2021-02-17 22:19:31 · 450 阅读 · 5 评论 -
D的所有权与借贷
D的所有权与借款问题:泄露(未释放),多次释放,释放后使用解决方法:在于跟踪``哪些指针(拥有内存),哪些指针仅引用内存.它们在哪及哪些指针是活动的.常用解决方案:1,垃集.缺点:占用内存大,暂停并减慢代码.可靠(go,java)2,引用计数,RC对象拥有内存,有个槽保留指向该块内存指针的计数.维护麻烦,异常啊,锁定线程间共享对象啊.3,手动.快且高,信念.->无法扩展,很难审核...原创 2019-09-25 21:16:23 · 409 阅读 · 0 评论 -
d的两个编译时
d的编译时两个阶段:ast与ctfe,ast为生成树,ctfe为编译时求值.其实很简单啦.ast树,必须通过语义给树加上意义,然后求值函数才能求值,对不对?不然,光是树,是没用的.其中,模板变函数,遇见了,先造一个ast的模板,然后实例化时,就填充这个ast,然后加入整个生成树里面.ctfe,在语义分析与代码生成阶段.编译时求值就是把一些编译时已知可以求值的东西,求出来,这样运行时就不必再求...原创 2019-10-05 13:25:06 · 324 阅读 · 0 评论 -
powershell常见缩写与中文意思
缩写中文意思{del,erase,rd,ri...}移除项{cd,chdir,sl}置位置{ghy,h,history}取历史{dir,gci,ls}取子项{cat,gc,type}取内容{mi,move,mv}移动项{copy,cp,cpi}复制项{saps,start}启动进程{set,sv}置变量{e...原创 2019-10-14 21:33:46 · 2804 阅读 · 0 评论 -
d语言的经验教训
1,无预处理器2,变长统一码.其余代码页,ebcdic,jis,..用正字节3,utf16,ucs2是鸡肋==>不一定.utf16还是可以的.还是gbk与utf8间的竞争.4,>=32位机器.c写16位最好.5,X:位数据类型,超过1个指针类型,没必要.如bit a;bit*p=&a;6,固定整数据大小.7,8进制,没必要!用库就行了.8,二进制字面量,没必要.几...原创 2019-10-24 13:34:22 · 1452 阅读 · 5 评论 -
d的右值引用
右值属性开关:-preview=rvalueattribute,代码:struct S {}void func(@rvalue ref S p);@rvalue ref S func();S a;auto b = cast(@rvalue ref)a;void gun(@rvalue ref S p){ enum r = __traits(isRvalueRef, ...原创 2019-11-07 15:47:05 · 294 阅读 · 0 评论 -
d语言的dip1011`外部闭包`改进翻译
添加外(闭包)作为链接类型,以创建与闭包ABI兼容的函数,将UFCS调用的地址传递给外(闭包)函数将创建一个闭包成员函数可以隐式转换为外(闭包)函数描述建议外(闭包)添加为链接类型,即外(闭包)空 bar(Foo foo);//可转成闭包这种链接类型通过使第一个参数按与将上下文指针传递给闭包函数相同的方式传递,来修改函数的ABI.如果外(闭包)函数的第一个参数是类或对构的引用,则它就像...原创 2020-02-14 12:34:56 · 437 阅读 · 0 评论 -
d语言的改进:默认不抛与安全
加抛为函数属性基本原理当前,默认情况下允许函数引发异常.可以通过应用不抛属性来更改此行为.但一旦不抛在模块域或块中使用,其域中的所有函数都会受到影响;因此聚合不继承从外部域的不抛属性.如需要整个模块不抛,那么该属性不仅必须在模块域内应用,而且必须在每个聚合的定义内应用:空 栏(); //可抛struct S1 { `不抛` void foo(){bar();}//错误,bar...原创 2020-02-14 14:56:11 · 325 阅读 · 0 评论 -
d结构的移动语义
勾挂D的结构移动语义概述当前语言定义禁止结构类型维护到其实例的外部/内部引用,因为D可能选择通过简单的位复制操作来移走结构实例.此DIP的目的是保留此函数,并也允许到实例的内部/外部引用.这是通过允许该结构定义类似后复制的回调(叫后移动操作)来实现的,在移动后调用它,从而允许该结构更新移动搞失效的引用.参考#17448问题:由于缺乏这种支持而引起的问题,以及有关为什么需要这种支持的讨论....原创 2020-02-14 20:17:36 · 639 阅读 · 0 评论 -
d的复制构造函数
复制构造函数概述本文档提出了复制构造函数,它是后复制函数的替代方法.复制构造函数消除了对后复制的需求,并修复了其缺陷和固有限制.还讨论了演进和向后兼容性.理由和动机本节重点介绍了后复制存在问题,并说明了为什么复制构造函数比后复制好.本(本)概述无法有意义地重载或限定后复制函数.但,编译器不会拒绝限定器应用,如下所示:构 A{本(本)常 {}}构 B{本(本)不变{}}构 C{本(...原创 2020-02-15 13:53:49 · 419 阅读 · 0 评论 -
参数所有权与共享原子
概述DIP25和DIP1000中提出的语言特征通过检测指针是否超出了函数域,大大提高了给函数传递引用和指针的内存安全.相应,如果函数不允许转义引用,则容器可以安全地传递内部引用给函数.但,如果传递多个相同容器的引用给函数,则一个引用会渲染其他引用引用的空数据.该DIP旨在纠正该问题.这是在DIP 25和DIP 1000后的自然发展,是安全实施引用计数所必需的.这项提议是迈向博客文章"所有权和借...原创 2020-02-15 22:51:45 · 413 阅读 · 0 评论 -
一步步c到d--最佳c程序员的d教程
[文章在此](ht tps://dlang.org/blog/2018/06/11/dasbetterc-converting-make-c-to-d/)可以先将make.c与dmake.d一起下载下来.c版,文中有d版1,将相应#include,改为d的相应c头.类似这样import core.stdc.ctype;import core.stdc.stdio;import co...原创 2020-02-19 21:30:49 · 1108 阅读 · 0 评论 -
d的内存安全更严格
struct S { int* p; };S foo(S* ps, int i){ ps->p = &i; return *ps;}编译在cpp和d中,struct S { int* p; } @safe S foo(S* ps, int i) { ps.p = &i; // Error: cannot take address o...原创 2020-04-03 09:39:09 · 383 阅读 · 0 评论 -
简单翻译go到d
go的多任务好,但不完美.语法简单,强大抽象.如果你腻了.试试d.d支持纤程,但仅单线程.但有库jin.go.原文在此unittest{ import core.time; import std.range; import jin.go; __gshared static string[] log; static void saying(string message){//必须是静 foreach( _ ; 3.iota )原创 2020-05-17 08:59:38 · 808 阅读 · 0 评论 -
d--2.092版本的借用与所有权翻译
原地址#指针的借用/所有权模型其可保证转义指针到有效内存对象.##(借/权)适用范围对D适用的,当前只针对指针,无动态数组,类引用,引用或聚集体的指针,目前不支持.RAII,是安全的,(OB)无须关心,也无须关心如何分配内存当前仅对带@活属性标记的函数有用.在完成语义分析后仅仅检查是否违反借/权规则,没加新符号,也没改新生成代码.@活调用非活函数时,尽管不检查非活函数,但要求他们有与@活匹配的接口.非活调用@活函数时,要求参数遵守@活的约定.借/权检查:1,转义无效状态指针.2,多个指原创 2020-05-22 18:06:07 · 382 阅读 · 0 评论 -
可变头模式
原文地址可变头结构模式今天,用户定义类型仍是D中的二等公民.如不支持(头部可变性,能够在不改变引用值的情况下,改变头).本文介绍udt模式来实现它.介绍D有一等,二等公民.一等公民有数组和指针,他们可隐式头可变.如,const(T[])可隐式转换为const(T)[].D有多种转换方法:别名 本,构造器,分发操作,转换操作,及子类化.指针和动态数组退化为它们的可变头的方式与前面不一样,要模仿,就要定义新的转换类型.更改编译器和语言太麻烦.且隐式转换很难懂.但有时很方便,可试试下面方法.Unqu原创 2020-06-26 11:35:45 · 333 阅读 · 0 评论 -
dub的sdl配置文件中文帮助
DUB软件包根文件夹应包含有构建/部署元信息的dub.sdl(或dub.json)文件.忽略未知设置.简单示例://dub.sdl可包含注释,请尽量简洁!name "我的"description "示例"authors "呀"homepage "http://myproject.example.com"license "mit"dependency "vibe-d" version="~>0.7.23"全局设置构建设置,也可在此用.名字参数描述name[必原创 2020-07-29 23:23:35 · 715 阅读 · 0 评论 -
d模板元编程笔记01
元 我的定义(参数列表)//命名的参数化的代码块.{ 构 树{...} 树 树上映射(树 输入,树 闭包(树)f){...} 空 打印树(树 输入){...} 别名 树数组=树[];}这样,定义.编译时参数列表可为类型,别名(符号),字面量,T... ,允许编译时的一切.别名参数允许捕获数组,类,函数,结构名,并使用他们的能力.模板主体除了模块,基本上啥都可以.实例化时才检测语义.枚 串 名表明是编译时.常/不变是存储类,表示不变,记住模板不能在函数中声明.实例化原创 2020-08-04 14:57:25 · 355 阅读 · 0 评论 -
d模板元编程笔记02
元 元名(T,U,V) 如 (限制条件 T, U 或 V){ ...}元 限制(T) 如 (是(T : 整)) { /*...*/ } // #1元 限制(T) 如 (是(T : 串)) { /*...*/ } // #2元 限制(T,U) 如 (是(T : 整) && !是(U : 浮)) { /*...*/ } // #3元 限制(T,U) 如 (是(T : 整) && 是(U : 浮)) { /*...*/ } //原创 2020-08-05 09:21:13 · 363 阅读 · 0 评论 -
d模板元编程笔记03
编译时工具,编译时元编程:串插件,编译时求值,特征,他们可互操作,模板化编译时函数可返回串,并再次插入模板中,编译时求值函数可作模板参数用来模板化.串插件在编译前安放,代码按串操作,注入后,就是真正的代码了.这就是宏.插件(代码串),别忘了括号,串插件是编译时工具.串也必须是编译时生成的插件("整 i = 3;"); //两个分号i++;断定(i == 4);模块 用我的结构1;导入 我的结构1;插件(我的构!"第一"); // 创建 a 新 类型 调用 第一 (a 构)插件(我的构原创 2020-08-05 09:43:34 · 348 阅读 · 0 评论 -
d模板元编程笔记04
导入 标.类型元组;元 静映射(别名 M, T...){ 静 如 (T.长度 == 0) // 序列尾 别名 元组类型!() 静映射; // 停止 异 别名 元组类型!(M!(T[0]), 静映射!(M, T[1..$])) 静映射;}模块 有资格;导入 标.类型元组;元 合格(T)//给定类型,生成他们的合格类型{ 别名 元组类型!( T, 常(T), 不变(T), 共享(T), T[],常(原创 2020-08-05 09:44:26 · 382 阅读 · 0 评论 -
d模板元编程笔记05
是( 类型 (可选 标识符) )是( 类型 (可选 标识符) : 其他类型, (可选 元 形参 列表) )是( 类型 (可选 标识符) == 其他类型, (可选 元 形参 列表) )是表达式,编译时自省,是(...)检查其为类型,则为真.元 可实例化用(别名 元名, 类型...){ // 元名!(类型) 是有效类型? 静 如 (是( 元名!(类型) 结果类型 )) // 在此你可用 结果类型 (== 元名!(类型))原创 2020-08-05 09:44:56 · 319 阅读 · 0 评论 -
c++安全编写对象池中文版
原文地址#指示 一次#包含<串>#包含<双队>构 连接{ 串 标识;};元<整 N>类 对象池 终:不可复制{//@2,编译期提示错误 //@10,加个终,表示不可继承. //不可复制,删除默认构造,拷贝构造,禁用(移动,移动赋值) 对象池(大小型 初化大小){//未限制初化大小. 静断(N<500,"初化大小不能大于500"); 对(大小型 i=0;i<初化大小;i++){原创 2020-08-05 09:49:12 · 399 阅读 · 0 评论 -
共享与线程安全,llvm最新版本文档
Timon:沃尔特反对库类型来调解内存所有权.我认为我知道该做什么,但沃不完全同意,见域共享的讨论,从未共享来理解,即类型系统确保不能并行访问指定内存位置,来回从共享转换,支撑了这个观点,那很明显.语义上,共享变量就是c/c++上的标准变量,即,在@安全代码上,不能用非同步读写来访问共享变量.我认识马努和沃在添加必要的类型检查.常(共享(T))/不变(T),如,你有个返回到(不会修改的)共享输入的引用的函数,你想跨函数调用时保留不变限定符,同时允许用可变共享数据调用函数.马努想更改共享的含义为线程安全原创 2020-08-05 17:56:17 · 427 阅读 · 0 评论 -
一个俄罗斯人写的为什么选择d
原文地址学习编程应从算法开始,语言越简单越好.类c的语言,可以选择d.c++语法不简单.为什么比c#/java好虚拟机和运行时编译消耗性能,d更简单,容易,简洁性可比py.为什么比c++好其基于古老的c,元编程是偶然,c++不能放弃兼容性,开发速度慢,不容易调试.容易出现内存泄漏.(这是作者的观点,实际上对C++高手来说,能够解决的)为什么比py好有人说,自己记忆力差,无法用py写,只有达到特定阈值,才能快速编写.且以后很难修改.(实际上py的缺点两个:1慢,2只有动态(运行时)才能发现问题啊原创 2020-10-16 09:25:03 · 471 阅读 · 0 评论 -
c++做对了的事情
1,c#专有.c++更通用,2,可以使用操作符_文件来使用特定后缀操作,类似操作符重载.如操作符 "" _文件.对""之后的后缀起作用.3,f(g(x)):元<类 F,类 G>动 fgx(F f,G g){ 中[=](动&&x){//返回λ,复制f,g. 中 f(g(x)); 中 f(g(前向<推导(x)>(x)));//还可这样,足够控制 };//函数组合.}//以前版本都不爽.c#中使用时,得显式指定类原创 2020-11-18 11:20:32 · 288 阅读 · 0 评论 -
dip:添加抛作为函数属性与命名参数
加抛来表示不抛的逆.因为不抛作为默认更好,用在模块顶时,如果有要抛的函数,就需要这个抛了.因为异常成本大,所以默认不抛才是最经济的,即不需要异常的开销.抛属性仅对函数/闭包有用.void bar() throw;struct S1 { nothrow void foo() { bar(); } //错误,不允许抛}struct S2 { void foo() { bar(); } // 可抛}抛与不抛不能混用,但一个管区间,一个管一个时可以.void abc() thro原创 2020-11-18 16:24:31 · 361 阅读 · 0 评论 -
阿里:有益的d技术
作者:土耳其的阿里.用d搞工程:漏洞少,生产力高,有趣.主观上,d造就更好的工程师:少了些完美主义,更实用,增长知识(@nogc对比pure),更少的规则(d:原型+生产力,可塑性).内在单元测试:简单(仅提供断定,断定抛),无依赖,.静如条件编译,区间.优势有:懒求值,最小内存,组件编程,管道编程,减少循环,等等.5.iota.map!foo;//前面为区间,后面为算法.只是返回单元素(如查找),及分割返回迭代器时,程序员得自己造区间.每25行有格式串字面量.而基于dip1036可能会格式成原创 2020-11-24 17:24:55 · 621 阅读 · 0 评论 -
d的可变头模式
原文地址可变头结构模式今天,用户定义类型仍是D中的二等公民.如不支持(头部可变性,能够在不改变引用值的情况下,改变头).本文介绍udt模式来实现它.介绍D有一等,二等公民.一等公民有数组和指针,他们可隐式头可变.如,const(T[])可隐式转换为const(T)[].D有多种转换方法:别名 本,构造器,分发操作,转换操作,及子类化.指针和动态数组退化为它们的可变头的方式与前面不一样,要模仿,就要定义新的转换类型.更改编译器和语言太麻烦.且隐式转换很难懂.但有时很方便,可试试下面方法.Unqu原创 2020-12-06 15:59:56 · 426 阅读 · 0 评论 -
d中写高性能串处理.
作者:H. S. Teoh.这是个中国人.1),尽量避免gc,经常创建的对象,用构,而不是类.2),用输入的切片,而不是.dup,.idup,读文件,则用std.mmfile,用一个枚指示类型,包装在构中,处理语义/创建语法树时再来转换,3),尽量避免自动解码,用.byCodeUnit....原创 2020-12-12 11:33:40 · 244 阅读 · 0 评论 -
翻译d中的生成函数
原地址前不久,AA大神发起完全转发讨论,发现,有时需要更改函数的属性,如加/减/挂起用户定义属性/存储类,这在我实现开放方法时也努力过.我放在bolts元编程库里面了.元 前向(别名 函数){ 导入 标.特征:形参; 静 每一( 溢出;__特征(取重载,__特征(父,函数),__特征(标识符,函数))){ 动 前向(形参!溢出 实参) { 中 溢出(实参); } }}...整 加(整 a,整 b){中 a+b;}串 加(串 a,串 b原创 2020-12-13 11:00:01 · 341 阅读 · 0 评论 -
开放方法从c++到d.
原地址早前,参加c++大会,这是常式的大会,我(作者)怀疑c++,不过他们很开阔.为了学习d,我重现yomm11,觉得开放方法很不错.从成员到自由函数.可以参见c++大神最后一章多方法开放方法像虚函数,只是在类外声明.经常与多方法混淆,因为他们经常实现在一起,但他们不一样.开放更重要.虚函数示例:接口 动物{ 串 踢();}类 狗:动物{ 串 踢(){中"吠";}}类 皮保罗:狗{ 盖 串 踢(){中 父.踢()~"叫";}}空 主(){ 导入 标.标io:写原创 2020-12-16 15:41:21 · 376 阅读 · 0 评论 -
d中变量很酷
标.变量,以变量为中心,其不是c++的变量,而是可包含任意类型值的类型安全容器.其也知道包含的值的类型,c++却用变量这个名字来实现聚集(并)类型. 导入 标.变量; 变量 a; a=42; 断定(a.类型==具型(整)); a+=1; 断定(a==43); 浮 f=a.取!浮;//转为浮 断定(f==43); a/=2; f/=2; 断定(a==21&&f==21.5); a="[!串000]"; 断定(a.类型==具型(串)); 变原创 2020-12-16 17:54:06 · 313 阅读 · 0 评论 -
dip25,中与引用.
原地址参考地址作者:W.B,AA.大意:d提供了许多系统级编码的功能,如无限制指针,整数和指针转换及@系统属性.但,定义这些危险操作时,还要考虑经济性.本dip能够保证引用不指向损坏对象.总之接收并想返回引用的函数,必须用中注解.模板/λ可以推导出,但其他声明必须显式注解.如:@安全:引用 整 函数(引用 整 a){中 a;}//错误引用 整 滚(中 引用 整 a){中 a;}//好引用 T 匈牙利(T)(引用 T a){中 a;}//好,模板用推导描述:当前d对避免悬挂指针有些规定原创 2020-12-25 18:13:15 · 331 阅读 · 0 评论 -
d的betterC简介.
原地址作者:W.B(D作者)d一开始就设计为,与c直接交互,与c++轻量交互.这样可访问无穷的c库,标准c运行时库及操作系统接口(一般也是c.有大量c编写的程序.d可对接c,但c不行.d必须要控制主函数,这也是更好的c.其实c++就是曾经更好的c.早期c++编译器可编译c.这推动了c++的成功.同样的还有kotlin.成为更好的java.d的方法是,既不是c的扩展,也不是c的超集,也不带c的问题(预处理器/数组溢出),而是子集化d语言.删除/改变要求d启动及运行时的库.即-betterC开关.保存了原创 2020-12-26 22:44:14 · 586 阅读 · 0 评论 -
消除bug.d作者.
原地址作者:W.B.(d作者)我们要消除bug,否则其消耗你时间/金钱.你可以通过改进工具而少遭罪.数组溢出计算数组和:#include <stdio.h>#define MAX 10int sumArray(int* p) { int sum = 0; int i; for (i = 0; i <= MAX; ++i) sum += p[i]; return sum;}int main() { static int原创 2020-12-27 10:14:28 · 410 阅读 · 0 评论 -
windows的d
原地址在其它系统,在version(Posix)下,一般都有c编译器,而windows下不一样.主要目的是确保可用c编译器.假定有以下2源文件cfoo.c及dfoo.d:#include <stdio.h>void say_hello(void) { puts("Hello!");}及:extern(C) void say_hello();void main() { say_hello();}我们让其一起工作.d窗口包中提供了链接器,工具,系统库.因原创 2020-12-27 16:57:16 · 526 阅读 · 0 评论 -
d同c对接入门
原地址早期的d的一个设计目标就是与c对接.详细参考,因此,提供abi兼容,允许访问c标准库,并利用与c/c++编译器相同的目标文件格式/链接器.大多数d类型,甚至构直接与c构兼容,并可自由传递给c函数.当然得加上外(c).很多时候,你可以复制/粘贴c代码,然后稍微修改下,就可以编译了.同样,用c声明的也可从c端调用d.但,d去掉了c的缺点.用数组边界检查/编译时检查内存安全来消除c的缺点.同时消除c的最大错误,混合了指针/数组.在这里有些基础本系列,关注很容易忽略的地方,基础的可以结合官方文档(注,官原创 2020-12-27 20:24:26 · 490 阅读 · 0 评论 -
d移植c代码数组
原地址作者:(m.p)移植c接口时,免不了与数组打交道,可能为串.尽管d与c的数组实现不一样,但基本构造块是一样的.因而,只要记得区别,就容易兼容.在d中用c接口时,要转换c代码至d.直接用c,从中受益.移植时尽量保持原样.然后继续看声明/初化及如何转换.还要讲多维数组,d数组分析,从c函数中传递数组,及如何利用垃集.现在用c的都少了.声明1维数组:int c0[3];栈上连续分配,c0有可能初化.全局变量/静态本地变量初化为0.如definit.c:#include <stdio.h原创 2020-12-27 23:07:47 · 315 阅读 · 0 评论 -
绑定c到d
原地址作者:(m.p)我曾经维护一个Derelict(org)项目,主要是一堆函数/类型声明.使我得到绑定c到d的经验,还有个deimos项目.本文探讨一些问题.首先要考虑静态/动态绑定.静态指编译时连接c库/目标文件.动态则指运行时加载dll/so/dylib等.我搞的多是动态,而deimos则大多数是静态.注意区分静态绑定与静态链接.静态绑定,可编译时与动态库,静态库连接.c++世界里,编译时链接动态库很常见.窗口中通过链接库.lib调用库.dll.Posix上也可以.所以d中静态绑定.你可以编译原创 2020-12-28 17:17:36 · 623 阅读 · 1 评论