Archive

Author Archive

[Feb 24 2010] Erlang/OTP R13B04 has been released

February 25th, 2010 Comments off

Erlang/OTP R13B04 has been released. R13B04 is a service release for R13B. There are mostly error corrections, but also some new functionality.
This is the first release after the introduction of the official Git repository at Github and it is amazing to notice that the number of contributions from the community has increased significantly. As many as 32 contributors have provided 1 or more patches each until now, resulting in 51 integrated patches from the open source community in this service release.
In addition to the contributions provided by the community we have the following examples of highlights in the release:

* The documentation can now be built from the source.
* The Native Implemented Functions (NIFs) are still in beta, but much enhanced.
* The garbage collection of binaries is further enhanced.
* Support for user defined prompt in the shell. A small but useful new function.
* Enhanced cross compilation support

*BUG fix版本,细细碎碎的改进了不少. 添加了个lcnt工具

Categories: Erlang探索 Tags: , ,

R13B04 NIF improvements

February 16th, 2010 Comments off

OTP-8335 NIF improvements:

Driver API for multi-threading made available for NIFs.

Support for mempory managed (garbage collected) resource objects.
A way to pass “pointers” to native data structures between C and
Erlang in a safe way.

Various new functions, like enif_inspect_iolist_as_binary,
enif_make_sub_binary, enif_get_string, enif_get_atom,
enif_make_tuple_from_array, enif_make_list_from_array,
enif_make_existing_atom.

Categories: Erlang探索 Tags: ,

R13B04 Add lock profiling tool: lcnt

February 11th, 2010 Comments off

在调试版本下 这个工具可以直观的看出你的Erlang程序所用到的锁,对于诊断问题和提高性能非常有帮助.

OTP-8424 Add lock profiling tool.

The Lock profiling tool, lcnt, can make use of the internal lock
statistics when the runtime system is built with this feature
enabled.

This provides a mechanism to examine potential lock bottlenecks
within the runtime itself.

– Add erts_debug:lock_counters({copy_save, bool()}). This option
enables or disables statistics saving for destroyed processes and
ets-tables. Enabling this might consume a lot of memory.

– Add id-numbering for lock classes which is otherwise undefined.

Categories: Erlang探索 Tags: , ,

gccgo合并到gcc4.5

January 28th, 2010 Comments off

From: http://lwn.net/Articles/371466/

I am pleased to announce that the GCC Steering Committee has
accepted the contribution of the gccgo front-end and gcc-specific runtime
for the Go language with Ian Taylor appointed maintainer. The GCC
Release Managers will decide the details about the timing of the merge and
inclusion in GCC 4.5 or later.

Please join me in congratulating and thanking Ian and the Go
language developers. Please update your listing in the MAINTAINERS file.

Happy hacking!
David

Categories: 杂七杂八 Tags: , ,

看图学TCP API以及状态变迁

January 28th, 2010 2 comments

Categories: 网络编程 Tags: , , ,

Erlang R13B04 Installation

January 28th, 2010 Comments off

R13B04后erlang的源码编译为了考虑移植性,就改变了编译方式,以下是官方wiki上的安装文档:

1. Cloning

Here are the basic steps to build Erlang/OTP in the Git repository.
Start by cloning:

git clone git://github.com/erlang/otp.git


2. Building

Next, set ERL_TOP the environment variable:

cd otp
export ERL_TOP=`pwd`

The repository does not contain a generated configure file, so it must be generated like this:

./otp_build autoconf

before configure can be run. When the configure files has been generated, you can build in the usual way as described in the README file. Shortly:

./configure
make

3. To run the system you have built without installing it first:

$ERL_TOP/bin/erl 
Categories: Erlang探索 Tags: , ,

Go Lang介绍

January 21st, 2010 8 comments

Go Lang介绍
Go编程语言是Google中一些大牛(尤其是有着plan9前科的大牛们)如Rob Pike,Ken Thomason这两位赫赫有名的程序高手、技术作于2007年9月开始建造。

Pike指出,Go代码的编译基本上可以达到C语言的速度,几乎可以在瞬间完成,“就像是在使用交互式语言”。现有的语言都没有针对多核心处理器进行优化,为了解决此类编程问题,Google工程师们开发了Go语言。从源文件的copyright可以看到,很多基础代码来自plan9.

Go 已在Google公司内部测试过,但仍处于试验阶段。Google开放Go的代码,希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说:我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go,1年前开始有一只团队专职于此。目前只支持unix平台, windows平台的支持由于资源的原因,需要更多的参与者来移植。
Go的定位 是系统编程,比如Web服务器、存储系统和数据库等,但也欢迎在其它方面的应用。

Go语言的官方吉祥物如下:

我看好Go的原因是: 这个语言不是凭空或者实验室设计的,而是填补过去10年在系统编程软件方面的不足。作为系统软件的编写者,经常会深深的感觉到目前常见语言的面对大规模的网络应用,在不断涌现的多核心硬件前的无奈, 纠缠在多线程和各种锁中间, 不停的制造各种各样的轮子, 低效的排错。Go拥有的这些现代特性都是系统用户梦迷以求的,经过作者全面的考虑,适当的取舍,即结合了动态语言的弹性,又有了静态语言的安全性和高性能。

