重新学习 c 语言(2)- 计算机语言
(2) 计算机语言
计算机语言最终要在其宿主环境中运行,编译语言(是指那些需要首先编译为本地汇编语言的语言,包括c/c++,pascal/delphi,VB等等)的宿主一般为 操作系统(或者直接运行在计算机硬件上面) ,最终运行在计算机上面的都是机器指令. 任何一种语言其实至少包括两个方面,语言本身和其可以调用的库.
库是依赖宿主环境的许多功能的现成实现,汇编语言可以调用的库就是操作系统提供的系统调用了,在linux上是内核提供的系统调用,32位 windows上面是
内核提供win32 api,而c语言的库是利用系统调用实现的统一的接口或者处理其他操作的 已经实现的接口,对于现在的语言来说,库(面向对象的语言就是类库)是
语言最重要的部分,而语言本身是很小一部分了,比如Java的JDK,C#/VB.net等的.net Framework, Delphi/C++builder的VCL,VC++的MFC/ATL等等,c语言的库就是标准c库stdlib
另外对于C#和java,他们的宿主与编译语言的宿主不同,他们会首先编译为一种中间语言(字节码,不是汇编语言),而字节码的宿主是运行他们的虚拟机.
解释语言(或者叫动态语言,脚本语言)就更不同,他们的宿主为某一环境,比如Javascript的宿主可以是浏览器,web服务器等等可以解释运行javascript的地方,perl有自己的运行环境等等 ,解释语言的库一方面可以通过语言本身提供(javascript有许多为了实现某些功能的框架库,还有许多语言本身的扩展库),一方面可以通过宿主提供调用外部接口的库!
目前流行的语言体系来说,静态语言的纯语言特性发展大部分是以c为基础的,如c++,c#,java等等动态语言的特性许多源于unix早期的shell(其实shell也是一种语言,宿主就是解析shell的程序, 比如linux上的bash,dos下的command,windows2008推出了自己的powershell).
当然还有其他的计算机语言,比如现在比较流行的XML,可以作为一种可扩展的标记语言! 还有正则表达式等等也是计算机语言.
关于计算机语言的简单总结,也就是说,学一门语言应该学什么?
看上面的分析我们可以看到三个部分:
(1). 纯语言特性
(2). 库
(3). 语言的宿主
对于现代的任何一门计算机语言,纯语言特性应该能在1周的时间就能掌握!(接下来我会以c语言为例说明,大家看看K&R也会发现,c语言的书竟然很薄),库和语言的宿主其实有很大的关联
,因为许多时候库是提供了一种访问宿主的途径,比如c语言的标准IO库等等,有些时候是语言自身的处理,比如字符串操作库,其他的类库也一样.如果是基础的学习,c语言是第一选择,
(语言本身也一样)因为许多语言都是类c的(类似c).包括javascript,php等等脚本语言.
Linux和GCC是最佳的宿主和库学习途径,原因更简单--开源.在你遇到任何不清楚的地方时,都可以直接看他的实现,也就是源代码.另外一点,就是Linux秉承了Unix的文化KISS
(Keep It Simple ,Stupid),许多的东西实现的都很简单(所以容易学习),蠢(不喜欢搞技巧,所以容易理解).
对于宿主的学习可能是需要长时间投入经历的,但回报是可观的,计算机软硬件不断的更新,变化,但基本的体系结构变化很慢.对于编译语言的宿主--计算机系统,我看到一本不错的
书:CSAPP(深入理解计算机系统),关于库,除了学习宿主需要外,最好是结合应用(呵呵,我是一个应用软件程序员),开发什么样的应用,尽量使用熟悉的擅长此类应用的语言和工具,
这个时候再系统的掌握这种语言的库就可以,不过我们会发现,随着对宿主(主要只计算机系统)的理解逐渐的深入,学习语言和库的能力会越来越强.此所谓事半功倍.
另外,学习库的最好资料就是发布库程序的官方文档,当然如果有源代码就是最好的资料的! 学习计算机系统的好帮手就在你身边,就是你身边的计算机.呵呵,我在大学参加计算机培训
时听到老师最多的一句话就是"上机试试,我说的不一定对";