自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

uframer(焦冶)的专栏

目前,这里的一切都是关于D语言的。

  • 博客(40)
  • 收藏
  • 关注

原创 GNU Gengetopt 2.10 Usage 随便翻点东西

GNU Gengetopt 2.10 Usage需要由gengetopt生成的函数处理的命令行选项在一个文件中指定(该文件的扩展名通常为 .ggo )。文件组织为文本行,格式为:package version option {default=""} {multiple}option flag      option no其中:package双引号字符串。

2006-09-27 23:07:00 6658 1

原创 开始着手更新D语言规范

最近腾出手来,开始更新D语言规范,不知需要花多少时间,慢慢来。

2005-12-03 16:03:00 7350 22

原创 Multiboot 规范

Multiboot规范Multiboot规范本文定义了Multiboot规范——提议中的引导过程标准。本文是此规范的0.6.93版。 概览 术语 规范 示例 历史 索引节点: 概览, 前进: 术语, 后退: 顶层, 向上: 顶层 Multiboot规范简介本章描述了一些关于Multiboot规范的粗略的信息。注意,这不是规范本身的一部分。 动机 架构 操作系统 引导源 引导时配置 为操作系统带来的

2005-05-12 18:56:00 9532 3

原创 D语言的移植性指南

 移植性指南从软件工程的观点来看,应尽量减少代码中那些可以避免的移植性问题。用于减少潜在的移植性问题的技术有:应该将整数和浮点类型的大小视为下界。算法应该能够在相应的类型大小增长后依然运行良好。浮点运算应该可以使用高于保存相应值的变量的精度。浮点算法应该在相应的类型的精度提高后依然运行良好。避免依赖于计算中那些副作用的顺序,因为编译器可能会改变这些顺序。例如: a + b + c 可以按照各种

2005-03-13 21:05:00 4905 3

原创 D语言对C的接口

 对 C 的接口按照设计,D 应该同目标系统上的 C 协作良好。D 依赖于目标环境上的 C 运行时库,这多少补偿了缺少标准虚拟机的一些缺陷。将现有的 C API 用 D 重写或用 D 封装意义不大。直接调用它们不是要容易得多?!如果采用了同 C 编译器相同的数据类型、内存分布和函数调用/返回指令序列,就可以这样做。调用 C 函数D 可以直接调用 C 函数。不需要封装函数、参数变换,C 函数也不需要

2005-03-12 19:39:00 5602 8

原创 D语言中的内联汇编在x86平台上的实现

D x86 内联汇编D,作为一种系统程序设计语言,提供了内联汇编的功能。对于同一个处理器家族来说,D 的内联汇编的实现是标准化了的,例如,Intel Pentium 上的 Win32 D 编译器的内联汇编的语法同 Intel Pentium 上的 Linux D 编译器的语法是一样的。 但是,不同的 D 实现,可以依内存模型、函数调用/返回约定,参数传递约定等的不同而自由实现内联汇编。 本文描述了

2005-03-09 20:28:00 6371

原创 D语言中的浮点运算

 浮点浮点运算中间值在许多计算机上,使用较高精度的运算并不比使用较低精度的运算耗费的时间长,所以为内部的临时变量采用机器允许的最高精度对于数值运算是有意义的。这里采用的哲学是不强求语言为统一而采用各种硬件的最低精度,从而充分利用目标硬件的最佳性能。对于浮点运算表达式的中间值来说,可能会使用高于表达式类型所要求的精度。操作数的类型只决定最低精度而不是最高精度。实现注记:例如,在 Intel x86

2005-03-07 19:57:00 4318

原创 D语言中的内存管理技术

内存管理任何有意义的程序都需要分配和释放内存。随着程序复杂性、大小的增长和性能的提高,内存管理技术变得越来越重要。D 提供了多种管理内存的方式。 D 中三种主要的分配内存的方法是: 静态数据,分配在默认数据段内。 堆栈数据,分配在程序堆栈内。 垃圾收集数据,动态分配于垃圾收集堆上。 本章描述了使用它们的技术,同时还有一些高级话题: 字符串(和数组)的写时复制 实时 平滑操作 自由链表 引用计数 显

