实验1:TOP50编程语言分析
一:实验要求
1:查询TOP50编程语言的历史和特点。
2:总结并按照某个角度进行归类,不超过10类。
3:分析语言之间的关联及异同。
4:内容不少于4页A4版面。
二:实验内容
1:查询TOP50编程语言
根据网站(TIOBE Index - TIOBE),可以查询到TIOBE Index for February 2024,分别得到截至2024年2月的TOP1~20、TOP21~50的编程语言。其中,TOP1~20的编程语言可得到其当前的被使用占比情况(Ratings)和相对于2023年2月时的排名和被使用占比的变化情况(Change);而TOP21~50的编程语言只能得到其当前的被使用占比情况(Ratings)。
TOP1~20编程语言的排名情况汇总如下图所示。
TOP21~50编程语言的排名情况汇总如下图所示。
TOP10编程语言从2002年到2024年的被使用占比情况曲线图如下图所示,分别为Python、C、C++、Java、C#、JavaScript、SQL、Go、Visual Basic、PHP。
根据网站(TIOBE Index - TIOBE),可以了解到TIOBE Index的统计参考和计算方法,即哪些搜索引擎符合参考条件(search engines)、哪种编程语言符合统计资格(programming languages)、使用占比如何计算(ratings)这三个部分。
在search engines部分,基于7条基本原则选出了25个符合参考条件的搜索引擎(例如:谷歌Google、维基百科Wikipedia),并对不符合条件的搜索引擎给出了理由(例如:百度的来源不可解析,Baidu SOURCES_NOT_PARSABLE)。
在programming language部分,提出了3条编程语言符合统计资格的要求。第一点是该语言应在维基百科上有自己的词条,且被明确解释为是一种编程语言。第二点是该语言具备图灵完备性。第三点是该语言在 Google 上的+“<language> programming”点击量应至少达到 5000 次。
在ratings部分,提出了使用占比的计算公式,即通过计算最热门搜索引擎的点击率得出。
2:TOP50编程语言的历史
本部分将对TOP1~10编程语言的历史按照时间线进行详细阐述,而对TOP11~50编程语言的历史进行简短的总结和概括。
【TOP 1:Python】
诞生:
在1991年,Python的第一个版本(Python 0.9.0)由Guido van Rossum创建并发布。初代版本已经具备了诸多基本的特性,如模块、异常处理和函数,但语法和特性仍然相对简单。
Python 2.x:
在2000年,Python 2.0发布。该版本引入了很多新特性,如列表推导式、Unicode支持和垃圾回收机制。Python 2.x版本系列持续更新,直到2010年代末。
Python 3.x:
在2008年,Python 3.0发布。该版本与Python 2.x不兼容,以解决Python 2.x中存在的一些设计缺陷和不一致性问题。Python 3尽管在发布阶段面临了一些困难,包括现有代码的兼容性问题,但是逐渐被广泛接受且成为主流版本。
【TOP 2:C】
诞生:
在1972年至1973年期间,C语言由Dennis Ritchie在贝尔实验室开发,旨在帮助实现Unix 操作系统。C语言的设计灵感主要来自于B语言(由Ken Thompson在贝尔实验室开发)。
K&R C:
在1978年,由Brian Kernighan和Dennis Ritchie发布的《The C Programming Language》一书中描述了C语言最初的定义。
ANSI C 标准:
在1989年,美国国家标准协会(ANSI)发布了ANSI C标准(ANSI X3.159-1989),旨在统一语言规范并解决不同编译器之间的差异。这个标准对语言进行了标准化,定义了许多新的特性和标准库函数,使得C语言更加通用和可移植。
ISO C 标准:
ANSI C标准后来成为了国际标准,由国际标准化组织(ISO)批准并发布。ISO C标准与ANSI C标准几乎完全相同,只是稍作修改以符合国际标准化的需求。ISO C标准通常被称为C89或C90。
C99 和 C11:
在1999年,C99标准(ISO/IEC 9899:1999)发布。在2011年,C11标准(ISO/IEC 9899:2011)发布。上述两个标准引入了一些新特性和改进,如变长数组、复杂数支持、内联函数等。
【TOP 3:C++】
诞生:
在1979年,C++语言由Bjarne Stroustrup在贝尔实验室开发,旨在基于C语言和Simula67语言实现一种支持面向对象编程的语言。
C with Classes:
在1983年,C++第一个版本“C with Classes”发布。该版本是C语言的一个扩展,添加了类、继承、成员函数等面向对象编程的特性。
C++的正式诞生:
在1985年,Bjarne Stroustrup发表了《The C++ Programming Language》和正式版的C++语言标准,详细介绍了C++的设计和特性。C++的名称是从C with Classes演化而来,即C语言的一个增强版本。
C++98/C++03:
在1998年,C++语言标准化委员会发布了第一个正式的C++标准,即C++98或C++03。该标准定义了C++的核心特性和标准库,旨在实现不同的编译器和平台之间的代码的互通。
新标准的发布:
自C++98/C++03标准发布以来,C++语言标准经历了多次更新和修订。一些重要的标准包括C++11(于2011年发布)、C++14(于2014年发布)和 C++17(于2017年发布)。每个新标准都引入了许多新特性和改进,使得C++语言更加现代化、强大和易用。
C++20:
在2020年,最新的C++标准C++20发布。C++20引入了许多新特性,如概念、模块化、范围语法等,进一步提高了C++的表现力和可用性。
【TOP 4:Java】
诞生:
在1991年至1995年期间,Java由James Gosling、Mike Sheridan和Patrick Naughton等人在 Sun Microsystems 公司(后被Oracle收购)开发。在1995年,Java首次在Sun World大会上正式发布。最初Java被称为 Oak,后来在1995年正式更名为 Java。
Java 1.0:
在1996年,Java 1.0版本发布(第一个正式版本)。Java 1.0包含了许多基本特性,如面向对象编程、图形用户界面开发、网络编程等。
Java 2平台:
在1998年,Java 2平台发布。Java 2平台引入了许多重要的新特性,如Java虚拟机(JVM)的改进、Swing GUI工具包、集合框架等。Java 2平台的发布标志着Java开始成为企业级开发的主流选择。
开源化:
在2006年,Sun Microsystems 宣布将Java技术开源,并将其代码发布在GNU通用公共许可证(GPL)下。
Oracle收购Sun Microsystems:
在2010年,Oracle收购了Sun Microsystems,继续推动Java技术的发展,并发布了一系列更新和改进,如Java SE 7、Java SE 8等。
Java 11 LTS和模块化:
在2018年,Java 11发布,成为了新的长期支持(LTS)版本。Java 11引入了一些重要的新特性,如本地变量类型推断、HTTP客户端API等。
Java 17 LTS和未来展望:
在2021年,Java 17发布,是最新的 LTS 版本。
【TOP 5:C#】
诞生:
在1999年,C#由微软Anders Hejlsberg领导的团队开发。目标是创建一种现代化的编程语言,以替代C++和Visual Basic,更好地与微软的.NET平台集成。
发布:
在2020年,C#正式发布,在借鉴C++、Java 和 Delphi 等语言特性的同时,引入了一些新的概念和语法。
标准化:
在2003年,国际标准化组织ISO发布了C#的标准(ISO/IEC 23270)。
版本更新:
自C#第一版发布以来,微软不断推出新的版本和更新,引入了许多新特性和改进。一些重要的版本包括C# 2.0(2005年)、C# 3.0(2007年)、C# 4.0(2010年)、C# 5.0(2012年)、C# 6.0(2015年)、C# 7.0(2017年)、C# 8.0(2019年)和 C# 9.0(2020年)。
【TOP 6:JavaScript】
诞生:
在1995年,JavaScript由Brendan Eich开发,最初被命名为LiveScript,首次出现在Netscape Navigator 2.0浏览器中。
标准化ECMAScript:
在1997年,第一版ECMAScript发布,定义了JavaScript的基本语法和规范结构。
Ajax技术:
在2005年,Ajax技术出现,使Web应用能够实现异步数据交换,极大地改善了用户体验。
Node.js:
在2009年,Ryan Dahl发布了Node.js。Node.js是基于Chrome V8引擎的JavaScript 运行时环境,使JavaScript能够在服务器端运行。
前端框架:
在2010年代,jQuery、React、Angular、Vue.js等JavaScript框架和库相继涌现,推动了前端开发的现代化。
【TOP 7:SQL】
SQL理论基础:
在1970年,IBM的Ted Codd发表了一篇论文,提出了关系数据库管理系统(RDBMS)的理论基础,其中包括关系模型和关系代数。
早期实现:
在1974年,IBM开发了System R。System R是第一个基于关系模型的数据库管理系统原型。
商用数据库系统:
在1979年,IBM发布了SQL/DS。SQL/DS是第一个商用的关系数据库管理系统。
SQL标准:
在1986年,ANSI(美国国家标准协会)发布 SQL的第一个标准,称为SQL-86。这个标准定义了SQL的基本语法和操作。
在1989年,ANSI发布了SQL的第二个标准,称为SQL-89或SQL-89。这个标准对SQL进行了一些修改和扩展,引入了一些新的特性。
在1992年,ANSI发布了SQL的第三个标准,称为SQL-92。这个标准是迄今为止SQL的最重要和最广泛采用的标准之一,定义SQL的基本结构、数据类型、操作符等。
在1999年,ANSI和ISO(国际标准化组织)发布了SQL的第四个标准,称为SQL:1999或SQL-99。这个标准引入了许多新特性,如窗口函数、递归查询、XML支持等。
在2003年,ANSI和ISO发布了SQL的第五个标准,称为SQL:2003或SQL-2003。这个标准进一步扩展了SQL的功能和特性,使得 SQL 更加强大和灵活。
在2011年:ANSI和ISO发布了SQL的第六个标准,称为SQL:2011或SQL-2011。这个标准继续改进和扩展了SQL的功能,加强了对XML和JSON数据的支持。
【TOP 8:Go】
诞生:
在2007年,Go语言由谷歌的Robert Griesemer、Rob Pike和Ken Thompson共同设计。在2009年,Go语言的首个稳定版本Go 1发布。
版本迭代:
在2012年,Go 1.0发布。这个版本确定了Go语言的稳定特性和规范。
在2015年, Go 1.5发布。这个版本引入了重要的编译器和运行时性能改进,对Go语言标准库进行重大更新。
在2016年,Go 1.7发布。这个版本包括对并发模型的改进,以及对编译器和标准库的性能优化。
在2018年,Go 1.10发布。这个版本增加了对WebAssembly的支持,以及一些语言和标准库的改进。
在2020年,Go 1.14发布。这个版本包括对模块、错误处理和性能的改进,以及对标准库的更新。
在2021年,Go 1.17发布。这个版本包括对模块、垃圾回收和调试器的改进,以及对标准库的更新。
【TOP 9:Visual Basic】
诞生:
在1991年,Microsoft发布了第一个版本的Visual Basic,即Visual Basic 1.0。VB是一种基于基本语言的可视化编程环境,使用户可以使用图形界面轻松地创建Windows应用程序。
版本迭代:
在1992年,Visual Basic 2.0发布,引入了一些新特性和改进,如支持32位Windows操作系统和OLE(Object Linking and Embedding)对象。
在1993年,Visual Basic 3.0发布,进一步扩展了VB的功能,包括支持数据库编程(如Microsoft Access)和新增的数据访问对象(DAO)。
在1995年,Visual Basic 4.0发布,增加了对32位应用程序的支持,并引入了新的用户界面控件和数据库访问技术。
在1997年,Visual Basic 5.0发布,引入了重要的改进,包括新增的Windows控件、集成的调试器和改进的IDE(集成开发环境)。
在1998年,Visual Basic 6.0发布,引入了许多新功能和技术,包括ActiveX控件、数据报表和Web编程支持。VB6.0成为了广泛采用的版本,并在许多企业和个人软件项目中被广泛使用。
传统版本的结束:
在2001年,Microsoft宣布停止对Visual Basic 6.0的主流支持,转而推广.NET平台。这标志着VB的传统版本的终结,以后的开发重点为VB.NET。
在2002年,Visual Basic .NET发布。它基于.NET框架,具有更强大的功能和更好的性能,但与传统的VB语法有很大的不同。
在2008年,Visual Basic 2008发布,提供了LINQ(Language Integrated Query)和WPF(Windows Presentation Foundation)支持。
在2010年,Visual Basic 2010发布,继续改进和增强了VB.NET的功能,包括对Office应用程序的集成支持和增强的并行编程功能。
在2015年,Visual Basic 2015发布,引入了对Windows 10和Universal Windows Platform(UWP)应用程序的支持。
【TOP 10:PHP】
诞生:
在1994年,PHP的前身是由Rasmus Lerdorf开发的一组个人工具,用于管理个人网页上的动态内容。这些工具最初被称为"Personal Home Page Tools",主要用于处理表单和跟踪网页访问。
在1995年,Lerdorf将这些工具整合成了一个单一的解决方案,并称之为"PHP/FI"(Personal Home Page/Forms Interpreter)。主要功能是解析表单数据、生成动态网页内容以及与数据库交互。
版本迭代:
在1997年,Andi Gutmans和Zeev Suraski开发了一种名为Zend Engine的新的PHP解释引擎,即PHP 3。
在1998年,PHP 4发布,引入了许多重要的新特性,包括面向对象编程(OOP)支持、更好的数据库连接、增强的性能和更好的错误处理机制。
在2004年,PHP 5发布,引入全面的OOP支持(如命名空间、抽象类、接口等)、更强大的异常处理、改进的性能和稳定性。
在2008年,PHP 5.3发布,引入命名空间、Late Static Binding、匿名函数和闭包等。
在2012年,PHP 5.4发布,引入了一些新的语言特性和改进,如短数组语法、Traits、更快的性能等。
在2015年,PHP 7发布,带来了巨大的性能提升和内存消耗减少。
在2020年,PHP 8发布,引入了Just-In-Time(JIT)编译器、更强大的类型系统、更好的错误处理机制等。
【TOP 11:Fortran】
Fortran由IBM的John Backus和他的团队于1954年开发,旨在简化科学和工程计算的编程过程。Fortran经历了多个版本的演进,包括Fortran IV、Fortran 66、Fortran 77、Fortran 90等,不断引入新特性和改进,如递归、模块化、动态内存分配等。Fortran语言在科学计算领域保持着重要地位,为数值分析、高性能计算和大规模数据处理提供了强大的工具和支持。
【TOP 12:Delphi/Object Pascal】
Delphi/Object Pascal是由Anders Hejlsberg等人在Borland公司(后来被Embarcadero收购)于1995年推出的一种面向对象的编程语言和集成开发环境(IDE)。它基于Pascal语言,并在Borland Pascal的基础上引入了面向对象编程特性,如类和对象,使得开发者能够更轻松地构建Windows应用程序。Delphi的出现推动了可视化编程的发展,成为Windows平台上最流行的开发工具之一,为开发者提供了快速、灵活和高效的开发体验,同时也为后来的RAD(Rapid Application Development)工具奠定了基础。
【TOP 13:MATLAB】
MATLAB是由美国MathWorks公司1984年推出,最初是为了满足科学和工程领域的数值计算需求而设计。它基于矩阵和数组操作,结合了高级编程语言和交互式环境的特点,为开发者提供了丰富的数值分析、数据可视化和编程工具。随着时间的推移,MATLAB不断发展壮大,逐渐成为科学和工程领域中最受欢迎的计算工具之一,被广泛应用于信号处理、图像处理、控制系统设计、机器学习等各种领域。
【TOP 14:Assembly language】
Assembly language(汇编语言)是一种低级编程语言,直接映射到特定计算机体系结构的机器指令。它的历史可以追溯到计算机诞生之初,随着计算机的发展和进步,汇编语言也逐渐演变和完善。最初,程序员直接使用机器语言编写程序,但随着汇编语言的出现,编程变得更加可读和可维护。随着高级语言的普及,汇编语言的使用逐渐减少,但在对性能和资源要求极高的应用场景中仍然发挥着重要作用,如嵌入式系统开发、操作系统内核编程和设备驱动程序开发等领域。
【TOP 15:Scratch】
Scratch是一种由麻省理工学院(MIT)媒体实验室开发的视觉化编程语言,旨在帮助初学者学习编程概念和算法。于2002年首次发布,并在2007年发布了第一个公开版本。Scratch通过图形化编程接口,使得用户可以通过拖拽和连接代码块的方式创建动画、游戏和交互式故事等项目,成为教育领域中广受欢迎的工具之一,用于培养计算思维和创造力。
【TOP 16:Swift】
Swift是由苹果公司于2014年推出的一种开发iOS、macOS、watchOS和tvOS应用程序的编程语言,旨在提供更安全、更快速、更易于理解的编程体验。它由Chris Lattner等人设计,取代了Objective-C成为苹果平台的主要编程语言。Swift的开发目标是融合现代编程语言的最佳特性,包括类型推断、闭包、模式匹配等,并提供易于阅读和编写的语法,以提高开发效率和代码质量。自推出以来,Swift已经成为苹果开发者社区中广泛使用的首选语言之一,持续得到改进和演进,成为构建高性能、可靠和现代化的应用程序的首选工具。
【TOP 17:Kotlin】
Kotlin是由JetBrains公司于2011年推出的一种静态类型编程语言,旨在解决Java语言的一些局限性并提高开发效率。经过多年的开发和演进,Kotlin于2016年正式发布1.0版本,并在2017年被Google官方认可为Android开发的官方编程语言。Kotlin具有现代化的语法、完备的标准库、与Java的无缝互操作性和丰富的工具支持,成为开发Android应用程序和服务器端应用程序的流行选择之一,被广泛应用于各种领域的软件开发中。
【TOP 18:Rust】
Rust是由Mozilla Research于2010年启动的一项开源项目,旨在打造一种安全、并发、实用的系统编程语言。经过多年的开发和改进,Rust于2015年发布1.0版本,并迅速获得开发者社区的关注和认可。Rust的设计目标是提供内存安全、数据竞争自由和并发性,同时保持性能和可靠性。它具有强大的类型系统、所有权模型和生命周期管理,成为构建高性能、安全可靠的系统级软件的理想选择,被广泛应用于网络服务、操作系统、嵌入式系统等领域的开发中。
【TOP 19:COBOL】
COBOL(Common Business-Oriented Language)是一种面向商业应用的高级编程语言,于1959年由Grace Hopper等人开发。它旨在简化商业数据处理和编程任务,成为首个广泛用于商业和政府部门的主要计算机编程语言。COBOL在1960年代至1980年代期间达到了巅峰,成为主流编程语言之一,许多企业和组织都依赖于COBOL编写的系统来管理业务和数据。尽管后来出现了更先进的编程语言,但COBOL仍然在一些遗留系统和金融领域得到广泛应用,其影响力和重要性至今仍在。
【TOP 20:Ruby】
Ruby是由日本程序员松本行弘(Yukihiro Matsumoto)于1995年创建的一种面向对象的动态编程语言,旨在提高开发效率和乐趣。发布后,Ruby迅速在日本获得了广泛的认可,并在全球范围内受到开发者的欢迎。Ruby的设计理念是“开发人员的幸福”,注重简洁性、灵活性和可读性,以及强大的元编程能力。它的独特特性,如代码块、混入(Mixin)、符号(Symbol)等,使其成为开发Web应用、自动化任务和构建工具的理想选择,被广泛应用于各种领域的软件开发中。
【TOP 21:R】
R是一种开源的统计计算和数据分析编程语言,由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman于1993年开发。它是S编程语言的一种实现,并在功能和语法上进行了扩展和改进。R最初是为了满足统计分析和数据可视化的需求而设计,随后逐渐发展成为一个全面的数据科学工具,受到学术界和工业界的广泛应用。R的生态系统包括丰富的扩展包和库,使其成为进行数据探索、建模、可视化和报告的首选工具。
【TOP 22:SAS】
SAS(Statistical Analysis System)是一种用于数据分析和统计建模的软件套件,由北卡罗来纳州立大学的Jim Goodnight和其他人于1976年创建。最初是为了处理农业研究数据而设计,SAS逐渐发展成为一种强大的统计分析工具,在医疗、金融、政府等领域得到广泛应用。SAS编程语言结合了数据处理、统计分析和报告生成的功能,具有丰富的数据处理和统计函数库,以及强大的数据管理和可视化功能,成为企业级数据分析的首选工具之一。
【TOP 23:Classic Visual Basic】
Classic Visual Basic是由微软公司于1991年推出的一种事件驱动的编程语言和集成开发环境,旨在简化Windows应用程序的开发。它基于基本语言,提供了可视化的拖放式界面设计工具,并引入了许多易于使用的控件和组件,如窗体、按钮、文本框等,使得开发者可以快速地构建用户友好的桌面应用程序。Classic Visual Basic的流行使得许多开发者和组织在Windows平台上使用它开发各种类型的应用程序,尤其在企业和个人软件开发领域有着广泛的应用。虽然Classic Visual Basic在2008年停止了主流支持,但其对Windows应用程序开发的影响和贡献仍然被广泛认可和回顾。
【TOP 24:Prolog】
Prolog是一种逻辑编程语言,由Alain Colmerauer和Philippe Roussel等人于1972年在法国雷恩大学开发。它基于一种称为“谓词逻辑”的数理逻辑体系,允许开发者通过逻辑规则描述问题和求解方案。Prolog的发展推动了逻辑编程范式的发展,并在人工智能领域得到广泛应用,尤其是在专家系统和自然语言处理方面。尽管Prolog在一些领域有着重要的影响和贡献,但由于其特殊的编程范式和复杂的语法,它并不像一些主流编程语言那样被广泛采用。
【TOP 25:Ada】
Ada是一种高级编程语言,由Jean Ichbiah领导的团队在20世纪70年代末至80年代初在CII Honeywell Bull公司开发。它是由美国国防部委托开发的,旨在解决国防相关软件开发的标准化语言需求。以19世纪数学家、被认为是第一位计算机程序员的Ada Lovelace命名,Ada的设计侧重于可靠性、安全性和可维护性。它于1983年成为国际标准(ISO/IEC 8652:1987),此后多次进行了修订。由于其强大的类型系统、并发特性和对软件工程原则的支持,Ada被广泛应用于安全关键系统,包括航空航天和国防等领域。
【TOP 26:Perl】
Perl是由Larry Wall于1987年创建的一种通用脚本编程语言,旨在提供强大的文本处理能力和系统管理功能。它结合了C语言、sed、awk等多种语言的特性,并在Unix系统上得到了广泛的应用。Perl的灵活性和强大的正则表达式支持使其成为Web开发、系统管理和数据处理等领域的首选语言之一。
【TOP 27:(Visual)FoxPro】
(Visual)FoxPro是一种关系型数据库管理系统(DBMS)和编程语言,由美国福克斯软件公司(Fox Software)开发。最初于1984年发布,后被微软收购并成为其产品线的一部分。FoxPro提供了强大的数据管理和编程功能,尤其适用于快速开发数据库驱动的桌面应用程序。随着时间的推移,它逐渐融合了图形用户界面(GUI)开发工具,并更名为Visual FoxPro。尽管在2007年停止了主流支持,但它仍然被许多开发者和组织用于开发和维护基于数据库的应用程序。
【TOP 28:Dart】
Dart是由Google于2011年推出的一种开源编程语言,旨在提供一种现代化、高性能的语言来构建Web和移动应用程序。它最初被设计为改进JavaScript的替代方案,具有可选的静态类型、快速的虚拟机和即时编译器。Dart的发展得到了Google团队和开发者社区的支持,Dart也被广泛用于构建Flutter框架下的跨平台移动应用程序以及Web应用程序开发。
【TOP 29:D】
D语言是由Walter Bright于2001年创建的一种系统编程语言,旨在融合C语言的效率和C++语言的功能,提供更安全、更快速、更易于使用的编程体验。D语言在设计时考虑了现代编程语言的特性,如垃圾回收、元编程、面向对象编程和函数式编程等,使其成为构建高性能、可靠和可维护的软件系统的理想选择。
【TOP 30:F#】
F#是由微软研究院的Don Syme于2005年创建的一种函数式编程语言,它结合了函数式编程和面向对象编程的特性,旨在提供一种强大、灵活和高效的编程体验。F#最初是为.NET平台设计的,随后开源并跨平台支持,成为一种流行的多范式编程语言,被广泛应用于Web开发、数据处理、科学计算和并发编程等领域。
【TOP 31:Scala】
Scala是由Martin Odersky于2003年创建的一种多范式编程语言,结合了面向对象编程和函数式编程的特性,旨在提供一种高效、灵活和表达力强的编程体验。Scala最初是为Java虚拟机(JVM)设计的,兼容Java语言,但提供了更现代化的语法和功能。它在功能丰富、类型安全和并发支持方面表现出色,成为一种流行的编程语言,被广泛应用于Web开发、大数据处理和分布式系统等领域。
【TOP 32:Objective-C】
Objective-C是由Brad Cox在20世纪80年代初开发的一种面向对象的编程语言,最初用于NeXT计算机的开发。1996年,苹果公司收购了NeXT,并将Objective-C作为其主要开发语言之一,用于开发Mac OS X和iOS操作系统。Objective-C结合了C语言的功能和面向对象编程的特性,尤其在图形用户界面(GUI)应用程序的开发中得到广泛应用。随着时间的推移,Objective-C逐渐成为iOS和macOS平台上应用程序开发的主要语言之一,直到2014年Swift语言的推出才逐渐被取代。
【TOP 33:Lua】
Lua是由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro,PUC-Rio)的一个研究小组于1993年开发的一种轻量级脚本语言,用于嵌入式系统和游戏开发。Lua的设计目标是简单、灵活和可扩展,具有强大的表达能力和高效的执行性能。Lua已经成为游戏开发、嵌入式系统和其他领域中广泛使用的脚本语言。
【TOP 34:Julia】
Julia是由Jeff Bezanson、Stefan Karpinski、Viral B. Shah和Alan Edelman等人于2009年开始开发的一种高性能、动态类型的编程语言,旨在提供与C语言一样的性能,同时保持像Python、Matlab和R等动态语言的简洁和易用性。Julia的设计目标是成为一种适用于科学计算和数值分析的通用编程语言,具有灵活的类型系统、多重分派、即时编译和并行计算等特性。Julia在科学计算、数据科学和机器学习等领域得到广泛应用。
【TOP 35:Lisp】
Lisp是由John McCarthy于1958年创建的一种程序设计语言,旨在成为人工智能研究的工具。Lisp是最早的函数式编程语言之一,具有强大的元编程和符号处理能力。Lisp的设计理念包括简洁性、灵活性和强大的数据操作能力。
【TOP 36:Transact-SQL】
Transact-SQL(T-SQL)是一种基于SQL的编程语言,最初由Microsoft开发,并在1992年与SQL Server 4.2一起发布。T-SQL是SQL的一种扩展,旨在支持存储过程、触发器、用户定义函数和其他编程结构,使得开发者可以在数据库中进行更复杂的数据处理和逻辑控制。T-SQL在Microsoft SQL Server上得到了广泛应用,成为开发数据库应用程序和管理数据库的重要工具之一。
【TOP 37:VBScript】
VBScript(Visual Basic Scripting Edition)是由微软公司于1996年推出的一种轻量级的脚本编程语言,作为Visual Basic的衍生版本,用于Web页面和Windows环境下的脚本编程。VBScript与Visual Basic具有相似的语法和特性,可以轻松地与HTML结合使用,用于网页交互和客户端脚本编程。尽管在Web开发中的重要性逐渐下降,但VBScript仍然被一些企业用于Windows环境下的系统管理和自动化任务。
【TOP 38:Haskell】
Haskell是由Philip Wadler和Simon Peyton Jones等人于1987年创建的一种纯函数式编程语言,旨在提供一种清晰、高度抽象和类型安全的编程体验。它基于数学上的λ演算,具有强大的类型系统和高阶函数特性,使得开发者可以通过声明式编程风格构建复杂的程序。Haskell成为研究函数式编程和编程语言理论的重要工具,在金融领域和数据分析等领域得到了实际应用。
【TOP 39:TypeScript】
TypeScript是由微软的Anders Hejlsberg于2012年推出的一种开源编程语言,是JavaScript的超集,增加了静态类型检查和其他高级特性,旨在提高JavaScript代码的可靠性和可维护性。TypeScript的设计目标是使开发者能够更轻松地构建大型应用程序,并在编译时发现和解决潜在的错误。同时,自发布以来,TypeScript得到广泛应用,成为许多现代Web应用和框架的首选语言。
【TOP 40:Logo】
Logo是由Seymour Papert于1967年创建的一种编程语言,旨在帮助学生学习编程和解决问题。它最初设计用于Turtle机器人的控制,允许用户通过简单的指令来控制机器人进行绘图和移动。Logo的设计强调了可视化编程和探索性学习的概念,成为教育领域中广泛使用的工具,帮助学生开发逻辑思维和计算机编程技能。
【TOP 41:Bash】
Bash(Bourne Again SHell)是由Brian Fox于1989年开发的一种Unix shell脚本语言,是Bourne shell的扩展版本。作为Unix和Linux系统的默认命令解释器,Bash具有强大的脚本编程能力,支持变量、循环、条件语句等功能,用于自动化任务、系统管理和软件开发等方面。Bash的设计受到了Bourne shell和Korn shell的影响,成为了Unix和Linux系统中最流行的命令行工具之一。
【TOP 42:Scheme】
Scheme是由Gerald Jay Sussman和Guy L. Steele Jr.于1975年开发的一种函数式编程语言,旨在成为一种简洁、清晰和灵活的编程语言。作为Lisp语言的一种变体,Scheme强调了简洁性和功能的最小化,同时提供了强大的抽象能力和元编程特性。Scheme在学术界和工业界都有广泛的应用,成为了函数式编程和编程语言理论的重要研究对象,并在教育领域中被用于教授编程原理和程序设计概念。
【TOP 43:Solidity】
Solidity是由Gavin Wood于2014年创建的一种智能合约编程语言,用于在以太坊区块链上编写智能合约。Solidity结合了类似于JavaScript和C++的语法,并提供了丰富的库和工具,使得开发者可以轻松地构建安全、可靠的智能合约。Solidity的发展推动了以太坊生态系统的壮大,成为了最流行的智能合约编程语言之一,在区块链开发和智能合约应用中得到了广泛应用。
【TOP 44:ABAP】
ABAP(Advanced Business Application Programming)是由德国软件公司SAP于1980年开发的一种专用编程语言,用于定制和开发SAP系统中的业务应用程序。最初是为了满足SAP系统的特定需求而设计,ABAP具有强大的数据处理和业务逻辑处理能力,支持事务处理、报表生成和数据交互等功能,成为企业资源计划(ERP)系统中广泛使用的编程语言之一。随着SAP系统的发展和普及,ABAP也不断发展壮大,成为了SAP生态系统中不可或缺的一部分。
【TOP 45:ML】
ML(Meta Language)是一种函数式编程语言家族,最初由Robin Milner在爱丁堡大学开发,旨在支持元编程和程序推导。最早的版本于1973年发布,后来发展出了多个变体,如Standard ML(SML)和OCaml等。ML语言具有强大的类型系统和模式匹配能力,适用于函数式编程、程序验证和编译器开发等领域。ML语言对现代编程语言的设计产生了深远影响,成为函数式编程和类型推断的重要代表之一。
【TOP 46:X++】
X++是由丹麦Axapta公司(后被微软收购)于1998年开发的一种面向对象的编程语言,用于在Microsoft Dynamics AX(前称为Axapta)中开发企业资源计划(ERP)应用程序。X++被设计为与Microsoft Dynamics AX平台紧密集成,具有丰富的数据处理和业务逻辑支持,以满足企业的各种需求。作为一种专用语言,X++主要用于开发和定制Microsoft Dynamics AX系统,为企业提供定制化的业务解决方案。
【TOP 47:PL/SQL】
PL/SQL(Procedural Language/Structured Query Language)是由Oracle Corporation于1980年代末推出的一种过程化编程语言,用于编写存储过程、触发器和函数等数据库对象。它融合了SQL的数据操作能力和结构化编程语言的特性,使得开发者可以在数据库中编写复杂的业务逻辑和数据处理程序。PL/SQL在Oracle数据库中得到广泛应用,成为开发Oracle数据库应用程序的重要工具,为数据库管理和应用开发提供了强大的支持。
【TOP 48:GAMS】
GAMS(General Algebraic Modeling System)是由Brookhaven National Laboratory的代表Robert Fourer和David Gay于1987年创建的一种高级建模语言,旨在解决复杂的数学规划问题。GAMS提供了一种方便的方式来描述优化问题,并提供了多种求解器以解决这些问题。GAMS在工业界和学术界得到了广泛应用,成为了处理优化问题的重要工具之一,尤其在供应链管理、能源规划和经济学建模等领域发挥了重要作用。
【TOP 49:PowerShell】
PowerShell是由微软于2006年推出的一种命令行脚本和自动化语言,旨在提供更强大、更灵活的命令行工具和脚本编程环境。PowerShell基于.NET框架,具有强大的对象处理能力和丰富的系统管理功能,被广泛应用于Windows系统管理、自动化任务和软件部署等领域。PowerShell的推出标志着微软在Windows平台上迈向更现代、更强大的命令行工具和脚本编程环境的重要一步。
【TOP 50:RPG】
RPG(Report Program Generator)是由IBM于1960年代开发的一种编程语言,最初用于处理商业数据和生成报表。随着时间的推移,RPG经历了多次改进和扩展,成为了IBM大型机(如System/360和System/370)上的主要编程语言之一。RPG的设计目标是简化商业数据处理和报表生成的过程,具有简洁的语法和丰富的数据处理功能,使其成为了大型机系统中广泛应用的编程语言。
3:TOP50编程语言的特点分析
本部分内容主要根据维基百科(Wikipedia)的描述进行相应编程语言的特点总结和提取,最终得到的特点(Characteristics)结果如下表所示。
TOP rank | Programming language | Characteristics |
1 | Python |
|
2 | C |
|
3 | C++ |
|
4 | Java |
|
5 | C# |
|
6 | JavaScript |
|
7 | SQL |
|
8 | Go |
|
9 | Visual Basic |
|
10 | PHP |
|
11 | Fortran |
|
12 | Delphi/Object Pascal |
|
13 | MATLAB |
|
14 | Assembly language |
|
15 | Scratch |
|
16 | Swift |
|
17 | Kotlin |
|
18 | Rust |
|
19 | COBOL |
|
20 | Ruby |
|
21 | R |
|
22 | SAS |
|
23 | Classic Visual Basic |
|
24 | Prolog |
|
25 | Ada |
|
26 | Perl |
|
27 | (Visual) FoxPro |
|
28 | Dart |
|
29 | D |
|
30 | F# |
|
31 | Scala |
|
32 | Objective-C |
|
33 | Lua |
|
34 | Julia |
|
35 | Lisp |
|
36 | Transact-SQL |
|
37 | VBScript |
|
38 | Haskell |
|
39 | TypeScript |
|
40 | Logo |
|
41 | Bash |
|
42 | Scheme |
|
43 | Solidity |
|
44 | ABAP |
|
45 | ML |
|
46 | X++ |
|
47 | PL/SQL |
|
48 | GAMS |
|
49 | PowerShell |
|
50 | RPG |
|
注:
(1)鸭子类型(duck typing)是程序设计中动态类型的一种风格。一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由“当前方法和属性的集合”决定。即,在鸭子类型中,关注点在于对象的行为以及对象能做什么,而不是关注对象所属的类型。
(2)鸭子测试:当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
4:TOP50编程语言的归类尝试
方法1:范式归类
根据论文《Ranking programming languages by energy efficiency》中的表2(如上图所示)和维基百科中对比编程语言的总体介绍(如下图所示),可以通过范式(Paradigm)将编程语言分类为函数式语言(functional)、命令式语言(imperative)、面向对象式语言(object-oriented)、脚本式语言(scripting)。
其中,某些语言可以划分至多个类别。例如:C++语言同时属于命令式语言和面向对象式语言,Rust同时属于函数式语言和命令式语言。
将TOP50编程语言按照该方法进行分类所得到的结果,如下表所示。
编号 | 范式 | 编程语言 |
1 | 函数式语言 | HaskellScala、F#、Lisp、Scheme、Perl、Ruby、Rust等 |
2 | 命令式语言 | C、Ada、C++、F#、Fortran、Go、Rust、COBOL、Pascal、Assembly language等 |
3 | 面向对象式语言 | Java、C++、Python、C#、Ruby、Swift、Objective-C、Kotlin、PHP、Visual Basic、Ada等 |
4 | 脚本式语言 | JavaScript、Dart、Lua、Perl、PHP、Python、Ruby、Bash、PowerShell等 |
方法2:功能归类
根据编程语言的主要用途和运行时环境,可将TOP50的编程语言进行如下归类。
编号 | 类别 | 编程语言涵盖范围 |
1 | 客户端(前端)开发 | JavaScript TypeScript |
2 | 服务器端(后端)开发 | Python C# Java PHP Ruby Go Perl Rust Scala Dart Lua PowerShell Bash |
3 | 数据库查询 | SQL Transact-SQL PL/SQL |
4 | 嵌入式系统 | C C++ Assembly language Ada |
5 | 科学计算与分析 | MATLAB R Julia Fortran SAS |
6 | 移动开发 | Swift Kotlin |
7 | 多用途(通用) | Visual Basic Delphi/Object Pascal COBOL Prolog F# Lisp Haskell Logo Scheme ML ABAP X++ GAMS RPG |
8 | 特定领域 | Scratch (教育用途) Solidity (区块链开发) (Visual) FoxPro (数据库管理系统) Classic Visual Basic VBScript (脚本语言) D (系统编程语言) |
方法3:功耗、时间、存储之间的相关性
根据论文《Ranking programming languages by energy efficiency》,作者将27种主流的编程语言基于功耗、时间、存储进行了排名和分析。尤其在表5中,作者通过三者之间的皮尔逊系数,提出了关联性的等级,具体内容如下图所示。
通过功耗、时间、存储之间的关系,可以获得某编程语言在使用过程中的效率。因此,可以针对相同复杂度问题的运行效率,对编程语言进行3*3*3=27种分类(例如:低功耗、短时间、低存储)。
同时,作者还提出了Rosetta Code global ranking方法对编程语言进行排名。
其他方法:
维基百科在右侧导航栏还列举了其他对于编程语言的比较方法,可能对编程语言的分类有一些参考价值。24种其他比较方法如下表所示。
编号 | 比较方法 | 解释 |
1 | Assignment | 【赋值语句设置】 按照赋值方法可分为single、augmented、chained、parallel |
2 | Basic syntax | 【基本语法】 通过语句(statements)和注释(comments)的规则进行分类,语句按照分隔终止符,注释按照inline、block、unique |
3 | Basic instructions | 【基本操作】 按照数据类型、表达式、语句和声明语法、操作系统接口等方面分类 |
4 | Comments | 【注释】 |
5 | Control flow | 【控制流】 按照循环的控制方式分为Foreach loops、While loops、For loops、Do-while |
6 | Exception handling | 【异常处理】 |
7 | Enumerated types | 【枚举类型】 |
8 | Algebraic data types | 【代数数据类型】 |
9 | Generators | 【生成器/迭代器】 |
10 | Anonymous functions | 【匿名函数】 按照是否支持匿名函数分为fully-support、half-support、none-support |
11 | Conditional expressions | 【条件运算符】 |
12 | Functional instructions | 【函数指令】 |
13 | Arrays | 【数组】 按照维度(array dimensions)、索引(Indexing)、范围(Slicing)进行分类,同时可按照阵列系统分类(包括default base index、specifiable index type、specifiable base index、bound check、multidimensional、dynamically-sized、vectorized operations) |
14 | Associative arrays | 【关联数组】 |
15 | Scope | 【作用域】 按照词组作用域(lexical scope)、动态作用域(dynamic scope)进行分类 |
16 | String operations | 【字符串操作】 按照字符串数据结构或文本字符串处理功能进行分类 |
17 | String functions | 【字符串函数】 按照操作字符串或查询字符串进行分类 |
18 | High-order functions | 【高阶函数】 按照函数编程分为filter、fold、map |
19 | Type systems | 【类型系统】 按照类型检查功能分为名义类型(nominal)、结构类型(structural) |
20 | List comprehension | 【列表理解】 |
21 | Object-oriented programming | 【面向对象编程语言】 |
22 | Object-oriented constructors | 【面向对象的构造函数】 |
23 | Operators | 【运算符】 按照语法(syntax)和语义(semantics)进行分类 |
24 | Evaluation strategy | 【评价策略】 按照评估方法分为Lazy evaluation、Partial evaluation、Remote evaluation、Short-circuit evaluation |
5:TOP50编程语言的关联与异同分析
在维基百科中,大部分编程语言具备编程范式、类型系统、操作系统等方面的介绍,因此本节内容主要围绕上述方向进行关联性和异同性的分析。
【1】编程范式
- 面向对象编程(OOP):某些语言支持类和对象的概念,强调数据和方法的封装、继承和多态。例如Java、C#、Python、Ruby等。
- 过程式/命令式编程:某些语言更侧重于程序的命令流,执行一系列操作或计算。例如C、Fortran和COBOL等。
- 函数式编程:某些语言强调无状态和不可变数据,使用函数作为语法基础进行编程。例如Haskell、Scala、F#等。
- 逻辑编程:某些语言通过事实和规则来表达逻辑关系和解决问题。例如Prolog等。
【2】应用领域
- Web开发:某些语言在Web开发领域广泛使用。例如JavaScript、PHP、Ruby(基于Rails框架)、Python(基于Django、Flask依赖包)等。
- 系统/底层开发:某些语言具备良好的性能优势和底层操作能力,常用于系统软件、游戏引擎、嵌入式系统等领域。例如C、C++、Rust等。
- 移动应用开发:例如Swift用于iOS应用开发,Kotlin和Java用于Android应用开发,Dart通过Flutter框架用于跨平台开发。
- 数据科学和机器学习:某些语言提供了丰富的库和框架,擅长数据分析、科学计算和机器学习。例如Python、R、Julia等。
【3】类型系统
- 静态类型:某些语言在编译时进行类型检查,提高了运行时性能和安全性。例如C、C++、Java、Swift等。
- 动态类型:某些语言在运行时进行类型检查,增加了编程的灵活性。例如Python、Ruby、JavaScript等。
【4】执行方式
- 编译语言:某些语言需要先编译成机器码或字节码,然后执行,具有较高的执行效率。例如C、C++、Rust等。
- 解释语言:某些语言在执行时直接由解释器逐行或逐块执行代码,便于后续的调试和快速开发。例如Python、JavaScript等。
【5】互操作性和替代关系
许多现代语言(如Kotlin、Swift和TypeScript)设计用于解决旧有语言(如Java、Objective-C和JavaScript)的某些局限性,同时保持与现有代码库的良好互操作性。
一些语言专门设计用于特定领域(如SQL用于数据库操作,Matlab用于数值计算),在其他领域可能存在不适用的情况。但是也有例外,例如在论文《Julia language in machine learning: Algorithms, applications, and open issues》中,Julia编程语言可以在机器学习中进行部署,在效率和简洁之间的平衡关系做的更好。
三:参考文献
[1] 维基百科:https://www.wikipedia.org/
[2] TIOBE:TIOBE Index - TIOBE
[3] Pereira R, Couto M, Ribeiro F, et al. Ranking programming languages by energy efficiency[J]. Science of Computer Programming, 2021, 205: 102609.
[4] Comparison of programming languages(编程语言对比):
https://en.wikipedia.org/wiki/Comparison_of_programming_languages
[5] Comparative Studies of Six Programming Languages(六种编程语言的对比性研究):
https://www.researchgate.net/publication/274572185_Comparative_Studies_of_Six_Programming_Languages
[6] 鸭子类型:
https://zh.wikipedia.org/wiki/%E9%B8%AD%E5%AD%90%E7%B1%BB%E5%9E%8B
[7] Gao K, Mei G, Piccialli F, et al. Julia language in machine learning: Algorithms, applications, and open issues[J]. Computer Science Review, 2020, 37: 100254.