Lua让我脸红与C语言创建可重用软件技术

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来就不是那么乱遭遭了。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(78) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值