👉 导读
2023 TIOBE
年度编程语言正式揭晓,C#
在陪跑多年后首次斩获这一殊荣。TIOBE
表示,C#
在 Web
应用后端和游戏等领域变得持续流行,并开始蚕食 Java
的市场份额。然而在国内,C#
的认知度却并不高。腾讯云开发者社区特邀国内 .Net
平台开发专家张善友,创作了这篇 C#
夺魁背后的解读文章,让我们一探究竟!读完全文还可以参加文末龙年红包封面抽奖活动哦!
👉 目录
- 引言
- 从
C#
的语言特性看前世今生 - 从
C#
的应用场景看未来发展 - 结语
1、引言
2023
年 TIOBE
年度编程语言已经正式公布,C#
在稳居前 10
名 20
多年之久后,首次摘下年度编程语言桂冠。TIOBE
数据显示,C#
在 2023
年的涨幅达 1.43%
,远超过竞争对手 Scratch
的 0.83%
和 Fortran
的0.64%
。
TIOBE
还表示,C#
目前正在逐步蚕食 Java
的市场份额,并且在 Web
应用后端和游戏等领域变得越来越流行。C#
作为一种新式、创新、开放源代码、跨平台,面向对象的编程语言,可以开发包括但不限于桌面、移动、IoT、游戏、Web、云原生、移动和 AI 全场景支持。
为什么 C#
能突然获得流行?C#
语言的发展历程是怎样的?它有哪些核心应用场景?为什么国内 C#
的流行度并不高?腾讯云开发者社区特邀腾讯云 TVP、.Net
平台开发专家 张善友
,针对这些关键问题创作了本篇文章,以飨读者。
ps:以下内容仅代表作者个人观点。
2、从 C# 的语言特性看前世今生
2.1、C# 的诞生之路
其实,C#
的诞生可以追溯到 20
世纪 90
年代末。当时,微软公司意识到互联网的迅速发展和软件复杂性的增加对开发者提出了新的挑战。传统的编程语言无法满足日益增长的需求,开发者需要一种更强大、更现代化的语言来应对这些挑战,因此 C#
应运而生。
C#
旨在提供更好的生产力、更强大的面向对象支持和更高的性能。它从 C++、Java
和 Delphi
等语言中吸取了灵感,并结合了微软自身的创新,于 2000
年首次发布。随着时间的推移,C#
逐渐发展成为 .NET
平台的主要编程语言之一,为开发者提供了强大而灵活的工具来构建各种类型的应用程序。
2.2、C# 的设计目标和发展理念
在我看来,C#
的设计目标和理念是为了提供一种强大、现代化的编程语言,以提高开发者的生产力和代码质量。
C#
的首要设计目标是简单易用。它采用了类似于 C++
和 Java
的语法,使得开发者能够迅速上手,并编写清晰、简洁的代码。而且它还是一种纯面向对象的编程语言,支持封装、继承和多态等面向对象的特性,因而十分有助于组织和管理代码,提高代码的可维护性和可扩展性。当然,安全性也是 C#
的关注重点,它引入了类型安全检查、空引用检查和异常处理等机制,以防止常见的编程错误和安全漏洞,提高代码的可靠性和稳定性。同时 C#
致力于提供高性能的代码执行。通过即时编译(Just-In-Time Compilation
)技术,C#
代码可以被转换为机器码,并在运行时进行优化,从而提高程序的性能。
此外,C#
还追求跨平台开发,引入了 .NET Core
平台,最后演化成一个统一平台 .NET
,使得 C#
可以在不同的操作系统上运行,包括 Windows、Linux
和 macOS
等,扩展了应用程序的部署范围。并且集成开发环境(IDE
)支持也是 C#
设计目标的一部分。借助强大的 IDE
工具(如 Microsoft Visual Studio/Visual Studio Code
和 Rider
),我们可以进行代码编辑、调试、自动完成和重构等操作,有效提高开发效率。
综上所述,C#
基于简单易用、面向对象、安全性、高性能、跨平台和 IDE
支持等特点使得其成为广泛应用于各个领域的强大编程语言之一。
2.3、C# 的发展现状
值得注意的是,C#
目前处于极度被低估的状态,这主要是和微软公司过去的闭源政策有很大关系,在 2014
年 11
月 12
日,微软宣布 .NET
平台全技术栈开源并且托管到 .NET 基金会
,将让 .NET
运行在 Linux
和 macOS
上,并且会通过 .NET Foundation
(.NET
基金会)来与社区密切合作在未来改进 .NET
。目前我们可以在 GitHub
上找到所有 .NET
平台组件的开源项目,包括 C#
的编译器。
在带 GC
和性能尚可的系列主流工程语言里,C#
率先支持 AOT
创建动态库,这样一来,C++
的任何场景,所有桌面端开发、WebAssembly
、大部分移动端(包括安卓、iOS
),C# AOT
都能参与 (不是完全替代,而是参与),而语言各有所长,只是参与就能带来很多改变。
最新版本的 C#
已经是一个现代化的编程语言,C#
在 2022
年和 2023
年发布了改变游戏规则的特性是上下游语言无关的代码复用。无论是 Java、Python、JS
还是 Rust
开发,我们都可以使用 C#
代码库,轻量、无需引入其他运行时和构建依赖,这充分发挥了 C#
代码优雅的优势,让上层应用的程序员也能做底层的东西。
当然,C#
除了是 现代的编程语言 ,还有以下亮点:
跨平台:
.NET 8
支持跨当前所有主流的桌面、移动平台。C# 12
可以对标gcc/g++
。高层级 GC 支持,屏蔽底层细节:
.NET
有可配置的GC
,.NET GC
的实现虽然不如很多JVM
的GC
实现,但也是身经百战,经过了高并发的考验。跨语言复用性,全面超越同时代的编程语言:相比榜单上靠前的
Java、Python、JavaScript
这些语言,C#
支持AOT
输出单个动态链接库,能定义导出C
函数符号,那么交付方不管使用什么语言,我们都可以用C#
进行操作。并且我们还可以切换到bflat
工具链,不用安装.NET SDK
,实现快速编译。支持值类型,让开发者完全掌控与 C 的互操作:有了动态库的优势,加上具有原生的值类型,在 C# 里定义 C API 接口也是极简单的。值类型能实现运行时无关的内存布局,在导出动态库时,导出函数的传参规范时可直接使用 C 调用约定,在这过程中我们需要注意返回值大小不要超过 intptr_t 即可。
导出函数声明简单
:使用UnmanagedCallersOnly
特性可以将C#
函数导出提供给C
调用,如果你去领略C/C++
的DLL_EXPORT
四亿种写法,各个项目各有千秋符合人体工学的命名空间设计,对开发者的要求更低。这点和Java
类似,远比C++
好。兼容性好:标准库
API
比较稳定,方便代码移植。功能全面的标准库:
.NET
标准库很全,质量非常高,为C#
在各个应用场景下的应用铺平了道路。社区里经常听到很多人在说C#
库少,只需登录GitHub
便可验证其真假,没有几个编程语言能和C#
拼库多,一个用了这么多年一直排名前几的语言库不可能少。尤其是再考虑库的覆盖广度上就更少有能相比的了,和上面同样的原因,有很多编程语言看似库多,但都是重复的。性能上限足够高:性能上限很多评测已经给出了,最新的
.NET 8
在少数测试中甚至可以略微超过C++
。就算综合来看,C/C++
、Rust
是第一梯队的话,C#
也是之下第二梯队了,Go
和Java
只能算是第三梯队级,虽然很多人把Java
和C#
经常一起对比,但是目前在性能上限来说,C#
和Java
已经有了断档级别的差距。使用下限足够低:基本上只要学过编程就能很快上手,可以完成基本功能。在易用性来说,
Golang
确实是第一梯队,C#
和Java
算是第二梯队,而C++
和Rust
的系统对于新手而言则难于上青天。
3、从 C# 的应用场景看未来发展
C#
作为全场景应用开发平台,可以快速应用在云边端不同场景下的硬件设备上,包括云服务器、移动终端以及 IoT
设备等等,高效运行并能有效协同。目前 C#
在云原生、全栈 Web
应用、桌面应用、移动应用、游戏、物联网 IoT
、人工智能/AI 等场景的应用已较为成熟。尤其当前人工智能爆火,这将是未来的一大瞩目方向。
3.1、人工智能
毋庸置疑,人工智能场景应用是 C#
最有发展潜力的方向,回顾近 10
年的算法发展,主要经历了 3
个阶段:利用数学及统计知识,设计特征,进行处理和判别的传统算法阶段,采用深度神经网络,标注数据进行训练,自动提取特征,进行处理和判别的深度学习算法阶段,基于大模型,零样本(Zero-Shot
)处理,或采用少量样本微调的大模型应用开发阶段。前两个阶段 C#
有 ML.NET
库可以做这方面的应用开发,大模型的 Zero-Shot
特点和泛用性,使得完成一件事情,不再需要经历收集数据、标注、训练、优化这个完整的过程,只需要理解,即可进行应用层开发。
C#
语言的某些特性,包括对非结构化数据友好,支持 Native AOT
,跨平台,Blazor
等特别适合人工智能类应用,使得它十分适合开发人工智能产品。例如,在应用层的开发上,微软 2023
年 3
月份开源的 Semantic Kernel
,在 2023
年 12
月 20
日正式发布了1.0
版本。Semantic Kernel
的出现,直接打开了 C#
通向 AGI
的大门。
3.2、云原生
云原生、容器技术发展带来整体后端工业化、生态的进步,我们也可以基于 k8s
本身服务构建分布式架构,共享所有语言的中间件。比如:你可以基于 Dapr
使用任何语言的任何中间件,C#
正好是 Dapr
支持的第一语言。
.NET 8
重塑了我们构建可按需扩展的智能、云原生应用程序和高流量服务的方式。无论我们是部署到 Linux
还是 Windows
,使用容器还是我们选择的云应用程序模型,.NET 8
都可以让我们更轻松地构建这些应用程序。它包括一组经过验证的库,目前 Microsoft
的许多大规模服务都在使用这些库,可以帮助我们应对可观察性、弹性、可扩展性、可管理性等方面的基本挑战。
.NET 8
支持将 .NET
应用程序编译为本机代码,使用更少的内存并立即启动,无需等待 JIT
(即时)编译器在运行时编译代码,也无需部署 JIT
编译器和 IL
代码。AOT
应用程序只部署应用程序所需的代码。我们的应用程序现在可以在无法使用 JIT
编译器的受限环境中运行。
3.3、游戏
值得一提的是,C#
在游戏开发领域口碑也非常不错,具体主要在学习上手、招聘人才、编程规范、运行性能方面都表现十分平衡,没有明显缺陷。游戏开发人员使用 Unity
构建游戏,典型代表便是腾讯的国民游戏王者荣耀,它主要使用 Unity 打造,已经拥有超过上亿的活跃用户。C#
与 Unity
引擎无缝集成,此外,还有一些新兴的游戏引擎也采用了 C#
语言,例如开源 godot
引擎。
除游戏前端,C#
和 .NET
技术在游戏后端(游戏服务器)也获得了越来越广泛的应用,C#
的服务器可以无障碍在 Linux
上运行。
3.4、全栈 Web
.NET 8
中的 Blazor
可以同时使用服务器和客户端来处理我们的所有 Web UI
需求。它通过专注于优化页面加载时间、可扩展性和提升用户体验的多项新增强功能,开发人员现在可以在同一应用程序中使用 Blazor Server
和 Blazor WebAssembly
,在运行时自动将用户从服务器转移到客户端。两者对比之下,显然 .NET
代码在 WebAssembly
上的运行速度更快,这主要归功于新的基于 “Jiterpreter”
的运行时和新的内置组件。
总之,Blazor
填补了欠缺的一环,C#
开发人员可以直接在用户浏览器中共享代码和业务逻辑,对于 C#
开发人员来说,这无疑是一项十分强大的功能,有效提升我们的工作效率。
3.5、桌面应用
其实,C#
在桌面开发框架上的应用也是一大亮点。在 .NET
平台上传统的 Windows
桌面开发框架 WPF
和 Winforms
之外,还有很多跨平台的开源框架,比如 Avalonia UI、UNO Platform
。 特别 Avalonia UI
是一个基于 .NET
和 XAML
的偏桌面端的跨平台(WINDOWS、LINUX、MAC
)UI
开发框架,不存在某个平台用 WinUI
,某个平台用原生,导致不同平台渲染会出现差别的问题发生,所有平台都使用 SkiaSharp
来渲染。
特别是在国内,在 openKylin
社区成立了 Avalonia SIG
,推进 Avalonia UI
对 openKylin
生态的支持,及 Avalonia UI
的相关生态建设。随着国内的 Linux
桌面向工业、医疗等传统行业渗透,Avalonia UI
在这个市场上有着充分的竞争力,有越来越多的用户从传统的 QT
转移到开源免费的 Avalonia UI
。
除了 Avalonia UI
之外,还有 Blazor
在客户端应用上表现同样出色。从 .NET7
版本开始支持的 Blazor Hybird
,使用 Blazor Hybrid
将桌面和移动本机客户端框架与 .NET
和 Blazor
结合使用。在 Blazor Hybrid
应用中,Razor
组件在设备上本机运行。组件通过本地互操作通道呈现到嵌入式 Web View
控件。组件不在浏览器中运行,并且不涉及 WebAssembly
。Razor
组件可快速加载和执行代码,组件可通过 .NET
平台完全访问设备的本机功能。
3.6、移动应用
.NET
多平台应用程序 UI
(.NET MAUI
) 是一个跨平台框架,用于使用 C#
和 XAML
创建本机移动和桌面应用程序, 使用 .NET MAUI
,可以开发可在 Android、iOS、macOS
上运行的应用,Windows
以及从单个共享代码库运行的应用。.NET MAUI
包含 BlazorWebView
控件,该控件运行将 Razor
组件呈现到嵌入式 Web View
中。通过结合使用 .NET MAUI
和 Blazor
,我们可以跨移动设备、桌面设备和 Web
重复使用一组 Web UI
组件。
3.7、物联网 IoT
除桌面和移动应用外,C#
在物联网 IoT
的应用在当前也较为普遍。.NET
可在各种平台和体系结构上运行。它支持 Raspberry Pi
和 Hummingboard
等常见物联网 (IoT
) 插件板。IoT
应用通常与专用的硬件(例如传感器、模数转换器和 LCD
设备)交互。
在网络化、标准化或网络安全方面,对工业网络的要求正以非凡的速度增长。在这些问题重重的领域,基于以太网的 OPC UA(Open Platform Communications – Unified Architecture
,开放平台通信 - 统一架构)通信标准正在快速发展,OPC
基金会出品的 OPC UA
的标准库 UA-.NETStandard
就是使用 C#
实现,允许非会员使用 OPC UA
的试用规范、原型或研究项目。
其实,物联网的后端系统使用 .NET
和 C#
也获得了越来越广泛的应用,构建的服务后端系统可以无障碍运行在 Linux
上。
4、结语
在我看来,客观实际并不是一成不变的,而是不断向前发展变化的。C#
在全球使用人数历来排在 Top5
,但很多人却认为它在国内的使用场景似乎比较稀缺,主要是因为大部分人依旧用老眼光来看问题,而不是以发展、变化的观念来看问题。最新的 C# 12
是一门既有 Python
的开发效率,又有 C/C++/Rust
性能的编程语言。
在 Linux
桌面市场上,以 C#
的 AvaloniaUI
补充 Window Forms
和 WPF
的跨平台需求,逐步成为 QT
的有力竞争者。在 GenAI
加持的人工智能场景下,以 Semantic kernel
项目驱动的新的开发范式在 2024
年会有更多的采用者。
作者简介
张善友
,智用人工智能应用研究院 CTO
,腾讯云 TVP
,毕业于兰州大学数学系,专注于云原生开发,推崇开源文化,使用开源软件构建云原生软件系统,运营微信公众号“dotNet 跨平台”
和 “新一代智能应用”
,推广和普及云原生技术在企业业务开发的应用。 从事 .NET
平台开发 20
年,业余爱好写作,在个人技术博客上撰写了大量的系列技术文章,并在腾讯云开发者社区开设专栏。
-End-
原创作者|张善友
你觉得转载声明:
C#
在国内讨论度不高的原因是什么? 欢迎评论分享。我们将选取1则优质的评论,送出腾讯云开发者社区定制鼠标垫1个(见下图)。1月16日中午12点开奖。
分享抽龙年红包封面!!转发本篇文章就能随机获得以下封面 1 个!限量
300
个,周三中午 12
点开奖!
参与方式:
- 分享本篇文章到朋友圈,并截图。
- 将截图发送到公众号后台,经核验截图后,即可随机抽取以下
1
款红包封面!
📢📢欢迎加入腾讯云开发者社群,社群专享券、大咖交流圈、第一手活动通知、限量鹅厂周边等你来~