多语言编程人员

本专栏专门介绍编程语言,但您会发现有时语言理念不需要直接进行修改就可以转换成其他语言,这 一点很有意思。

Microsoft Research 语言 C-Omega 就是这样的一个例子,该语言有时简写为 Cw,因为希腊语 Omega 符号看起来很像 US 键盘布局上的小写字母 w。C-Omega 除引入了许多数据统一和代码统一概念 (可最终作为 LINQ 转换为 C# 和 Visual Basic 语言)之外,还提供了一种新的名为“chords”的并 发方法,可将 C-Omega 保存到 Joins 库中。虽然在撰写本文时,Joins 产品尚未推出,但整个 chords 并发概念可通过某个库进行提供,这意味着任何普通的 C# 或 Visual Basic(或其他 .NET 语言)程序 都可以利用此概念。

除了此概念外,还提供了一个 Code Contracts 工具。契约式设计是一种语言功能,在 Eiffel 等语 言中起到了显著作用,该功能最初通过 Microsoft Research 语言 Spec# 应用于 .NET。类似类型的契 约式保证系统也是通过 Microsoft Research 引入的,其中包括我最喜欢的产品之一 Fugue,它利用自 定义属性和静态分析检查客户端代码是否正确。

再次重申,尽管 Code Contracts 尚未作为正式产品发布,也没有获得允许在生产软件中使用的许可 证,但它作为一种库而不是一种独立的语言存在,本身就意味两层含义。首先,在理论上,Code Contracts 可由任何 .NET 开发人员作为库编写,这足够说明具有类似的功能。其次,该产品提到的功 能(假定确实具有这些功能)可用于各种语言,包括 C# 和 Visual Basic。

如果您嗅到了一丝主题的气息,那么您猜对了!本月,我要重点介绍一个最近发布的源于多语言世界 的库:软件事务内存或 STM。STM.NET 库可通过 DevLabs 网站下载,但与我提到的其他一些实现大相径 庭的是,它不是一个独立的库,不可以链接到程序或作为静态分析工具运行,从整体看,它是 .NET 基 类库的一个替代和补充等。

但是请注意,STM.NET 的当前实现与当前 Visual Studio 2010 Beta 的兼容性不是很理想,所以在 这种情况下,您所关心的有关在计算机上安装未完成的/Beta/CTP 软件的常见免责声明,一定要加倍注 意。该产品应该与 Visual Studio 2008 一起安装,但我仍不会将其安装在您的工作机上。下面是另一 个示例,其中 Virtual PC 是您主要使用的工具。

入门

虽然 STM.NET 综合了多种不同的语言,但 STM 的概念非常直观并易于理解:并非强制开发人员重点 研究实现操作并发的方法,如锁定等,而是允许他们在具备特定的支持并发特性时标记应该执行哪部分 代码,并在必要时使用语言工具(编译器或解释器)管理锁定。换句话说,STM.NET 与数据库管理员和 用户的性质一样,可使程序员使用 ACID 样式的事务性语义标记代码,并将管理锁定的单调工作留给基 础环境。

虽然 STM.NET 可能看起来只是管理并发的另一种尝试,但实际上 STM 的作用远不止这些,它尝试将 数据库 ACID 事务的全部四种特质引入内存编程模型。除了代表程序员对锁定进行管理外,STM 模型还 提供了原子性、一致性、隔离和持续性,无论同时存在多个执行线程,单凭这些特性就可使编程更简单 。

下面以伪代码(已屡见不鲜)为例,请注意这种情况:

BankTransfer(Account from, Account to, int amount) {
  from.Debit(amount);
  to.Credit(amount);
}

如果 Credit 失败并引发一个异常,将出现什么情况?如果来源帐户的借方仍有记录,而贷方却没有 相应进项,显然用户会很不乐意,此时开发人员就得去补救了:

BankTransfer(Account from, Account to, int amount) {
  int originalFromAmount = from.Amount;
  int originalToAmount = to.Amount;
  try {
   from.Debit(amount);
   to.Credit(amount);
  }
  catch (Exception x) {
   from.Amount = originalFromAmount;
   to.Amount = originalToAmount;
  }
}

时间: 2024-09-01 11:51:34

多语言编程人员的相关文章

C++编程人员容易犯的10个C#错

c++|编程   C++编程人员容易犯的10个C#错误 我们知道, C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而在于熟悉.NET的可管理环境和对.NET框架的理解. 尽管C#与C++在语法上的变化是很小的,几乎不会对我们有什么影响,但有些变化却足以使一些粗心的C++编程人员时刻铭记在心.在本篇文章中我们将讨论C++编程人员最容易犯的十个错误. 陷阱1: 没有明确的结束方法 几乎可以完全肯定地说,对于大多数C++编程人员而言,C#与C++最大的不同之处就在于碎片收

C++编程人员容易犯的10个C#错误

我们知道,C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而在于熟悉.NET的可管理环境和对.NET框架的理解.尽管C#与C++在语法上的变化是很小的,几乎不会对我们有什么影响,但有些变化却足以使一些粗心的C++编程人员时刻铭记在心.在本篇文章中我们将讨论C++编程人员最容易犯的十个错误. 陷阱1: 没有明确的结束方法 几乎可以完全肯定地说,对于大多数C++编程人员而言,C#与C++最大的不同之处就在于碎片收集.这也意味着编程人员再也无需担心内存泄露和确保删除所有没有

C语言编程时常犯十八个错误小结

C语言的最大特点是:功能强.使用方便灵活.C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误   看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考. 1.书写标识符时,忽略了大小写字母的区别. 复制代码 代码如下: main() { int a=5; printf("%d&quo

win7下c语言编程软件有哪些

  win7下c语言编程软件有哪些.好多刚开始接触c语言的朋友都想知道用上面软件开发c语言比较好,一般来说微软的东西肯定是最好的,更适合新手学习,等上手了就可以接触别的软件了.这里脚本之家小编就为大家分享一下c语言编程软件有哪些? Microsoft Visual C++ .Microsoft Visual Studio. DEV C++.Code::Blocks.Borland C++.WaTCom C++.Borland C++ Builder.GNU DJGPP C++.Lccwin32

【译】Go语言编程模式

声明:本文为InfoQ中文站特供稿件,首发地址为:Go语言编程模式 在2016年伦敦举办的QCon大会上,Peter Bourgon做了<六年Go语言设计经验>的报告,重点探讨了在使用Go进行开发时的编程模式和反模式.在这里,我们将他给Go开发者的建议进行了简单的总结. GOPATH:将GOPATH/bin添加到"PATH"这个环境变量中,以便Go应用可以访问所需要的二进制文件.在绝大多数场景下,Bourgon建议使用全局唯一的GOPATH.有些开发者希望严格区分自己的代码

《C语言编程魔法书:基于C11标准》——1.4 关于GNU规范的语法扩展

1.4 关于GNU规范的语法扩展 GNU是一款能用于构建类Unix操作系统的计算机软件合集,由自由软件之父Richard Stallman开创,于1983年9月27日对外发布.GNU完全由自由软件(free software)构成.GNU语法扩展源自于GCC编译器,在1987年发布1.0版本,称为GNU C Compiler.随后,GCC编译器前端支持了C++.Objective-C/C++.Fortran.Ada.Java以及最近跃升的Go等编程语言,因此现在GCC被称为GNU Compile

《C语言编程魔法书:基于C11标准》——1.2 用C语言编程的基本注意事项

1.2 用C语言编程的基本注意事项 C语言的发明其实基于Unix操作系统.当时在C语言未面世之前,Dennis Ritchie所在的AT&T贝尔实验室用的Unix系统是完全用汇编语言写的.汇编语言的优势是直接面向处理器本身,能直接对底层硬件进行控制,充分发挥处理器的硬件能力.然而,它的缺陷也是显而易见的. 1.汇编语言的不足 首先,不可移植性.每种处理器,其指令集都大相径庭,比如ARM有ARM的指令集架构(ISA),Intel x86有x86的ISA,还有MIPS.Power(原来为PowerP

《C语言编程魔法书:基于C11标准》——第2章 学习C语言的预备知识 2.1 计算机体系结构简介

第2章 学习C语言的预备知识 我们在第1章已经大致介绍了C语言的概念以及编译.连接流程.我们知道C语言是高级语言中比较偏硬件底层的编程语言,因此对于用C语言的编程人员而言,了解一些关于处理器架构方面的知识是很有必要的,对于嵌入式系统开发的程序员而言更是如此了. 另外,C语言中有很多按位计算以及逻辑计算,所以对于初学者来说,如果对整数编码方式等计算机基础知识不熟悉,那么对这些操作的理解也会变得十分困难.因此,本章将主要给C语言初学者.同时也是计算机编程初学者,提供计算机编程中会涉及的基本知识,这样

JAVA语言编程格式高级规范_java

作为一位开发人员,都要有严格的代码规范.为此我总结了一些代码规范案例. 目 录 1. 前言 2. 试用范围 3. JAVA命名规范-- 3.1 公共约定 3.2 Java文件.包 3.3 类.接口命名规范 3.4 方法命名规范 3.5 常量 3.6 变量和参数 3.7 组件/部件 3.8 集合 3.9 神秘的数 3.10 其他 3.11 Java异常 3.12 数组命名 3.13 数据库表命名规则 3.14 数据库字段命名规则 3.15 JSP文件命名 3.16 Servlet类命名 4. 书写