面试 消息

与SerenityOS贡献者谈论现代c++中的Scratch-build c++ Developer’s Playground

你好,

SerenityOS是桌面计算机的图形化类unix操作系统。它也是一个伟大的开源项目,证明了如果你想看到一些事情发生,你可以自己做!在这次采访中,我们采访了SerenityOS的创始人和主要贡献者Andreas Kling,以及SerenityOS的另一个主要贡献者Linus Groh,他们谈论了这个项目本身,他们使用c++的经验,以及CLion如何帮助他们开发这个项目。

安德烈亚斯•克林

Andreas在过去的16年里一直在编写开源c++,致力于KDE、Qt和WebKit等项目。他以前的雇主包括苹果(Apple)和诺基亚(Nokia),但现在他全职开发SerenityOS,这是一款新的类似unix的操作系统,外观和感觉都像是90年代的办公电脑。他经常在YouTube上发布他的编程视频,并希望与世界分享系统开发的乐趣。

推特GitHub.博客

李纳斯Groh

Linus在2012年开始了他的编程之旅,他在Python和JavaScript等语言中摸索,最终将它们结合到他的工作中,成为一个完整的web开发人员。后来,他决定学习c++,并通过为SerenityOS项目做贡献而深入操作系统开发,他现在是该社区的维护人员和活跃成员。你会发现他主要在系统自己的JavaScript引擎LibJS上工作。

推特GitHub.网站

你好安德烈亚斯,莱纳斯!你能告诉我们更多关于这个项目的情况吗?是什么让SerenityOS与其他操作系统不同?项目的总体目标是什么?

andreas:
我在2018年开始了这个项目,短期目标是让自己忙起来,长期目标是构建一个我将来可以用作主要系统的操作系统。
SerenityOS标志
我们在一个没有第三方运行时依赖的单一存储库中从零开始构建一个完整的系统。这意味着我们有自己的内核、shell、库、桌面、文件管理器、网络浏览器等等。它全部是用现代c++ 20编写的,带有一个在内核和用户空间中使用的自定义标准库(不是STL)。

与其他系统不同,SerenityOS主要是为自己的开发人员设计的。每个人都在做自己感兴趣的事情,或者自己想在系统中拥有的事情。这里没有野心吸引老用户,但欢迎大家加入开发!

林斯:
这种自主性还意味着没有一般的路线图或具体的计划。虽然每个贡献者可能都有自己的目标和待办事项列表,但并不能保证任何特性都能在特定的时间点实现。在这个项目中,确保某件事完成的最好方法就是自己去做!

目前还没有版本或发行版,因为一切仍在快速变化。要尝试操作系统,必须在本地编译存储库中的最新源代码——随着时间的推移,这个过程变得越来越方便。

你能简要描述一下你在SerenityOS中使用的技术栈吗?

andreas:
该系统的基础是一个类unix的单片内核(x86或x86_64),底层系统API是一个兼容POSIX的C库。这提供了一个熟悉的界面,并允许我们在SerenityOS上运行GCC等第三方软件。

除此之外,我们还收集了大量c++库,涵盖了现代桌面系统可能需要的所有内容。有用于图形、声音、加密、网络的构建块,也有更复杂的组件,如TLS、JavaScript、HTML、CSS、PDF等。

窗口系统的实现类似于X11,它有一个运行在本地套接字上的控制协议,并且由一个合成窗口管理器显示共享内存中的位图。

你提到了C ++ 20。所以你已经在最新的C ++标准。对?

andreas:
是的,我们使用的是最新版本的GCC和Clang中可用的c++ 20的交集。因为这个项目没有向后兼容性的问题,所以我们可以自由地停留在c++的前沿,并且我们试图利用这一点。

当我第一次遇到这个项目时,你正在使用makefiles,但然后转到cmake。你为什么决定这样做?这种迁移的主要好处是什么?

andreas:
有两种主要原因:依赖关系管理和并行性。使用makefiles,它是一个不断的战斗,以便在跨多个核心传播汇编任务的同时保持正确的顺序。搬到CMake是一项重大任务,但在可维护性和建立性能方面,这两个都得到了很大报酬。

andreas,于5月2021年5月发布了一个故事关于你为什么辞掉工作全职专注于SerenityOS。你的结果如何?

andreas:
到目前为止是绝对的!由于世界各地的人们的慷慨支持,我能够完全关注Serenityos项目。

The biggest difference I’ve noticed is that it’s much easier to tackle large-scale refactoring and less glamorous things like project administration etc. When I did this purely as a hobby, I had much less time (and energy) per day, so I preferred to spend it on “funner” tasks.

安德里亚斯,我想你的故事启发了一些撰稿人。你知道人们为什么参加这个项目吗?是什么促使他们转向SerenityOS ?

andreas:
这是关于这个项目我最喜欢的事情之一:每个人都有自己的个人原因加入,但我们都热爱编程,对技术有好奇心。

我喜欢将该项目视为“开发人员的游乐场”,人们可以学习软件如何通过在单片环境中建造它。由于我们不使用第三方代码,因此CodeBase内的凝聚力很强。它还在项目中创造了高度的责任。如果需要改变的东西,就没有必要向外寻找答案。

Linus,你在最近的一个cppact中发言关于使用SerenityOS学习c++,因为在这个项目之前你从未用c++开发过。开始使用c++这样复杂的语言是否很困难?你是怎么做到的?

