编程语言思考-定位-要素


一门语言是一套系统,不单单是它的语法

一门 编程语言,不但包括对应的语法,还包括对应的编译器(或解释器)、对应的标准库(或框架库)和相关工具。


编程语言的三要素

语法、编译器(或解释器)、标准库(或框架库)构成一门编程语言的三要素。


编程语言的定位

是什么统领这三要素呢?应该是语言的定位(脾性、不可代替性)

C语言 定位(不可代替性)为 “方便人类读写的硬件操作语言”或“系统级软件开发语言”

为了这个定位(目标),它在各个方面进行取舍。舍去高级语言的反射功能,舍掉动态内存管理功能,得到“输出不依赖库的可执行程序”功能。

C语言编译器 能不能扩展(增加)反射、动态内存管理等功能呢?可以。但是增加了任何一项功能后,它就不叫C语言了。比如,有不完整反射机制的,它叫C++语言、有动态内存管理的,它叫D语言。

C++ 语言 的定位为 “高级语言功能试验田”

为了这个定位(目标),它在各个方面进行取舍。因为C++的定位是 实验各种高级语言的功能,所以它一路走来,在硬件操作功能的基础上面,得到命名空间功能、异常处理功能、模板功能、得到面向对象功能、得到lambda函数功能,得到其他等等高级语言的功能。它舍去了什么呢?舍掉了一致性(同一个功能,c++ 语言 有各种编程方式 可以实现)(每个使用c++语言写程序的人,都觉得别人的c++程序读起来不合自己心意),舍掉了稳定性(因为它是试验田,它总是实验性的实现新的功能,所以在获得各种新的编程功能同时,它也完全的获得了各种编程功能的原罪。比如,面向对象而言,析构函数在xx情况下必须为虚函数、菱形继承问题、final类实现方式)。

C++ 语言 能不能只取其中某几个功能,做成稳定的一门语言呢?可以。但是这样做之后,它就不叫c++ 语言了。比如,只取其面向对象编程,达到编码实现一致性较好的效果,它就叫java 语言了。

同时,c++ 语言也颇有“我不入地狱谁入地狱”的觉悟。毕竟各种高级编程功能,总需要有语言来进行尝试。它不尝试,就需要其他的语言来尝试(这样,其他语言的稳定性就无法保证了)。

Java 语言的定位为 “工业级-应用软件开发语言”。

“java最适合的地方是庞大的工程化项目,项目越发庞大,便越能够体会到java标准化,规范化的好处。利用java面向接口编程,面向反射编写动态程序,异常处理等。这些特性能够让整个项目逻辑清晰,接口清晰、模块化、灵活,坚固稳定等。”

得到: JVM为其提供跨平台的能力,庞大且稳定的基础库、各种稳定的应用框架。

舍去:运行效率没有c高,编码简单程序没有pyhton高。

Python 语言的定位为 “优雅、明确、简单”。

动态类型的加入,使得我们可以像 描述思路一样,快速的编写出功能原型。但是不要期望它能在项目中稳定的长期 运行,也不要期望其具有多好的运行速度。


感悟

不要试图做 偏离语言定位的 努力,这样的努力最终都会被称之为“浪费”。做符合语言定位的 创造(开发),开发的功能会更加的面向未来,会随着语言发展而长久存在。

posted @ 2021-12-30 11:16  张志伟122  阅读(168)  评论(0编辑  收藏  举报