C 语言进阶有哪些优秀的代码可以阅读
1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。
它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。
Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。
参考:八2. Tinyhttpdtinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。
参考:六3. cJSONcJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。
cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。
其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。
参考:五4. CMockerycmockery是google发布的用于C单元测试的一个轻量级的框架。
它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。
cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。
主要特点:免费且开源,google提供技术支持;轻量级的框架,使测试更加快速简单;避免使用复杂的编译器特性,对老版本的编译器来讲,兼容性好;并不强制要求待测代码必须依赖C99标准,这一特性对许多嵌入式系统的开发很有用参考:六5. Libevlibev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。
其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。
基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。
参考:二6. MemcachedMemcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。
Memcached 基于一个存储键\\\/值对的 hashmap。
Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。
参考:八7. LuaLua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。
让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。
在任何支持ANSI C编译器的平台上都可以轻松编译通过。
我试过,真是一点废话都没有。
Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。
参考:二8. SQLiteSQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。
其特点是高度便携、使用方便、结构紧凑、高效、可靠。
足够小,大致3万行C代码,250K。
9. UNIX v6UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。
有一种说法是一个人所能理解的代码量上限为1 万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。
看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢
另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万行。
就算不是初学者,想完全理解全部代码基本上也是不可能的。
10. NETBSDNetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit alpha 服务器到手持设备和嵌入式设备。
NetBSD计划的口号是:”Of course it runs NetBSD”。
它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。
由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。
许多程序都可以很容易地通过NetBSD Packages Collection获得。
11,最值得阅读学习的 10 个 C 语言开源项目代码都有参考下载链接,如果你学习上需要这些,我有答案链接学习 ,把前7题( 参考:数字)组合就找到我了,相信这对于聪明的你不难哦
c语言基础
C语言基础教程别看了,学习C语言不能脱离具体的系统,不能不了解计算机体系结构和操作系统原理、编译原理,推荐你看这本开源的书:《Linux C编程一站式学习》如果是在Windows上学习,可以安装cygwin来模拟linux环境,下载地址:下面贴一下这本书的介绍,磨刀不误砍柴工,看过之后你就会爱上这本书了:这本书有什么特点
面向什么样的读者
这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。
该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用Linux系统,同时对计算机体系结构与指令集、操作系统原理和设备驱动程序都有较深入的了解。
然而学员入学时的水平是非常初级而且参差不齐的:学历有专科、本科也有研究生,专业有和计算机相关的也有很不相关的(例如会计专业),以前从事的职业有和技术相关的也有完全不相关的(例如HR),年龄从二十出头到三十五六岁的都有。
这么多背景完全不同、基础完全不同、思维习惯和理解能力完全不同的人来听同一堂课,大家都迫切希望学会嵌入式开发技术,投身IT行业,这就是职业教育的特点,也是我编这本书时需要考虑的主要问题。
学习编程绝不是一件简单的事,尤其是对于零基础的初学者来说。
大学的计算机专业有四年时间从零基础开始培养一个人,微积分、线代、随机、离散、组合、自动机、编译原理、操作系统、计算机组成原理等等一堆基础课,再加上C\\\/C++、Java、数据库、网络、软件工程、计算机图形学等等一堆专业课,最后培养出一个能找到工作的学生。
很遗憾这最后一条很多学校没有做好,来亚嵌培训的很多学生就是四年这么学过来的,但据我们考查他们的基础几乎为零,我不知道为什么。
与之形成鲜明对比的是,只给我们四个月的时间,同样要求从零基础开始,最后培养出一个能找到工作的学生,而且还要保证他找到工作,这就是职业教育的特点。
为什么我说“只给我们四个月的时间”
我们倒是想教四年呢,但学时的长短我们做不了主,是由市场规律决定的。
四年的任务要求四个月做好,要怎么完成这样一个几乎不可能的任务
有些职业教育给出的答案是“实用主义”,打出了“有用就学,没有用就不学”的口号,大肆贬低说大学里教的基础课都是过时的、无用的,只有他们教的技术才是实用的,这种炒作很不好,我认为大学里教的每一门课都是非常有用的,基础知识在任何时候都不会过时,倒是那些时髦的“实用技术”有可能很快就过时了。
四年的任务怎么才能用四个月做好
我们给出的答案是“优化”。
现在大学里安排的课程体系最大的缺点就是根本不考虑优化。
每个过来人都会有这样的感觉:大一大二学了好多数学课,却不知道都是干什么用的,为什么要学。
连它有什么用都不知道怎么能有兴趣学好呢
然后到大三大四学专业课时,用到以前的知识了,才发现以前学的数学是多么有用,然而早就忘得一干二净了,考完试都还给老师了,回头重新学吧,这时候才发现很多东西以前根本没学明白,现在才真的学明白了,那么前两年的时间岂不是都浪费了
大学里的课程体系还有一个缺点就是不灵活,每门课必须占一个学期,必须由一个老师教,不同课程的老师之间没有任何沟通和衔接,其实这些课程之间是相互依赖的,把它们强行拆开是不符合人的认知规律的。
比如我刚上大学的时候,大一上半学期就被逼着学C语言,其实C语言是一门很难的编程语言,不懂编译原理、操作系统和计算机体系结构根本不可能学明白,那半个学期自然就浪费掉了。
当时几乎所有学校的计算机相关专业都是这样,大一上来就学C语言,有的学校更疯狂,上来就学C++,导致大多数学生都以为自己会C语言,但其实都是半吊子水平,到真正写代码的时候经常为一个Bug搞得焦头烂额,却没有机会再系统地学一遍C语言,因为在学校看来,C语言课早在大一就给你“上完了”,就像一顿饭已经吃完了,不管你吃饱没吃饱,不会再让你重吃一遍了。
显而易见,如果要认真地对这些课程做优化,的确是有很多水份可以挤的。
本书有以下特点: * 不是孤立地讲C语言,而是和编译原理、操作系统、计算机体系结构结合起来讲。
或者说,本书的内容只是以C语言为载体,真正讲的是计算机的原理和程序的原理。
* 强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。
有些地方为了叙述得完整,也会引用后面要讲的内容,比如说“有关XX我们到XX章再仔细讲解”,凡是这种引用都不是必要的依赖,可以当它不存在,只管继续往下看就行了。
* 尽量做到每个知识点直到要用的时候才引入。
过早引入一个知识点,讲完了又不用它,读者很快就会遗忘,这是不符合认知规律的。
这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者至少需要具备以下素质: * 熟悉Linux系统的基本操作。
如果不具备这一点,请先参考其它教材学习Linux系统的基本操作,熟练之后再学习本书,《鸟哥的Linux私房菜》据说是 Linux系统管理和应用方面比较好的一本书。
但学习本书并不需要会很多系统管理技术,只要会用基本命令,会自己安装系统和软件包就足够了。
* 具有高中毕业的数学水平。
本书会用到高中的数学知识,事实上,如果不具有高中毕业的数学水平,也不必考虑做程序员了。
但并不是说只要具有高中毕业的数学水平就足够做程序员了,只能说看这本书应该没有问题,数学是程序员最重要的修养,计算机科学其实就是数学的一个分支,如果你的数学功底很差,日后还需恶补一下。
* 具有高中毕业的英文水平。
理由同上。
* 对计算机的原理和本质深感兴趣,不是为就业而学习,不是为拿高薪而学习,而是真的感兴趣,想把一切来龙去脉搞得清清楚楚而学习。
* 勤于思考。
本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。
但一站式学习并不等于傻瓜式学习,有些章节有一定的难度,需要积极思考才能领会。
本书可以替你节省时间,但不能替你思考,不要指望像看小说一样走马观花看一遍就能学会。
又是一本C语言书。
好吧,为什么我要学这本书而不是谭浩强或者K&R
请点评谭浩强的书我就不说什么了。
居然教学生include一个.c文件。
K&R 是公认的世界上最经典的C语言教程,这点毫无疑问。
在C标准出台之前,K&R第一版就是事实上的C标准。
C89标准出台之后,K&R跟着标准推出了第二版,可惜此后就没有更新过了,所以不能反映C89之后C语言的发展以及最新的C99标准,本书在这方面做了很多补充。
上面我说过了,这本书与其说是讲C语言,不如说是以C语言为载体讲计算机和操作系统的原理,而K&R就是为了讲C语言而讲C语言,侧重点不同,内容编排也很不相同。
K&R写得非常好,代码和语言都非常简洁,但很可惜,只有会C语言的人才懂得欣赏它,K&R是非常不适合入门学习的,尤其不适合零基础的学生入门学习。
这本书“是什么”和“不是什么” 请点评本书包括三大部分: * C语言入门。
介绍基本的C语法,帮助没有任何编程经验的读者理解什么是程序,怎么写程序,培养程序员的思维习惯,找到编程的感觉。
前半部分改编自[ThinkCpp]。
* C语言本质。
结合计算机和操作系统的原理讲解C程序是怎么编译、链接、运行的,同时全面介绍C的语法。
位运算的章节改编自亚嵌教育林小竹老师的讲义,链表和二叉树的章节改编自亚嵌教育朱老师的讲义。
汇编语言的章节改编自[GroudUp],在该书的最后一章提到,学习编程有两种Approach,一种是Bottom Up,一种是Top Down,各有优缺点,需要两者结合起来。
所以我编这本书的思路是,第一部分Top Down,第二部分Bottom Up,第三部分可以算填了中间的空隙,三部分全都围绕C语言展开。
* Linux系统编程。
介绍各种Linux系统函数和内核的工作原理。
Socket编程的章节改编自亚嵌教育卫剑钒老师的讲义。
这本书定位在入门级,虽然内容很多,但不是一本百科全书,除了C语言基本要讲透之外其它内容都不深入,书中列出了很多参考资料,是读者进一步学习的起点。
K&R的第一章是一个Whirlwind Tour,把全书的内容简单过了一遍,然后再逐个深入进去讲解。
本书也可以看作是计算机专业课程体系的一个Whirlwind Tour,学习完本书之后有了一个全局观,再去学习那些参考资料就应该很容易上手了。
为什么要在Linux平台上学C语言
用Windows学C语言不好吗
请点评用 Windows还真的是学不好C语言。
C语言是一种面向底层的编程语言,要写好C程序,必须对操作系统的工作原理非常清楚,因为操作系统也是用C写的,我们用C写应用程序直接使用操作系统提供的接口。
既然你选择了看这本书,你一定了解:Linux是一种开源的操作系统,你有任何疑问都可以从源代码和文档中找到答案,即使你看不懂源代码,也找不到文档,也很容易找个高手教你,各种邮件列表、新闻组和论坛上从来都不缺乐于助人的高手;而Windows是一种封闭的操作系统,除了微软的员工别人都看不到它的源代码,只能通过文档去猜测它的工作原理,更糟糕的是,微软向来喜欢藏着揶着,好用的功能留着自己用,而不会写到文档里公开。
本书的第一部分在Linux或Windows平台上学习都可以,但第二部分和第三部分介绍了很多Linux操作系统的原理以帮助读者更深入地理解C语言,只能在Linux平台上学习。
Windows平台上的开发工具往往和各种集成开发环境(IDE,Integrated Development Environment)绑在一起,例如Visual Studio、Eclipse等。
使用IDE确实很便捷,但IDE对于初学者绝对不是好东西。
微软喜欢宣扬傻瓜式编程的理念,告诉你用鼠标拖几个控件,然后点一个按钮就可以编译出程序来,但是真正有用的程序有哪个是这么拖出来的
很多从Windows平台入门学编程的人,编了好几年程序,还是只知道编完程序点一个按钮就可以跑了,把几个源文件拖到一个项目里就可以编译到一起了,如果有更复杂的需求他们就傻眼了,因为他们脑子里只有按钮、菜单的概念,根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。
另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能真正掌握C的语法。
所以,IDE并没有帮助你学习,而是阻碍了你学习,本来要学好C编程只要把语法和编译命令学会就行了,现在有了IDE,除了学会语法和编译命令,你还得弄清楚编译命令和IDE是怎么集成的,这才算学明白了,本来就很复杂的学习任务被IDE搞得更加复杂了。
Linux用户的使用习惯从来都是以敲命令为主,以鼠标操作为辅,从学编程的第一天起就要敲命令编译程序,等到你把这些基本概念都搞清楚了,你觉得哪个IDE好用你再去用,不过到那时候你可能会更喜欢vi或emacs而不是IDE了。
\ \ 。
。
。
。
。
。
用c语言来做,急
用bioscom函数可以实现这个功能具体用法如下:头文件:bios.h函数声明:int bioscom(int cmd, char byte, int port)功能简介:RS232串口通信口操作所属库:C函数库详细说明:参数:cmd 控制字:0-初始化串口,1-发送一个字符 2-接受一个字符3-返回串口状态 byte 波特率和发送位数设置: B7,B6,B5 波特率设置:9600波特-111,4800波特-110,2400波特-101,1200波特-100,600波特-011,300波特-010 B4,B3 奇偶校验设置:00或10-无奇偶,01-奇校验,11-偶校验 B2 停止位个数: 1-2个停止位,0-1个停止位 B1,B0 10-7个数据位,11-8个数据位 port 串口号:0,1,2,3等返回值:16位的串口状态信息,各位的含义分别如下: 当cmd=2时,低8位用于保存接收的数据高8位 低8位(cmd=0,1,3时) B15 超时错误 B7 检测到线路信号 B14 发送移位寄存器空 B6 振铃指示 B13 发送保持寄存器空 B5 数据装置就绪 B12 中止检测错误 B4 数据发送结束 B11 帧错误 B3 线路信号变化 B10 奇偶错误 B2 脉冲后沿振铃检测 B9 溢出错误 B1 数据装置就绪变化 B8 数据准备就绪 B0 数据发送结束变化
急求:C语言代码incompatible type for的错误怎么改正,如果修改好还有加分
Visual stdio Visual Studio 软公司推出的开发环境。
是最流行的 Windows 平台应序开发环境。
目前已经开发到 9.0 版本就是 Visual Studio 2008。
Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。
1998 年,微软公司发布了 Visual Studio 6.0。
所有开发语言的开发环境版本均升至 6.0。
这也是 Visual Basic 最后一次发布,从下一个版本 (7.0) 开始,Microsoft Basic 进化成了一种新的面向对象的语言:Microsoft Basic.NET。
由于微软公司对于 Sun 公司 Java 语言扩充导致与 Java 虚拟机不兼容而 Sun 被告上法庭,微软在后续的 Visual Studio 中不再包括面向 Java 虚拟机的开发环境。
2002 年,随着 .NET 口号的提出与 Windows XP \\\/ Office XP 的发布,微软发布了 Visual Studio .NET(内部版本号为 7.0)。
在这个版本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发环境以 Visual FoxPro 7.0 单独销售,同时取消了 Visual InterDev。
与此同时,微软引入了建立在 .NET 框架上(版本1.0)的托管代码机制以及一门新的语言 C# (读作 C Sharp,意为 C++++)。
C# 是一门建立在 C++ 和 Java 基础上的现代语言,是编写 .NET 框架的语言。
.NET 的通用语言框架机制(Common Language Runtime, CLR),其目的是在同一个项目中支持不同的语言所开发的组件。
所有 CLR 支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。
Visual Basic、Visual C++ 都被扩展为支持托管代码机制的开发环境,且 Visual Basic .NET更是从 Visual Basic 脱胎换骨,彻底支持面向对象的编程机制。
而 Visual J++ 也变为 Visual J#。
后者仅语法同 Java 相同,但是面向的不是 Java 虚拟机,而是 .NET Framework。
2003 年,微软对 Visual Studio 2002 进行了部分修订,以 Visual Studio 2003 的名义发布(内部版本号为 7.1)。
Visio 作为使用统一建模语言(UML)架构应用程序框架的程序被引入,同时被引入的还包括移动设备支持和企业模版。
.NET 框架也升级到了 1.1。
2005 年,微软发布了 Visual Studio 2005。
.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。
它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。
总体来说是一个非常庞大的软件,甚至包含代码测试功能。
这个版本的 Visual Studio 包含有众多版本,分别面向不同的开发角色。
同时还永久提供免费的 Visual Studio Express 版本。
随着即将发布的 Windows Vista (内部名称:Longhorn) 和 Office 2007,Visual Studio 9 也渐渐浮出水面。
Visual Studio 9 目前可以确定的是支持建立于 DHTML 基础上的 AJax 技术,这种微软在 Visual InterDev 时代提出的基于异步的客户端动态网页技术在当年并没有像微软预期中的那么流行起来,反而随着 GMail 等应用而东山再起,渐渐成为主流网络应用之一。
同时 Visual Studio 9 会强化对于数据库的支持以及微软新的基于工作流(Workflow)的编程模型。
预计为了保持与 Office 系列的统一,Visual Studio 9 的名称为 Visual Studio 2008。
2008年,Visual Studio9也就是Visual Studio 2008将和Windows Server 2008同时发布 创建满足关键性要求的多层次的智能客户端、Web、移动或基于Microsoft Office的应用程序。
使用Visual Studio 2005, 专业开发人员能够: 使用改进后的可视化设计工具、编程语言和代码编辑器,享受高效率的开发环境 在统一的开发环境中,开发并调试多层次的服务器应用程序 使用集成的可视化数据库设计和报告工具,创建SQL Server 2005解决方案 使用Visual Studio SDK创建可以扩展Visual Studio IDE的工具 Microsoft为单独工作或在小型团队中的专业开发人员提供了两种选择,Visual Studio 2005 Professional Edition和用于Microsoft Office系统的Visual Studio 2005工具。
每种版本都在标准版的特性上进行了扩展,包括用于远程服务程序开发和调试、SQL Server2005开发的工具,以及完整的、没有限制的开发环境。
每种产品都可以单独购买或打包定购。
专业开发人员喜欢自由的使用.NET Framework 2.0,它是一种稳健的、功能齐备的开发环境,支持创建扩展Visual Studio集成开发环境的工具。
Visual Studio 2005 Professional Editions Features Visual Studio 2005 Professional with MSDN Premium Subscription* Visual Studio 2005 Professional with MSDN Professional Subscription* Visual Studio 2005 Professional Visual Studio 2005 Tools for the Microsoft Office System Language support Visual Basic, C#, C++, J# Visual Basic, C#, C++, J# Visual Basic, C#, C++, J# Visual Basic, C# Windows Forms Projects Web Projects Mobile Projects 64 Bit support Enterprise templates Class Designer Server Explorer Full Full Full Full Excel, Word, InfoPath Projects Visio-based modeling Visual Source Safe SQL Server Developer Edition Operating Systems - Development and Test Servers - Development and Test Virtual PC Access Developer Extensions Office, InfoPath, OneNote, Visio, Project, MapPoint
怎么在C语言里用printf输出一个中文
1、可以在任何机器上运行2、可以在任何操作系统上运行可移植性并不是指直接复制程序就可以用了,指的是不用改变代码便可以在另一台机器上编译运行。
Python是什么
也许最初设计Python这言的人并没有想到今天Python会业和科研得如此广泛的使用。
著名的自由软件Eric Raymond在他的文章《如何成为一名黑客》中,将Python列为黑客应当学习的四种编程语言之一,并建议人们从Python开始学习编程。
这的确是一个中肯的建议,对于那些从来没有学习过编程或者并非计算机专业的编程学习者而言,Python是最好的选择之一。
Python第一次学习Python,我只用了不到二十分钟的时间,站在书店里把一本教初学编程的人学习Python的书翻了一遍。
也是从那时起,我开始被这种神奇的语言吸引。
\ Python可以用来开发symbian上的东西。
\ 易用与速度的完美结合Python是一种用起来很方便的语言,很多初学Java的人都会被Java的CLASSPATH搞得晕头转向,花上半天的时间才搞明白原来是CLASSPATH搞错了自己的Hello World才没法运行。
用Python就不会有这种问题,只要装上就能直接用。
\ Python是一种脚本语言,写好了就可以直接运行,省去了编译链接的麻烦,对于需要多动手实践的初学者而言,也就是少了出错的机会。
而且Python还有一种交互的方式,如果是一段简单的小程序,连编辑器都可以省了,直接敲进去就能运行。
Python是一种清晰的语言,用缩进来表示程序的嵌套关系可谓是一种创举,把过去软性的编程风格升级为硬性的语法规定。
再不需要在不同的风格间选择、再不需要为不同的风格争执。
与Perl不同,Python中没有各种隐晦的缩写,不需要去强记各种奇怪的符号的含义。
Python写的程序很容易懂,这是不少人的共识。
Python是一种面向对象的语言,但它的面向对象却不象C++那样强调概念,而是更注重实用。
不是为了体现对概念的完整支持而把语言搞得很复杂,而是用最简单的方法让编程者能够享受到面向对象带来的好处,这正是Python能像Java、C#那样吸引众多支持者的原因之一。
\ Python是一种功能丰富的语言,它拥有一个强大的基本类库和数量众多的第三方扩展,使得Python程序员无需去羡慕Java的JDK。
Python为程序员提供了丰富的基本功能使得人们写程序时用不着一切最底层做起。
说到这里,人们通常会用一种担心:脚本语言通常很慢。
脚本语言从运行的速度讲的确会慢一些,但Python的速度却比人们想象得快很多。
虽然Python是一种脚本语言,但实际上也可以对它进行编译,就象编译Java程序一样将Python程序编译为一种特殊的ByteCode,在程序运行时,执行的是ByteCode,省去了对程序文本的分析解释,速度自然提升很多。
在用Java编程是,人们崇尚一种Pure Java的方式,除了虚拟机一切东西都用Java编写,无论是基本的数据结构还是图形界面,而Pure Java的SWING,却成为无数Java应用开发者的噩梦。
Python崇尚的是实用,它的整体环境是用C来编写的,很多基本的功能和扩展的模块都是用C\\\/C++来编写的,当执行这一部分代码时,它的速度就是C的速度。
用Python编写的普通桌面程序,其启动运行速度与用C写的程序差别不大。
除了这些,通过一些第三方软件包,用Python编写的源代码还可以以类似JIT的方式运行,而这可以大大提高Python代码的运行速度,针对不同类型的代码,会有2倍至100倍不等的速度提升。
\ Python是我见到过的语言中,在易用性和速度上结合的最完美的一个,通过丧失一点点经常可以忽略不计的运行速度从而获得更高的编程效率,这就是我选择Python的原因。
把精力放在要解决的问题上选择一种合适的语言,才能让你把有限的精力放到最需要解决的问题上。
不同的语言有不同的作用,C和汇编适合编写系统软件,如果用它们来编写企业应用,恐怕没几个人能得心应手。
我以前就碰到一个用汇编写数据库程序的哥,虽然最基本的功能完成了,但要增加个报表预览什么的,他就没法应付了。
聪明的程序员是用合适的工具去完成任务,想找一把万能钥匙是不太可能的。
Python的自动的垃圾回收机制是高级的编程语言的一种基本特性,用拥有这一功能的语言编程,程序员们通常不用去关心内存泄漏的问题,而当我们用C\\\/C++写程序时,这却是最重要的需要认真考虑却又很容易出错的问题之一。
数据结构是程序构成的重要部分,链表、树、图这些在用C编程时需要仔细表达的问题在Python中简单了很多。
在Python中,最基本的数据结构就是数组、序列和哈希表,用它们想要表达各种常见的数据结构是非常容易的。
没了定义指针、分配内存的任务,编程变得有趣了。
CORBA是一种高级的软件体系结构,它是语言无关平台无关的。
C++、Java等语言都有CORBA绑定,但与它们相比,Python的CORBA绑定却容易很多,因为在程序员看来,一个CORBA的类和Python的类用起来以及实现起来并没有什么差别。
没了复杂体系结构的困扰,用Python编写CORBA程序也变得容易了。
好钢要用在刀刃上,要想用有限的时间完成尽量多的任务,就要把各种无关的问题抛弃,而Python恰恰提供了这种方法。
跨平台又易扩展随着Linux的不断成熟,越来越多的人转到Linux平台上工作,软件的开发者自然就希望自己编写的软件可以在所有平台下运行。
Java一次编写处处运行的口号使它成为跨平台的开发工具的典范,但其运行速度却不被人们看好。
实际上,几乎所有的著名脚本语言都是跨平台的,Python也不例外。
Python不仅支持各种Linux\\\/Unix系统,还支持Windows,甚至在Palm上都可以运行Python的程序。
一个程序想要跨平台工作,不仅仅需要语言本身能够做到在平台之间兼容,在图形化界面的时代,还需要有能跨平台工作的Widget。
Python不仅支持老一些的TK,还支持新的GTK+、QT以及wxWidget,而这些Widgets都可以在多个平台上工作。
通过它们,程序员就可以编写出漂亮的跨平台GUI程序。
Python通常是运行在native代码与脚本代码之间,程序员可以用C\\\/C++为Python编写各种各样的模块,这不仅可以让程序员以Python的方式使用系统的各种服务及用C\\\/C++编写的优秀函数库和类库,还可以大幅度提高Python程序的速度。
用C\\\/C++编写Python的模块并不复杂,而且为了简化这一工作,人们还制作了不少工具用来协助这一工作。
正是因为如此,现在各种常用的函数库和类库都有Python语言的绑定,用Python可以做到的事情越来越多了。
万能钥匙
Python功能强大,但它却不是万能的。
如果你要编写操作系统或驱动程序,很显然,Python是做不到的。
要写软件,没有哪个工具是万能的,现在之所以有那么多的编程语言,就是因为不同的语言适合做不同的事情。
因此,选择适合自己的语言工具是最重要的。