新人旧人区别
以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。
- 移除了 GUIDE
- 从 32bit 变为了 64bit 系统,需要注意指针现在占 8 字节而不是 4 字节
- 更新了编译器版本
- 默认情况下右键没了【新建文件】的选项
- 桌面目录改为中文,可能会导致一些程序无法运行
主要变化
- 系统基于了 Ubuntu 20.04 (64bit)
- g++ 升级到了 9.3.0
- 添加了很多编辑器,例如 Sublime,VSCode,Code::Blocks
安装
和旧版无区别,主要就是官网上说了安装时要断网,可以通过在虚拟机软件安装时把虚拟网卡断开的方式。
Edit:现在已使用了该系统进行了CSP和NOIp,是否联网更新因考场而异,NOI时如何实施尚不清楚。若可以联网更新,强烈推荐使用VSCode并安装C/C++插件进行编程
中文目录
这个系统如果选择中文安装,桌面这个目录会是中文的。
然后这带来了很多问题,一是你在终端里敲很麻烦,二是有些程序可能用不了。
请不要在桌面上建立文件编程,以避免不必要的麻烦,据我测试,已知 Code::Blocks和 Gedit 的编译是会出问题的。
右键菜单新建文件
如果需要的话,可以终端里输入
xdg-user-dirs-update --set TEMPLATES ~/Templates/
touch ~/Templates/newfile
即可。
然后重启文件管理器(可以终端输入 killall nautilus
)然后你就会发现右键菜单里【新建文件】回来了。
壁纸
默认壁纸是一张极丑无比的纯黑壁纸?没关系,可以进入【设置——背景】更换。
有趣味壁纸,比如这个:
编辑器
说一句题外话,我很喜欢 GUIDE,很不理解为啥会删掉它,可能它在很多地方令人难受,但是它可以对于每个文件单独设置编译选项,且不需要额外配置,对于我这种对于一个代码经常更换编译选项的选手真的是很好用。
一般上来讲,我认为考场上不应花费超过 5 分钟来配置编辑环境。尤其是像 NOI 这种比赛,开考前不可以动键盘,不可以登录系统,所以任何配置这些东西的时间都会占用你的有效比赛时间,我这里推荐使用一个可以较快速配置完成,且不明显拖累编码效率的即可。所以我这里不介绍需要大量配置的使用方式。
还有我觉得这些编辑器默认字体都挺好看的,如果觉得不好看的可以自行查找一下修改字体的方式。
另外,下列编辑器中有一些打开大文件的时候会卡死,请做好测试,避免在未保存代码时打开过大的样例,以免数据丢失。
若真正卡死了,这个版本的 ubuntu 会在足够长的时间后弹出未响应提示,大多数情况应该不用手动 killall
了,当然如果你没有听劝,里面还有未保存的代码,那只能多等个几分钟,看看能不能恢复,然后赶紧保存 ,再不行就彻底寄了。
VSCode
很不幸的是,CCF 提供的 VSCode C/C++ 插件是一个在线安装版本,真实竞赛中完全没法用,所以...听说你想要超好用的 VSCode?没门的啦!
虽然这么说,但没有 Intellisense 和 Debug 的 VSCode 也是可以用的,虽然编译需要手动去命令行里敲,调试也要命令行 gdb,但论语法高亮和自动缩进和括号补全这方面还是可以的。
当然你也可以手写JSON实现一个编译运行指令,具体我就不细说了,还蛮复杂的,网上搜一下即可。
设置里也可以捣鼓一堆东西,比较有用的有自动保存【Auto Save】。
值得一题的是它内置的查找功能挺好用的,在查变量重名的时候很有效。右边三个开关分别代表是否区分大小写,是否强制搜索单词(两边都有空白字符),以及是否启用正则。
基本上常规使用方法就是像这样,用自带的终端编译运行所有文件的样子。
优点
- 有着简单的语法高亮,编辑体验好
- 有自带的文件管理器,可以方便的新建文件
- 几乎不需要设置
- 自带终端
缺点
- 不自带编译功能,若实现需要手写JSON
- 不自带调试功能
Sublime Text
感觉和 VSCode 体验差不多?不过自带一手单文件编译指令。但我没咋用过,所以不多评价。
但感觉真的和 VSCode 差不多啦,要自定义编译也必须手写JSON。
优点
- 有着简单的语法高亮,编辑体验好
- 几乎不需要设置
缺点
- 修改编译选项需要手写JSON
- 不自带调试功能
Geany
Geany 基本上开箱即用,但有一些我认为很好用的插件可以开。
【工具-插件管理器】里面可以打开插件
一些好用的有:
- 【Auto-close】括号补全
- 【Auto-mark】符号高亮
F9 编译 ,F5 运行,运行会弹出一个终端,注意没有编译+运行,需要连按两个。
在 【生成-设置生成命令】里面可以设编译选项。
不过有个比较毒瘤的事情就是这玩意 Warning 和 Error 的显示一样,注意看一看。
然后那个下面那个写着编译器的那一栏的上下箭头是可以点的,点到最下面有个自带终端。也可以把下面那一栏拉长全部显示出来。
优点
- 有着简单的语法高亮,编辑体验好
- 几乎不需要设置
- 自带终端
缺点
- 不自带调试功能
Code::Blocks
因为这玩意貌似是自带调试的所以重点研究了一下
首先如果打开单文件只有默认编译选项,无法调试,所以不可避免的需要新建一个项目文件。
先选择 【File-New-Project-Console Application】建立一个新项目,然后title选择题目的名称,然后 Folder 选择你这个比赛规定的存放该题的文件夹的父目录,其它的一路默认下去。
然后你就有了一个项目。首先你会发现它给你创建了个 main.cpp,因为 OI 比赛中一般需要一个固定的名字才能正确收上去,所以需要改名字。首先先把这个文件关掉。然后在左边右键这个文件,选择【Rename File...】,改成该题目的名称。
然后,基本的配置就搞好了。
接下来就是如何设置编译选项,这次在左边右键这个项目的图标,然后点【Properties...】。
然后点进【Build Targets】,这个页面里的 【Build options...】点开即可,可以分别为【Debug】和【Release】设置编译选项,而这两个东西可以理解为两个模式,比赛时可以用【Debug】作为开了类似 -g
的选项用于查错的那个,而【Release】开题面所示的编译选项,反应真实效果。(当然也可以根据需求用左边的 【Add】加入更多模式。)
当然那些给出的选项并不一定需要用它,可以用下一栏的【Other Compiler Options】直接写也是可以的。
那么现在已经配置好了,你可以在顶上的选项框里切换编译模式,然后可以按那个黄齿轮绿箭头分别代表编译,运行,编译运行。
然后右边的那个红箭头可以开始调试,调试时可以点调试框右边这个电脑上有个虫子的图标中的【Watches】打开变量查看。注意调试时必须开 -g
编译哦(【Debug】模式编译)
总之具体使用方式还是蛮复杂的,毕竟这是一个庞大的IDE,大家可以自行摸索。
当然,你也可以只拿它调试,就新建一个工程然后就不改其它设置,有需要的时候把代码复制进来调,这也是可以的。总之这似乎是唯一一个可以拿来调试的。
优点
- 自带调试功能
- 有着简单的语法高亮,编辑体验还行
缺点
- 自动缩进可能有点怪(?)
- 配置麻烦,必须配置一个项目才可以。比较笨重。
其它
Vim 和 gedit(现在就叫文本编辑器)还有 Emacs 还在,喜欢用的继续用就好了,应该没有太多改变。
总结
提供了 VSCode 却不提供可以正常使用的 VSCode C/C++ 插件。
编译器
编译器升级到了 g++ 9.3.0 可以整啥花活呢?
强大的 sanitizer
编译选项加入 -fsanitize=address,undefined
可以体验绝佳的查 RE,查 UB 的体验。
当然如果编译器和链接器分开需要在链接器里加上 -lasan -lubsan
才可以用(指 Code::Blocks)
可以实现:数组越界直接 RE,有符号整数溢出直接 RE,返回值不为 void
的函数不 return
就返回直接 RE...总之就是可以查 RE 和 UB,且能告诉你错在了第几行 。相信我,会上瘾的。
优化
编译器优化更聪明了,虽然可能感知不强
C++14/17
应该以后正式比赛能用上?
Edit:已确认:以后会用C++14
Arbiter
arbiter 好像更新了?让我看看有啥区别。
内存限制最大值从 512MB 变到了 2048MB。不过这个好像似乎已经内部被修改过了(参见之前 NOI 里面都有 1GB 的空间限制)?
好像还改了改图标。
所以似乎并没有区别。
终端命令
基本没变,常用的能用的都用。不能用的也不能用,除了...
ssh
喜闻乐见.jpg
其实 ssh
命令并没有被删,只不过 ssh 服务不开放,也就是你还可以 ssh 其它系统,但这个系统不能被 ssh 到了。
试着给虚拟机和实体机开一个网络测试了一下,不太行。