联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!
1、什么是联合?
“联合”是一种特殊的类,也是一种构造类型的数据结构。 在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的 ...
首先,再次问候大家,春节好!祝愿D语言社区兴旺发达,祝愿JavaEye蒸蒸日上!
在前文中,已经讨论了如何调用ANSI和多字节的函数。本文目的是关于在D中如何更好应用。当然,很多人认为完全可以使用宽字符的函数,但是,有时候,你要调用的函数是ANSI函数(例如WinExec,仅仅有ANSI版本,不支持Unicode,当然你可以使用麻烦的ShellExecuteEx),你就必须了解Unicode的相关知识。建议阅读前文http://ideage.javaeye.com/blog/119177,运行相关例子,认真揣摩调用的几个用法。
1.首先要明白你使用的char是什么格式。char在D中,有 ...
在WindowsNT平台上,最具有伸缩性和吞吐量的网络服务器程序都使用了完成端口。为了在D中使用完成端口,我写了这个简单的例子。希望大家指正!
在DMD1.020-1.022,WindowsXP,编译测试通过。
没有使用std.socket,因为std里面的socket实现不能使用重叠IO。
D 代码
// D Program Language IOCP
// write by ideage@gmail.com ...
每个使用C或者C++直到D的人都要认识到的Unicode问题:
如果你的程序要在更广的国度使用,或者要进入Internet,你都要使用Unicode!
先列个提纲,细节解释待续!
1.编码 ansi,mbcs/dbcs,unicode,ucs2
2.类型 ansi char ,utf8 char,wchar,dchar
3.类型的指针和内存复制
4.windows的知识
windwos98,2000,windowsCE
D代码
public import std.c.strin ...
将打印的代码从DWT,添加到DFL中,从而让DFL拥有打印的功能.http://wiki.dprogramming.com/Dfl/PrinttingDWT的打印写的一般,我添加的就更一般, 以后继续封装,先提供一个可以使用的版本.1.PrintDocument 封装了打印机和打印文档,提供打印事件,供打印调用.2.PrintDialog 打印对话框3.PrintSetting 打印机设置4.PrintEventArgs 在打印事件中调用的参数,包含执行具体打印的Graphics. NEXT: 提供PrintPreview,PageSetting. 使用方法(Test on ...
我认为这是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 OK "~fb);
}
void init(char[] a)
{
fb = " Hollo "~ ...
自从去年看到D后,就深深的被D迷上了.静态类型,本地代码,快速编译,垃圾收集,直接访问C,单元测试,契约编程...太多的特性,并且每个特性都让我为之心动.我喜欢解决问题,更喜欢找到解决问题的方法.工欲善其事吗.看到D这个编程利器后,我几乎天天都在学习D.每天用D编写一段程序,每天看看D的新闻,每天要访问Javaeye的DLang圈子. 看到更多的朋友关注D,学习D,加入D的组织,心里非常高兴. 高兴之余,掩卷沉思,我们在学习D这个利器的时候,找到学习的最后方法了吗?我已经使用了半年D,抛个砖头:
1.开始尝试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_]+$", "");
return cast(bool) myRegExp.test(c);
}
bool isspace(char[] c)
{
/* true if c is whi ...
正则表达式是个好东西,就是有些复杂.在验证输入,字符串查找,处理上确实很方便.
30分钟教程http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
D可使用的表达式:http://www.digitalmars.com/ctg/regular.html
常用的元字符
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结
常用的限定符
* 重复零次或更多次
+ ...
Observer设计模式
类型:行为型
意义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
适用:当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。
D的Phobos库std.signals实现了这个模式.
也可利用委托来简单实现.
DFL的事件委托分派机制就是个Observer模 ...
引言 语言的进步,可以简化设计模式的实现.
Singleton模式
类型:创建型
意义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
1.D的实现
一个类的实现
class Singleton
{
public:
static Singleton opCall()
{
if(_instance is null) _instance = new Singleton;
return _instance;
}
protected void init(){}
private:
this() {th ...
DFL中的事件订阅(module dfl.event,dfl.control)
一.EventArgs类: 事件参数祖先,传递事件的参数组合,可以进行继承实现更多的参数.
二.Event 模版
1.接受两个模版参数,
2.重载了操作符:
opCatAssign ~ 增加.
opCall 调用
opApply foreach调用
三.例子
---------------------------------------------------------------------
控件本身:
1.声明可以订阅事件
Event!(Control, EventArgs) click;
2. ...
DMD1.007 仅仅支持32位linux,windows.
GDC now supports 64-bit targets! A new x86_64 Linux binary is
available and the MacOS X binary supports x86_64 and ppc64.
http://sourceforge.net/project/showfiles.php?group_id=154306
Changes:
* Added support for 64-bit targets
* Added multilib support
* Upd ...
1. Phobos:
std.demangle 得到编译后的名称字符.
std.metastrings 编译期操作字符串.
std.traits 编译期类型识别.
2.运行时反射:http://flectioned.kuehne.cn/,有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象.
3.字符串混入:
混入创建对象:template GenStruct(char[] Name, char[] M1)
{
const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}
...
Walter于一月十七日在微软做了关于D语言的报告
内容提要:引用This talk assumes you're bored with the usual macguffins - expressions, statements, and core strings vs library strings. We'll skip right to the naughty bits - lambdas, mixins, tuples, scope guards, lazy arguments, and static if's. What are they, and what they are ...
期待已久的D1.0终于发布了! 感谢Walter给我们提供了这么好的工具!
引用What's New for D 1.00
Jan 2, 2007
New/Changed Features
-v flag now outputs imports
added std.c.linux.pthread
Bugs Fixed
Fixed Bugzilla 552: Internal error: ..\ztc\cg87.c 1327 on in-function modulo of imaginary number
Fixed Bugzilla 553: Assertion failure ...
Stewart 发表了一封Walter坏习惯的信.看了让人感动.Walter为我们所尊重.Stewart追求卓越的精神鼓舞人心.无论是设计思想,还有错误处理,语法拼写,都在精益求精.
我辈当学而思之.
Stewart的D资源主页http://pr.stewartsplace.org.uk/d/
引用
It's time to make a list of Walter's habits that continually annoy us.
Here are some of my peeves, to start it off:
1. Dodging issues, includi ...
Walter Bright said:
引用Brad Roberts and I have been discussing putting on the first D
conference. We'd at last all get to meet each other! This announcement
is to gauge the level of interest.
It would be either in the spring (March) or early summer (June). It
would be in Seattle, Washington or A ...
D的数据库 接口 DDBI
所有的程序都可能访问数据库。为了让D兼容其他语言开发的数据库接口,并为开发者提供统一的访问形式,DDBI应运而生。
DDBI 包含几个核心的 类,包装了数据库的基本操作。
Row 包含了多个列的一个行。允许使用索引和列名访问行的数据。
Database 提供了一个抽象的数据库封装,包含了连接,执行Sql语句,返回行的函数。
Result 管理一个从数据库返回的结果集,返回多个Row。
statement 实现了动态参数构建sql语句的类,可以执行sql语句。
例子:
import dbi.sqlite.SqliteDatabase;
import std. ...
MiniD是作者参考了Lua(著名的嵌入语言),ECMAScript,的优点,语法类似于D,功能基本和Lua相仿。根据Lua的成功,我相信MiniD也会被广泛使用。
嵌入行语言主要和宿主语言互操作。为了实现机制和策略的分离,宿主语言实现主要机制,而不容易变化的部分,分离到脚本语言中,并进行嵌入。Lua成功源于一些著名的游戏,如魔兽世界、博德之门。用嵌入语言实现配置,功能扩展,大大提高了程序的可维护性。
从D访问MiniD,主要是访问变量,访问函数。变量可以在State中进行登记。
MiniD的函数都是静态闭包,一个脚本的集合也是闭包。即脚本也是一个大的函数,象函数一样进行使用。在MiniD ...
1.框架的意义,一个简单windows程序的要素:
封装了windows窗口,控件,简化windows开发.
声明winProc回调函数;定义窗口属性,绑定回调函数,注册窗口类;创建windows窗口;进入消息处理循环,直到结束.
一个简单的win32程序,D的例子:winsamp
// Compile with: dmd winsamp gdi32.lib winsamp.def
import std.c.windows.windows;
import std.c.stdio;
const int IDC_BTNCLICK = 101;
const int IDC_BTND ...
Walter 发布了DMD0.170,171,172,修正了几乎所有可知的BUG(剩下的真的不多了),1.0指日可待了.
添加了新的特性:
foreach_reverse 可以倒序遍历任何数组.委托也可以使用foreach,但是必须和opApply一致.
int opApply(int delegate(inout Type [, ...]) dg);
final 成员函数不在放置了虚函数表中,这样,继承类可能需要重新编译.
精确匹配的null,null类型携带了类型,可以使用type函数检查.
dmd.zip (D compiler) for Win32 http://f ...
要使用D,就要和其他应用配合。D和C是二进制兼容的。可以转换C的头文件为D的文件,然后访问C的库,或者兼容C的库。
步骤:
1.转换C的头文件。具体办法http://www.digitalmars.com/d/htomodule.html,也可以使用HTOD工具 http://www.digitalmars.com/d/htod.html,下载在http://ftp.digitalmars.com/d/htod.zip
2.转换动态库,生成D可以链接的lib文件,D链接的格式是Intel32为OMF格式,和微软使用的lib文件格式COFF不兼容,转换格式的程序我没有找到,虽然介绍了。可使用的 ...
感谢前辈们对D的贡献!
收集了D语言中文文档地址,供大家参考。
uframer(焦冶)的专栏 http://blog.csdn.net/uframer
Gemini Blog(隆轩Blog) http://blog.donews.com/haogemini/category/121597.aspx
ShowLong的编程专栏http://blog.csdn.net/ShowLong/category/173343.aspx
还有D的老家(英文) http://www.digitalmars.com/d/
附件是我正在整理的D语言文档(整理的前辈的翻译)
Walter大师 发布了0.164版本的D语言编译器.
这次修改了很多Bug.加入了创建文档注释的宏.
最近我一直在使用.真心希望1.0版本的早日发布.
在http://larsivi.net/的blog中,我发现walter在讨论import的问题. 似乎就要发布1.0了.那里有好几个Pre1.0的帖子. 真让我狂喜.
Jole有一篇文章,似乎关系到了D,收集. http://www.joelonsoftware.com/items/2006/08/01.html
- 浏览: 112844 次

- 详细资料
搜索本博客
最新评论
-
ANSI和Unicode练习后记
要在dfl的listview控件里显示来自mysql的中文字符。 怎么出错了,提 ...
-- by wandernet -
D语言设计模式 Observer
好文!学习
-- by hqs7636 -
ANSI和Unicode练习后记
新年快乐!
-- by oldrev -
ANSI和Unicode练习后记
支持一个!新年快乐!
-- by DavidL -
D语言的IOCP(完成端口) ...
"iocp的使用例子(哪怕是C方式的)在dsource上都找不到一个,仅此一条i ...
-- by ahadf






评论排行榜