著名的软件都用什么语言编写?
你是否曾经好奇,身边那些耳熟能详的软件,它们究竟是用什么语言编写的?从操作系统到浏览器、从数据库到编程工具,每一款软件背后都承载着开发者们的智慧与技术选型。那么,究竟哪些编程语言成就了这些世界级的软件呢?
在面对复杂的软件开发时,为什么不同的软件会选择不同的编程语言?这些语言的选择是如何影响软件的性能、功能和生态的?

不同软件选择不同语言的原因
-
性能需求
例如 操作系统 或 数据库,需要非常高的性能来保证系统稳定运行。因此,它们通常选择 C 语言或 C++ 来进行开发,因为这两种语言接近底层,能直接操作硬件,运行效率极高。 -
开发效率与跨平台支持
Java、Python 和 JavaScript 等语言则主要关注开发效率和跨平台支持。例如,Java 被广泛用于 企业级应用 和 Android 应用,它的 虚拟机(JVM) 提供了很好的跨平台能力。Python 以其简洁的语法和丰富的库在 数据分析、自动化脚本 等领域成为开发者的最爱。 -
生态与社区支持
JavaScript 在 前端开发 和 全栈开发 中占据主导地位,得益于其庞大的社区和丰富的开发框架(如 React、Vue)。而 Ruby 在
1、操作系统
Microsoft Windows :汇编 -> C -> C++

备注:曾经在智能手机的操作系统(Windows Mobile)考虑掺点C#写的程序,比如软键盘,结果因为写出来的程序太慢,实在无法和别的模块合并,最终又回到C++重写。
相信很多朋友都知道Windows Vista,这个系统开发早期比尔盖茨想全部用C#写,但最终因为执行慢而放弃,结果之前无数软件工程师日夜劳作成果一夜之间被宣告作废。
Linux :C

Apple MacOS : 主要为C,部分为C++。
备注:之前用的语言比较杂,最早是汇编和Pascal。

Sun Solaris :C
HP-UX :C
Symbian OS : 汇编,主要为C++(诺基亚手机)
Google Android :2008 年推出:C语言(有传言说是用Java开发的操作系统,但最近刚推出原生的C语言SDK)
RIM BlackBerry OS 4.x :黑莓 C++
2、图形界面层
Microsoft Windows UI :C++
Apple MacOS UI (Aqua) :C++
Gnome (Linux图形界面之一,大脚):C和C++, 但主要是C
KDE (Linux图形界面):C++
3、桌面搜索工具
Google Desktop Search :C++

Microsoft Windows Desktop Search :C++
Beagle (Linux/Windows/UNIX 下):C# (基于开源的 .net : Mono)
4、办公软件
Microsoft Office :在 汇编 -> C -> 稳定在C++

Sun Open Office : 部分JAVA(对外接口),主要为C++ (开源,可下载其源代码)
Corel Office/WordPerfect Office :1996年尝试过Java,次年被抛弃,重新回到C/C++
Adobe Systems Acrobat Reader/Distiller :C++
5、关系型数据库
Oracle : 汇编、C、C++、Java。主要为C++

MySQL :C++

IBM DB2 :汇编、C、C++,但主要为C

Microsoft SQL Server : 汇编 -> C->C++
IBM Informix : 汇编、C、C++,但主要为C
SAP DB/MaxDB :C++
6、Web Browsers/浏览器
Microsoft Internet Explorer :C++

Mozilla Firefox :C++

Netscape Navigator :The code of Netscape browser was written in C, and Netscape engineers, all bought to Java (see M. Cusumano book and article) redeveloped the browser using Java. It was too slow and abandoned. Mozilla, the next version, was later developed using C++.
Safari : (2003年1月发布)C++
Google Chrome : (2008的发布)C++

Sun HotJava :Java (死于1999年)
Opera :C++ (手机上占用率比较大)
Opera Mini :Opera Mini (2007) has a very funny architecture, and is indeed using both C++ and Java. The browser is split in two parts, an ultra thin (less than 100Kb) "viewer" client part and a server side responsible of rendering. The first uses Java and receives the page under the OBML format, the latter reuses classical Opera (C++) rendering engine plus Opera's Small Screen Rendering, on the server. This allows Opera to penetrate various J2ME-enabled portable devices, such as phones, while preserving excellent response time. This comes obviously with a few sacrifices, for instance on JavaScript execution.
Mosaic : 鼻祖(已死) C 语言
7、邮件客户端
Microsoft Outlook :C++

IBM Lotus Notes :Java

Foxmail : Delphi

