`
oldrev
  • 浏览: 233768 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论
文章列表
基础类库的东西看起来容易做起来难,今天花时间实现了一点点 .Net 风格的字符串格式化函数,贴出来娱乐一下。 注意:目前仅支持占位符索引号而已... import std.stdio; import std.string; import std.conv; alias void delegate(char c) Sink; alias void* Argument; const size_t MaxArguments = 16; void format(char ...
dsource 上的 juno 是一个很不错的 Windows 封装库,可惜的是作者似乎已经放弃了开发,已经近5个月没有更新了。 由于时间的原因,juno 无法在现在的 DMD 下编译,因此我修改并提取了 juno 库最有价值的 COM 库部分,让它能顺利编译。这么做的目的在于我们现在可以通过 juno 中的 tlbimpd.exe 为 COM 类型库生成接口代码,自己手工转换了。 附件中的 combase.d 是 juno.com.base 的修改版,mshtml.d 是 MSHTML  的接口代码。 需要注意的是当用 tlbimpd 生成代码以后需要将第一行 import juno.. ...
一个类似 C# 的 DllImport 实现,用于“半”动态加载 DLL。用起来比我以前写的 DLLWrapper 要麻烦一些,但是 DLLWrapper 由于使用一个 Tuple 来存储函数声明,会造成超长的标识符导致编译错误,这个 DllImport 避免了这个问题。 这个实现有一个缺陷是每次调用API函数的时候都会执行一次 GetProcAddress,效率比较低.... 谁能告诉我怎么避免该死的 CTFE? 代码 // DllImport - A C#-like DLL Wrapper // written by oldrev (wstring#gmail ...
昨晚我写了一个非常简单的 VIM 的D语言缩写插件,希望能让用VIM编辑D程序的指头轻松一点。 请看下图,当在VIM的插入模式键入“'main”这个字符序列时,该插件能自动将文本替换为一个完整的 main() 函数定义,并且能自动选中 <+ body +> 部分等待输入替换。Ctrl+j 键可以跳转到下一个由 <+ ????? +> 标记的地方,同样会自动选定。 插件中的代码片段由 d_imaps.vim 文件定义,此文件应当放到 ~/.vim/ftplugin(Windows 用户推荐放到 $VIMRUNTIME/ftplugin/) 目录下,下面是 d_ima ...
参考 STL 实现的 Quick & Dirty 双向链表模板类,勉强看的过去。参考了 boost 的新概念迭代器,遵循D的命名风格,只实现了几个简单的成员函数。 迭代器使用 i.current属性或i()读取当前指向的元素,使用 i = x; 设置当前指向的元素 update: 添加了 ReverseIterator, rbegin, rend, insert, erase, popBack, popFront D 的函数模板特化还是有问题(或者我不知道?) D 代码 // The STL-Like Template Class of Linked List ...
上回说到 Rank 这个 Ruby 世界最广泛使用的构建工具在 Windows 下有大bug,根本不能运行。Python的scons太慢、自动得过了头,造成定制起来很麻烦..... 最终,我找到了一个叫 Rant 的Ruby构建工具,用起来几乎与 Rank一样,而且特性更多,最重要的是能在 windows 下面正常运行。因此我强烈推荐各位D语言的粉丝使用Rant作为软件构建工具,放弃那些不成熟的IDE。用Rant的好处是还能顺带学习一下Ruby语言,对于像我一样的Ruby&&D双料菜鸟,这是不可多得的学习机会。 如果没有Ruby,请先下载安装 Ruby。 然后在控制台中输入:g ...
在一个日文网站上发现的通用 Rakefile for GDCrequire "rake/clean"NAME = "hogehoge" # プロジェクト名 ##可执行文件名PROG = "#{NAME}"PROG_DEBUG = "#{NAME}_debug"SRC = "src"SRCS = FileList["./src/**/*.d"]OBJS = SRCS.ext "o"OBJS_DEBU ...
在正文之前,先佩服一下伟大的GFW——又把 blogspot.com 的二级域名给封了。 如果你和我一样经常为了测试D语言的某个特性而写一些小程序来验证想法,而且恰好也使用 VIM 的话,那么本文就是为你准备的。 首先,VIM7 中自带的D语言语法文件版本很老,请替换为 http://www.vim.org/scripts/script.php?script_id=379 这个支持0.178的。 下面的代码是 VIM 的DMD编译器支持,将其放入 ~/.vim/complier/dmd.vim (for unix-like, Windows 为 $VIMRUNTIME\vim70\compil ...
Firefox 的同门兄弟 Thunderbird 是一款优秀的电子邮件客户端。可是我在使用中却发现这家伙竟然使用 Base64 编码来加密敏感数据,真是服了它了。 要想揪出 Thunderbird 的小辫子,请 follow 以下步骤: 请搜索 \Documents and Settings\*\Application Data\Thunderbird\Profiles\ 目录下一个叫  signons.txt 的文件,秘密就藏在里面。 打开 signons.txt 你会看到 ~***= 的内容,其中 *** 就是被 base64编码后的字符串。要解码可以使用下面的简单D语言 ...
D的文档里说 struct/class 的 .tupleof 属性可以把一个 struct 的所有成员变量转换为一个 tuple。那么反过来让 tuple 作为 struct 的成员可不可以呢?答案是可以,因为 tuple相当一个可以存放不同元素类型的静态数组,我们只要在 struct 中声明一个 Tuple 实例就能达到目的: D 代码   struct Foo(Tuple...)   {       Tuple fields;   }   alias Foo!(int, long, char) Foobar;   Foobar bar;   ...
Fedora6 越用越慢,最不靠谱的是自动升级以后竟然用不了我自己装的 Firefox2,在实在是忍无可忍的情况下闪过了一个换 Ubuntu 6.10 的念头,结果我就用上了 ubuntu..... 可是 6.10 终究不是最新版,终于一狠心一跺脚把 6.10 升级成 7.04,下面是本免费小白鼠的亲身体验: 升级很顺利,直接 apt-get update & apt-get dist-upgrade 就搞定了,基本的设置没有变化,不过我刚配置好的字体又回去了。 感觉 gnome 的速度上来了一点,不过感觉还是没刚装好的 fedora6 快。Firefox的速度倒是有进 ...
Fedora6 越用越慢,最不靠谱的是自动升级以后竟然用不了我自己装的 Firefox2,在实在是忍无可忍的情况下闪过了一个换 Ubuntu 6.10 的念头,结果我就用上了 ubuntu.....可是 6.10 终究不是最新版,终于一狠心一跺脚把 6.10 升级成 7.04,下面是本免费小白鼠的亲身体验:升级很顺利,直接 apt-get update & apt-get dist-upgrade 就搞定了,基本的设置没有变化,不过我刚配置好的字体又回去了。感觉 gnome 的速度上来了一点,不过感觉还是没刚装好的 fedora6 快。Firefox的速度倒是有进步。不错的国际象棋游戏右 ...
cpp 代码   ubyte a[3] = [2, 3, 4]; //OK!      void main()   {       ubyte b[3] = [2, 3, 4]; //编译错误   }   一只很大的 bug........
boost.variant 是安全、范型、基于栈的可识别联合容器,下面的代码是其在D语言中的等价实现。借助D语言强大的元编程能力,其与C++的版本相比,代码清晰,对类型安全有更大的保证。 boost.variant 文档:http://www.boost.org/doc/html/v ...
D语言的 TypeTuple既然可以按数组的方式操作,我觉得应该可以对其增加更多的算法,下面的 RemoveIf就是一个例子: 1 module dust.meta.tuple; 2 3 import std.typetuple; 4 5 6 template RemoveIf(alias PredTempl, TList...) 7 { 8 static if (TList.length == 0) 9 alias TList RemoveIf;10 else static
Global site tag (gtag.js) - Google Analytics