林斯:
在很多方面都可能更加艰难!我不再是一个编程初学者了,多年来我已经学习并使用了各种不同的语言来完成各种任务,所以我不再需要熟悉基本的编程概念,而可以专注于特定的语言。这次也不例外。最初,我学习c++的全部目标是为这个让我着迷了一段时间的操作系统项目做出贡献。这给了我很多动力,这当然帮助我继续前进,即使进展缓慢。

时机也起到了一定作用。我在2020年初开始研究c++,当时第一次封锁开始了,我有很多时间在家里,这让我能够花更多的时间在它上面,而不是我本来能够花的时间。当然,大部分时间都花在调查和调试我的初学者错误上了。

在我们所谓的情况下区分学习C ++也很重要“宁静c++”-语言的一个子集,使用简单易懂的模式-例如,没有异常,没有STL,不考虑不能使用最新特性的编译器。

最后,和c++专家在一起会有很大的帮助。不仅是Andreas,还有许多其他贡献者回答了我无数的问题,当我知道我想要实现什么,但不知道在IRC通道和代码审查中查找什么术语(这在早期很常见!)时,他们给了我提示。对于初学者和有经验的程序员(像我和其他一些人)来说,这是一个很好的学习环境。

Linus,在C ++语言中对您最具挑战性的事情是什么?

林斯:
在开始时,它绝对是编译器错误消息,通常很多终端页面,而不是很清楚问题的真实源。掌握随着时间的推移变得更容易,但在我看来,各种C ++编纂者仍然有很多改进的空间,以表达明确和人性化的错误。

如今我有时会与模板斗争,其中一个概念是来自C ++的一个概念。在学习几个不同的语言并使用它们暂时使用它们之后,许多事情在下一个新语言中有点熟悉 - 但这不是这里的情况。

也从“动态语言心态”(我主要使用Python和JavaScript)来严格静态打字 - 这对我来说并不是完全新的,但它现在需要不同的方法然后。

SerenityOS向JetBrains致敬

我知道你们都用clon来开发SerenityOS。你是怎么开始找克里昂的?你的第一次经历是怎样的?

andreas:
今年早些时候,我在寻找一个新的c++ IDE。我已经对我以前的IDE很满意了,但是我也想知道是否有更好的IDE可用,如果我不尝试其他的IDE,我永远也不会知道。

所以我决定尝试一些新的东西,而我抬头的第一个是克隆。克隆网站上的一个截图有一个“Serenityos”项目,这是非常令人惊讶的,我认为这一定是标志!(我稍后了解到,Jetbrains一直在使用我们的Serenityos Makefile来测试他们的Makefile支持。)

所以我决定给克里昂一个机会。说实话,刚开始的时候有点尴尬,直到我习惯了键盘快捷键。但没过几天,我的动作就加快了,感觉真的很棒。从那以后,我每天都在用它。

林斯:
与许多其他贡献者一样,在看到Andreas在他的YouTube上使用它之后,我开始使用克隆 - 特别是在提供免费许可证之后!我幸福地抛弃了我的通用代码编辑器,我必须配置到专门用于C ++开发的点,所以我真的很喜欢“IDE,而不仅仅是一个编辑器”的方面。所有的一切都是开箱即用的,而且随着时间的推移,我安装的一些附加组件根本没有在我的核心开发经验中发挥作用——没有它们我也完全没问题。

您认为CLion对c++开发人员最有好处的是什么?

andreas:
我非常喜欢快速流畅的导航工具。跳转到一个特定的文件/类/函数/等等。超级光滑。静态分析工具的集成也很棒。我喜欢看到来自clang-tidy的提示和编译器警告。

最近我一直在使用2021.3 EAP,我是它的超级粉丝推导出类型镶嵌对于c++“汽车”!

林斯:
我非常同意andreas的同意。代码和静态分析集成中的导航都很棒!那些铿cl的警告特别帮助我避免每一个陷阱。当我第一次来到他们时,我还经常查阅警告,以了解有关相关问题的更多信息。我一般发现警告给出了良好的建议,所以他们是我学习过程的一部分:^)

此外,我大量依赖于自动代码完成,这需要快速、准确,并理解语言,这是有帮助的——在CLion中,它符合所有这些条件!

Linus,正如C ++对你来说是一种新语言,这是难以同时习惯新的IDE吗?

林斯:
一点也不!正如前面提到的,在我开始学习c++之后,在转换到clon之前,我已经使用了将近一年的不同编辑器(不是IDE!),所以当我开始学习c++时,我已经适应了这种新语言。
此外,我过去几年使用了Pycharm和Android Studio,所以有一个即时熟悉。

您能否分享其他克利翁用户的一些提示,以充分利用IDE和您最喜欢的动作/快捷方式?

林斯:
我最喜欢的快捷方式之一是Double Shift,也就是到处搜索功能,这使得难以置信地切换到项目中的任何位置或执行否则将隐藏在菜单中的某处的操作。我不记得一切的快捷方式,所以能够按名称搜索它们是有帮助的。

我也喜欢Git的集成,它做得非常好。我还没有使用所有可用的功能,但每个人至少都需要在开发期间提交、修改和修复冲突,所有这些都可以在不离开IDE的情况下完成。

Serenityos是一个落下的开源项目JetBrains的OS支持程序现在,现在最具活跃的贡献者可以申请美国的自由许可。你会推荐其他人吗?贡献者需要这个机会吗?

andreas:
当然!自从我自己开始使用它,我就一直在向别人推荐它。

谢谢二位的采访!我希望你喜欢在CLion开发SerenityOS !

发现更多的

Baidu