决定学习C++。但是我遇到了一个问题:没有官方编译器。当我学习 Go 时,我只需要从 go.dev 站点下载一个安装程序,单击几下即可安装 Go。但是C++……网上有很多不同的选择:G++ MSYS2、Clang、Qt和Visual Studio中的内置编译器等等。
实际上,这是我的问题:如何正确安装 C++?
决定学习C++。但是我遇到了一个问题:没有官方编译器。当我学习 Go 时,我只需要从 go.dev 站点下载一个安装程序,单击几下即可安装 Go。但是C++……网上有很多不同的选择:G++ MSYS2、Clang、Qt和Visual Studio中的内置编译器等等。
实际上,这是我的问题:如何正确安装 C++?
我认为您不需要官方编译器来学习一门语言。平均而言,实现一种语言标准的多个编译器是该语言工作的大量平台的代价,并且是长期的历史遗产。同时,由于这种多样性,它支持某种“内部竞争”,标准的新元素在不同的编译器中快速实现。
对于语言学习,在我看来,谈论可以解决学习问题的“最小工具集”是有意义的。
当训练任务结束,你将面临“战斗”任务,那么你已经有足够的经验为他们挑选一套工具(嗯,我们知道很有可能——这将是 GCC 编译器) .
如果您使用 Windows,那么您有两个明显的选择:Visual Studio或Visual Studio Code + MSYS2。
我有关于如何设置此组合的答案。
如果你在 Mac 上,那里有一个很棒的 Clang,还有来自 JetBrains(确切地说是 CLion)作为 IDE 的东西。好吧,或者再次,VSC。
对于 linux - 选择范围很广,但您似乎无法摆脱 GCC + VSC :-)。
尽管我发表了恶毒的评论,但我还是决定详细写下“为什么会这样?”。
关键是 Go 和 C++ 是用于稍微不同的事物的工具。对于一些不同的东西。
从某种意义上说,Go 就是这样一个“最小的 java”。非常简单的语言,你写 - 几乎在虚拟机下。基本上你写的是休息服务,但你可以写一些与更高效的protobuff协议相关的东西,然后你得到“几乎实时的”(好吧,如果垃圾收集器没有来:-))。
图形艺术?- 不,他们没有。
图书馆?- 在这里我们有一个quat lib,所有银行家都喜欢它......
简而言之,Go 是一门非常年轻的语言,它设法“控制一切”,并且与该语言相关的一切都以“贫穷但干净”的风格完成。
是好还是坏?
如果它是一种你开始熟悉的语言,那就太棒了。当您不想打扰细节时,这非常非常方便。记忆模型?- 不,我们不知道。线程还是绿色线程?- 我不知道!这是我们拥有的——我们将使用它们,此外,我们仍然拥有协程上的所有内容。它是如何在那里编译的,进入哪个处理器的命令,它会吞噬多少内存?好吧,你不能马上说出来:-)。
与 Go 不同,C++ 是一个不可思议的怪物。
它拥有一切,并且有多种选择。此外,如果某些选项不适合您,您可以稍微移动一下手(嗯,在那里半年,一年 - 最多 :-) 小便。) 制作自己版本的一些狡猾的分配器或令人难以置信的智能指针。
图形艺术?适用于哪个平台?所有游戏要么是他们的引擎,要么是 Unreal(同样,C++ 的耳朵从那里伸出来),要么是一个范围不是很广的 Unity 3D,但这已经在 C# 平台下。
一块将飞入太空的铁的装载机?是的,这里是库,这里是参考代码,这里是使用闪存驱动器的指南。不要忘记添加这些编译器标志。
正是因为这种“空旷的宽度”,才没有单一的方式来安装和操作C++。因为需要一件事来解决奥林匹克问题,组装核心 - 有点不同,并且对于游戏代码的专业工作 - 一般来说,第三个。
并且花费了非常非常长的时间来掌握该过程中使用的工具。包管理器、构建系统、IDE、寻找内存泄漏的系统、自动测试等等……我怀疑这些工具中的许多根本不存在于 Go 中——例如,因为它们不需要。