Dotmars 实例之:容器、迭代器与算法框架
Dotmars 实例之:容器、迭代器与算法框架 这几天 Mr. Bright 老是不放新版本,圈子里太冷清了,我来发篇程序凑个数。 这是一个类似 C++ STL 的容器、迭代器和算法框架,迭代器的设计参考了 C++ boost 库中的"new-style" 迭代器,把迭代器的遍历和读写操作分开,内置数组处理参考了 qiezi 的文章: 仿STL的vector,写了一组array ...
基于 D 2.0 编译时反射的单元测试框架
一个模仿 Ruby Test::Unit 的 Quick & Dirty 单元测试框架,托 __traits 的福,看起来已经有那么点意思了。提取行号在目前还没法实现,估计等 macro 出来就能解决这个问题。 SVN里的最新版在下面的链接处: dotmars.googlecode.com/svn/trunk/sandbox/2.0/test.d D2.0 代码 /** ...
D 2.0 Const/Final/Invariant 概念简介
D 2.0 Const/Final/Invariant 概念简介 D 2.0 specs 里的相关文档可读性不佳,因此我总结了一个简单的 const/final/invariant 概念简介,更详细的用法还请参考 D 2.0 specs。 在2.0中,invariant 和 const 有作存储类、定义类型和定义成员函数三种用途,深刻地改变了D程序编写的方式,跟C++一样,使用const/fina ...
DotMars 版 Hello World
DotMars 已经具有初步的样子了,特别发帖庆祝。 DotMars 第一个范例程序(dotmars/samples/io/console.d): D 代码 module samples.io.console; import dotmars.io.console; void main() { class Foo { override char[] toString( ...
深入分析D语言接口与COM接口的关系
前两天为了解决dxpcom项目中遇到的xpcom接口兼容性问题,看了一下DMD编译器的源码,对D的接口有了一些了解,现在总结出来,备忘。 D中有了专门用于标识接口的关键字interface,而不用象C++中使用抽象类来代替。 D代码: interface ITest { int test(); } C++代码: class ITest { int test()=0; } 而D中的接口与C ...
用Rant自动化D语言程序构建
上回说到 Rank 这个 Ruby 世界最广泛使用的构建工具在 Windows 下有大bug,根本不能运行。Python的scons太慢、自动得过了头,造成定制起来很麻烦..... 最终,我找到了一个叫 Rant 的Ruby构建工具,用起来几乎与 Rank一样,而且特性更多,最重要的是能在 windows 下面正常运行。因此我强烈推荐各位D语言的粉丝使用Rant作为软件构建工具,放弃那些不成熟的ID ...
D语言通用 Rakefile
在一个日文网站上发现的通用 Rakefile for GDCrequire "rake/clean"NAME = "hogehoge" # プロジェクト名 ##可执行文件名PROG = "#{NAME}"PROG_DEBUG = "#{NAME}_debug"SRC = "src"SRCS = Fil ...
D语言动态创建对象-D最新功能
我认为这是D提供的又一个重量级的功能.闲言少叙,代码说话! 保存为cre.d,使用dmd cre.d编译. module cre; import std.stdio; interface IPrinter { void print(); void init(char[] a); } class foo :IPrinter { void print() { writefln("foo O ...
D语言学习方法
自从去年看到D后,就深深的被D迷上了.静态类型,本地代码,快速编译,垃圾收集,直接访问C,单元测试,契约编程...太多的特性,并且每个特性都让我为之心动.我喜欢解决问题,更喜欢找到解决问题的方法.工欲善其事吗.看到D这个编程利器后,我几乎天天都在学习D.每天用D编写一段程序,每天看看D的新闻,每天要访问Javaeye的DLang圈子. 看到更多的朋友关注D,学习D,加入D的组织,心里非常高兴. 高兴 ...
D Tuple 应用:为 struct 添加成员
D的文档里说 struct/class 的 .tupleof 属性可以把一个 struct 的所有成员变量转换为一个 tuple。那么反过来让 tuple 作为 struct 的成员可不可以呢?答案是可以,因为 tuple相当一个可以存放不同元素类型的静态数组,我们只要在 struct 中声明一个 Tuple 实例就能达到目的: D 代码 struct Foo(Tuple...) { ...
编译期执行的效率
写了一个编译期执行的fibonacci模板: template fibonacci(long n){ static if(n <= 2) const long fibonacci = 1; else const long fibonacci = fibonacci!(n-1) + fibonacci!(n-2); } static long a = fibonacci!(40); D语 ...
D语言的正则表达式例子
部分内容来自wiki4D. module regexp; import std.stdio : writefln; import std.regexp; import std.c.stdio; bool isalpha(char[] c) { RegExp myRegExp; myRegExp = new RegExp("^[a-zA-Z_]+$", ""); ...
D语言实现的variant
boost.variant 是安全、范型、基于栈的可识别联合容器,下面的代码是其在D语言中的等价实现。借助D语言强大的元编程能力,其与C++的版本相比,代码清晰,对类型安全有更大的保证。 boost.variant 文档:http://www.boost.org/doc/html/variant.html boost.any 和 boost.variant 的区别与比较: http://www ...
D语言设计模式 Observer
Observer设计模式 类型:行为型 意义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。 适用:当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。 当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。 当一个对象必须通知其它对象,而它又不能假 ...
D语言设计模式 Singleton
引言 语言的进步,可以简化设计模式的实现. Singleton模式 类型:创建型 意义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1.D的实现 一个类的实现 class Singleton { public: static Singleton opCall() { if(_instance is null) _instance = new Singleton; return ...
D语言编译期生成和编译期执行技术
借助D语言新的mixin表达式,可以完成一些代码生成功能,比如: template attr_accessor(T, char[] name){ mixin(" private T _" ~ name ~ "; public " ~ name ~ "(){ return _" ~ name ~ "; } public &quo ...
编译期或运行期程序收集(meta programming)
1. Phobos: std.demangle 得到编译后的名称字符. std.metastrings 编译期操作字符串. std.traits 编译期类型识别. 2.运行时反射:http://flectioned.kuehne.cn/,有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象. 3.字符串混入: 混入创建对象:template GenStruct(char[] ...
如何获得一个方法的名字?
在D语言中,一个方法你可以得到它的指针(函数指针或委托),但不能获得它的名字,这点和C++相似。 不过今天看到PyD的一个例子: import pyd.pyd; import std.stdio; void hello_func() { writefln("Hello, world!"); } extern (C) void PydMain() { def!(hello_f ...
D语言的函数编程
前阵子论坛上有人问我D语言做函数编程怎样,老实说我没怎么想过这问题。现在想来,D语言可以有函数指针、委托、仿函数(opCall),所以它和C++基本上没什么不一样。 想起了python,虽然以前没研究过它的函数编程,不过还是搜索了一下,IBM Developer Works的“可爱的python系列”格式乱得没法看,就没继续看了。从中找出python的几个算子比如map, reduce, filt ...
D语言和python的差异
这2个语言的比较怪怪的,我最近转换了一些twisted的源文件到D,发现有些东西直接抄过来还是不可行的。 一、参数 比如twisted的callLater: class IReactorTime(Interface): """Time methods that a Reactor should implement. """ def c ...
从简单测试看D数组内存分配策略
D语言动态数组可以在运行期改变大小,这和C++的vector相似。似乎记得“STL源码分析”一书中提到vector的内存分配策略是倍增方式的,D语言数组是不是也使用了相同方式呢?我做了个简单的测试: void main(){ void* ptr = null; int[] arr = new int[0]; for (int i=0; i<33; ++i){ void* cur = cas ...
追求卓越的Stewart
Stewart 发表了一封Walter坏习惯的信.看了让人感动.Walter为我们所尊重.Stewart追求卓越的精神鼓舞人心.无论是设计思想,还有错误处理,语法拼写,都在精益求精. 我辈当学而思之. Stewart的D资源主页http://pr.stewartsplace.org.uk/d/ 引用 It's time to make a list of Walter's habits th ...
D语言的成员函数模板
DMD 0.166 特性列表中有一条: * ncorporated Oskar Linde's patches to support member templates. 当时没注意,今天看到邮件列表中的一个帖子。才发现已经支持成员函数模板了,不过是不是在0.166中支持的就不清楚了。 没有成员函数模板的模板是不完整的。一个简单的例子,源于我的另一篇“泛型矩阵类”: class Matrix ...
实战篇:设计自己的Annotation
Annotation在java的世界正铺天盖地展开,有空写这一篇简单的annotations的文章,算是关于Annotation入门的文章吧,希望能各位们能抛砖,共同学习...... 不讲废话了,实践才是硬道理. 第一部分:了解一下java1.5起默认的三个annotation类型: 一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。 一个是@Depreca ...
什么是Annotation?
在创建EJB组件时,必需提供一些定义,使得EJB组件使用一些服务例如:安全服务,持久化服务,事务服务。EJB容器可以提供这些服务,这样EJB只要实现业务逻辑就可以了。但是说到底EJB容器使用EJB组件的元数据来提供这些服务,在以前EJB的元数据是以XML配置文件形式出现的,这些配置文件与EJB源文件是分开的。 EJB的部署人员无法了解EJB本身的信息,如果EJB组件的创建者用注释(Annotati ...
侵入,无侵入? Annotation vs Interface
1. Interface 使用Interface 定义对象的类型,框架根据对象的接口来提供服务,这种模式是古而有之的Java框架设计者必习之法,从最重量的EJB到最轻量的Spring,都离不开这种方式,也的确解决了很多问题。比如在大家熟悉的Spring里: BeanFactoryAware接口,框架看到它就会调用Bean的setBeanFactory(BeanFactory beanFact ...
Annotation简单入门
这是自己看IBM DeveloperWorks中的文章的读书笔记,和大家分分享 另外附上pdf版
有了Annotation后,web技术开始退化
Annotation 就像一个分界点, 不少技术都在融入这项技术 ,所以造成技术往回发展,部署麻烦,开发复杂等 用Beehive做例子来说,它也是一种新的页面流 ,网上不少人都在夸它,谈论如何如何用它做开发, 但是甚至没有一个人能说出它比struts好在哪里, 今天简单的看了一下这个技术 , 没有看出来他在任何方面比struts强, 倒是看出了一个足以不能使用的缺点, 简单地说,它就是把strut ...
如何才算滥用annotation?
java1.5引入了annotation,初看起来非常cool,但是仔细想想它可以被用在什么地方呢?什么样的需求才是用annotation的最佳方式呢? 偶先举几个例子吧: 1. O/R Mapping 比如EJB3的持久化映射, 具体就不用说了, 规范里面非常清楚了, 看代码: @NamedQueries({ @NamedQuery( name="authorPosts", ...
[zz]Dion Almaer: Hibernate3 Example of Annotation Hell :)
http://www.almaer.com/blog/archives/000993.html 引用I am getting to play with Hibernate 3, and they have done a nice job. I was poking around the Caveat Emptor example from Hibernate in Action, which was ...