编程语言种类 - CSDN
精华内容
参与话题
  • 编程语言介绍与分类

    万次阅读 2019-04-16 11:31:52
    什么是编程?为什么要编程编程 是个动词,编程==写代码,写代码为了什么? 为了让计算机干你想要干的事情,比如,马化腾想跟别人聊天,于是写了个聊天软件,这个软件就是一堆代码的集合,这些代码是什么?这些...

    什么是编程?为什么要编程?

    编程 是个动词,编程==写代码,写代码为了什么? 为了让计算机干你想要干的事情,比如,马化腾想跟别人聊天,于是写了个聊天软件,这个软件就是一堆代码的集合,这些代码是什么?这些代码是计算机能理解的语言。

    那计算能理解的语言是什么呢? 之前,我们已经了解到,它只能理解2进制,0101010...,你总不能人肉输一堆二进制给计算机(虽然最原始的计算机就是这么干的)让它工作吧,这样开发速度太慢了。所以最好的办法就是人输入简单的指令,计算机能把指令转成二进制进行执行,举例如下:

    假如 程序员想让计算机 播放一首 歌曲 , 只需要输入指令 ,

    open "老男孩.mp3"
    play

    计算机的CPU接收到这样的指令后,会把它转成一堆 只有cpu可以理解的指令,然后再将指令变成各种对应的如下类似二进制

    [  op  |  rs |  rt | address/immediate]
       35     3     8           68           decimal
     100011 00011 01000 00000 00001 000100   binary

    最终cpu 去调用你的硬盘上这首歌,通过音箱播放。

    上面cpu那段指令太难理解了,如果让你天天写这样的代码,大家非得自杀不可。还好,伟大的计算机先驱们,开发了各种编程语言,让我们只需要通过写一些简单的规则,就能操作计算机工作啦。

     

    有哪些编程语言?

    编程语言总体分以为机器语言、汇编语言、高级语言,如下

    机器语言

    由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。

    用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

    机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。

    尽管机器语言好像是很复杂的,然而它是有规律的。

    存在着多至100000种机器语言的指令。这意味着不能把这些种类全部列出来。

    以下是一些示例:

    指令部份的示例

    0000 代表 加载(LOAD)

    0001 代表 存储(STORE)

    ...

    暂存器部份的示例

    0000 代表暂存器 A

    0001 代表暂存器 B

    ...

    存储器部份的示例

    000000000000 代表地址为 0 的存储器

    000000000001 代表地址为 1 的存储器

    000000010000 代表地址为 16 的存储器

    100000000000 代表地址为 2^11 的存储器

    集成示例

    0000,0000,000000010000 代表 LOAD A, 16

    0000,0001,000000000001 代表 LOAD B, 1

    0001,0001,000000010000 代表 STORE B, 16

    0001,0001,000000000001 代表 STORE B, 1[1]

     

    汇编语言

    汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

    汇编的hello world,打印一句hello world, 需要写十多行,也是醉了。

    ; hello.asm 
    section .data            ; 数据段声明
            msg db "Hello, world!", 0xA     ; 要输出的字符串
            len equ $ - msg                 ; 字串长度
    section .text            ; 代码段声明
    global _start            ; 指定入口函数
    _start:                  ; 在屏幕上显示一个字符串
            mov edx, len     ; 参数三:字符串长度
            mov ecx, msg     ; 参数二:要显示的字符串
            mov ebx, 1       ; 参数一:文件描述符(stdout) 
            mov eax, 4       ; 系统调用号(sys_write) 
            int 0x80         ; 调用内核功能
                             ; 退出程序
            mov ebx, 0       ; 参数一:退出代码
            mov eax, 1       ; 系统调用号(sys_exit) 
            int 0x80         ; 调用内核功能

    高级语言

    高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

    高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,像最简单的编程语言PASCAL语言也属于高级语言。

    高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:

    编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是cpu可以理解的2进制的机器码组成的),使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .obj,也就是OBJ文件)才能执行,只有目标文件而没有源代码,修改很不方便。

     

    编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等

    解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Java、PHP、Ruby等语言。

     

    总结

    机器语言

    优点是最底层,速度最快,缺点是最复杂,开发效率最低

    汇编语言

    优点是比较底层,速度最快,缺点是复杂,开发效率最低

    高级语言

    编译型语言执行速度快,不依赖语言环境运行,跨平台差

    解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行

     

    主流编程语言介绍(10分钟)

    世界上的编程语言有600多种,但真正大家主流在使用的最多二三十种,不同的语言有自己的特点和擅长领域,随着计算机的不断发展,新语言在不断诞生,也同时有很多老旧的语言慢慢无人用了。有个权威的语言排名网站,可以看到主流的编程语言是哪些

    *2019年2月数据(https://www.tiobe.com/tiobe-index/ )

     

     

    下面介绍下几个主流的编程语言:

    C语言:

    C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

    C++:

    C++是C语言的继承的扩展,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

    C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

    JAVA:

    Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

    PHP:

    PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域

    Ruby:

    Ruby 是开源的,在Web 上免费提供,但需要一个许可证。[4]

    Ruby 是一种通用的、解释的编程语言。

    Ruby 是一种真正的面向对象编程语言。

    Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。

    Ruby 可以用来编写通用网关接口(CGI)脚本。

    Ruby 可以被嵌入到超文本标记语言(HTML)。

    Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby

    GO:

    Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

    Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

    由其擅长并发编程

    Python:

    Python是一门优秀的综合语言, Python的宗旨是简明、优雅

    、强大,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向应用广泛,已是全球第4大最流行的语言。

     

    展开全文
  • 27种主流编程语言分类及优劣

    千次阅读 2019-07-11 14:43:52
    数据科学家 David Robinson 称,Python 是访问量增长最快的主流编程语言。在 Stackoverflow 上,主流编程语言如 Java、Javascript、C#、php 和 C++ 的问题访问量过去几年基本没太大的变动,只有 Python 一路呈上升...

    数据科学家 David Robinson 称,Python 是访问量增长最快的主流编程语言。在 Stackoverflow 上,主流编程语言如 Java、Javascript、C#、php 和 C++ 的问题访问量过去几年基本没太大的变动,只有 Python 一路呈上升趋势。小学一年级辅导 https://m.hfjy.com/baike/primary/g1/

    2017 年 6 月,Python 首次成为高收入国家访问量最高的标签。而在 2012 年,它的访问量比其它五种主流语言都低,Python 的年增长率达到了 27%。 Python 以及 R 的热捧被认为与数据科学的流行有关。

    帮你提升 Python 的 27 种编程语言

    27 种语言

    作为这个世界上最流行的编程语言之一的合作设计者,我经常遇到一种令人非常沮丧的行为( Python 社区和其它领域中都存在)就是社区中有影响力的人尝试去在其它开源社区中灌输对于”缺失“的恐惧感,并以此驱动别人对本社区做出贡献(我自己偶尔也会做出这样不当的行为,当别人掉进这个陷阱时我也更容易觉察出来)。

    虽然借鉴其他编程语言社区的经验是一件好事,但用基于恐惧的方法来推动行动有很大问题,社区成员为了吸引代码贡献者的注意,容易把其他社区的成员视为竞争对手,而不是作为潜在的盟友共同迎接挑战,推动软件开发技术的进步。还会导致社区排斥那些喜欢其他编程语言的人,把他们当做敌人。

    事实上,我们希望有更丰富的跨平台开源编程语言可供选择,编程语言是最重要的思维工具,可以把我们的想法转换成计算机能理解的明确的条款。如果人们发现了某种语言既适合他们的大脑又能直接解决问题,这就很好了,不必关心他们到底选的是那种语言。

    因此我要给 Python 社区提三个具体的要求和一个更广泛的建议,首先说这些要求:

    1.当我们想要激励部落成员,提高社区吸引力时,我们不应该使用恐惧法,相反我们应该使用自豪法。当使用恐惧法激励时,比如说这样的话:“如果我们不解决问题 X,那么 Python 开发者将会减少,他们将会转而去使用语言 Y”,那么我们就在故意地向全世界自由贡献代码的人传递负能量。但如果我们使用自豪法,说出来的话将是这样的:“Python 中的问题 X 的确难以解决,看看语言 Y 的社区,他们用一个极好的方法解决了这个问题,我们也可以在 Python 中尝试这个解决方案,以同样优雅的方式解决 Python 中的问题”。积极地强调“以我们自己的努力为自豪”,有利于促进 Python 社区中不断学习的文化,还会不断促进与其他社区关系的发展。
    量化投资国际峰会研修班
    零距离接触行业大咖

    十大对冲基金策略
    高频交易策略与技术
    对冲基金的相对价值策略
    阿尔法套利与统计套利
    商品期权与原油期货策略
    量化投资资金管理与风控
    2017年12月15-17日,深圳

    2.克制对其他编程语言社区蔑视的态度,特别是对那些有大牛存在,能自己解决遇到的问题,不必等待商业软件供应商屈尊解决问题的社区。世界上的大多数重要的问题都不是利益驱动的问题(那些人想要解决问题,不是为了谋取财富,也没有机构出钱资助他们),所以我们应该鼓励和赞扬那些加紧尝试解决问题的人。不必管他们使用的是什么技术。

    3.如果我们认识的人刚开始学习编程,即使他们所选的编程语言是我们自己所不喜欢的。我们也要支持他们,因为他们比我们清楚什么更适合他们的大脑。所以对我们合适的语言不一定适合他们。如果他们开始对当初的选择感到沮丧,以至于完全打消了他们学习编程的积极性,这时给他们推荐编程语言才更有意义。这个建议甚至也对我们当中做过改进网络安全方面工作的人有用,对于原本不安全的语言,我们的解决方式是,通过改善操作系统中的沙盒功能,渐进地破除这个语言选择障碍,用原生系统的安全属性,改善了编程语言默认行为,不应该从应用安全的角度评价编程语言的好坏,迷惑初学者。(如果有人请编程新手写了一个未经审计的软件,却部署为处理安全敏感的问题,这不是程序员的问题,而应该怪那个部署的人没有尽职调查软件的来源和安全属性。)

    我更多的建议是针对人开始遭遇 Python 的核心程序集的境界,也因此开始探索更多的 Python 自身的“思维工具”。

    我们做 Python 核心开发过程的一部分事情是由于领会的特点具有在其他语言我们具有优势,是否能够用一种合适的方式让 Python 代码容易读写。这意味着学习别的程序语言能够明确特定的风格,并且在 Python 中编程提高人对软件开发的认识。

    为了有助于这样的努力, 我已经列出了下面可供探索的领域,还有一些对这些领域可能提供额外见解的语言。我尽可能的链接到 Wikipedia 页面而不是直接转向相关的首页,因为维基百科经常会给出一些有趣的历史背景,当选择一门新的编程言作为一项学术型的练习而不是被立即用来实践性使用的时候,这些背景值得去探索。

    然而就我个人而言, 我熟悉许多的编程语言(并且已经使用了其中的一些进行开发生产系统) 。所有的推荐包括我间接了解的语言(或通过阅读一些材料和设计文档,又或者是从和我信任的朋友之间的交流中得知一门语言的优势和劣势)。

    本应该有很多的与沿出现在名单之中,但是对于列出来的这些特定的语言只是随意的一些子集,它们从某些程度来讲是基于我自己的兴趣而选出来的(比如说:我主要的兴趣点在于占支配地位的Linux,Android 和 Windows生态系统,所以在这里我就忽略了封闭但是更加有利可图的以 Apple 为中心的 Objective-C 和 Swift 编程语言,而且我对于专注于艺术环境的编程语言就不太了解,如Processing,我甚至需要猜测从其中学到的东西怎么样可以指导一个 Python 开发者)。对于一个更全面的编程语言名单而言需要考虑很多因素,除了考虑一个编程语言能够指导你成为一个开发者外,IEEE Spectrum 的一年一度关于编程语言流行度和增长的排名也非常值得了解一下。

    面向过程编程语言 C,Rust,Cython

    Python 默认的运行模型是过程型的:我们从主模块的顶部开始然后一句一句执行。所有的 Phthon 对于其他数据和计算模型的方法支持都是基于它是过程型的这一特性。

    C 语言毫无疑问仍然是底层编程语言的统治者. 它是实现 Python 解释器的核心语言,同样也是实现 Linux 操作系统内核的核心语言。作为软件开发人员,学习 C 语言是学习更多关于软件所运行的底层硬件的最好起点 – C 语言经常被描述为“可移植的汇编语言”,通常使用 C 语言编译器作为交叉编译器,为新的 CPU 体系结构编译出第一个应用程序。

    Rust,相比之下, 是一个由 Mozilla 创建的比较新的语言。它能够进入这个名单的原因是,Rust 吸取了工业界已知的关于不能在 C 语言中做什么的教训,并且被设计成可以与 C 库互操作的语言,它对硬件的控制达到了和低级系统编程语言相同的精度,但它使用不同的编译时方法进行数据建模和内存管理,在结构上消除了许多常见的困扰 C 程序的的缺陷(比如缓存溢出、重复释放内存错误、空指针访问以及线程同步问题)。我是一名嵌入式系统工程师,通过培训具备了最初的专业经验,我已经看到,当前被 C 语言和定制汇编代码统治的各个领域很有可能会被 Rust 取代。

    Cython 也是一种默认的更底层的语言,但是与通用目标语言 C,Rust 不同,Cython 主要用于书写 CPython 扩展模块。Cython 被设计作为一个 Python 的超集,让程序员选择何时支持纯 Python 语法的灵活性,当 Cython 语法支持的扩展使其可以生成的代码相当于本地C代码的速度和内存效率。

    学习这些语言之一是以实用的角度增强其对内存管理,算法效率,二进制接口兼容性,软件可移植性,将源代码转换成运行系统的深刻理解。

    面向对象的数据建模: Java, C#, Eiffel

    编程中最主要的任务之一是为现实世界的状态建模,这方面最通常的方法是面向对象语言所提供的那些原生的语法支持:把数据结构、操作这些数据结构的方法组合成类。

    Python原生设计上就可以直接使用面向对象的特性,而不需要一上来先学习如何编写自己的类。不是每种语言都才有这样的方式 – 对于本节列出的这些语言,学习面向对象的设计思想是使用这些语言的前提。

    得益于 Sun Microsystems 在 20 世纪 90 年代中后期对 Java 语言的市场推广,Java 成了很多大专院校计算机科学入门课程的默认语言。虽然现在在很多教育领域它正被 Python 淘汰,但它在商业应用程序开发领域仍然是一种最受欢迎的语言。有一系列其它语言针对公共的 JVM(Java 虚拟机)运行时的实现,包括 Python 的 Jython 实现。Android 系统的 Dalvik 和 ART 环境是基于 Java 编程 API 实现的。

    C# 在很多方面与 Java 相似,在 Sun 和 Microsoft 解决关于 J++(微软实现的 Java 语言)和标准 JAVA 不一致的问题失败后,它是作为J++的替代语言出现的。像 Java 一样,它也是一个受欢迎的商业应用开发语言,有一系列其它语言针对共享 .NET CLR(公共语言运行库)的实现,包括 Python 的 IronPython 实现(原始的 IronPython 1.0 中的核心组件被抽取出来创建 .NET 动态语言运行库的中间层)。在很长的一段时间里,.NET是只能在 Windows 系统中使用的专有技术,有一个跨平台的开源代码 mono 重新实现了.NET,但在 2015 年初,微软宣布了 .NET 开源计划。

    与列表里大多数语言不同,我并不推荐在日常使用 Eiffel。它之所以在推荐列表里,是因为这门语言有着大量优良的面向对象设计思想,包括以“正确可信”作为程序的设计目标。(同时,Eiffel 也告诉我对于大多数的软件开发,并没有以“正确可信”为设计目标,这是因为正确可信的软件确实无法妥善处理不确定的情况。当很多相关约束还不清楚,需要在不断迭代的过程中去逐步完善的时候,这种设计理念就完全不适合了)

    学习这类编程语言,就需要去熟悉继承模型、契约设计、类不变项、前置条件、后置条件、协变(covariance)、逆变(contravariance)、方法查找路径、泛型编程,以及其他各种在 Python 的类型系统上也支持的特性。此外还有很多标准库模块和第三方框架,会用到“显示的面向对象”设计风格,例如 unittest 和 loggingmodules,以及 Django 框架里基于类的 view。

    面向对象的 C:C++, D

    使用 CPython 的一种方式,是把它的内核当做一种“包含对象的 C 语言”的编程环境 – CPython 是通过 C 语言的风格去实现面向对象编程,也就是用 C 的结构体描述数据,然后把结构的实例指针作为第一个参数传给那些数据处理函数(也就是 CPython的C 里面的 omnipresentPyObject* 指针)。这种设计模式被有意复制到 Python 里,在实例方法和类方法需要显示的指定 self 或者 cls 参数。

    C++ 的目标是在源码级完全兼容 C 语言,在此之上增加了一些高级特性,例如原生的面向对象编程支持和基于模板的元程序开发。C++ 的晦涩和复杂是臭名昭著的(即使 2011 年的语言标准的更新解决了大量最糟糕的问题),不过就算这样,C++ 仍然是很多场景下的选择,包括 3D 建模图形引擎和跨平台应用开发框架,如 Qt。

    D 编程语言也很有趣,因为它和 C++ 的关系很像 Rust 与 C 语言之间的关系:设计 D 语言的目的是,既要保留 C++ 的大部分优点,也要避免 C++ 中存在的很多缺陷(比如缺乏存储安全性)。与 Rust 不同,D 语言不是一个从零开始设计的全新编程语言,相反,它是直接从 C++ 衍生出来的语言,尽管它不像 C++ 那样是 C 语言的严格超集,但它遵守一个设计原则,任何落入 C 语言和 D 语言公共子集中的代码,在两种语言中的行为必须相同。

    学习这些语言有利于深刻理解把高级语言特征和底层 C 运行时模型相结合的复杂性。学习 C++ 也有助于使用 Python 操作已有的用 C++ 编写的库和工具包。

    面向数组的数据处理: MATLAB/Octave, Julia

    面向数组的编程用于数值编程模型:基于矩阵代数和相关的数值方法。

    虽然 Python 的标准库并没有直接支持,不过在语言设计上已经做了考虑,一系列语法和语义上的功能支持,有助于第三方库 NumPy 以及类似的面向数组的工具。

    在很多情况下,Python科学计算 软件系列都被当做专用的 MATLAB 编程环境的替代者,被广泛用于科学和工程上的建模、仿真和数值分析。开源项目 GNU Octave 的目标是在语法上与MATLAB代码兼容,让人可以比较面向对象编程的这两种方式。

    Julia 是另一个相对较新的语言, 它的主要特点是支持面向数组编程和基于类型的函数重载.

    学习一种这样的语言有助于深入理解 Python 科学计算工具包的威力,同时,学习这样的语言有助于研究如何利用 OpenCL 和 Nvidia 的 CUDA 等类似的技术实现硬件级并发执行,也有助于研究如何使用 Apache Spark 和 Blaze 等数据处理框架实现分布式数据处理。

    统计数据分析语言: R

    由于有越来越多的大数据集需要处理。因此需要一种免费的能处理这样的数据集的分析工具,编程语言 R 就是一种这样的工具,它特别注重统计数据分析和可视化。

    学习 R 语言有助于深入理解 Python 科学计算工具包的统计功能,特别是其中的数据分析库 pandas 和统计可视化库 seaborn 。

    计算管道建模语言:Haskell, Scala, Clojure, F#

    面向对象数据建模和面向数组数据建模主要用于对数据进行静态建模,有两种建模方式,一种是把数据保存在对象的各个属性中,另一种是把结构化的数据保存为数组。

    相比之下,函数式编程语言更强调以计算流的形式对数据进行动态建模。只要学一下函数式编程基础,就会显著提高使用数据转换操作对数据建模的能力,这对于使用其他范式的编程语言(比如面向过程、面向对象、面向数组的编程语言)开发应用程序也是有帮助的。

    Haskell 是一个函数式编程语言,对 Python 的设计产生过重大的影响, 最明显的就是 Python 2.0 引入的列表解析。

    Scala 毫无疑问是基于JVM的函数式编程语言,与Java, Python和R一样,是Apache Spark数据分析平台的四门主要编程语言之一。在设计上支持函数式编程方式的同时,Scala的语法、数据模型和执行模型在设计上尽量避免为原有的Java程序员带了太大的障碍(从这个角度上看,Scala更恰当的分类应该是有着强函数式语言支持的面向对象的编程语言)。

    Clojure是另一门基于JVM的函数式编程语言,被看作是Lisp的一个变种。它在我们的清单中具有一席之地,是因为它为Python的函数式编程工具箱toolz的实现带来灵感。

    我自己对F# 并不熟悉,不过由于它是 .NET CLR 推荐的语言,所以还是值得关注的。

    学习这些编程语言,有助于了解 Python 自身的计算管道建模工具,包括容器推导表达式、生成器、生成器表达式、functools 和 itertools 标准库模块,和第三方函数式 Python 工具如 toolz。

    事件驱动编程语言:JavaScript, Go, Erlang, Elixir

    计算管道是处理数据转换和分析问题的一种很好的方法,不过很多问题需要程序以持久的方式运行,等待事件发生,然后处理这些事件。对这类服务,通常可以并发的处理多个事件,来实现同时为多个用户(或者至少多个行为)提供服务。

    JavaScript 最初是为浏览器开发的事件处理编程语言,可以让 web 开发人员处理客户端本地的用户行为(例如鼠标移动和按键)和事件(例如页面渲染结束)。所有现代的浏览器都支持 JavaScript,与 HTML5 的 DOM 一起,已经成为用户界面的外观和行为事实上的标准。

    Go 是Google设计出来的,设计这个语言的目的是为了创建高度可扩展的网络服务,Go语言非常适合开发命令行程序。从设计编程语言的角度看,最引人注目的是Go语言在它的核心并发模型中使用了“顺序通信过程(Communicating Sequential Processes)”这一概念。

    Erlang 是爱立信设计出来的,设计这个语言的目的是为了制造高度可靠的电话交换机以及类似的设备,著名的开源框架RabbitMQ的消息服务器就是用Erlang实现的。Erlang使用Actor模型实现了核心并发原语,不允许不同线程直接共享数据,线程间的通信只能靠传递消息。尽管我自己从来没有使用过Erlang语言, 但我的第一份工作涉及到了一个基于Actor模型开发的并发框架,它是一个前爱立信工程师用C++开发的,我自己也基于TSK(任务)和MBX(邮箱)原语开发过这样的框架,是在德州仪器的轻量级DSP/BIOS运行时(现在叫TI-TROS)中实现的。

    Elixir 能够出现在这个名单中的理由是,虽然它运行在Erlang虚拟机中,与编程语言Erlang具有相同的并发语义,但它也包含了一系列额外的语言级特征,提供了更全面的开发环境,更容易吸引从其他编程语言(比如Python、Java或Ruby)转过来的开发者。

    学习一种这样的语言有助于深入理解Python本身是如何支持并发和并行的,包括原生协程、基于生成器的协程、concurrent.futures和asyncio标准库模块、第三方网络服务开发框架(比如Twisted和Tornado)、Django中新引入的channels概念和GUI 框架中的事件处理循环。

    动静混合类型: TypeScript

    Python 3.5 引入的特性里,最有争议的一项是新的类型模块,为 Python 体系加上了混合类型的支持。

    对于那些接触过的静态类型编程语言主要是 C, C++ 和 Java 的开发者来说,这简直就是一个及其可怕的想法。

    Microsoft 的 TypeScript 为 JavaScript 应用提供动静混合类型支持,让你对这个概念会有好一些的看法。TypeScript 代码会编译成 JavaScript 代码(编译后不包含任何运行时类型检查),主流的JavaScript 库的 TypeScript 注释(annotations)在DefinitelyTyped代码库里可以找到。

    正如 Chris Neugebauer 在澳大利亚 PyCon 大会的报告上指出的那样,这很像是 Python 与类型提示库 typeshed 以及类似 mypy 那样的类型推导和分析工具之间的关系。

    本质上,TypeScript 和 Python 的类型提示都是实现特定测试程序的方式,不管是独立文件(常规的测试程序),还是内嵌在主代码里(类似静态编程语言的类型声明)。不管哪种情况,你都可以运行单独的命令检查剩余的代码是否符合已知的类型约束(对于 JavaScript 和 TypeScript,在编译阶段会隐式的去完成,对于 Python 的类型提示,则是可选的静态分析任务)。

    动态元程序设计: Hy,Ruby

    像 C、C++、C#、Java 这样的编程语言给 Python 带来的一个有点让人不安特性是“代码即数据”:类似函数和类都是运行时对象,可以被其他对象操作。

    Hy 是一个 Lisp 的变种,可以在 CPython 虚拟机和 PyPy 虚拟机上运行。Lisp 在“代码即数据”上做到了极致,Lisp 代码本身就是由描述需要实现的操作的嵌套的列表组成的(这门语言的名字就源自”LISt Processor”)。Lisp 风格的语言,最强大的一点是它们可以很轻松的实现自己的领域特定语言(DSL),不过这有时候也为阅读其他人的代码带来困难。

    Ruby 在很多方面都与 Python 很类似,但是作为更为开放的社区,Ruby 更接受动态元程序设计,而对于 Python,这方面只是“支持,但不鼓励”。这方面的功能包括重定义类加入一些方法,用闭包实现语言核心结构如迭代器。

    学习这些语言可以帮助深入了解 Python 自身的动态元程序设计的支持,包括函数和类装饰、monkeypatching(动态修改代码)、unittest.mock 标准库模块以及第三方对象代理模块入如wrapt(我还没找到什么编程语言有助于了解 Python 的元类(metaclass),如果有人有好的建议,可以在评论里告诉我。元类的高级特性包括核心类型、抽象基类、枚举类型和混合类型(动态类型和静态类型混合)表达式的运行时执行)。

    实用主义者:Lua, PHP, Perl

    流行的编程语言通常并不是孤立的 —— 他们属于庞大的生态系统的一部分(商业和社区都是这样),此外还有终端用户、框架开发者、工具开发者、教育人员等等。

    Lua是一门流行的编程语言,主要作为脚本引擎内嵌于大型的程序里。值得一提的例子有,为魔兽争霸游戏客户端编写的插件,在很多 Linux 发行版存在的 RPM 工具也内置了 Ruby。与 CPython 相比,Lua 运行时大小只有其十分之一,并且它的弱反省(weaker introspection)的能力也能让它更容易独立于应用程序的其他部分和宿主操作系统。一个值得提到的来自 Lua 社区对 Python 生态系统的贡献是,CPython 和 PyPy 采用 LuaJit FFI(Foreign Function Interface)作为其 JIT 友好的 cffi 接口库的基础。

    PHP 是另一个受欢迎的编程语言,由于PHP擅长生成HTML页面,被早期的虚拟服务器主机提供商广泛使用,因此它作为 LAMP stack(Linux-Apache-MySQL-PHP)的组成部分被广为人知。尽管PHP在设计中存在很多令人苦恼的概念上的缺陷,它仍然成了很多著名的开源web 服务的基础,包括Drupal内容管理系统、WordPress博客引擎和支撑Wikipedia的MediaWiki引擎。PHP也能支撑很多重要的服务,比如众包社区所使用的分布式事件报告平台 Ushahidi。

    和PHP一样,Perl 也是Linux系统上的一个受欢迎的语言,与PHP不同,Perl不是作为网站开发平台被人熟知的,它更常见的用途是作为系统管理员管理系统的工具,它既能使用正则表达式处理字符串又能处理基于文本的Linux操作系统命令的输出结果。只使用Perl就能处理所有的任务,不需要再使用Whensh、awk和sed等工具了。

    学习其中的一门语言并不能提供任何好的见解在审美上漂亮或者在理念上简洁的程序语言设计。可能的结果是在实践中提供一些编程语言的结构和采纳的知识,以及了解关于偶然的机会、历史的积累和降低入门门槛(通过重新分配使缺省变得可能)所起到的作用,这些都强于语言本身固有的能力。

    特别是,它可以提供一些见解关于 CKAN、OpenStack NFV、Blender、SciPy、OpenMDAO、PyGMO、PyCUDA、 Raspberry Pi Foundation 和 Python 的项目意义,通过广泛的商业组织,确保 Python 生态系统的机构投资持续进行。

    数值计算的思想:Scratch,Logo

    最后想说的是,我常常陷入这样的讨论,即结构化编程和面向对象倡导者的争论。后者自称面向对象编程语言和结构化编程语言一样易学。

    当我们谈论的是通过具体的数值实验来教学(机器人学),研究对象在仿真软件中的模型有着直接现实世界的参照物时,比如学生们可以接触到传感器,发动机,继电器等。我认为支持面向对象的小伙伴们有一定的道理。

    然而对于其他人来讲,我遇到的一个典型的挑战是:拿起一本食谱,将其中一个菜谱转换成你认为易学的面向对象编程语言,然后找到一个理解这门编程语言的学生,沿着我的思路,来继续转换这个菜谱。(我期待着看到学术研究人员真正践行这样的学习过程,——我会发自内心的为这样的情况感到欣慰。)大多数的情况下,小伙伴们不必遵循这样的流程——仅仅需要在头脑中进行思维的实验就足以让他们感受到要想学会这“易学的”编程语言需要多少预备知识。

    然而另外一个解决此问题的方法是学习那些用于教育小孩子数值计算的编程语言。

    其中一种最流行的莫过于 Scrach,它是一种让学生利用拖动的方式来操作封闭的图形化环境,从而可以看到图形化界面中相应的移动和反应的编程接口。像 Scrach 这样的图形化环境是一种类似于利用连环画帮助孩子们逐步学习读书认字的方式的程序设计方式。

    然而,这种利用一种特殊教育目的编程语言来操作一个图形化界面的想法并不新奇,随着的早期最经典环境之一的 Logo 环境在 2 0世纪 60 年代的创建(类似于 Python 自己的海龟模块),那时候,你所接触的主要的东西是一个“海龟”,你可以用命令它的移动来画线,从而改变图形环境。通过这种方式,像命令行、迭代、状态(例如:向上划、向下划)都以一种建立在人们的自然直观的思维方式(想象一下,假如你是一只海龟,如果向右旋转 90 度将会发生什么?)的基础上来介绍。

    回归本源,作为一名富有经验的程序员,重新学习以上的任何一门编程语言是最有效的方式来忘掉所学(抛弃一些轮子):这些语言工具所涵盖的概念帮助我们回想起那些我们曾经认为理所当然的概念,但是需要以初学者的眼光重新学习。当我们这么做的时候,因为我们更加愿意回想起整个的逻辑链条,包括那些我们之前认为理所当然而省略的思维步骤,我们会更加有效地和学生以及其他的初学者一起工作。

    展开全文
  • 编程语言分类与关系

    万次阅读 多人点赞 2018-07-05 00:06:34
    编译型语言:使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。特点:在编译型语言写的程序执行之前,需要一个专门的...

    本文的关注点:
            编译型语言和解释型语言
            动态结构语言和静态结构语言
            动态类型语言和静态类型语言
            强类型语言和弱类型语言
    

    1、编译型语言和解释型语言

    计算机不能直接的理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言的编写的程序。翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
    编译型语言:

    需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。编译和执行是分开的,但是不能跨平台。
    优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
    缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
    代表语言:C、C++、Pascal、Object-C、swift等。
    解释型语言

    解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。每一个语句都是执行的时候才能翻译。这样解释性语言每执行一次要翻译一次,效率表较低。
    优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
    缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
    代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby
    混合型语言

    混合型语言也叫半编译型语言。比如java、C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。
    java解释器采用生成与系统无关的字节代码指令技术。也就是说,在任何不同的操作系统上,只要正确安装了java运行系统,就有了编写调试java程序的平台,在分布式应用中,java的这个特点使同一个java程序能在不同的系统上运行,从而提高了软件生产效率。可移植性是跨平台特性的一个延伸,即具有了跨平台性,就保证了可移植性。java程序、java类库、java编译器、java系统都具有可移植性。
    另外有一个特殊的情况,正常情况下JavaScript属于解释性语言,V8引擎是被设计用来提高网页浏览器内部JavaScript执行的性能,为了提高性能,v8会把js代码转换为高效的机器码,而不在是依赖于解释器去执行。v8引入了JIT在运行时把js代码进行转换为机器码。这里的主要区别在于V8不生成字节码或任何中间代码。这里的特殊之处在于JIT做代码优化(同时生成编译版本);解释型语言无法做到这些。
    动态结构语言和静态结构语言
    主要针对点是:运行是是否能够改变代码结构。
    动态结构语言
    是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
    主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
    静态结构语言
    与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。
    动态类型语言和静态类型语言
    动态类型语言和静态类型语言主要针对数据类型检查的时间问题。
    动态类型语言
    动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
    主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、SQL、Perl。
    静态类型语言
    静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。 
    主要语言:C、C++、C#、Java、Object-C。
    注意:
    通常情况下解释型语言是动态类型语言,编译型语言是静态类型语言。但也不全是,swift是编译型语言但是它也是动态类型语言。C#和Java是解释型语言也是静态类型语言。
    强类型语言和弱类型语言
    强类型语言:
    强类型语言,一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。你不能把一个整形变量当成一个字符串来处理。
    主要语言:Java、C#、Python、Object-C、Ruby
    弱类型语言:
    数据类型可以被忽略,一个变量可以赋不同数据类型的值。一旦给一个整型变量a赋一个字符串值,那么a就变成字符类型。
    主要语言:JavaScript、PHP、C、C++(C和C++有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型)

    语言类型分布图:
    在知乎上看到一张图,简直如有神助,啥也不说了上图。


    展开全文
  • 编程语言种类简介

    千次阅读 2016-11-19 23:34:39
     Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go的目标是希望提升现有编程语言对...

    GO:

       Go语言是谷歌2009发布的第二款开源编程语言Go语言专门针对多处理器系统应用程序编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。该语言设计为一款系统编程语言,可以被用于网络服务器存储系统和数据库中。

    .NET:

    .NET就是微软用来实现XMLWeb ServicesSOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术。

    OpenCV:

    OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。

    Scala:

    是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言 、并集成面向对象编程函数式编程的各种特性。Scala有几项关键特性表明了它的面向对象的本质。例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。Scala允许定义新类的时候重用一个类中新增的成员定义(即相较于其父类的差异之处)"。Scala称之为mixin类组合。Scala还包含了若干函数式语言的关键概念,包括高阶函数、局部套用、嵌套函数、序列解读等等。Scala是静态类型的,这就允许它提供泛型类内部类、甚至多态方法。另外值得一提的是,Scala被特意设计成能够与Java.NET互操作。Scala可以与Java互操作。它用scalac这个编译器源文件编译成Java的class文件。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。它也可以访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框架。


    C++:

    C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。常用于系统开发,引擎开发等应用领域,是至今为止最强大编程语言之一,支持类:类、封装、重载。

    优点:

    · C++代码· C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。

    · C++设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。

    · C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。

    · C++设计成尽可能与C兼容,借此提供一个从C到C++的平滑过渡。

    · C++避免平台限定或没有普遍用途的特性。

    · C++不使用会带来额外开销的特性。

    · C++设计成无需复杂的程序设计环境。

    · 出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的。

    · C++在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C++的集成开发环境中完成的。C++相对众多的面向对象的语言,具有相当高的性能。

    · C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。

    缺点:

    C++由于语言本身过度复杂。更为糟糕的是C++的编译系统受到C++的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。

    由于本身的复杂性,复杂的C++程序的正确性相当难于保证。也有人提出不支持多线程的原语等缺陷。

    C:

    C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。C是结构式语言:结构式语言的特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。使程序层次清晰,便于编码、维护以及调试。C 语言是以函数形式提供给用户的,从而使程序完全结构化。C语言功能齐全:具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大。C语言适用范围大:适合于多种操作系统,如Windows、linux、DOS、UNIX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,优于其它高级语言,有一些大型应用软件也是用C语言编写的。C语言应用指针:可以直接进行靠近硬件的操作。C语言文件由数据序列组成:可以构成二进制文件或文本文件常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode(mac os x)。

    PHP:

    PHP,PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用。可以生成Forms,ComboBoxes,Grid,Menus等的组件,并支持将数据转为XML/JSON格式。

    PHP的特性包括PHPPHP安装它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。最重要的是PHP可以用C、C++进行程序的扩展!

    折叠优势

    1、开放的源代码

    所有的PHP源代码事实上都可以得到。 

    2、PHP是免费的:

    和其它技术相比,PHP本身免费且是开源代码。 

    3、php的快捷性:

    程序开发快,运行快,技术本身学习快。嵌入于HTML:因为PHP可以被嵌入于HTML语言,它相对于其他语言。编辑简单,实用性强,更适合初学者。 

    4、跨平台性强:

    由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS、Mac OS下。 

    5、效率高:

    PHP消耗相当少的系统资源。 

    6、图像处理:

    PHP动态创建图像 

    7、面向对象:

    php4,php5 中,面向对象方面都有了很大的改进,php完全可以用来开发大型商业程序。 

    8、专业专注:

    PHP支持脚本语言为主,同为类C语言。

    折叠技术应用

    1,伪静态

    2,静态页面生成

    3,数据库缓存

    4,过程缓存

    5,div+cssw3c标准

    6,大负荷

    7,分布式

    8,flex

    9,桌面程序应用(不擅长)

    10,支持MVC模型

    11,Smarty模版引擎

    C#:

    C#在继承C和C++强大功能的同时去掉了一些它们的复杂特性。C#综合了VB简单的可视化操作和C++的高运行效率,.NET开发的首选语言。并且C#成为ECMA与ISO标准规范。C#看似基于C++写成,但又融入其它语言如Pascal、Java、VB。C#:面向对象、类型安全、组件技术、自动内存管理、跨平台异常处理、版本控制、代码安全管理。用C# 开发应用软件可以大大缩短开发周期。

    C#弱点:,一些版本较旧的Windows平台上,C# 的程序还不能运行,因为C# 程序需要 .NET运行库作为基础.没有丰富的第三方软件库可用。

    java:

    Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网。是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。

    JAVA 的用途:80%以上的高端企业级应用都使用JAVA平台(电信、银行等)。

    Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java不同于一般的编译执行计算机语言和解释执行计算机语言。首先将源代码编译成二进制字节码bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换

    Java语言是强制面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

    Java语言是分布式的。

    Java语言是健壮的。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。

    Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。Java对通过网络下载的类具有一个安全防范机制。

    Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

    Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。

    Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

    Java是性能略高的。与那些解释型的高级脚本语言相比,Java的性能还是较优的。

    Java语言是原生支持多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

    Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

    Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。

    折叠差异

    熟悉C语言和C++语言的读者一定想搞清楚这个问题,实际上,Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全相同。尽管如此,Java和C语言,C++语言又有许多差别,主要表如下几个方面:

    1. Java中对内存的分配是动态的,它采用面向对象的机制,采用运算符new为每个对象分配内存空间,而且,实际内存还会随程序运行情况而改变。程序运行中 Java系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。而C语言通过malloc()和free()这两个库函数来分别实现分配内存和释放内存空间的,C++语言中则通过运算符new和delete来分配和释放内存。在C和C++这种机制中,程序员必须非常仔细地处理内存的使用问题。一方面,如果对己释放的内存再作释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。

    2. Java不在所有类之外定义全局变量,而是在某个类中定义一种公用静态的变量来完成全局变量的功能。

    3. Java不用goto语句,而是用try-catch-finally异常处理语句来代替goto语句处理出错的功能。

    4. Java不支持头文件,而C语言和C++语言中都用头文件来声明类的原型、全局变量、库函数等,这种采用头文件的结构使得系统的运行维护相当繁杂。

    5. Java不支持宏定义。Java只能使用关键字final来定义常量。

    6. Java对每种数据类型都分配固定长度。比如,在Java中,int类型总是32位的,而在C语言和C++语言中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位。这使得C语言造成不可移植性,而Java则具有跨平台性(平台无关性)。

    7. 类型转换不同。在C语言和C++语言中,可通过指针进行任意的类型转换,常常带来不安全性,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。

    8. 结构和联合的处理。Java中根本就不允许类似C语言的结构体(struct)和联合体(union)包含结构和联合,所有的内容都封装在类里面。

    9. Java不再使用指针。指针是C语言和C++语言中最灵活,也最容易产生错误的数据类型。由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性。而Java用“引用”的方式,对指针进行完全地控制,程序员不能直接进行任何指针操作。

    10. 避免平台依赖。Java语言编写的类库可以在其它平台的Java应用程序中使用,而不像C++语言必须运行于单一平台。

    11. B/S开发方面,Java要远远优于C++。

    折叠优劣势

    优势:Java适合团队开发,软件工程可以相对做到规范。由于Java语言本身的极其严格语法的特点,Java语言无法写出结构混乱的程序。这将强迫程序员的代码软件结构的规范性。这是一个很难比拟的优势。

    劣势:J2EE的架构很完美,第一版软件可以做满意,但是很不适合互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。

    JAVA SE :

    Java EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台Java2平台的标准版,Java EE不仅巩固了标准版中的许多优点,例如方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSPJava Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

    Java EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EJB,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。

    RUST:

    创建这个新语言的目的是为了解决一个很顽疾的问题:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升。Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,比如不需要管理内存,比如不会出现Null指针等等。 

    Rust是Mozilla开发的注重安全、性能和并发性的编程语言。

    Python:

    (英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

    主要特点

    简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

    易学:Python极其容易上手,因为Python有极其简单的语法。

    免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

    高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

    可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。

    解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。

    运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。

    在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。

    面向对象:Python既支持面向过程的编程也支持面向对象的编程。在面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

    可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。

    可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

    丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试线程、数据库、网页浏览器CGI、FTP、电子邮件XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

    规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。

    折叠编辑本段优点

    Python 是一种不受局限、跨平台的开源编程语言,它功能强大且简单易学。因而得到了广泛应用和支持。

    ArcGIS 9.0 社区中引入了 Python。此后,Python 被视为可供地理处理用户选择的脚本语言并得以不断发展。每个版本都进一步增强了 Python 体验,从而为您提供更多的功能以及更丰富、更友好的 Python 体验。

    ESRI 已将 Python 完全纳入 ArcGIS 中,并将其视为可满足我们用户社区需求的语言。下面仅介绍 Python 的部分优势[1]

    · 易于学习,非常适合初学者,也特别适合专家使用

    · 可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本)

    · 可移植,跨平台

    · 可嵌入(使 ArcGIS 可脚本化)

    · 稳定成熟

    · 用户社区规模大

    Python 已延伸到 ArcGIS 中,成为了一种用于进行数据分析、数据转换、数据管理和地图自动化的语言,因而有助于提高工作效率。

     

     

     

     

     

     

     

     

    展开全文
  • 编程语言种类

    万次阅读 2018-09-13 20:42:49
    编程语言种类 编程语言有很多种,常用的有C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言、Objective-C、Swift、汇编语言等,每种语言都有自己擅长的方面,例如: 编程语言 主要用途 ...
  • 编程语言分类

    万次阅读 2019-01-23 09:28:41
    1. 桌面程序:Java、C++、C#、VB、C均可。 2. 网站服务器端开发:JSP(Java语法)...4. 智能手机程序:安卓使用Java,iPhone使用Objective-C 5. 底层、工具开发:C、C++ 6. 多功能脚本程序:Python、Perl、Ruby等等 ...
  • 计算机编程语言分类

    千次阅读 2019-02-18 17:31:58
    按照编程语言的擅长范围的分类 前端 后端 数据库 一些问题 为什么软件项目会分为前端和后端? java和javascrip有什么关系和区别? C#和.Net有什么关系和区别? 前言 所有的工程师在接触编程有一段时间了...
  • 计算机编程语言分类与区别

    千次阅读 2019-07-03 10:37:18
    按历代分类 机器语言 汇编语言 高级语言 应用语言 编译型和解释型 动态语言和静态语言 编程语言、脚本语言、标记语言
  • 你必须知道的编程语言分类

    千次阅读 2011-06-10 11:14:00
    我们习惯把编程语言分类为机器语言(汇编语言)和高级语言(Fortran/Lisp/Cobol/Basic/C/Pascal /C++/Java/Perl/Python),选择使用高级语言编程而不是机器语言相信大家都能说出一两个理由(比汇编语言更容易和更...
  • 编程语言分类简介

    万次阅读 2007-05-31 12:02:00
    计算机语言种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。 电脑每做的一次动作,一个步骤,都是按照以经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是...
  • 计算机编程语言分类

    2017-11-06 11:05:47
    计算机编程语言分类 机器语言(二进制代码) 汇编语言(面向机器的程序设计语言) 高级语言(按转换方式可分两类:1、编译型语言; 2、解释型语言)||按照客观系统的描述可分两类:1、面向过程语言;2、面向对象...
  • 一图看懂编程语言分类

    千次阅读 2017-03-16 22:55:05
    编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个...
  • 各种编程语言分类

    千次阅读 2014-03-13 14:19:04
    计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种:一个是编译,一个是解释。 编译型语言写的程序执行之前,需要一个...
  • 由Python谈及编程语言分类

    千次阅读 多人点赞 2018-11-30 00:02:31
    程序员之中有个永恒的争论话题,什么才是最好的编程语言?我觉得答案不是重点,而每个程序员使用的什么语言也没那么值得关注,重要的是每种语言的特点和精华,一种语言的面世和普及必然有它的道理,理解它存在的意义...
  • 这篇博客主要用来介绍编程语言的基本分类方法。   大致有以下内容:   编译型语言、解释型语言和半编译型语言   动态编程语言与静态编程语言   动态类型语言与静态类型语言   强类型语言与弱类型语言  ...
1 2 3 4 5 ... 20
收藏数 208,452
精华内容 83,380
热门标签
关键字:

编程语言种类