【自】关于计算机语言的一些肤浅见识–什么情况下用什么语言

【序】讨论这个问题实际好像没什么意义,实则不然,至少可以更好的降低成本、提高开发效率。

自认为做开发也搞了些年头了,对于程序语言也有一些见解,在此小结一下:

何种应用或者何种需求使用哪种语言一直是困扰架构师和CTO的一个重要问题,这里既需要考虑实现任务的实效更需要考虑成本,同时也需要考虑未来扩展迭代需求以及夸语言场景下协同协作

每种语言都有其优点和不足,自身的特点也决定了其开发的代价不同,首先看看语言的类型特点

1. 先定义一些基础概念

Program Errors 程序错误

  • trapped errors。导致程序终止执行,如除0,Java中数组越界访问
  • untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

Forbidden Behaviours 禁止行为

语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.

Well behaved、ill behaved

  • well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved
  • ill behaved: 否则为ill behaved…

2. 有了上面的概念,再讨论强、弱类型,静态、动态类型

强、弱类型

  • 强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。
  • 弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型

前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的

动态、静态类型

  • 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
  • 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

3. 误区
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。
Ocaml是静态隐式类型
静态类型可以分为两种:

  • 如果类型是语言语法的一部分,在是explicitly typed显式类型;
  • 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell
  • 4.下面是些例子
    无类型: 汇编
    弱类型、静态类型 : C/C++
    弱类型、动态类型检查: Perl/PHP
    强类型、静态类型检查 :Java/C#
    强类型、动态类型检查 :Python, Scheme
    静态显式类型 :Java/C
    静态隐式类型 :Ocaml, Haskell

然后总结一下:

【自】关于计算机语言的一些肤浅见识–什么情况下用什么语言

【结论】:由以上的简单理解可以大致分析出来哪种语言更适合哪种场景和需求,这里必须强调一句,程序是运行在计算机和网络中的,所以程序自身的好坏也与计算机系统(服务器)和网络系统有着千丝万缕的关系,既然如此也就可以看出来(主流语言c\php\java\python):

C、C++ 可以使用在几乎所有的场景下,但需要考虑程序运行时的各种健壮性、稳定性,就需要开发主进程之外的特别功能,例如内存回收等等,这无形加大开发的任务量,自然提升开发周期,可c更接近硬件底层,其执行时的效率和资源开销相对较小,所以可用在一些超大型应用中,运行环境要看是客户端还是服务器端,这需要很强的运维能力,尤其是系统优化运维和运维开发的支持。

Java属于强类型、静态语言,因其发展多年,*很多,加上用户很多,所以可以几乎胜任一切工作,而且因为有编译器,所以开发早期不需要更多的关注系统能力,所以很多项目都在采用,具体的开发时间成本也不是很长,也可以开发一些大型应用,游戏慎重。

php属于服务器端的脚本语言\动态语言,最适合互联网开发使用,因互联网目前的引用多为B/S架构的,加上其比较模块化,所以更加快捷,开发成本较低,但是其自身的特点决定其运行效率过度依懒环境自身,所以在产品的稳定阶段不建议使用。

python被誉为脚本语言,顾名思义,引用场景非常丰富,加上cpython\jpython以后应用场景和运行效率都可以近似的等同于c\java的运行效率,而且其在web\ope\Data\cloud上的运用也是非常不错的,可以说能够适用于任何场景。

JavaScript属于浏览器端脚本语言,更实用web开发,随着ajax\agalrJS的frame也适用于后端和服务器端的使用

golang确实也很不错,变量\编译器越来越当代化,语法规则也更人性化,未来一定很不错

swift是apple的开源语言,用的不多,还不敢说其未来到底如何

【综上】可以看出来语言必然依赖于三件事:语法语义\编译器或解释器\灵活性;综合来说,在互联网领域,php更适合早期开发使用,php出了7.0,但实际使用时还是需要很多注意的地方,php更适合于一些小步快跑和实验版本的验证场景

python更适合全链条的互联网公司,可以使后端开发\运维开发\数据分析\云平台开发\AI串在一条线上,有很好的的融合性,而且开发速度也很快,不过这种资深开发人才较少

java\c\c++\golang基本属于一类,仅是golang更偏向软件工程,web开发也行,需要走的路填的坑还有不少,java用的最普遍不多说了,c\C++最古老,优越性自不待言