1. Visual Studio(IDE) 和第1个程序(Python、C、C++ 和 C#)
🤖 作者:包瑞清(Richie Bao): lastmod: 2024-07-07T07:32:16+08:00
4门编程语言的比较学习,最好是使用同一个集成开发环境(Integrated Development Environment,IDE),避免在不同 IDE 间切换,增加学习的成本。能够同时满足 Python(Py)、C、C++ 和 C# 学习或开发的 IDE,首选 Visual Sudio(VS)。 VS 有 3 个版本,分别为社区(Community)、专业(Professional)和企业(Enterprise),本书使用免费的社区版本。下载 VS 后,安装过程中会提示选择安装的模块,需勾选包含有 Py、C++/C 和 C# 的模块,有 Python development、Desktop development with C++、.NET desktop development 和 Windows application development,如图1-1。
图 1-1 VS 安装勾选模块
1.1 创建一个新项目(工程)
❶ 在应用程序菜单中选择 VS,启动应用,开始界面如图1-2。对于4门编程语言均选择 Create a new project 选项建立新项目。
图 1-2 启动 VS 后的开始界面
接下来的弹出窗口会根据所选编程语言的不同而有所差异。
1.2 编写第1个程序
1.3 [Py,C,C++,C#] 基本语法规则比较(🌟)
语法规则 | Py | C | C++ | C# |
---|---|---|---|---|
第1个程序 |
|
|
|
完整的 C#:
|
诞生日期(首次发布)和发明者 |
1991,Guido van Rossum |
1972,Dennis Ritchie
C (/ˈsiː/ c) |
1985,Bjarne Stroustrup
C++ (/ˈsiː plʌs plʌs/ C plus plus,有时缩写为 CPP) |
2000,Anders Hejlsberg( Microsoft,微软);
C# (/ˌsiː ˈʃɑːrp/ see SHARP) |
编程语言类型[附1] | 解释型语言 | 编译型语言 | 编译型语言 | 半编译半解释型混合模式 |
动态类型语言和静态类型语言 动态类型语言为运行期间才做数据类型检查的语言,书写代码时不需要为任何变量指定数据类型。静态类型语言在编译过程中检查数据类型,书写代码时需要声明所有变量的数据类型。 |
动态类型语言 | 静态类型语言 | 静态类型语言 | 静态类型语言 |
代码块表示 | 采用强制缩进区分不同代码块,表示代码结构,提供清晰的视觉指示,使得代码易于编写、阅读,理解和维护。每行代码的结束通常不需要任何特殊符号 | 代码块的定义是通过大括号 `{}` 来实现,即将一组语句组织成一个逻辑单元。代码块通常用于定义函数体、控制结构(条件、循环语句等)和复合语句。通过大括号 `{}`的合理使用,可以提高程序的可读性、安全性和灵活性。每个语句通常必须以分号 `;` 结束。 | 与 C 语言类似 | 与 C 语言类似 |
变量声明 | 不需要显示声明变量类型。在赋值时,解释器会根据语法和右侧的操作数确定新对象的类型 | 变量声明时必须指定变量类型,编译器在编译时检查类型以分配内存空间,为显示声明 | 与 C 语言类似,需要显示声明类型。但可以使用 `auto` 关键字让编译器自动推断变量类型 | 与 C 和 C++ 类似,需要显式声明类型。可以使用`var`关键字让编译器自动推断变量类型 |
注释:通常包含单行注释和多行注释。单行注释适用于简短得解释和备注。C、C++ 和 C# 注释的形式基本同。 |
单行注释以井号
|
单行注释以井号 `//` 开头;多行注释用`/* */`括起。
|
与 C 语言类似 | 与 C 语言类似 |
内存管理 | 自动内存管理,内置垃圾回收机制。使得编程更加容易和快捷,减少内存泄漏等问题 | 完全手动内存管理,需要显式地分配和释放内存。适合对性能和内存控制要求极高的场景,例如操作系统和嵌入式系统开发 | 支持手动内存管理,同时提供智能指针进行自动内存管理。适合需要灵活控制内存但又希望提高工作效率的场景 | 完全自动内存管理,使用垃圾回收(garbage collection,GC)机制,自动管理内存分配和释放,大大简化了内存管理的复杂性。适合快速开发和易于维护的应用程序,例如企业级应用和 web 开发 |
是否支持面向对象编程(Object-oriented programming,OOP)[附3] | 完全支持面向对象编程 | 本身并不直接支持面向对象编程,但可以通过结构体和函数指针模拟 OOP 的部分特性 | 完全支持面向对象编程 | 完全支持面向对象编程 |
第三方库和社区支持 |
拥有大型标准库和第三方库。并有强大社区支持及可获取的大量文档资源 |
拥有广泛的第三方库和强大的社区支持 |
提供强大的标准库和丰富的第三方库,社区活跃 |
依托 .NET frame 和 [NuGet](https://www.nuget.org/) 包管理系统,拥有现代化的开发工具和良好的社区支持 |
[附1]编程语言类型
编程语言类型 | 说明 | 特点 | 举例 |
---|---|---|---|
解释型语言(Interpreted language) | 解释型语言是通过解释器逐行解释和执行代码。解释器逐行读取代码,并将每一行翻译成机器语言(机器码),然后立即执行。该种方式不需要编译整个程序,只需要逐行翻译和执行,适合快速开发和调试 | 由于无需编译,开发人员可以快速的编写和测试代码,开发周期短。且只要有对应的解释器,代码可以在不同的平台上运行,跨平台,便于源代码迁移。但由于每次执行都需逐行解释,性能通常不如编译型语言。而源代码分发,也容易被查看和篡改 | Python、JavaScript、Matlab、Ruby、Perl、VBScript、PHP |
编译型语言(Compiled language) | 编译型语言是通过编译器将整个源代码编译成机器码(可执行文件)后再运行 | 编译后的可执行文件是机器码,直接运行而无需解释,执行速度快。编译器也可以对代码进行优化,提高运行效率,从而优化性能。但每次修改代码后都需要重新编译,增加了开发和测试时间。而编译后的可执行文件通常依赖于特定平台,不容易跨平台运行 | C、C++、Go、Rust |
混合模式 | 为半编译半解释型的语言。例如 C# 将源代码编译成公共中间语言(CIL),再用公共语言运行库(CLR)转化为可执行的机器码[附2] | 混合模式的编程语言结合了编译和解释的优点,即提高了执行速度,也保留了跨平台和灵活性 | C#、Java |
[附2]什么是 .NET Framework?
.NET 和 .NET Framework (.NET 框架)
.NET 是一个由工具、编程语言和库组成的开发平台,用于构建不同类型的应用程序。.NET 有多种实现方式,允许 .NET 代码可以在不同的系统下执行,例如Linux、macOS、Windows、IOS、Android等,为一个跨平台实现。.NET 在 Github 上是开源的,以前称之为 .NET Core。.NET Framework 是支持在 Windows 上运行网站、服务、桌面程序等 .NET 的原始实现。Xamarin/Mono 是用于在包括 iOS 和 Android 在内所有主要移动操作系统上运行应用程序的 .NET 的一种实现方式。.NET 标准是跨 .NET 实现 APIs 的正式规范,使相同的代码和库可以在不同的实现上运行。
.NET Framework 的两个主要组件是公共语言运行库(Common Language Runtime,CLR)及其类库。CLR 是处理运行应用程序的执行引擎,提供线程管理(thread management)、垃圾回收(garbage collection)、类型安全(type-safety)、异常处理(exception handling)等服务。类库提供了字符串、日期、数字等类型,并包括用于读写文件、连接数据库和绘图等 APIs。 .NET 应用程序是用 C#、F# 或 Visual Basic(VB)编程语言编写,并被编译为公共中间语言(Common Intermediate Language,CIL)。编译后的代码存储在程序集(assemblies)(扩展名为 .dll 或 .exe 的文件)中。当应用程序运行时,CLR 会获取程序集并使用即时编译器(just-in-time compiler,JIT)将其转换为可以在其运行的特定计算机架构上执行的机器代码。 |
|
[附3]OOP
面向对象编程(Object-oriented programming,OOP)是一种基于对象概念的编程范式(paradigm)。一个对象包含数据和操作数据的函数,其数据通常以属性(attributes、properties)的形式存在;操作数据的函数通常称为方法(methods)。具体解释查看 OOP 部分章节。
[附4]编译过程(构建过程)
编译过程(构建过程)的关键步骤包括源代码(Source Code,编写的 .c ,.cpp文件)、预处理(Preprocessing,预处理器处理源代码中的预处理指令,例如#include和#define,通常文件扩展名为 .i)、编译(Compilation,编译器将预处理的源代码转换为汇编代码,通常文件扩展名为 .s)、汇编(Assembly,汇编器将汇编代码转换为目标代码/机器码,通常文件扩展名为 .o)、链接(Linking,链接器将一个或多个目标文件和库文件链接在一起,生成最终的可执行文件,通常文件扩展名为 .exe)。编译和链接完成后生成的可执行文件就是最终的构建输出。 |
|