编程语言趣谈

来源:互联网 发布:linux yum配置本地源 编辑:程序博客网 时间:2024/06/06 01:29

因为笔者从事iOS和Android开发,所以最熟悉的编程语言是C++,Java,objC(Swift还没开始用),此外还写过一些C,Assembly和Ruby。下面逐一说一下笔者对这几门语言的看法。

Assembly

写汇编就像是不带翻译跟计算机硬件(经过一定程度抽象的硬件)直接对话,计算机硬件不会因为翻译失误而曲解你的意思,你让寄存器,内存和IO端口做什么,它们就老老实实照着做,每个bit都在掌控之中。学习汇编语言能让你看透各种花哨的高级语言,它们终归要被翻译成汇编语言。

汇编语言其实可以大致上理解成就是CPU指令集,它表征着CPU可以命令硬件做些什么,用汇编语言写的程序不能在不同指令集的CPU之间移植。

C

C语言解决的就是这个在不同指令集CPU之间移植的问题,用C写程序虽然也要操作内存,但是并不是直接操作内存上的每个bit,你不清楚你的变量会被存在具体哪个内存地址,也不清楚有哪些寄存器,它们在算数和逻辑运算中起了什么作用,这就把程序员从硬件差异中解放了出来。不过C程序还是要针对不同的软硬件平台(软件指操作系统,其本身一般也是C写的)进行编译的,否则跑不起来。这就意味着C程序编写的时候虽然可以很大程度上忽略软硬件平台差异,却要在每次移植到新平台上时都要重新编译。此外由于C需要覆盖太多参差不齐的平台,从各式各样的单片机到各式各样的电脑,决定了其抽象层次还较低,还掺杂着一定程度的平台相关的东西,因而保证不了同一份代码在任何平台上都编译通过。

C++

C++兼容了绝大多数C的语法,但类型检查更严格,不像C一样对变量声明的位置做严格要求,引入了面向对象机制和类库,有诸如运算符重载等语法糖,可读性比C强也更易于编写和维护。C++既继承了C强大的底层操作特性,又被赋予了教科书式的面向对象机制。它特性繁多,有其他面向对象语言鲜见的多继承,有耐人寻味的对值传递与引用传递入木三分的区分以及const关键字,等等。C++就像是一把瑞士军刀,或者像是一个工具箱,它为你提供尽可能多的工具,多到让不熟悉它的人无所适从,让懂得如何使用它的人如鱼得水。C++的种种特性使得它非常适合用来编写底层数据结构,算法,库等,是系统软件开发以及数学模型构建等的强大武器库,被誉为工业级编程语言。

objC

与C++一样,objC设计原则之一是兼容C,但是它在跨平台上较C/C++相去甚远,虽然最初并非由苹果开发,却已实质上沦为苹果一家的专用语言。这门语言的优点不多,笔者只想到两点。一个是可读性强,读起来就像是读英文,如果方法命名得当无需注释。另一个是傍上了苹果,苹果的MacOSX和iOS平台的应用框架就是用该语言写的。如果你从事Mac或iOS开发,objC有天然的优势。在苹果平台上唯一能撼动objC地位的,恐怕就是苹果自家推出的Swift了。

Java

这是一门中规中矩的面向对象编程语言,对设计模式的条条框框提供语言级别的支持,使用Java开发软件就像是用钢筋水泥砖瓦盖楼一样,它与C++一样被冠以“工业级”的称谓,但更多时候与Java一同提及的是“企业级”。Java设计初衷似乎是为了剔除C++中一些不常用的或者容易引入bug的特性,如多继承和指针等。其实现在看起来Java跟C++还是有几分神似的。

与C/C++/objC等纯粹的编译型语言不同,Java的编译很不彻底,实际上是编译为一种跑在Java虚拟机上的中间代码,Java编译器只针对Java虚拟机进行编译,而具体的平台细节交给虚拟机去填平,这使得凡是安装了Java虚拟机的地方都可以跑Java而无需重新编译,这是比C/C++/objC更高一级的抽象,因而论语言级别的话,Java是比这三种语言高级的语言。C#与Java大同小异,可以认为就是微软版的Java。

Ruby

这是一门非常花哨非常灵活非常俏皮的语言,它虽然号称是彻底的面向对象语言,风格上以及面向对象机制上却与主流面向对象语言大相径庭,相比之下它显得太不严肃了。Ruby最大的特色是metaprogramming(译为“元编程”),连类这种主流面向对象语言中作为对象模板的东西,在Ruby里都可以在运行时被随意修改,Ruby是一个很讲究平等的语言,一切对象(包括类,闭包等)在作为Ruby的公民这一点上都是平权的,没有谁有特权,这或许是它宣称面向对象很彻底的理由。Ruby的特性也非常丰富,实现同一种功能可以有多种写法(据说Python正相反),写Ruby就像是捏橡皮泥或者玩一个可以被随意拧成各种形状的气球,你甚至可以基于Ruby创作出新的语言,Ruby的一大用途就是编写DSL(domain specific language)。

Ruby的强项是去除重复的代码,比如某些方面类似的方法可以批量定义和删改。作为解释型语言,Ruby也被称为是一种脚本语言,虽然它的设计初衷并非只是用来写脚本,但是它的确非常适合用来写脚本,可以让繁冗的批量处理数据和文件等任务变得更易于编写。

虽然Ruby出名是因为Rails,但是Ruby语言本身远比这个用它写的框架有韵味的多。

0 0
原创粉丝点击