8、软件开发集成环境/IDE
Microsoft Visual Studio :C++

Eclipse :Java (其图形界面SWT基于C/C++)

Code::Blocks :C++

易语言:C++

火山中文:C++
火山移动:C++
9、虚拟机
Microsoft .Net CLR (.NET的虚拟机):C++

Java Virtual Machine (JVM) : Java 虚拟机:C++

10、ERP软件 (企业应用)
SAP mySAP ERP :C,后主要为“ABAP/4”语言
Oracle Peoplesoft :C++ -> Java

Oracle E-Business Suite :Java
11、商业智能(Business Intelligence )
Business Objects :C++
12、图形处理
Adobe Photoshop :C++

The GIMP :C
13、搜索引擎
Google : 汇编 与 C++,但主要为C++
14、著名网站
eBay :2002年为C++,后主要迁至Java
facebook :C++ 和 PHP
This line is only about facebook, not its plugins. Plugins can be developed in many different technologies, thanks to facebook's ORB/application server, Thrift. Thrift contains a compiler coded in C++. facebook people write about Thrift: "The multi-language code generation is well suited for search because it allows for application development in an efficient server side language (C++) and allows the Facebook PHP-based web application to make calls to the search service using Thrift PHP libraries." Aside the use of C++, facebook has adopted a LAMP architecture.

阿里巴巴和淘宝:php->C++/Java(主要用)

15、游戏
汇编、C、C++
星际争霸、魔兽争霸、CS、帝国时代、跑跑卡丁车、传奇、魔兽世界.... 数不胜数了,自己数吧

都是用C++开发的,C++语言靠近系统底层,执行速度最快。比如你的两个朋友与你分别玩用VB、Java、与C++编写的“跑跑卡丁车”,你玩C++编写的游戏已经跑玩结束了,发现你的两个朋友还没开始跑呢,那是相当的卡啊。
16、编译器
Microsoft Visual C++ 编译器:C++
Microsoft Visual Basic 解释、编译器:C++
Microsoft Visual C# :编译器:C++
gcc (GNU C compiler) :C
javac (Sun Java compiler) :Java
Perl :C++
PHP :C
17、3D引擎
Microsoft DirectX :C++

OpenGL :C

OGRE 3D :C++

18、Web Servers (网页服务)
Apache :C和C++,但主要为C

Microsoft IIS :C++
Tomcat :Java

Jboss :Java

19、邮件服务
Microsoft Exchange Server :C->C++
Postfix : C
hMailServer : C++
Apache James : Java
20、CD/DVD刻录
Nero Burning ROM :C++

K3B :C++
21、媒体播放器
Nullsoft Winamp :C++

Microsoft Windows Media Player :C++
22、Peer to Peer (P2P软件)
eMule :C++
μtorrent :C++
Azureus :Java (图形界面使用基于C/C++的SWT,类Eclipse)
23、全球定位系统(GPS)
TomTom :C++

Hertz NeverLost :C++
Garmin :C++
Motorola VIAMOTO :2007年6月,停止服务,Java
24、3D引擎
Microsoft DirectX :C++(相信玩游戏的同学都知道这个,现在最高版本是DX11)
OpenGL :C
OGRE 3D :C++
25、服务器软件
Apache:C
Nginx:C

IIS:C
26、其它
OpenStack:Python

