“流水的编程语言,铁打的 Java、C 和 C++,”曾经何时,IT 界一直流传着这样一句话。不过,自从星星之火般的 Python 崛起之后,位于铁三角最薄弱环节的 C++ 开始逐渐被 Python 赶超。
而今在经过了四个月的角逐之后,C++ 终得以回归第三的宝座,不过 Python 表示并不认输!
作者 | 屠敏
出品 | CSDN(ID:CSDNNews)
日前,TIOBE 编程语言社区最新发布了 2019 年 4 月排行榜,然在此之际,不少开发者表示对其排行榜的统计方式表示不解,根据 TIOBE 官方解释,月更的 TIOBE 排行榜指数基于全球技术工程师、课程和第三方供应商的数量,其中包括了流行的搜索引擎以及技术社区,如 Google、百度、维基百科、CSDN、必应、Hao 123 等等。具体的计算方式详见:https://www.tiobe.com/tiobe-index/programming-languages-definition/。
不过在此值得注意的是,该排行榜并不意味着语言的好坏,仅是为开发者提供当月编程语言流行趋势的一个参考,以此帮助大家检索自身是否需要进行技能升级或扩展。
接下来,我们将共同探讨本月的主流编程语言变化。
Python 大涨,但 C++ 势头更猛并重回第三宝座
和上个月榜单相比,本月 Top 10 中最大的变化是,C++ 历经四个月之后再次重新回到了第三名,而 Python 位置顺延到了第四。不过,这并不意味着 Python 处于衰退之中,相反,Python 几乎每个月都在创下历史新高。
如今 Python 的名次下降侧面衬托出 C++ 当前的流行度以及受欢迎度。而深究其原因,想必与即将到来的 C++ 20 不无关系。此前,C++ 标准委员会 2019 春季会议于夏威夷已拉下帷幕,按照 C++ 20 的发布计划,彼时的会议正式为了冻结 C++ 20 的特性而举办,其中可能增加的重要特性可参考下图:
而正因为 C++ 20 的一些特性披露,也为其带来了一些热议,其中,不少开发者表示,C++ 20 中的不少新特性并不能解决最关键的问题,此外,也有网友吐槽:“这下 C++ 的语法需要 2000 页的教程了吧!我记得 C++ Primer 就 1000 多页了!”
不过,根据 TIOBE 官方的评价,C++ 复苏有迹可循。在本世纪初,C++ 的市场份额虽超过了 15%,但是在开发者中却并不太受欢迎,毕竟作为彼时 C++ 新标准 C++ 0x,其复杂性让很多人望而却步。不过好在这种新的语言标准最终于 2011 年被改为 C++ 11,由此 C++ 才变得更简单、安全。如今,C++ 11、C++ 14、C++ 17 也均获得了如 GCC、Clang 和 Visual Studio 等主流编译器的支持,未来,C++ 还会更好。
PHP 持续下滑
本月 TIOBE 编程语言排行榜中,PHP 再度发生了下滑,从上个月的第八名(市场份额2.42% )下降到本月的第九名(市场份额2.239%)。整体而言,2019 年以来 PHP 的发展趋势大不如以前。这也许也与 Python 的全面应用有关,此外,彼时不少创业型团队为了减少开发成本以及加快项目上线,多数会选择性能不错的 PHP 为技术支撑,但随着项目的逐渐扩大以及模块的增多,PHP 在一定程度上就会被弃用。
其他编程语言排名
除了以上,苹果应用中主流的编程语言 Objective-C 和 Swift 均有所下降:
-
Objective-C 跌出了 Top 10,占比 1.505%;
-
Swift 下降了两个名次,占比 0.98%。
与之相反,Ruby、Visual Basic 均有所上升。
第 51-100 名如下,由于它们之间的数值差异较小,仅以文本形式列出(按字母排序):
-
4th Dimension/4D, ABC, ActionScript, Alice, Avenue, BBC BASIC, bc, Bourne shell, C shell, CL (OS/400), Clipper, CoffeeScript, Common Lisp, Crystal, Elixir, Emacs Lisp, Factor, Forth, Hack, Haxe, Icon, Inform, Io, J#, Korn shell, LiveCode, Maple, Mercury, Monkey, MQL4, MS-DOS batch, NATURAL, OpenCL, OpenEdge ABL, PL/I, PostScript, PowerShell, Pure Data, Q, Red, Ring, RPG, S, Snap!, SPARK, Tcl, Tex, Vala/Genie, VBScript, VHDL
Top 10 编程语言 TIOBE 指数走势(2002-2019)
历史排名(1998-2019)
注:以下排名位次取决于 12 个月的平均值。
编程语言“名人榜”(2003-2018)
详细榜单信息可参考 TIOBE 官网:https://www.tiobe.com/tiobe-index
如何在短时间内成为Python工程师?
【End】
热 文 推 荐
00后的AI开发者进阶之道:从入门到鏖战MIT编程大赛 | 人物志
EOS现状: 72%应用涉赌被列为高危, 说好的诗和远方, 你竟沦落成了这样?
System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"
点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。
你点的每个“在看”,我都认真当成了喜欢


