python go 的区别
相比于Python的40个特性,Go只有31个,可以说Go在语言设计上是相当克制的。比如,它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没有泛型,没有异常,没有宏,没有函数修饰,更没有线程局部存储。
但是Go的特点也很鲜明,比如,它拥有协程、自动垃圾回收、包管理系统、一等公民的函数、栈空间管理等。
Go作为静态类型语言,保证了Go在运行效率、内存用量、类型安全都要强于Python和Erlang。
Go的数据类型也更加丰富,除了支持表、字典等复杂的数据结构,还支持指针和接口类型,这是Python和Erlang所没有的。特别是接口类型特别强大,它提供了管理类型系统的手段。而指针类型提供了管理内存的手段,这让Go进入底层软件开发提供了强有力的支持。
Go在面对对象的特性支持上做了很多反思和取舍,它没有类、虚函数、继承、泛型等特性。Go语言中面向对象编程的核心是组合和方法(function)。组合很类似于C语言的struct结构体的组合方式,方法类似于Java的接口(Interface),但是使用方法上与对象更加解耦,减少了对对象内部的侵入。Erlang则不支持面对对象编程范式,相比而言,Python对面对对象范式的支持最为全面。
在函数式编程的特性支持上,Erlang作为函数式语言,支持最为全面。但是基本的函数式语言特性,如lambda、高阶函数、curry等,三种语言都支持。
控制流的特性支持上,三种语言都差不多。Erlang支持尾递归优化,这给它在函数式编程上带来便利。而Go在通过动态扩展协程栈的方式来支持深度递归调用。Python则在深度递归调用上经常被爆栈。
Go和Erlang的并发模型都来源于CSP,但是Erlang是基于actor和消息传递(mailbox)的并发实现,Go是基于goroutine和管道(channel)的并发实现。不管Erlang的actor还是Go的goroutine,都满足协程的特点:由编程语言实现和调度,切换在用户态完成,创建销毁开销很小。至于Python,其多线程的切换和调度是基于操作系统实现,而且因为GIL的大坑级存在,无法真正做到并行。
而且从笔者的并发编程体验上看,Erlang的函数式编程语法风格和其OTP behavior框架提供的晦涩的回调(callback)使用方法,对大部分的程序员,如C/C++和Java出身的程序员来说,有一定的入门门槛和挑战。而被称为“互联网时代的C”的Go,其类C的语法和控制流,以及面对对象的编程范式,编程体验则好很多。
python go 的区别相关推荐
- php7和python3性能对比-Python 2.7与Python 3.7区别
今天,我将带大家看看Python 2.7与Python 3.7这两个版本区别. 区别一:print语法使用 Python2.7 print语法使用 >>> print "H ...
- c语言 python-C语言、Java语言和python语言的区别在哪里
原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...
- Python is 和 == 区别 - Python零基础入门教程
目录 一.前言 二.Python 运算符 == 三.Python 运算符 is 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 ...
- Python Pycharm Anacanda 区别
工欲善其事必先利其器,在学习 Python 开发之前我们首先来熟悉几个关键字: 1.Python 2.Pycharm 3.Anacanda 零基础 Python 学习路线推荐 : Python 学习目 ...
- c语言 python java_C语言、C++、Java,Python之间的区别,哪个更有前景,哪个更难 ?...
从这四种语言的难度.受欢迎度还有作用以及优点缺点给楼主做一个全面的分析,我们可以从中了解其区别,以及难易程度.至于今后可以用到的或者是前景问题,根据自己的职业发展大家可以自己做个分析.最后会总结一下他 ...
- go语言和python的区别_golang和python有什么区别?
golang和python有什么区别?下面本篇文章给大家对比一下Python和Golang,介绍一下golang和python的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...
- python与java区别-Java与Python到底有什么区别和共同点详细对比
JAVA:Java是一种计算机编程语言,最常用于开发Android智能手机应用程序.它于1995年由Sun Microsystems的James Gosling首次发布,后来被Oracle Corpo ...
- python和c语言的区别-C语言、Java语言和python语言的区别在哪里
原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...
- python和java的区别-python与java区别
Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...
- pycharm中创建的dictionary与python package的区别
在pycharm中,创建的dictionary(目录)与python package的区别 python package 这是一个特殊的目录,因为在创建该python package的时候,系统会自动 ...
最新文章
- java人脸识别_Python 实现在 App 端的人脸识别!手机解锁人脸识别
- 的训练过程_指外翻的人在训练的过程中,要不要拉伸收肌?
- 7-1 多数组排序 (12 分)三种做法(冒泡排序 ; 重写sort方法 ;利用sort和栈)
- Linux在线扫描热添加的SCSI/iSCSI设备
- 机载计算机结构,机载计算机
- calendar获取本周一的日期_Java Calendar 获取本周周一和周日代码
- html 中加号的表示方法,CSS的+(加号)选择器怎么用
- spring boot 集成Mybatis时 Invalid bound statement (not found)
- Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用
- C#中的volatile关键字
- 【路径规划】基于matlab GUI改进的DWA算法机器人静态避障路径规划【含Matlab源码 678期】
- Perl语言入门到精通学习路线
- 计算机输入法知识讲解,第一讲计算机基础知识及微软拼音输入法
- 12306订票候补是个坑_12306候补购票好几天了都没兑现成功是不是凉凉了?
- fastlane二开java_Fastlane 使用手册(二)
- arduino中print()跟write()最大区别和注意事项 (最详细)
- 小米随身wif linux平台配置
- 微信开发者工具首次登陆提示网络连接失败
- HTC Lengend G6上网-彩信设置
- Unity3d实现扭动挤压浏览效果