![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
D
lova1ing
这个作者很懒,什么都没留下…
展开
-
Generator
几种并发编程模型开销(从大到小):Process > Thread > Coroutine > Generator == Callback从对机器的并行利用来说,却是完全相反的。Process可以部署在不同机器上;Thread需要在Process里面,往往是很多Thread在一个Process里面,它对多CPU利用还是比较充分的;Coroutine在Thread里面...2008-04-09 13:46:43 · 71 阅读 · 0 评论 -
D语言模板最近的一些改进
不知道什么时候加入了“函数模板参数类型推导”和“类模板(改进型)”,文档中也是悄悄出现了。函数模板参数类型推导:template Square(T){ T Square(T t) { return t * t; }}以前调用时必须显式实例化:writefln("The square of %s is %s", 3, Square!(int)(3));现在可以使用自...2006-03-15 17:03:00 · 99 阅读 · 0 评论 -
从C++到D
从http://www.digitalmars.com/d/cpptod.html摘录1、构造函数:c++:1 class Foo2 {3 Foo(int x); 4 };d:1 class Foo2 {3 this(int x) { } 4 }2、基类初始化c++:1 class A { A() { } };2 class B : A3 ...2006-03-14 12:10:00 · 158 阅读 · 0 评论 -
DMD 0.149发布
最近3个版本增加/移除了一些新特性。0.147中加入了match表达式,不过感觉用处太小了点,果然0.148中又去掉了。0.148中去掉了bit类型,增加了BitArray类和bool基本类型。on_scope语句算是个比较重要的更新,可用于在代码块结束、异常、成功执行时,完成特定功能。0.149中on_scope语句改成了scope(...)。 ...2006-03-08 11:36:00 · 92 阅读 · 0 评论 -
DMD 0.141发布
What's New for D 0.141 Dec 1, 2005 New/Changed Features The predefined version identifier D_InlineAsm has been changed to D_InlineAsm_X86. The former made no sense, and although it is still ...2005-12-06 10:41:00 · 73 阅读 · 0 评论 -
DMD 0.140发布
Nov 23, 2005 New/Changed Features Added std.string.soundex. Added std.string.entab. Added std.string.wrap. Added std.string.abbrev. Added std.windows.charset (thanks ...2005-11-25 13:38:00 · 61 阅读 · 0 评论 -
DMDScript脚本工具,DDL项目
DMDScript是Digital Mars提供的一个符合ECMA 262规范的脚本语言,采用D语言编写,开放源代码,可以从http://www.digitalmars.com/dscript看到详细信息,另外有一个C++的实现版本。另外2个符合ECMA 262规范的脚本语言分别是Netscape的javascript和Microsoft的JScript,目前DMDScript和其它2个...2005-11-20 00:20:00 · 213 阅读 · 0 评论 -
D语言的模板
D语言的模板使用非常方便灵活,受够了C++模板编写之苦的同学们可以感受一下D语言的模板,下面先展示一个D语言编写的多分派委托类,在我的旧BLOG上曾经写过一个C++版本的,整个过程感觉非常痛苦。。。闲话少说,请看代码:import std.stdio;template DelegateHandlers(HandlerType, FunctionType){ Handl...2005-11-11 17:13:00 · 173 阅读 · 0 评论 -
D语言调用ActiveX(在窗口中嵌入ActiveX)
这是一个从C移植到D的代码,原文请见“Embed an HTML control in your own window using plain C”,它用C结构模拟了虚表,并且实现了多个接口以完成对Web Browser控件的调用。在看完他的代码之后,我对于COM/OLE的了解加深了一些,以前使用VC做过COM方面的应用,也看过不少COM方面的书,不过没有涉及到界面,所以一直不知道如何把...2005-11-11 12:16:00 · 87 阅读 · 0 评论 -
D语言中的in/inout/out参数
private import std.stdio, std.process;void test(int a, inout int b, out int c){ writefln(a); writefln(b); writefln(c); a = 3; b = 5; c = 7;}void main (){ int a = 0,...2005-11-10 14:51:00 · 547 阅读 · 0 评论 -
DMD最近的一些更新
v0.138 实现了字符串直接切片调用: char[] a = "abcde"[2..3]; writefln(a); char b = "abcde"[3]; writefln(b);另外修复了一些编译器和文档生成的BUG。v0.137的重要更新有:隐式类型引用:auto c = "abcde"; // c变量自动获得类型char[]exte...2005-11-10 12:12:00 · 140 阅读 · 0 评论 -
[转] digitalmars.D上的一个建议。
标题:Proposal: Operator overloading without temporaries作者:Don Clugston 正文:Background: Operator overloading, in the form it exists in C++ and currently in D, inherently results in sub-optimal cod...2006-03-28 10:31:00 · 119 阅读 · 0 评论 -
COM接口IDL转换为D接口以及__uuidof实现。
D语言里面,可以通过version(Windows)来兼容COM接口,不过对于__uuidof却没有相应实现。原始COM接口定义类似这样(找个简单的):[ local, object, uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)]interface IRpcChannelBuffer2 : IRpcChannelB...2006-04-11 14:26:00 · 169 阅读 · 0 评论 -
lambda之路...
DMD最近的版本号加入了闭包,感觉非常有用,虽然有些背后动作,不过我是实用派不介意这个。玩的时候忽然想到为什么没有lambda呢?AST还没影,不过可以利用D强大的模板可以使用字符串来先模拟一下。我假想的语法是这样的:[code="cpp"]int[] arr = [1,2,3];int[] arr1 = arr.map(lambda!("int x -> x * x"));...2007-11-09 22:57:36 · 103 阅读 · 0 评论 -
[D语言] ruby风格的each/map
[code]import std.stdio;class Array(T){ private: T[] data; public: this(T[] data ...){ this.data = data.dup; } void each(void delegate(T) dg){ ...2006-10-11 09:13:55 · 71 阅读 · 0 评论 -
[D语言] D语言数组
先看一段代码:void main(){ int[] c = [1,2,3]; foreach(inout int i; c){ writef(&i); writef(", "); } writefln(""); c.length = 2; foreach(inout int i; c){ writef(&a...2006-10-07 16:21:00 · 191 阅读 · 0 评论 -
[D语言] Array slicing
数组slicing操作并不复制数据。指针的slicing操作和数组slicing语意是相同的。通过slicing生成D数组,比原来直接使用指针的好处是可以有边界检查。最近刚好犯了这个错误,在使用freetype时,render出来的位图数据直接使用slicing生成数组保存起来。由于slicing并不复制数据,这样后面的render操作会覆盖前面的数据,所以我保存的数组其实都指向同一个缓冲区...2006-10-06 09:35:00 · 95 阅读 · 0 评论 -
[D语言] DMD 0.168发布
新特性:1、给委托增加ptr属性,指向委托所绑定的对象。这是一个语法糖,dg.ptr被转化为cast(void*)dg,它只能作右值,所以除了能读取它以外,在语法上禁止对它赋值。要想把委托绑定到不同的对象,你只能自己实现:class Foo{ int foo;public: this(int foo){ this.foo = foo; } void ba...2006-10-05 09:23:00 · 145 阅读 · 0 评论 -
[D语言] DMD 0.167发布
这个版本实现了计划已久的数组直接量。import std.stdio;void main(){ { static int[] arr = [1,2,3,4,5]; writefln(typeid(typeof(arr[0]))); writefln(arr); } { static float[] arr = [1f,1,3,4,5]; writefln(...2006-09-19 20:16:00 · 129 阅读 · 0 评论 -
[D语言] DMD 0.166发布
这一版本在强大的民意压力之下取消了上一版的“隐式转换表达式为委托”这一特性,取而代之的是一个lazy关键字。取消的理由是这个转换太隐晦了,最好是显式地标示出这种转换,所以引入一个lazy关键字。D语言还在发展中,很多特性都在尝试,这种修改也不是第一次了。首先看看这个lazy。上一版实现了这样一个特性:void log(char[] delegate() msg){ writefln(msg...2006-09-01 22:34:00 · 120 阅读 · 0 评论 -
[D语言] DMD 0.165发布
前几个版本主要是修正BUG,并没有多少新特性,这个版本终于增加了一个“隐式转换表达式到委托”,这个特性也使“懒惰(或延迟)求值”成为可能。详细信息可见:http://www.digitalmars.com/d/lazy-evaluation.html它首先解决了一个存在于java中的日志问题,java里面一个写日志标准格式如下:if (log.isLoggable(Level.INFO)) ...2006-08-21 13:24:00 · 116 阅读 · 0 评论 -
[D语言] 用D语言编写Ruby扩展
Ruby语言的官方解释程序是使用C语言开发的,一般用C语言来编写扩展。D语言和C语言是二进制兼容的,所以可以使用D语言编写Ruby扩展。 一、移植C库到D的一般过程 C使用头文件来处理符号依赖,在D里面链接外部库文件时,要使用extern (C)声明来引入符号,这是一个转换过程。如何转换一个C头文件到D文件?D文档的htomodule.html有详尽说明。一般...2006-08-19 06:17:00 · 204 阅读 · 0 评论 -
像Erlang一样写D程序
琢磨了好久,一直没时间来做它。在讨论[url=http://www.iteye.com/topic/76007?page=5]这个问题[/url]的时候就已经有这想法了,后来发现tango里已经有Fiber的实现,昨天终于抽了点时间做了个简单的小玩意,离真实应用还差得很远。测试代码:[code="c#"]import light_process;import tango.io....2007-09-15 10:23:47 · 73 阅读 · 0 评论 -
D语言令人喜爱的几个地方
1、去掉了丑陋的宏。C/C++中的宏是很令人厌烦的,D不允许再使用它。2、好用的字符串常量表达式。除了类C的使用双引号的字符串常量表达式以外,还可以使用`字符。可以使用x"68 65 6C6C 6F"来表示"hello",r"ab\na"则忽略字符串常量中转义字符的转义作用,还可以在字符串常量后加上c, w或d来指示字符串常量是char[]类型、wchar[]类型还是dchar[]类型。可以...2005-11-02 16:35:00 · 1424 阅读 · 0 评论 -
配置D语言编程环境
D语言是由Walter Bright开发的,他也是Symantec C++编译器的作者,仅凭这一点就知道D语言一定不错。D语言的介绍最好是看uframer的blog,他翻译了D语言的大部分文档。当然由于D语言目前一直处于测试版,文档和最新的编译器之间可能有很多不一致。D语言的编译器目前有2个,DMD和GDC,DMD比较容易配置,可以从http://www.digitalmars.co...2005-11-02 11:17:00 · 425 阅读 · 0 评论 -
[D语言] qsort的尴尬
phobos里面在stc.c.stdlib里提供了qsort,这是个传统的qsort:[code]void qsort(void *base, size_t nelems, size_t elemsize, int (*compare)(void *elem1, void *elem2));[/code]它接受的比较函数是个函数指针,如果我们想使用委托就比较麻烦了,委托是对象指...2007-05-06 21:31:24 · 86 阅读 · 0 评论 -
DMD 0.176发布
[quote] What's New for D 0.176Dec 2, 2006New/Changed Features * Added std.bind. * Need to recompile because: o Associative arrays now are PTRSIZE, not PTRSIZE*2. ...2006-12-03 14:22:52 · 88 阅读 · 0 评论 -
D语言的成员函数模板
DMD 0.166 特性列表中有一条: * ncorporated Oskar Linde's patches to support member templates.当时没注意,今天看到邮件列表中的一个[url=http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalm...2006-12-02 20:29:32 · 127 阅读 · 0 评论 -
D语言 在栈上分配对象 以及 无需GC拖管对象
[b]一、栈上分配对象[/b]C++可以轻易实现在栈上和堆上分配对象,例如下面的代码:[code]class Foo{};Foo foo; //在栈上分配Foo* foo = new Foo; //在堆上分配[/code]在栈上分配对象是C++相较于java的一大优势,可以轻松实现RAII。D语言也可以实现这2种分配方式:[code]Foo f...2006-11-28 13:18:08 · 185 阅读 · 0 评论 -
打算把twisted移植到D语言上
twisted是一个优秀的python网络开发库,以前用它做过一个视频服务器,感觉它的接口应该比ACE更适合D一些。twisted虽然是用python所写,但借助于Zope的interface模拟,很大程度上改善了动态语言开发的无接口约束的缺点。由于它有一整套规范化的接口,所以应该先把它的接口转化过来,方便编写测试。简单看了一下TwistedCore,这个是twisted最基本的部...2006-11-26 20:14:47 · 127 阅读 · 0 评论 -
DMD 0.175发布
主要是BUG修复,朝1.0大步迈近啊。还有260多个BUG,1月1日前全部修复估计够呛。不过Walter说尽量做到最好。[quote] What's New for D 0.175Nov 25, 2006New/Changed Features * Added == super to IsExpressions. * Class variables de...2006-11-25 17:23:32 · 92 阅读 · 0 评论 -
D语言检查测试代码覆盖率
[url=http://www.iteye.com/topic/34955]测试写到什么程度算足够? [/url]这个帖子对单元测试作了些探讨,代码覆盖率检查是检验单元测试的一项指标。DMD编译器内建了代码覆盖率检查,根据上面这个帖子我们写一个测试:[code]int oddNumber(int index){ switch (index){ case 1: retur...2006-11-22 17:42:02 · 90 阅读 · 0 评论 -
D语言的RAII支持
RAII(Resource Acquisition Is Initialization 资源获得即初始化)是管理资源的一种方式,它在构造对象时初始化资源,析构对象时释放资源,有时也把这2个过程分为RAII和RRID(Resource Release Is Destruction 资源释放即析构),这通常需要语言支持。大部分语言都支持RAII,RRID则有少数语言不支持,这些语言无法在域结束...2006-11-18 18:32:43 · 101 阅读 · 0 评论 -
D语言的is表达式
is关键字有2种用法,可以当作===来用(===和!==操作符已经废弃了),它是全等判断,相当于java里的==,而==则和java里的equals同义。值类型(包括简单类型、结构)的全等判断和等于判断是相同的,类对象的全等判断是判断对象指针,等于判断则是调用opEquals。测试一下:[code]import std.stdio;class Test{ publi...2006-11-16 20:12:56 · 532 阅读 · 0 评论 -
DMD 0.174 发布
[quote]Nov 9, 2006New/Changed Features * Implemented std.typetuple. * Implemented std.traits. * Added .funcptr property for delegates. * Added .tupleof property for structs a...2006-11-15 09:09:21 · 89 阅读 · 0 评论 -
D语言准备要出1.0了。
[quote]D 1.0 for Jan 1, 2007 Digital MarsWalter Bright (newshound@digitalmars.com) 2006/11/09 15:08We'll release it one way or another Jan 1. And then we'll move on! [/quote]看样子应该是DMD 1....2006-11-11 15:28:10 · 64 阅读 · 0 评论 -
DMD 0.177发布
没什么亮点,BUG修复得也不多,BUG数量始终保持在250-260个,前阵子修复BUG过快,反而引入不少新BUG,这次看来是放缓脚步了。 What's New for D 0.177 Dec 9, 2006 New/Changed Features Casting a value v to a struct S is now rewritten as S(v). In...2006-12-09 18:47:08 · 82 阅读 · 0 评论 -
GDC 0.20发布
[quote]* Updated to DMD 0.177* Fixes for synchronized code generation* Better support for cross-hosted builds* Fixed Bugzilla 307, 375, 403, 575, 578* Applied Anders Björklund's MacOS X buil...2006-12-17 14:35:51 · 84 阅读 · 0 评论 -
强类型数值计算
以前曾经讨论过使用typedef来完成强类型的数值计算,最终遇到的问题是D里面没办法定义进行全局运算符重载。最近在struct上找到点灵感,把基本类型用struct包装后使用,就可以重载运算符了,当然效率也是有保证的,D前几个版本已经完成了NRVO,struct也可以在栈上分配,所以不用担心性能,不过编译时注意打开-O选项。简单测试了一下,性能与基本类型基本上没有差别:[cod...2007-04-10 21:45:50 · 117 阅读 · 0 评论 -
简单的单元测试框架
做了个简单的单元测试框架,只算个毛坯,遇到一些问题。1、由于没有完整的堆栈跟踪,所以无法打印出断言失败的行号。2、无法获得行号,成功、失败或异常都需要显示这个。3、由于unittest关键字后面的块是一个函数,所以把这个单元测试放在里面时,成了内嵌类,这时D禁止调用static ctor。当然这不算是个大问题。只做了简单输出,没什么实际用途。代码如下:[code="...2007-04-10 21:20:17 · 87 阅读 · 0 评论