Jsonix 是基于 Go + Fiber 开发的一套全新的框架,使用 dig 注入的模式进行全局数据处理, 旨在规范代码和提高项目开发效率。
该框架提供了一系列命令行工具(CLI),用于服务管理、项目初始化、代码生成以及自动化数据库迁移等任务。采用模块化设计,支持 controller、service、repository 等代码结构快速生成,并集成了丰富的功能模块, 在 controller、service、repository 使用 cli 生成的时候会自动在module文件中进行注入。
详细文档
主要功能
-
CLI 工具支持。
-
基础
web
功能支持。 -
fiber
框架支持。 -
apifox
自动上传支持。 -
swagger
生成支持。 -
gorm
数据库 ORM 支持。 -
redis
缓存支持。 -
i18n
国际化支持。 -
logger
日志支持。 -
cors
跨域支持。 -
jsonix
热重载支持。 -
dig
依赖注入支持。 -
配置文件读取支持。
-
提供多个基础配置:
CLI
bash 代码解读复制代码$ jsonix --help
Usage: jsonix server
Options:
-e, --env 设置当前服务运行环境 (dev, prod, test)
-w, --watch 启用配置文件热重载
-s, --show 查看指定端口是否被占用
-k, --kill 杀死指定端口的进程
-h, --help 查询文档
Usage: jsonix gen 注: module 的生成需要在你的app目录运行(文件结构可参考下方), 其他的生成需要在 module 目录运行
Options:
-m, --module 指定模块名称
-s, --service 生成服务代码
-c, --controller 生成控制器代码
-r, --repository 生成仓库代码
-e, --entity 生成实体代码
-o, --override 覆盖已存在的文件
-h, --help 查询文档
Usage: jsonix migrate 生成数据库自动迁移文件(注: 需在根目录执行, 当然也可通过参数自定义)
Options:
-r, --root 指定项目根目录
-d, --dest 指定自动迁移文件输出目录
-h, --help 查询文档
Usage: jsonix init 初始化项目
Options:
-h, --help 查询文档
配置文件读取
因为我是一个前端开发出身, 因此我比较喜欢前端的那种支持不同环境的配置文件和本地的配置文件做法, 因此我在golang开发的时候也做了一个合并处理。当前规范如下:
markdown代码解读复制代码├─ config │ ├─ config.yaml │ ├─ config.dev.yaml │ ├─ config.dev.local.yaml │ ├─ config.test.yaml │ ├─ config.test.local.yaml │ ├─ config.pro.yaml │ └─ config.pro.local.yaml
当然, 文件夹和文件也可以根据自己喜好自己命名, 也可以支持toml
类型文件读取, 但是目前尚未支持nocos的使用, 后期将逐步支持。
文档生成
当前还是需要使用swagger的方案去写文档注释, 不过可以通过配置选择是使用swagger
、apifox
还是openapi
项目文件结构
bash 代码解读复制代码├─ .vscode # VSCode 推荐配置
├─ .run # GoLand 运行命令
├─ apps # 应用模块
│ ├─ example # 示例模块
│ │ ├─ controller # 控制器
│ │ ├─ repository # 仓库
│ │ ├─ service # 服务
│ │ └─ entry # 入口文件
│ └─ ... # 其他模块
├─ auto_migrate # 自动迁移目录(可通过 jsonix migrate 命令生成, 无需改动)
│ └─ ... # 自动迁移文件
├─ config # 配置文件目录
│ ├─ config.yaml # 配置文件
│ ├─ config.dev.yaml # 开发环境配置
│ ├─ config.test.yaml # 测试环境配置
│ ├─ config.prod.yaml # 生产环境配置
│ ├─ config.local.yaml # 本地环境配置
│ ├─ config.dev.local.yaml # 开发本地环境配置
│ ├─ config.test.local.yaml # 测试本地环境配置
│ ├─ config.prod.local.yaml # 生产本地环境配置
│ ├─ regexes.yaml # uaparser 配置文件
│ └─ ... # 其他配置文件
├─ configs # 配置文件实例目录
│ ├─ configs.yaml # 全部配置实例
│ └─ ... # 其他配置实例文件
├─ core # 核心模块目录
├─ docs # swagger 文档目录
├─ locales # 语言包目录
├─ logs # 日志目录
├─ middleware # 中间件目录
├─ tmp # air 启动临时文件(不要改动, 不要提交)
├─ utils # 工具函数目录
├─ .air.toml # air 配置文件
├─ main.go # 主函数
├─ go.mod # Go 模块文件
└─ go.sum # Go 模块文件
评论记录:
回复评论: