`
oldrev
  • 浏览: 233770 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论
文章列表
虽然我最喜欢的OS是Linux,但是一直对 .Net 这个多语言友好的平台很有好感,而且很最近又发现了 Castle 这套好东西,于是很自然地想让 MonoRail 运行在 Mono 上,居然成功了,Mono 果然是个好东西。 我的测试步骤如下: 确保系统安装了 Mono 1.2.4+ 和 MonoDevelop 0.15+,外加 Mono 附带的纯 C# Web 服务器 XSP。这一切都可以用 Ubuntu 的包管理系统安装,如果你用 Ubuntu Gutsy 的话。推荐到 www.getdeb.net 中下载安装最新的 MonoDevelop。 到 http:// ...
最近想在我的机器上配置一个 Trac 来管理我自己的小项目,尝试结果却令人失望,Trac 本身依赖无数的 Python 库不说,还非得要过时的 Python 2.4,而我的 Ubuntu Gutsy 默认安装的是 Python2.5,装两个 python 实在是让人不舒服。 幸运的是,在找 Trac 依赖库的过程中,我发现了 Redmine,一个基于 Ruby On Rails 开发的开源项目管理软件,不仅没有名目繁多的依赖,而且界面清爽,功能齐全,重要的是解压后简单配置一下数据库就能使用,实在是 Ruby/Rails 爱好者的最佳选择。 下面是安装 Redmine 的简介,由于 Redmi ...

mixin 模拟多继承

D1.0 代码 /** TupleMixin 演示程序, DMD2.007/GDC0.24 测试通过 Written in the D programming language 1.0 作者: oldrev Copyrights: BSD */ import std.stdio; //PredT 参数的作用是让你能够在每个模板混入之前对它进行处理, //比如可以在混入前用 static assert 检查是否有特定的成员 //总而言之,PredT 给你机会控制混 ...
今天晚上费了点脑筋写了一个简单的 C2D 转换脚本,大致实现了函数申明、全局变量、typedef、enum、struct 和数组的转换,但是还不支持预处理、union、调用约定等。 ruby 代码   #!/bin/ruby   require 'rexml/document'      #TODO:   # * 调用约定   # * union   # # 冲突关键字检查      puts "c2d.rb 0.002 - A C to D Converter"   puts " ...
通过1.0的代码完全模拟了 D 2.0 __traits(hasMember...) 和部分 getMember 的功能:   import std.stdio;      template HasMember(T, string member)   {       const bool HasMember = is(typeof(mixin("T." ~ member)));   }      template HasMember(alias X, string member)   {   ...
看截图:
作为 C++ 狂热的粉丝,你在多年使用C++的过程中是否有过以下症状: Boost 和 STL 真不错,但是编译太慢,让我想砸电脑! 我讨厌一个程序写两次,干嘛要头文件?编译器不会自动提取声明吗? 经常有大师教导你不要用 ...
刚在 D语言的新闻组里看到了D模板&元编程顶尖高人 Don Clugston 的新作——Compile time lex + parse + semantic = 300 lines of code 一个用300行代码就实现的D语言编译时词法解析、语法解析、语义分析器,换句话说就是一个非常简单的编译器前端。 当然了,这也不是什么新技术,C++ 借助一些模板递归也能实现出像 boost.spirit/boost.phoenix 这样的语法分析器,但是这个语法分析器只是在编译时生成,却不能在编译时运行。而 Don 的实现,借助了D 编译时函数执行(CTFE)的强大功能,能在编译时就完成 ...
Range Coding 是算术编码的变种,二者的效率几乎没有差别,Range Coding 速度更快,且没有专利问题。下面的程序移植和改进自一个非常清晰简洁的C++实现。当然,直接使用下面的代码去压缩文件效果并不好,速度慢压缩率也低,Range Coding 更适合作为其他算法的后端,比如 LZ77、Block Sorting。 如果你看到这里一头雾水的话,可以上 wikipedia 参考“算术编码”,不过更好的选择是找一篇名为《笨笨数据压缩教程》的系列文章来入门。 D1.0 Code /** Code for range coding, derived from pu ...
Dotmars 实例之:容器、迭代器与算法框架 这几天 Mr. Bright 老是不放新版本,圈子里太冷清了,我来发篇程序凑个数。 这是一个类似 C++ STL 的容器、迭代器和算法框架,迭代器的设计参考了 C++ boost 库中的"new-style" 迭代器,把迭代器的遍历和读写操作分开,内置数组处理参考了 qiezi 的文章: 仿STL的vector,写了一组array操作方法。容器方法的命令没有遵循 STL 的风格,而是采用 .Net 范型容器的名称。 借助于 D 威力强大的模板和模板混入,代码虽然大量用到了模板,但是十分地简短易读。 目前仅仅实现的部分包括: ...
一个模仿 Ruby Test::Unit 的 Quick & Dirty 单元测试框架,托 __traits 的福,看起来已经有那么点意思了。提取行号在目前还没法实现,估计等 macro 出来就能解决这个问题。 SVN里的最新版在下面的链接处: dotmars.googlecode.com/svn/trunk/sandbox/2.0/test.d D2.0 代码 /** A D 2.0 unit test framework inspired by Ruby's Unit::Test // Written in the D ...
D 2.0 Const/Final/Invariant 概念简介     D 2.0 specs 里的相关文档可读性不佳,因此我总结了一个简单的 const/final/invariant 概念简介,更详细的用法还请参考 D  2.0 specs。     在2.0中,invariant 和 const 有作存储类、定义类型和定义成员 ...
转自 Solidot.org James Burgett,被CNN称做英雄。他从公司和个人那里收集旧电脑,检查电脑的状况,如果坏了则自己动手修复,把它送给买不起电脑的人,每一套系统都预装了免费的操作系统——主要为Suse和Ubuntu GNU/Linux。 现在James Burgett已经创办了一家非营利组织Alameda County Computer Resource Center,建立了一支志愿者队伍,收集捐赠来的电脑,抹掉所有的私有软件,重新安装Linux和免费应用程序,然后分发给学校、非营利性组织,或者没钱买电脑的人。 一个伟大的人和一项伟大的事业,这才是真正的英雄。"
DotMars 已经具有初步的样子了,特别发帖庆祝。 DotMars 第一个范例程序(dotmars/samples/io/console.d): D 代码   module samples.io.console;      import dotmars.io.console;      void main()   {       class Foo {           override char[] toString() {               return "Greeting!"; ...
刚才写字符串格式化的由于要处理所有内置类型,而且只有 TypeInfo 可用,为了避免恐怖的 if 链,发明了下面这个有趣的switch模拟。 D语言真是太好玩了。 D代码   import std.stdio;         alias void delegate() Case;      void Switch2(T)(T cond, Case[T] aa)   {       aa[cond]();   }         void main()   {      ...
Global site tag (gtag.js) - Google Analytics