作为一个程序员,学习编程,到接触到多种多样的编程语言。其实,我也想知道编程语言是什么?下面说说自己关于编程语言的一些拙见吧。
各种语言
没有最好的语言,只有根据特定的场景,选择可是的语言,才是最佳之道。
每种语言都有自身的特点,或是用在特定的解决方案中,或是用在特点的环境中。脱离了语言的使用环境而去谈一种语言,确实不妥。比如,lua,由于自身解释器比较小巧,而且易嵌入到c语言中,所以呢,在嵌入式设备中使用的比较多。比如,路由器。试想,如果用java等语言,内存等各方便均不能使其流程跑起来。这就是lua的使用环境。比如,写网页,那么目前而言,只能选择javascript语言,别无二家。网站编程,那么php由于有丰富的类库,确实比较容易写。不需要安装太多的扩展、库,甚至直接连框架也不用,一样可以写出动态网页来。同样,java社区大、各类库、解决方法比较多,同样也适合服务企业级web开发。在大项目上,php可能略显不足。如果需要使用数据计算,由于python的panda等数学计算库积累很强大,所以,python非常适合这块。而且python自带电池,有很多库,也很方便将本地的计算用flask等暴露出api,供调用。
语言由于其主要的特性存在,往往使人们误以为只能用在这种场合。其实,抛弃那些限制,用于也能用在其他的方便。比如,javascript也能用在服务端编程,加上其特点,在配置低的服务器上,也能跑得欢快。php也能做业务处理的脚本。java也能开发ui。
javascript语言
主要特点:异步单线程、前端语言、跨平台。异步:其实主要是还是因为其是单线程的,如果在某个费时的代码处阻塞了,那么后续的代码就不能继续执行。表现在,网页会卡顿。
有人说,这个语言比较接近lisp语言。
静态词法分析,函数的作用域,在其定义位置中,决定。(怎么说比较顺口?)适合做闭包的语言。
学这个语言,我明白了异步编程的原理。另外,Ramda.js,明白柯里化的概念。高阶函数、装饰器等很容易同过这个知识点来掌握。
php
主要特点:后端渲染模板语言,天然的模板引擎,适合html嵌入脚本。对比,javascript,js主要运行在浏览器中进行解析,而php运行在服务器中进行解析。.php文件包含标签,而js不需要再包含。js也能运行在服务器中,因为node平台。(捂脸,暂时想不出来)。我目前主要的岗位语言。想起来了,php应该说是主要用来web服务应用的,所以,其本身具有天生的混合在普通文本的模板能力。当然,这个功能,其他编程语言,也能实现,比如python使用了jinjia等库,也能与普通的html进行混合编程。那么怎么看待php呢?比如,对比一下python,都是用c语言构建的虚拟机,然后解释器解释运行代码。python的中间代码为pyc,php中间代码为opcode。php除了构建web服务,也能做为脚本运行一些处理,也能通过一些扩展,做多进程、线程的处理。php的swoole框架,php的高并发、异步扩展(不是框架)。
visualBasic
主要特点:解释执行,事件机制。我上大学,学得第一门编程语言。后来也自学过c++等。
java
资源很丰富。其实也是一种解释执行的语言。但是由于其字节码进行了优化过,效率也不错。据说go也java性能差不多。
后端开发王者,非常适合开发大型的后端应用。后端框架主要有,ssh、ssm、sprintboot等。
完全的面向对象编程。所有的函数、变量都包含在类中。所以,没有全局变量的概念。但是,可但是,方法类的static、类中的static成员变量都可以作为全局变量的容器。
c
c语言确实应该算是王者。它是很多语言实现的底层。比如:php、python等。跟它并列的,还有c++、rust。它们都能算是系统级的开发。
我曾经很好奇,c语言为什么能做系统级的开发?为啥能成为别的语言的虚拟机实现语言?
我也很烦,为什么c语言这么麻烦。用个数组,提前申明就算了,但是,为啥要我申请的时候,还要指定大小?字符串操作,还需要自己来操作,内部居然没有字符串这样的类型,而只有一个低层的char数组类型。
后来,我明白了,c语言,正是因为这写看似很麻烦的地方,需要手动指定,(如手动档车一样),需要自己来控制,来实现。所以,给操作带来了很大的操作空间。
记得有类似的话,抽象程度越高,在高级的抽象中,会丢失底层的细腻的控制能力。
我没有认真学过,上大学的时候学《网络技术》考试的时候,看过一点的。上手难度并是很大,难点在指针等内容。现在,我真想说,这个语言确实很强大,系统开发、其他语言的虚拟机多数都是该语言实现的。我需要找个时间认真学习一下这个语言。其实,C能做什么,确实我也不知道。如果用来写界面的程序,确实,它能做,但是感觉并不擅长。系统有很多的api都是有c搞定。php解释器,都是由c。其实说白了,用C来开发,确实很费脑子,在此基础上进一步抽象,在内存管理等方面,语法特点等,生成特定的语言。即基于C,进一步抽象,变成高级语言。
c可接近低层,一可以往高级方面发展。
c语言的指针问题,比如函数不能返回指向局部变量的指针。为什么呢?因为函数执行完毕后,局部变量将被释放,所以不能再指向该地址。同过此联想,js里面,经常返回局部复杂变量,而这些变量通常是引用的形式。所以,导致函数的调用堆栈(暂且这样称呼吧)还保持着。
C++
在c的基础上增加了类机制,类还有友元、虚类等概念,确实让类编程难度很大。依然使用指针等,所以程序员手动释放内存空间等。
lisp
神语言,此语言看似很低级,实则很高级。如果想写新语言,lisp确实适合搞搞。
python
2021-01-22 11:31
最近几天,又开始用上python的爬虫,才发现,python并不支持static关键字,对于类而言,取而代之的是,@staticmethod。之类的。
没有深入探索,python是否支持静态变量、静态方法之类的。但是,我想,静态方法、静态变量,无非,就是全局变量、全局方法,只不过添加了一些作用域限制,本质上,感觉差不多。
语言特点
异步、事件
代表语言js。线程不会阻塞在io等耗时操作上,对于高并发,能在一个线程里面,处理多个客户端任务。由于是异步的,所以一个任务完成了,需要通过事件模式来通知。另外,python也有一些库,也能完成异步,( async / await 做异步编程)。另外javascript,是单线程的。
编程特点
回调,一个事件完成之后,回调函数,进而将流程转给其他的代码。关键字常有await、async。对象,promise。
缺点
异步编程,跟正常顺序执行的代码思维略有区别,理解难度大一些。异步通过消息机制,能避免回调地狱,但是任不简单。
协程
代表语言go。go语言语法里面本身支持 go chan等关键字,本身很适合做高并发。协程特点,创建协程比线程、进程等节省资源,所以适合高并发。
缺点
暂无。
解释性语言
多被称为脚本语言。如python、php、lua、ruby、basic等一大批语言。特点,变量使用前不需要申明,直接拿来用就好,而且也不需要制定类型,变量能存放多种类型。由于是解释执行的,并为编译到特点平台的机器码。所以呢,跨平台很好。只要在该平台实现了解释器,就能执行。但是,性能有折损。毕竟,运行的时候,需要先解释。另外的特点,脚本语言,代码一般更容易理解,上手难度小,开发周期较快。但是,由于缺乏类型的支持,开发期一些bug无法通过编译器找出来,代码提示不够好。所以呢,php7中增加了类型的支持、js有语法变体typescript。说明了,类型在脚本语言中也变得重要了。
闭包
js、php等都有这个概念。闭包的基础是,在一个函数内,能直接返回一个函数指针。那么返回的这个函数指针,其作用域能享受到其定义的位置的外层函数内的作用域。所以,就能闭包。而php,需要use关键子来显示的需要指定用到的外层变量。
作用域特点
这个其实算不上特点。
全局变量
每种语言的全局变量、及用法都不一样。
有些语言,函数内的变量,如果不申明,则会往外层变量上找。比如c、js等。在js编程中,我常会加上var来防止变量泄漏。
而另一些语言,比如python、php。如果不申明,则自动创建该局部变量。如果确实要使用该全局变量,那么,需要使用global来申明。
但是,函数是可以嵌套定义的。如果定义在外部函数的内部函数,需要访问外部函数内的变量,如何访问呢?js,不存在这个问题,因为其本身,就是层层往外找的,而c语言,也不存在这个问题,因为其不能层层定义,而php呢,它用了一个关键字use,需要用户手动的指明,用到哪写变量,而global在这个时候,是没法用到的,因为其只能指明,引用的是全局变量,而局部变量不在其管辖范围之内。python呢?
静态static
很多语言都支持static关键字。从生命周期看,它像全局变量一样,随着程序的启动,而建立,直到程序退出。但是从作用域上看,其又有点,局部变量的特点。静态变量,被限制在特定的函数内。静态方法,只不过是作用域被限制的类上。
所以呢,我突发奇想,将函数内的静态变量返回,然后,作为全局变量来使用。
怎样快速掌握一门语言
多用、多用。各种特性,都试试,多掌握细节,不能浮在表面。