目前这个GO社区非常活跃,邮件列表里每天都有几百个讨论,加上有Google的强力支持, 个人认为非常有前途。

那么GO能解决什么问题:
1. 硬件很快 软件开发很慢。
2. 依赖很麻烦。
3. c++ java太笨拙。
4. 并行和gc
5. 多核心机器的出现,未来几年128核心的机器都很常见。

大部分的系统语言并不是设计来解决这些问题的,而且新涌现的大多数库并没有改善这些问题,相反加剧了。

GO结合了动态语言的开发效率和静态编译型语言的安全性和运行效率,支持网络和多核编程,带给我们快速, 安全, 并发, 快乐。

Go有着非常高的效率。 实际上golang.org就是用gdoc架设的。同时语言效能评测网站() Go和其他语言的对比,也充分说明了Go的效率和c语言很接近。

GO的设计目标:
1。 系统编程语言。
2. 快速编译和执行。
3. 类型安全性和内存使用安全。
4. 很好的支持并发计算。
5. 高效,低延迟的垃圾回收算法。

指导原则:
1. 减少bookkeeping。
2. 更少的关键词,减少无谓的输入。无符号表设计使得语法分析,调试等大幅简单。
3. 保持概念正交
4. 保持简单。
5. 减少类型,无类型层次,避免啰嗦。

语言特性:
清晰,精确的语法语法:大多数从c 继承, 包机制Pascal/Modula/Oberon family (declarations, packages),并发从(CSP)那里借鉴。
大写符号导出符号。
函数或者块开始注释是文档,用于gdoc处理。
改进的If, case 复合语句,允许在条件前,执行语句。 Case 不支持自动fall throught, 必须显示说明。 Case支持多个判断。

轻量的类型系统
没有隐式的转换
强类型,显式类型转化
指针运算 slice代替 提供安全性
通用类型:interface{}
内置数组和字典
支持面向对象编程,但是不支持层次继承。
融合多种语言的特性,各个社区的人都会熟悉,特别是c, lua, python社区的用户非常容易上手。

运行期: c和汇编实现内存的分配和收集,栈管理,轻量级协程,通讯管道,切片,Map以及反射等等基础设施。

Gc:目前是用经典的简单的Mark And sweep 算法, 未来会采用更高效,低延迟的算法。

库实现:
1. 完全用Go语言实现, 不依赖其他系统库
2. 从接口库如xml, asn1,jonson, IO库,压缩,加密库等等,比较齐全,极大的方便了用户。
支持unicode. 值得一提的是 Go的 “hello 世界”,很好的展示了对unicode支持。

模块:
Package管理。一个package可以分散在多个文件里,就好比在一个文件效果一样。

扩展:
Cgo 支持c和go编程混合,使得GO的扩展非常容易,让Cgo来做参数和类型的转换, 直接连接用户的c函数。

Range:for语句支持通用的迭代,支持数组,字典,通讯管道。 特别是通讯管道结合goroutine, 由生产者负责在一端输入数据, range充当消费者, 从另外一端。。。,使得包容器的迭代实现非常的优雅和简单易懂。

Type: 相当灵活的struct, 支持匿名字段,复用看起来很优雅。

Interface:
接口 类型 接口实现分离。Interface{}用来实现表示同样类型,用于实现保容器和参数省略。

闭包:函数是第一类对象。有了闭包,我们很容易把数据和函数结合在一起,形成一个独立的执行体,无需关心数据的泄漏。

反射(reflection):用于实现多参数和实现比如xml库,很直观的把结构的字段名和值映射起来,但是效率不高。

Network 支持。支持tcp,udp,接口统一,但网络读写暂时无效的时候,net模块会自动把该句柄注册到系统的poll, 并且让出执行,等待读写事件的发生。一旦事件通知,net内部通过channel通知阻塞的句柄继续往下执行。从用户的使用角度来看,网络的读写都是顺序执行的,极大的简化了编程。

Goroutine:Goroutines 是使得并发编程变得容易的核心。核心思想就是通过系统的线程来多路派遣独立函数的执行 单位协程。当一个协程阻塞的时候,比如说系统调用,调度器就会自动把其他协程安排到另外的线程去执行,从而保证了系统的不间断运行。 这个调度对于程序员是透明的,从用户的角度来看,协程在一直运行。而且这个调度的开销非常小,典型的CPU每秒钟可以调度百万次,使得我们可以创建大量的goroutine, 模拟现实世界的行为,大大的简化了程序的设计和实现。

Channel: CSP的核心思想是通过消息共享, 而不是内存共享。 而消息共享机制就是通过channel来传递消息,有同步和异步之分。 Channel在生产者和消费者之间架设起沟通的桥梁。

正是 Network+闭包+Goroutine+Channel让Go这么突出。

目前存在的问题:
1. 语言的实现时间比较短,实现和社区都不够成熟,一些语言特性如select timeout还没有实现。
2. 语言库和基于GO的应用还比较少,甚至在Google内部也还是个试验项目。

Categories: 杂七杂八 Tags: