Ubuntu 18.10试用体验

Posted by wyj on December 22, 2018

上星期把ubuntu升到了18.10。带来了各种新版本的软件。包括8.2.0的GCC,7.0.0的Clang之类。

可能过高版本的软件不全是好事。Chrome的mdui icon显示出了问题。还好这个问题不是很大,我测试了几十(可能上百)个常用的网站,除了洛谷博客之外都毫无影响。gnome-terminal的调用居然有了一堆输出,导致我所有的gedit外部工具都要加上> /dev/null。Typora的菜单名称颜色恰好和背景完全一致,看起来就像菜单栏隐身了。(2019-01-10UPD:更新之后Typora菜单栏重新出现了)但不得不说这个Yaru界面真的漂亮,和win10有点像。放上一张摆拍的截图:截图

于是尝试着使用了ssh(好像没有什么联系啊?)。ssh连接了一台18.04,发现图形界面果然有点卡,并且远程使用gedit既不是18.04的主题,也不是18.10的主题,好像是gnome的默认主题,看起来就像虚拟机。firefox无法打开。终端里使用alert,居然能够在服务器的图形界面上弹出通知。

配置那台18.04的中途出现了问题,apt upgrade到一半有点等不及(因为我还等着装新的软件呢),我手残把终端关掉了。然后apt就损坏了。重启,居然无法进入ubuntu。幸亏我还记得root密码,进了recovery mode。输入apt,apt让我先去修复dpkg。还好一步一步按照提示做就好了。

C++2a

既然Clang++和g++都升到了最新的版本,我当然不甘落后,从C++17选手进化为C++2a选手。我觉得17和2a没有什么区别,对于一个OIer来讲,可能只有位域的初始化和range-based for的初始化有作用,而且后者现在的编译器还没有支持(尽管我觉得这个初始化特别重要,比如在遍历一个vector时用来知道下标)。

那么就说说位域的初始化吧。相信大家都知道位域:用于卡空间的一个技巧。比如一个结构体:

#pragma pack(1)
struct node{
    int a:20,b:20,c:21,d:2;
};

这样的代码所用的空间就是开四个int的一半。为什么之前一直没有加入对位域的初始化语法呢?因为会有歧义。比如int y:true?8:a=42;现在钦定了一个解释:这样的代码中y=0。

说了半天觉得没什么用。等待以后C++20更加完善。