2005-03-02 22:23:00 4825

原创 D语言中的垃圾收集机制

垃圾收集D 是一种全面采用垃圾收集的语言。这意味着它从来不用释放内存。只需要按需分配,然后由垃圾收集程序周期性的将所有未使用的内存返回给可用内存池。 C 和 C++ 程序员习惯于显式的管理内存分配和释放,很可能会怀疑垃圾收集的好处和功效。对一开始就采用垃圾收集设计的新项目和用垃圾收集改良的现有项目的经验表明: 采用垃圾收集的程序更快。这有些违反直觉,但是其原理有: 引用计数是解决显式内存分配问题的

2005-03-02 22:11:00 4741

原创 D语言中的错误处理

D中的错误处理所有的程序都要应付错误。错误是不在程序正常操作范围内的异常情况: 内存耗尽 磁盘空间耗尽 文件名无效 试图写只读文件 试图读不存在的文件 请求不支持的系统服务 错误处理问题C 语言检测报告错误的传统方法并没形成传统,每个函数都有自己的方法,包括: 返回 NULL 指针。 返回 0 值。返回非零的错误代码。需要检查 errno(译注:错误代码,鉴于此缩写已约定俗成,以下不译)。如果上

2005-03-02 20:36:00 4291

原创 D语言中的调试、版本控制和静态断言

 调试、版本控制和静态断言D 支持从同一套代码构建多种版本和各种调试级别的程序,方法是使用下面的特征: 调试说明 调试特征 调试语句 版本说明 版本特征 版本语句 静态断言 DebugSpecification DebugAttribute DebugStatement VersionSpecification VersionAttribute

2005-03-01 21:18:00 4315

原创 契约式编程

契约式编程契约是减少大型项目成本的突破性技术。契约由先验条件、后验条件、错误和不变量等概念组成。契约可以而加到 C++ 中而无需对语言加以改造,但是却十分笨拙且不一致。 在语言内部支持契约的目的是: 给契约一个一致的观感 提供工具支持 使编译器能够根据从契约中收集的信息生成更好的代码 易于管理并强制实行契约 处理契约继承 契约的概念很简单——它只是必须为真的表达式。如若

2005-02-23 22:19:00 10233

原创 D语言中的混入(Mixin)

混入混入(Mixins) 意味着用不同的编程语言表达的不同的事物。 在D中,一个混入从一个 模版声明 的过程体内提取一个任意的声明集合,并将它们插入到当前的上下文中。  模板混入: mixin 模板标志符 ; mixin 模板标志符 混入标志符 ; mixin 模板标志符 !( 模版参数列表 ) ; mixin 模板标志符 !( 模版参数列表 ) 混入标志符 ; 混

2005-02-23 22:13:00 5001

原创 D语言中的模板

模板D通过模板实现泛型编程。模板声明 定义为: 模板声明: template 模板标志符 ( 模板参数列表 ) { 声明定义 } 模板标志符: 标志符 模板参数列表 模板参数 模板参数 , 模板参数列表 模板参数: 类型参数 值参数 别名参数 模板类型参数: 标志符 标志符 模板类型参数特化 标志符

2005-02-22 11:28:00 4648 3

原创 D语言中的运算符重载

运算符重载运算符重载就是重新解释作用于特定结构或者类的一元或二元运算符的含义,被重新解释的运算符是作为结构或类的成员实现的。通过重载,我们只需使用原来的语法就可以得到我们想要的结果。 一元运算符重载可重载的一元运算符op opfunc -e opNeg +e opPos ~e opCom e++ opPostInc

2005-02-22 11:25:00 4445 1

原创 D语言中的枚举类型

