Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146610
  • 博文数量: 177
  • 博客积分: 761
  • 博客等级: 上士
  • 技术积分: 1518
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-04 22:37
文章分类

全部博文(177)

文章存档

2017年(1)

2016年(3)

2015年(33)

2014年(48)

2013年(60)

2012年(32)

分类: C/C++

2014-04-18 14:59:00

Python是荷兰人写的,Ruby是日本人写的,Lua是巴西人写的,我这个中国人只能在这里脸红。  
 
Lua是所有动态语言中间平均效率最高的一个。它最初是以Library的形式存在,纯粹只是用作C/C++的一个扩展。现在不仅发展出了解释器,还发展出了编译器。游戏开发里Lua是使用最广泛的脚本语言。当世界上第一本Lua图书上市销售的时候,一位读者评价道:“Lua is a real gem.”
 
Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。
 
让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。
 
我1996年就学会了C,1997年就跑去研究Win32 API,后来是C++,STL,Java... 直到2002年看到C Interfaces and Implementations,才知道仅仅用ANSI C就可以实现一个强大的优美的library,直到2004年看到Lua的源代码才知道仅仅用ANSI C就可以实现一个非常快的虚拟机、非常棒的解释器/编译器和非常漂亮的语言实现。
 
这8年我都干什么去了?
 
------------------------------------------------------------------------------
 
在网上看过一篇文章叫《c编程的四书五经》,中间就包括这本书。我推荐要好好研究c的朋友好好看看这本书。这本书用c进行数据结构的封装。其基本思想就是一个数据结构和围绕它操作的一族函数。只要学过c语言的人,对于自己封装这样的链表或堆栈一定觉得不是难事,但是很少有人像本书作者做的如此通用。这本书是lcc的作者写的,其源码可以在国外的网站下载到,china-pub有链接。
 
书中对atom,list,stack,hashtable,set,ring,exception等都作了探讨。相信看过这边书后,你使用c编程的功力会大为提高。也许使用c++的朋友会认为这些c++的标准模板库都可以实现,因此对c封装这些不屑一顾。但是即使是c++程序员,我相信你看过本书后,就不会这么认为了,这些对写好c++代码也同样有好处。反正我是用STL后就变得很懒,什么数据结构都向STL靠,这可不是很好。网上有篇文章流传的很广,叫做《lua让我脸红》,为什么呢?因为lua编译器和虚拟机就是用纯c实现的。一个能把c写得如此优雅的人,你可以想到他写起c++来会怎么样。打开lua的源码,你会发现,一个全局变量都没有,代码非常简洁。lua编写就很有本书的思想。比如lua里面的字符串,全部都存在hashtable中,TSring存储的只是对hashtable的“引用”,比较字符串只需要比较地址就可以了。这个方法就是本书中的atom.
 
这本书还用setjmp,longjmp实现了一个c的异常机制,setjmp,longjmp在一般的c语言书中介绍的很少,看过之后,我对异常机制也有了更深的理解。
 
对于va_start,va_end这些函数,书中也有详细的讲解,如何封装成自己的format(如printf)函数。有很多底层的函数,c标准库中的函数,本书都有实现,如itoa,还有字符串函数等。不要说这是重造轮子,这些有用得着的时候。
 
内存管理一向是大难题,对此,本书用两章内容探讨了自己封装内存管理函数,包括内存池的使用。
最好用一段代码结束:(fn是函数指针)
#define base int a;int b; int c;FN fn
struct derive1
{
    base ;
    int d;
};
struct derive1
{
    base ;
    int e;
};
是不是有点面向对象的味道?看过本书,你写出c来就不是那么乱遭遭了。
阅读(1439) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~