- 浏览: 223456 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
dysking:
SWT 和 JFace -
wangyuhfut:
东西不少啊。学习中。。。
一个比较好、中文说明的emacs配置文件 1 -
pacocai:
呵呵!学习,学习~~~不过要说编辑器的话个人更喜欢用VIM,比 ...
一个比较好、中文说明的emacs配置文件 1 -
zhf1zhf2:
这两百多个记起来也不容易啊
英国人是这样背的! -
regex:
试了两次,都是乱码,版本是23.1.1,看来不适合
汉化 Emacs 菜单
18 Synchronized 语句
synchronized 语句用来在多线程情况下同步临界区内的语句。
Synchronized语句:
synchronized 作用域语句
synchronized ( 表达式 ) 作用域语句
synchronized 每次只允许一个线程 执行 作用域语句。
synchronized (表达式),其中的 表达式 会计算成一个 Object 引用,整个则同时只允许有一个线程在使用该 Object 来执行 作用域语句。如果 表达式 是 接口 的一个实例,则它会类型转换成一个 Object。
即使 作用域语句 由于异常、goto 或 return 被终止了,synchronization 也会被释放。
样例:
synchronized { ... }
这实现一个标准的临界区。
19 Try 语句
异常处理由 try-catch-finally 语句完成。
Try语句:
try 作用域语句 多个Catch
try 作用域语句 多个Catch Finally语句
try 作用域语句 Finally语句
多个Catch:
最后的Catch
Catch
Catch 多个Catch
最后的Catch:
catch 无作用域非空语句
Catch:
catch ( Catch参数 ) 无作用域非空语句
Finally语句:
finally 无作用域非空语句
Catch参数 声明类型为 T 的变量 v,这里的 T 是 Object 或继承自 Object。v 由抛出的表达式进行初始化,如果 T 具有跟抛出的表达式相同的类型或是其基类的话。如果异常对象的类型为 T 或者继承自 T,则该 catch 子句就会被执行。
如果只给定了类型 T 而没有变量 v,那么该 catch 依然会被执行。
如果有 Catch参数 类型 T1 隐藏了后面类型为 T2 的 Catch,则会产生一个错误;例如,
如果 T1 跟 T2 同类型或是 T2 的基类,则这就是一个错误。
最后的Catch 会捕捉所有的异常。
Finally语句 总是会被执行,无论是否 try 作用域语句 由于goto、break、continue、return、exception 或失败而退出。
如果一个异常在 Finally语句 里产生了,而在执行 FinallyStatement 之前没有被捕捉到,则新的表达式会替换所有原来的表达式:
import std.stdio;
int main()
{
try
{
try
{
throw new Exception("first");
}
finally
{
writefln("finally");
throw new Exception("second");
}
}
catch(Exception e)
{
writefln("catch %s", e.msg);
}
writefln("done");
return 0;
}
输出:
finally
catch second
done
Finally语句 不可能因为 goto、break、continue 或 return 而退出;也不可以因为 goto 而进入。
Finally语句 不可能包含任何的 Catches。在将来的版本中这个限制可以被放宽。
20 Throw 语句
抛出一个异常。
Throw语句:
throw 表达式 ;
表达式 被计算,结果必须是 Object 引用类型。该 Object 的引用被作为异常抛出。
throw new Exception("message");
21 作用域守护语句(Scope Guard Statement)
作用域守护语句:
scope(exit) 非空或无作用域块语句
scope(success) 非空或无作用域块语句
scope(failure) 非空或无作用域块语句
作用域守护语句 在当前作用域的 结束处 执行 非空或无作用域 块语句,而不是在 作用域守护语句 所在的那个地方执行。
scope(exit) 会在正常退出该作用域时或在由于异常展开而退出时执行 非空或无作用域块语句。
scope(failure) 会在由于异常展开退出该作用域时执行非空或无作用域块语句。
scope(success) 则会在正常退出该作用域时执行 非空或无作用域块语句。
如果在一个作用域内有多重 作用域守护语句,那么它们执行的顺序则跟它们在词法上出现
的顺序相反。如果有 auto 实例在访作用域结束处被析构,那么它们也以跟词法上相反的顺
序跟 作用域守护语句 交叉在一起。
writef("1");
{
writef("2");
scope(exit) writef("3");
scope(exit) writef("4");
writef("5");
}
writefln();
输出:
12543
{
scope(exit) writef("1");
scope(success) writef("2");
scope(exit) writef("3");
scope(success) writef("4");
}
writefln();
输出:
4321
class Foo
{
this() { writef("0"); }
~this() { writef("1"); }
}
try
{
scope(exit) writef("2");
scope(success) writef("3");
auto Foo f = new Foo();
scope(failure) writef("4");
throw new Exception("msg");
scope(exit) writef("5");
scope(success) writef("6");
scope(failure) writef("7");
}
catch (Exception e)
{}
writefln();
输出:
0412
scope(exit) 或 scope(success) 语句不可能由于 throw、goto、break、continue 或 return 退
出;也不可能由于 goto 而进入。
2.014中没有 22 Volatile 语句 [color=red]没有什么代码活动能跨越 volatile 语句的边界。[/color] Volatile语句: volatile 语句 volatile ; 语句 会被计算。在 语句 之前的所有内存写操作都保证在 语句 中或其后的内存读操作之 前完成。在 语句 之后的所有内存读操作都保证在 语句 中或其前的所有内存写完成之后执 行。 [color=red]volatile 语句不能保证原子性。为了该目的,应该使用 synchronized 语句。[/color]
23 Asm 语句
asm 语句用来支持内联汇编:
Asm语句:
asm { }
asm { Asm指令列表 }
Asm指令列表:
Asm指令 ;
Asm指令 ; Asm指令列表
asm 语句使你可以直接使用汇编语言指令。这样不必费力地采用外部的汇编程序就可以获得
对CPU特殊特征的直接访问能力。D 编译器会替你管理函数调用约定、堆栈设置等等恼人
的事情。
指令的格式,当然,高度依赖于目标CPU的指令集,所以是由 实现定义 的。但是,格式
需要遵循下述约定:
• 必须使用同 D 语言相同的记号。
• 注释的形式必须同 D 语言的相通。
• Asm 指令以‘;’结尾,而不是以行尾结尾。
这些规则保证 D 的源代码可以独立于语法或语义分析而被记号化。
例如,对于 Intel Pentium 处理器:
int x = 3;
asm
{
mov EAX,x; // 将 x 载入寄存器 EAX
}
内联汇编可以用来直接访问硬件:
int gethardware()
{
asm
{
mov EAX, dword ptr 0x1234;
}
}
对于某些 D 实现,如将 D 翻译为 C 的翻译器来说,内联汇编没有什么意义,也就不需要
实现它。version 语句可以用来应付这种情况:
version (D_InlineAsm_X86)
{
asm
{
...
}
}
else
{
/* ... some workaround ... */
}
24 Pragma 语句
Pragma语句:
Pragma 无作用域语句
25 Mixin 语句
Mixin语句:
mixin ( 赋值表达式 ) ;
赋值表达式 必须在编译时求值成一个常量字符串。该字符串的文本内容必须要可编译成一
个有效的语句列表,而且同样地被编译。
import std.stdio;
void main()
{
int j;
mixin("
int x = 3;
for (int i = 0; i < 3; i++)
writefln(x + i, ++j);
"); // 正确
const char[] s = "int y;";
2.014 26 Foreach Range Statement A foreach range statement loops over the specified range. ForeachRangeStatement: Foreach (ForeachType; LwrExpression .. UprExpression ) ScopeStatement LwrExpression: Expression UprExpression: Expression ForeachType declares a variable with either an explicit type, or a type inferred from LwrExpression and UprExpression. The ScopeStatement is then executed n times, where n is the result of UprExpression - LwrExpression. If UprExpression is less than or equal to LwrExpression, the ScopeStatement is executed zero times. If Foreach is foreach, then the variable is set to LwrExpression, then incremented at the end of each iteration. If Foreach is foreach_reverse, then the variable is set to UprExpression, then decremented before each iteration. LwrExpression and UprExpression are each evaluated exactly once, regardless of how many times the ScopeStatement is executed. import std.stdio; int foo() { writefln("foo"); return 10; } void main() { foreach (i; 0 .. foo()) { writef(i); } } Prints: foo0123456789
。。。。
发表评论
-
土耳其文《d编程》range 翻译 一
2011-11-15 02:01 1538Ranges 范围 Ranges are an abstra ... -
土耳其文《d编程》range 翻译 二
2011-11-15 01:59 1032As you can see, that output doe ... -
d2 range 和 标准C++中的Iterator(迭代器)简介
2011-05-07 12:59 2150原文: http://hi.baidu.com/c ... -
三访安德烈Alexandrescu(第2部)
2010-08-20 12:53 1441Google翻译哦 面试------> 应翻成 访谈 ... -
三访安德烈Alexandrescu(第一部分)
2010-08-20 12:43 1362google翻译哦 Interview with Andre ... -
Garden Editor project 日记 之二 10.16 ---
2009-10-16 02:39 02009.10.16 T[new] misgivings ... -
Garden Editor project 日记 之一 09.09.25 --- 10.15
2009-09-24 22:56 0kill two birds with one stone, ... -
template metaprogramming 9
2009-09-09 16:08 1189原文:https://docs.google.co ... -
Floating Point in D (2.030 新)
2009-05-12 23:27 20695.17 23:50 更新 5.16 20:30 翻译更 ... -
Migrating to Shared (2.030 新)
2009-05-12 23:03 11685.19 0:10 更新(完成) ... -
D 2.0 的gc
2008-12-04 19:53 1265http://lucifer1982.wordpress.co ... -
垃圾回收 2.014
2008-06-10 07:20 994无版本差异 D 是一种全面采用垃圾回收(Garbage Co ... -
类 class 2.014
2008-06-09 22:51 1111D 的面向对象的特性都来源于类。类层次里的顶层是 Object ... -
接 口 2.014
2008-06-09 22:51 858接口声明: interface 标 ... -
C 语言接口 2.014
2008-06-09 22:50 1043D 的设计就是要在目标系统上能够很好地符合于 C 编译器。D ... -
Traits 特征 2.014
2008-06-07 11:25 12736.14 翻译 (d语言的反 ... -
常量和不变量 Const and Invariant 2.014
2008-06-07 11:22 1325请参考: D 2.0 Const/Final/Invarian ... -
词法 2.014
2008-06-07 10:22 1515在 D 中,词法分析独立于语法分析和语义分析。词法分析器是将源 ... -
枚 举 2.014
2008-06-07 08:41 1169枚举声明: enum 枚举标记 枚举体 enum 枚举体 en ... -
函 数 2 (2.014)
2008-06-07 08:22 10507 嵌套函数 函数可以被 ...
相关推荐
在HttpWatch Pro v6.014版本中,用户可以享受到以下主要功能: 1. **实时性能监控**:在浏览网页时,HttpWatch会实时显示页面加载的各项详细指标,帮助开发者快速定位性能瓶颈。 2. **全面报告**:提供详细的性能...
南京科远DCS软件 NT6000 V4.2.014 Release Build 2021.1018 Setup
jdk1.8支持的最后一个版本jenkins,验证可用Jenkins Jenkins 2.289.3 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins Jenkins 2.289.3 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用...
实战大数据扩展视频.zip.014
DXperience-8.3.5.zip.014
英语习语学习大全7.pdf
802.3-2005_section2.pdf 802.3-2005_section3.pdf 802.3-2005_section4.pdf 802.3-2005_section5.pdf 802.3-2008 section 1.pdf 802.3-2008 section 2.pdf 802.3-2008 section 3.pdf 802.3-2008 section 4.pdf 802....
适用于Ubuntu的网卡驱动,安装步骤:在终端上查看网卡驱动型号lspci或者lspci | grep -i ethernet,我的网卡为Realtek RTL8125;下载后解压缩,根据Readme提示进行安装:执行sudo ./autorun.sh完成安装。
HTML中往往会需要绘图,D3.js是相对来说较好的选择,当所制作项目需要在无互联网环境下运行时,需要该js。d3.v4.min.js为最新的js
从网上下了无数的libsqlite3.so文件 sqlite3文件 新的 旧的都有 但都是电脑上通过 Android手机上却连接不上 ,手机上永远都是System.DllNotFoundException: sqlite3 。这句话。换了无数的sqlite3 都没用 也换了无数...
linux vnc 缺少的文件 libstdc++-libc6.2-2.so.3 解压后, 需要将这个文件放在/usr/lib下, linux vnc-4_1_3-x86_linux 下的vnc才能正常工作哦, 不然一直会报错说找不到或者没有这个文件
RHEL 7.1安装MySQL 5.6的依赖包:perl-Data-Dumper-2.145-3.el7.x86_64.rpm ------------------------------------------------------------------------------------
cv2.pyd 包含 32位和64位 支持pyhton2.7.........................................................................................................................
2. **拼接操作**:`StringUtils.join()` 方法允许你将多个对象或数组元素用特定分隔符连接成一个字符串,比使用 `String.concat()` 或 `StringBuilder` 更简洁。 3. **分割操作**:`StringUtils.split()` 可以按照...
jenkins-2.222.3-1.1.noarch.rpm centos系统下的jenkins安装包
这时候单独下载dotnetfx35直接安装是安装不上的,需要用一下方法进行单独安装:通过 NetFx3.cab 文件安装,安装方法:下载NetFx3.cab后将其放于C盘WINDOWS文件夹下(C:\Windows)点击“开始”找到“Windows ...
大学新生迎新简短祝福语(2).pdf
教师节简短10字祝福语(2).pdf