枚举类型 枚举声明: enum 标志符 枚举体 enum 枚举体 enum 标志符 : 枚举基本类型 枚举体 enum 枚举基本类型 : 枚举体 枚举基本类型: 类型 枚举体: ; { 多个枚举成员 } 多个枚举成员: 枚举成员 枚举成员 , 枚举成员 , 多个枚举成员 枚举成员: 标志符 标志

2005-02-21 21:02:00 3770 1

原创 D语言中的类和接口

类D的面向对象的特性都来源于类。处在类层次最顶点的是类 Object。Object 定义了每个派生类拥有的最小功能集合,并为这些功能提供了默认的实现。 类是程序员定义的类型。作为面向对象语言,D支持对象,支持封装、继承和多态。D 类支持单继承编程范式,并且支持接口。类对象只能通过引用具现化。 类可以被导出,这意味着它的名字和非私有成员将会暴露给外部的 DLL 或者 EXE 。 类声明定

2005-02-21 20:22:00 3748 1

原创 D语言中的结构和联合

结构 & 联合 聚集声明: 标记 { 声明定义 } 标记 标志符 { 声明定义 } 标记 标志符 ; 标记: struct union AggregateDeclaration: Tag { DeclDefs } Tag Identifier { DeclDefs } Tag Identifier ; Tag: struc

2005-02-21 20:12:00 3168