随着技术的不断发展,开发者们面对日益复杂的需求和多样化的平台,编程语言的选择不再单一。我们看到,不同的语言根据其特点被用于不同的应用领域,形成了 语言生态的多样性。例如,Python 的数据分析库、JavaScript 的前端框架、Go 语言的高并发特性,都成了各自领域的标准。
每一款著名的软件背后,都有着精心选择的编程语言。无论是为了追求性能、开发效率,还是跨平台支持,编程语言的选型都直接决定了软件的优势与不足。作为开发者,我们不仅要掌握这些技术,更要理解它们的背后逻辑,才能做出更明智的决策。
“编程语言的选择,就像是工具的选择,合适的工具能让你事半功倍,错误的选择会让你的努力付诸东流。”
作者:土豆居士
来源:一口Linux
相关文章:
著名的软件都用什么语言编写?
你是否曾经好奇,身边那些耳熟能详的软件,它们究竟是用什么语言编写的?从操作系统到浏览器、从数据库到编程工具,每一款软件背后都承载着开发者们的智慧与技术选型。那么,究竟哪些编程语言成就了这些世界级的软件呢&…...
设计模式 结构型 代理模式(Proxy Pattern)与 常见技术框架应用 解析
代理模式(Proxy Pattern)是一种常见的设计模式,在软件开发中有着广泛的应用。其核心思想是通过创建一个代理类来控制对另一个对象的访问,从而实现对目标对象功能的扩展、保护或其他附加操作。 一、核心思想 代理模式的核心思想在…...
Linux环境(CentOs7) 安装 Node环境
Linux环境(CentOs7) 安装 Node环境 使用NodeSource安装Node.js 1、清除缓存(可选但推荐) sudo yum clean all2、添加NodeSource仓库,根据你想要安装的Node.js版本,选择相应的NodeSource安装脚本。例如&am…...
Tailwind CSS 实战:现代登录注册页面开发
在前端开发中,登录注册页面是最常见的需求之一。一个设计精美、交互友好的登录注册页面不仅能提升用户体验,还能增加产品的专业度。本文将详细介绍如何使用 Tailwind CSS 开发一个现代化的登录注册页面。 设计思路 在开始编码之前,我们先明…...
Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结
注:因为本人也是第一次接入广告与支付SDK相关的操作,网上也查了很多教程,很多也都是只言片语或者缺少一些关键步骤的说明,导致本人也是花了很多时间与精力踩了很多的坑才搞定,发出来也是希望能帮助到其他人在遇到相似问…...
反向传播算法的偏置更新步骤
偏置的更新步骤 假设我们有一个三层神经网络(输入层、隐藏层和输出层),并且每层的激活函数为 sigmoid 函数。我们需要更新隐藏层和输出层的偏置。以下是详细的步骤: 1. 计算误差项(Error Term) 输出层的…...
条款47:请使用 traits classes 表现类型信息(Use traits classes for information about types)
条款47:请使用 traits classes 表现类型信息 1.1 提出问题 想一想,下面的功能如何实现?(可以查看std::advance源码) template<typename IterT, typename DistT> void advance(IterT& iter, DistT d); /…...
yolov5和yolov8的区别
1. yolov5有建议框,yolov8没有建议框 2. yolov5标签中有自信度,而yolov8没有自信度。因为自信度是建议框和真实框的交集 3. yolov5有三个损失函数,回归问题:预测框和建议框的损失(中心点宽高偏移量的损失):CIOUFocal…...
Redis 实现分布式锁
文章目录 引言一、Redis的两种原子操作1.1 Redis 的原子性1.2 单命令1.3 Lua 脚本1.4 对比单命令与 Lua 脚本 二、Redis 实现分布式锁2.1 分布式锁的概念与需求2.1.1 什么是分布式锁?2.1.2 分布式锁的常见应用场景 2.2 基于 Redis 的分布式锁实现2.2.1 锁的获取与释…...
django StreamingHttpResponse fetchEventSource实现前后端流试返回数据并接收数据的完整详细过程
django后端环境介绍: Python 3.10.14 pip install django-cors-headers4.4.0 Django5.0.6 django-cors-headers4.4.0 djangorestframework3.15.2 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 总环境如下: Package Version -…...
SpringSpringBoot常用注解总结
目录 1. SpringBootApplication 2. Spring Bean 相关 2.1. Autowired 2.2. Component,Repository,Service, Controller 2.3. RestController 2.4. Scope 2.5. Configuration 3. 处理常见的 HTTP 请求类型 3.1. GET 请求 3.2. POST 请求 3.3. PUT 请求 3.4. DELETE 请…...
24.小R的随机播放顺序<字节青训营-中等题>
1.题目 问题描述 小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌,播放后将其从歌单中移除。如果歌单中还有歌曲,则会将当前第一首歌移到最后一首。这个过程会一直重复,直到歌单中没有任何歌曲。 例如,给定歌单 [5, …...
【QT】增删改查 XML 文件的类
使用单例类模板实现的对XML文件的节点、属性、文本进行增删改查,可以直接用! 直接POST代码,比较简单好用。 针对以下格式的xml文件比较适用 每个节点的名称都不一样,节点包含了各种属性。 <?xml version="1.0" encoding="UTF-8"?> <config…...
Linux-掉电保护方案
参考链接 https://blog.csdn.net/pwl999/article/details/109411919硬件设计 设备树 驱动程序 #include <linux/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/gpio.h>int irq;//中断服务函数 irqreturn_t tes…...
php获取字符串中的汉字
在PHP中,可以使用正则表达式来提取字符串中的汉字。汉字通常位于Unicode范围\u4e00-\u9fa5之内,因此可以使用preg_match_all函数配合适当的正则表达式来实现。 以下是一个PHP代码示例,它会从给定的字符串中提取出所有的汉字: fu…...
java: JDK isn‘t specified for module ‘product-service‘问题解决
目录 问题 解决方法 1.打开File->Project Structure... 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isnt specified for module product-service 查看pom.xml文件也添加了对应的JDK…...
使用工厂+策略模式实现去除繁琐的if else
使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug,即在修改实体类中的类型时,或者修改属性名字,mapstruct都无法进行转换,会报错,此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...
Dubbo3入门项目搭建
开发环境:jdk8、dubbo3.2.9、nacos2.3.0、springboot2.7.17、dubbo-admin0.6.0。 Dubbo 是一个高性能的 Java RPC(远程调用)框架,最初由阿里巴巴开发并开源,主要用于构建 SOA 架构下的分布式应用系统( soa简单理解就是…...
形象地理解UE4中的数据结构 TLinkedListBase
大家都熟知链表,但不一定能快速看懂UE4中的数据结构。 TLinkedListBase表示“链接”中的一个结点,有三个成员: 一、ElementType Element; 表示具体的业务,例如int链条中的一个整数。 二、NextLink 表示 “下一个Node”&#…...
Python自然语言处理利器:SnowNLP模块深度解析、安装指南与实战案例
Python自然语言处理之SnowNLP模块介绍、安装与常见操作案例 一、SnowNLP模块介绍 SnowNLP是一个专为中文文本设计的Python库,它基于自然语言处理技术,提供了多种功能,包括分词、词性标注、情感分析、文本转换(简繁转换ÿ…...
Win11Debloat:5分钟解决Windows 11卡顿的终极优化指南
Win11Debloat:5分钟解决Windows 11卡顿的终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cu…...
CCF和中国科协对NeurIPS更正投稿政策做出回应
点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号:CVer2233,小助手拉你进群!扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶…...
GitHub开源项目分享:SenseVoice-Small模型微调与领域适配工具链
GitHub开源项目分享:SenseVoice-Small模型微调与领域适配工具链 最近在语音识别领域,一个挺有意思的现象是,很多通用模型虽然能力很强,但一遇到专业领域的对话,比如医生讨论病例、律师分析法条,准确率就容…...
LabVIEW 2018+ 也能玩转OpenCV了?手把手教你用秣厉科技工具包实现摄像头人脸识别
LabVIEW与OpenCV的跨界融合:零代码实现工业级视觉检测方案 当图形化编程遇上计算机视觉,会碰撞出怎样的火花?对于习惯了LabVIEW数据流编程的工程师来说,OpenCV那些复杂的矩阵运算和算法实现往往令人望而生畏。而现在,…...
[Windows 驱动] 深入解析进程名获取的多种内核方法
1. Windows驱动开发中的进程名获取基础 在Windows内核驱动开发中,获取进程名是最基础但至关重要的操作之一。想象一下,你正在开发一个安全监控驱动,需要实时检查哪些进程正在运行;或者你在开发一个性能优化工具,需要针…...
5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略
5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 还记得打开RetroArch游戏…...
别再只用计数器了!手把手教你用Java实现滑动窗口限流(附完整可运行代码)
从零构建高精度滑动窗口限流器:Java实战与生产级优化 深夜的报警短信又一次震醒了你——核心API在整点时刻被突发流量冲垮。翻开监控图表,发现简单的计数器限流就像漏水的篮子,每到时间窗口切换的临界点,系统就会遭遇请求洪峰。这…...
【架构实战】健康检查与故障转移机制
一、为什么需要健康检查 在分布式系统中,服务实例可能因为各种原因变得不可用,而调用方却毫不知情,继续向故障实例发送请求,导致大量失败。常见的服务不可用场景:- 进程假死:Java进程存在但无法响应请求&am…...
Qwen3-0.6B应用案例:如何用它快速生成文案和邮件回复
Qwen3-0.6B应用案例:如何用它快速生成文案和邮件回复 1. 引言:轻量级AI写作助手 在日常工作中,我们经常需要处理大量文字工作:撰写产品介绍、回复客户邮件、编写营销文案等。这些任务虽然不复杂,但耗时耗力。Qwen3-0…...
对比学习演进笔记:从Memory Bank到MoCo的负样本队列设计
1. 对比学习的核心思想与演进背景 对比学习(Contrastive Learning)作为自监督学习的重要分支,其核心思想可以用一句话概括:让相似样本的特征表示尽可能接近,不相似样本的特征表示尽可能远离。这种思想最早可以追溯到20…...