原创 D语言中的数组(二)

 设置动态数组的长度动态数组的 .length 属性可以作为 = 运算符的左值: array.length = 7; 这会造成数组被在适当的位置被重新分配,现有的内容被原封不动的复制到新的数组中。如果新的数组比原数组短,将只保留新数组能够容纳的那些内容。如果新数组比原数组长,新数组长出的部分将会使用元素的默认初始值填充。 为了达到最高的效率,运行时总是试图适当地调整数组的大小(resi

2005-02-21 19:57:00 3788

原创 D语言中的数组(一)

数组有四种数组: int* p; 指向数据的指针 int[3] s; 静态数组 int[] a; 动态数组 int[char[]] x; 关联数组 指针 int* p; 这是最简单的指向数据的指针,等价于 C 指针。提供指针的目的是提供与 C 的接口并给 D 完成特定的系统级工作的能力。没有与之相关的数组长度,所以就没有办法在编译或运

2005-02-21 19:25:00 3708

原创 D语言中的语句(二)

Switch 语句switch 语句依照 switch 表达式的值来选择一条 case 语句执行。 Switch语句: switch ( 表达式 ) 语句块 Case语句: case 表达式列表 : 语句 Default语句: default: 语句 SwitchStatement: switch ( Expression ) BlockStatement

2005-02-21 19:15:00 1743

原创 D语言中的语句(一)

语句C 和 C++ 程序员将发现 D 的语句非常熟悉,他们还会发现有一些有趣的补充。 语句: 标号语句 语句块 表达式语句 声明语句 If语句 调试语句 Version语句 While语句 DoWhile语句 For语句 Foreach语句 Switch语句 Case语句 Default语句 Continu

2005-02-21 19:10:00 2228

原创 C++程序员如何用D编程

 C++ 程序员如何用 D 编程每个有经验的 C++ 程序员都积累了一系列的习惯和技术,这几乎成了第二天性。有时候,当学习一门新语言时,这些习惯会因为太令人舒适而使人看不到新语言中等价的方法。所以下面收集了一些常用的 C++ 技术,以及如何在 D 中完成同样的任务。 另见:C 程序员如何用 D 编程 定义构造函数 基类初始化 比较结构 创造新的 typedef 型别

2005-02-18 22:17:00 7270 6

原创 C程序员如何使用D编程(二)

设置和结构成员对齐方式C 的方式这是使用命令行选项完成的,而且该效果会影响整个程序,并且如果有模块或者库没有重新编译,结果会是悲剧性的。为了解决这个问题,需要用到 #pragma : #pragma pack(1) struct ABC { ... };

2005-02-18 21:55:00 1726

原创 C程序员如何使用D编程(一)

C 程序员如何使用 D 编程每个有经验的 C 程序员都积累了一系列的习惯和技术,这几乎成了第二天性。有时候,当学习一门新语言时,这些习惯会因为太令人舒适而使人看不到新语言中等价的方法。所以下面收集了一些常用的 C 技术,以及如何在 D 中完成同样的任务。 因为 C 没有面向对象的特征,所以有关面向对象的论述请参见 C++ 程序员如何使用 D 编程 。 C 的预处理程序在 C 的预处理程

2005-02-18 20:36:00 2142

原创 D语言中的函数

 函数虚函数所有的非静态非私有函数都是虚函数。这听起来也许低效,但是因为D编译器在生成代码时知道所有的类层次结构,所有未被重载的函数可以被优化为非虚函数。事实上,因为 C++ 程序员倾向于“在不确定时,声明它为虚函数”,D 采用的方法“声明为虚函数除非我们能够证明它可以是非虚函数”造成的结果是产生更多更直接的函数调用。由重载非虚函数造成的 bug 也减少了。 拥有非D链接的函数不会是虚

2005-02-14 01:21:00 3589 2

原创 D语言中的表达式(二)

 In 表达式 关系表达式 in 移位表达式 RelExpression in ShiftExpression 可以检测一个元素是否在关联数组中: int foo[char[]]; …… if ("hello" in foo) …… in 表达式同关系表达式 等有相同的优先级。移位表达式 移位表达式 和表达式 移位表达式 >> 和表达式 移位表达式 >>>

2005-02-12 17:13:00 2169

原创 D语言中的表达式(一)

表达式C 和 C++ 程序员会发现 D 中的表达式很熟悉,另外还有一些有意思的扩充。 表达式用来计算多个值并返回一个特定类型的值。随后,所得的值可以被用于赋值、测试或被忽略。表达式也可能有副作用。 表达式: 赋值表达式 赋值表达式 , 表达式 赋值表达式: 条件表达式 条件表达式 = 赋值表达式 条件表达式 += 赋值表达式 条件表达式 -= 赋值

2005-02-12 13:09:00 1752

原创 D语言中的编译器指令(Pragma)

编译器指令 Pragma: pragma ( 标志符 ) pragma ( 标志符 , 表达式列表 ) Pragma: pragma ( Identifier ) pragma ( Identifier , ExpressionList ) 编译器指令用来给编译器传递如何使用产品提供商对D的特殊扩展的信息。指令以‘;’结尾,它们可以影响一条语

2005-02-08 12:33:00 1809

原创 D语言中的特征(Attributes)

特征 特征指示器: 特征 : 特征 声明定义块 编译器指令 ; 其他特征指示器: 其他特征: 其他特征 声明定义块 其他特征 声明定义块 else 声明定义块 特征: 链接特征 对齐特征 编译器指令 deprecated private p

2005-02-07 17:39:00 1738 1

原创 D语言中的属性(Properties)

属性(Properties)每种类型和表达式都有可以查询的属性: int.sizeof // 得 4 float.nan // 得浮点数的 nan (Not A Number) 值 (float).nan // 得浮点数的 nan 值 (3).sizeof // 得 4(因为 3 是 int) 2.sizeof // 语法错误,因为“2.”是一个浮点数 int.ini

2005-02-07 17:30:00 3884 1

原创 D语言中的类型

类型基本数据类型关键字 描述 默认初始值(.init) void 无类型 - bit single bit false byte signed 8 bits 0 ubyte unsigned 8 bits 0 short signed 16 bits 0 ushort uns

2005-02-06 22:26:00 3052 4

原创 D语言中的声明

 声明 声明: typedef Decl alias Decl Decl Decl: 存储类别 Decl 基本类型 多个声明符 ; 基本类型 声明符 函数体 多个声明符: 声明符初始值 声明符初始值 , 声明符初始值列表 声明符初始值: 声明符 声明符 = 初始值 声明符标志符列表: 声明符标志符

2005-02-06 22:20:00 1678

原创 D 语言中的模块(Module)

模块 模块: 模块声明 多个声明定义 多个声明定义 多个声明定义: 声明定义 声明定义 多个声明定义 声明定义: 特征指示符 导入声明 枚举声明 类声明 接口声明 聚集声明 声明 构造函数 析构函数 不变量 单元测试 静态构造函数 静态析构函数 调试规格 版本规格

2005-02-05 18:53:00 3841 3

原创 D vs 其他语言

D vs 其他语言下表给出了 D 同其他经常提到的语言在各个特征上的粗略的比较。尽管各个语言的标准库中也提供了很多功能,但这张表格只考虑内建到语言核心中的特征。我们只考虑官方的标准特征,不考虑被提议的特征、测试版的特征或者非标准的扩展特征。而且,如同所有其他的语言比较一样,提到什么特征、忽略什么特征以及我对这些特征的解释都是带有偏向性的。 特性 D C C++

2005-02-05 18:50:00 12893 15

原创 写在前面(本分类中所有文章的版权声明)

这个分类中的文章是对DigitalMars的D文档的翻译,原文可见于http://www.digitalmars.com/d/ ,原文版权属于 DigitalMars ,版权声明为:Copyright (c) 1999-2004 by Digital Mars, All Rights Reserved 。另外,本人作为译者,保留译文的所有权利,转载请注明出处。原本这些声明我是打算放到每篇文章中去的

2005-02-04 18:56:00 1779 2

原创 D语言词法(二)

字符串文字量 字符串文字量: 所见即所得字符串 替代所见即所得字符串 双引号字符串 转义序列 十六进制字符串 所见即所得字符串: r" 多个所见即所得字符 " 替代所见即所得字符串: ` 多个所见即所得字符 ` 所见即所得字符: 字符 行尾 双引号字符串: " 多个双引号字符 " 双引号字符:

2005-02-04 17:49:00 2280 2

原创 D语言词法(一)

词法在D中,词法分析独立于语法分析和语义分析。词法分析器将源文件分割成记号。词法描述了如何识别记号。D的词法被设计为适于高速扫描,它拥有最小的特殊规则集合,只有一遍翻译,这使得构造一个正确的扫描程序很容易。对于熟悉 C 和 C++ 的人来说,记号也很容易识别。 编译的阶段编译被分为多个阶段。每个阶段都不依赖于后继的阶段。例如,扫描程序不依赖于语义分析程序。这种分离使语法制导编辑器等语言

2005-02-04 17:34:00 4529 3

原创 D语言概览(二)

接上文...模板D 模板提供了一种提供范型编程和偏特化能力的简洁的方法。 关联数组关联数组是索引可以为任意类型的数组,不像普通数组那样必须使用整数作为索引。本质上,关联数组就是散列表。关联数组使构建快速、高效、无错的符号表变得容易了。 真正的 typedefC 和 C++ 的 typedef 实际上是类型 别名 ,因为它不会引入新的类型。D 实现了真正的 typedef : type

2005-02-03 20:52:00 5670 6

原创 D语言概览(一)

概览什么是 D 语言?D 是一种通用的系统和应用编程语言。它是比 C++ 更高级的语言,同时还保持了生成高效代码以及直接访问操作系统API和硬件的能力。D 很适合于编写从中等规模到那些由团队合作完成、数百万行代码规模的各种程序。D 易于学习,为编程者提供了很多便利,并且适用各种野心勃勃的编译器优化技术。 D 不是脚本语言,也不是一种解释型语言。它不需要虚拟机、宗教、或者高于一切的哲学。它是

2005-02-03 20:23:00 2726 22

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除