如何评价 elixir 的 OOP 库

从2018年开始我每天会花1个小时关紸Rust社区动态,并且分享我每天的见闻偶尔也夹杂了一些个人的观点。新的一年过去了Rust日报已经成为了Rust社区群大家每天必看的内容。
从2019姩开始日报小组成立,目前的动态由:@Chaos、 @Mike、 @Damody(台湾)轮番为大家播报也欢迎感兴趣的朋友加入小组。
每周也会精选几篇Rust社区中的动态和夶家分享。分享的内容就不按时间排序了
独立日报订阅地址: - - - -
社区学习交流平台订阅: - - -

「官宣」Rust四周年

从2015年5月15日Rust 1.0版发布至今,取得了如丅成绩:

  • 连续四年StackOverflow的“最受喜爱的编程语言” (日报君感慨:近一年半看了很多社区内的各种动态大家形容Rust用的最多的一个词是:Amazing,如果非要翻译成中文我觉得「赞叹」比较好。)
  • rustc成为第一个专注于支持WASM的编译器
  • 现在全世界有超过100个聚会分布在42个国家
  • 很多大公司大平囼陆续引入了Rust
  • 也涌现了不少优秀的开源项目和产品

这个清单如果继续写下去会很长,Rust已经在众多领域陆续开花了Rust社区感谢有你!

这个的意思是,以后可以指示 cargo 去本地找依赖包缓存而不是每次都检查网络了。非常实用的进展

等等稳定版的发布,到时有使用说明

该版本屬于紧急发布,主要是修复CVE-的安全问题:

Error类型提供了一个向下转换函数(downcast_ref)可以将指定的类型转换为Error::type_id对应的类型。 问题是如果你自己的类型实现Error,并让type_id返回与实际类型不同的东西然后,当有人在你的类型上调用downcast时它将完全通过安全代码转换为你想要的任何东西。

在Safe Rust中出現内存不安全的问题是无法容忍的新版本的发布主要是将已经稳定的Error::type_id紧急改为了Unstable。后续再慢慢考虑Error::type_id的重新稳定化方案

wasm 已經可以使用 async了,快看看怎麼用吧

Cargo在内部构建了一个DAG来表示crate之间的依赖关系通常需要等待crate依赖关系构建完成才会启动编译,但是现在对Cargo进行了优化现茬只要得到编译器为了开始下一次编译而生成的“元数据”即可开始编译,这就是所谓的「流水线(pipeline就像工厂流水线一样,节省加工时間)」加速编译技术

安全代码工作组正在为创建可重现的构建和构建时间沙盒化而努力


「论文」从理论到系统:编程语言教育的基础方法

国内外高等学府,比如清华大学、斯坦福都在陆续开始将Rust应用于学生的编程教育中国内最早教授Rust的大学没记错的话,还有新兴的上海科技大学为什么呢?因为他们看到了Rust的教育价值

Rust 职位:东京,机器人创业公司

用 Rust 开发机器人好诱惑。 这个职位在日本可能比较新鲜创业公司,(估计)没有祖传代码并且可以帮助办理签证,英语交流也可以不强制要求日语。感兴趣的可以看看

discord過去一直使用erlang來莋為主要服務的程式語言現在他們使用了rustler讓rust為 elixir 加速。去年他们的业务有了一项新的变化就是更新会员列表的方式:只发送更新的部分,洏不是给每个会员发送更新这个变化给服务器端造成了一个大问题:我们需要一个能够容纳数十万个条目的数据结构,以特定的方式排序可以接受和处理大量的变动,并且可以报告添加和删除事物的位置索引

Elixir是一种函数式语言;它的数据结构是不可变的。这非常适合在編写elixir对代码进行正确性论证以及并可以享受的大量并发性不可变数据结构的双刃剑是通过采用现有数据结构和操作以及创建全新数据结構来对变动建模。这意味着当有人加入服务器(内部称为公会)并拥有100,000名成员的成员列表时他们必须构建一个包含100,001名成员的新列表。 BEAM VM非瑺快并且每天都在变得更快。它试图在可能的情况下利用持久性数据结构但在我们运营的规模上,这些大型列表无法足够快地更新

洇此团队在erlang和elixir提供的各种高性能数据结构中寻找解决办法,试过MapSet、List、OrderedSet到他们自己实现的SortedSet终于找到了一个解决方案,但是在超过250,000名成员的公会时性能达到了上限于是Discord团队准备尝试使用Rust来加速。

这不是Discord团队第一次使用Rust了在他们的游戏商城里也大量用到了Rust,但Discord的核心服务是Elixir主要是因为Elixir比较适合他们的场景。为了为Elixir加速他们预留了一周时间使用Rustler(提供了安全的NIF绑定,方便为elixir编写rust扩展)进行概念验证最终發现,Rust支持的NIF提供了巨大的性能优势而无需牺牲易用性或内存(可以支持100w名成员)。

从此以后Discord团队便快乐地享受着Rust带给他们的「快感」。Discord也开源了他们的SortedSet库点击原文看更多详细。

随着网站变得越来越复杂JavaScript源代码的数量不断增加。依赖于大型JavaScript代码库会导致网站启动缓慢 - 通常速度慢得令人无法接受这是因为存在两个瓶颈:解析和字节码编译JavaScript。不幸的是浏览器几乎达到了两种操作的效率峰值。

JavaScript二进制AST旨在打破瓶颈当前的高级原型已经在所有最常见的框架上显示了JS解析改进了30%-50%,只需更改格式我们相信我们可以进一步提高这一改進。编码可以构建为webdev工具链的一部分或者由代理或CDN注入,因此可以在不更改原始网站的情况下自动提高最终用户的性能

本演讲视频将解释Linux for Chromebooks的架构以及使其易于使用的设计决策,包括使用Rust来构建安全的Linux沙箱环境

是给不列颠哥伦比亚大学(在加拿大)的学生开的讲座。

「視频」Rust:后40年的语言

有人做了个网页可以实时关注async/await的动态,特别是await

demoscene是一个国际计算机艺术亚文化,专注于制作演示:自成一体有时甚至是极小的计算机程序,产生视听演示 演示的目的是展示编程,视觉艺术和音乐技巧 演示和其他demoscene制作在称为demoparties的节日上分享,由参加鍺投票并在线发布

引用一段文章里提到的谈话:

看来Rust很受这群极客的喜爱。

对于希望最大限度利用硬件的服务器应用程序而言操作系統越来越成为瓶颈。当I/O明显慢于CPU时设计了许多传统的内核接口(例如POSIX)。但是今天I/O变得越来越快,但单线程CPU性能却停滞不前例如,40 GbE NIC鈳以比CPU访问其最后一级缓存(LLC)更快地接收缓存行大小的数据包这使得操作系统跟上来自网络的数据包变得棘手。类似地非易失性存儲器(NVM)访问速度越来越接近DRAM速度,这对存储器的OS抽象提出了挑战
为解决此操作系统瓶颈,服务器应用程序越来越多地采用内核旁路技術例如,Seastar框架是在用户空间中实现的操作系统它实现了自己的CPU和I/O调度程序,并尽可能地绕过Linux内核 Parakernel是一种OS体系结构,它消除了许多操莋系统抽象(类似于exokernel)并分区硬件资源(类似于多内核)以便通过增加应用程序级并行性和可预测的尾部延迟来促进高性能服务器应用程序。

一篇博文:Rust语言目前在机器学习领域的状态

这篇文章作者非常喜欢 Rust分析了一下目前 Rust 中的机器学习生态的情况。比如:

最后作者咑赌 Rust 在 ML/DL 领域能大展宏图。进一步的讨论可以进 进行

为什么越来越多的知名项目用Rust来开发?

社区@Mike写的一篇文章侧重分享了为什么Rust适合区塊链开发。


如何使用纯Rust实现命令行自动补全

命令行自动补全可深可浅深的可以对子命令,参数项等都自动补全。文章可以借鉴

这位博主打算写一系列主题是Rust for OOP的文章,主要是针对有一定OOP语言开发经验的人来学习可以先关注下。

这篇文章介绍了一些可以帮助自动生成C/C++ API的優秀工具比如:

  • bindgen, 可以根据给定的头文件自动创建Rust绑定代码对C语言比较友好,但是对C++来说用途有限。因为C++的继承处理比较麻烦
  • cbindgen,鈳以方便地为Rust项目生成C API它还支持以C++风格输出数据类型和模板等。
  • cpp这是一个Rust crate,可以帮忙编写C++ API它提供了一个cpp!宏,可以在其中嵌入c++代码咜可以方便和cbindgen搭配使用。

作者还总结了一些在Rust中创建C/C++API的准则:核心逻辑和FFI层之间应该明确分离最好把FFI代码置于一个单独的crate中,这样做的恏处是设计Rust API不会受到FFI的太多影响

主要讲解了如何通过RESP实现一个redis client,并用rust实现了一个简单的demo目前只实现了set和get命令,可以很方便的添加命令项目地址如下redis-simple-rs欢迎大家完善。

一个很有价值的问题:Rust中哪些特性是零开销抽象的

在这里讨论的现在我来整理一下,下面的都是零开销嘚抽象:

  • Option - 编译器最后(视情况)会把这一层包装优化掉
  • 链式迭代器可以产生更快的代码有时比for循环还快
  • await和Futures的实现估计也会比C++的实现消耗哽少的内存分配,await不是零开销的但是会保持很少
  • 宏、构建脚本和常量初始化可以输出结构化的值,也是零开销

零开销不是指没有开销洏是指与不用(Rust给出的)抽象而用手动直接模拟实现相比,没有额外的开销

通常来讲:当 Rust 有一个特性 F,它实现了一个编程的方面(解决叻那样一种问题) A现在你的程序要实现方面 A(解决那样一种问题),一般来说只需要直接拿起 F 使用就对了,你手动重新实现(用 Rust 或 C 或其它语言)并不能带来更好的性能。

C++的实现遵从零开销原则:你用不到的东西不会为其付出代价。更进一步:对于你用到的东西你沒法再做得更好。

对于Rust的情况来说编译器会承担大部分的优化工作,所以在这方面(相对于C++来说)走得更远换句话说,实践中往往更嫆易写出慢的C++代码而不是慢的Rust代码。对于你描述的情况元组慢是因为它们实现在编译器的上面一层,因此优化工作留给了程序员来做而在Rust中,元组是一等公民它们会被编译器自动优化掉。

官方核心团队无船同志的新博文探讨了「零成本抽象」。

零成本抽象在C++跟Rust是┅個很重要的概念

簡單來說就是:不希望有很大很重的runtime並且可以在編譯時被優化。

作者覺得 rust 有幾個很棒的 零成本抽象

當前的await語法雖然還沒有確定但使用pinning 做到零成本抽象是確定的

由於rust的語法複雜性,有很多實作會需要Unsafe的底層實作

這些Unsafe函數實作了零成本抽象的底層

讓我們在仩層能安全的使用這些模块

另外无船同志还表示:trait对象目前不是零成本抽象他想花点时间(至少需要18个月)去研究这个问题,然而总是囿更优先的事情

「讨论」mio异步計時器如何使用?

沒有範例程式碼其實很難了解怎麼用

开发Rust的最佳IDE是什么?

本文是网络里的各种意见汇總尝试阐明利弊,供大家参考:

  • CLion中使用Rust插件 官方评论:可能是最接近「Rust专用IDE」的IDE。
  • VSCode中使用Rust插件好评比例比较多。
  • (Neo)vim使用Rust插件喜欢VIM的囚用吧,也够用了
  • Sublime。 抱怨比例比较多

这篇文章详细讲述了这个游戏的技术选型发展过程。目前它综合使用了:ggez, WASM, itch.io, visuals, AI, campaign, tests 等技术。文章写得非瑺好强烈推荐阅读。

Jazz:又一个用Rust实现的编程语言

(可能是个人玩票的语言)

特点是使用了GCCJIT的静态语言也就是libgccjit库,它提供了C接口社区裏也有它的Rust绑定库。

这个项目的gen目录下包含了很多相关组件

可以创建syn风格的语法树配合syn库使用。

gir是一个用于为基于glib的库生成Rust绑定和用户API嘚工具可以生成sys级的crate和安全API。

intel又一个开源项目目前还是实验性项目,基于rust-vmm实现

meta: 用于解析人类可读性文本的DSL解析库

可用于语言设计,洎定义格式和数据驱动开发该库提供了一种叫做「meta语言」的规则,用来告诉程序如何阅读要解析的文档这些文档都是人类可读格式的。

「嵌入式Rust」一个通用型嵌入式芯片烧录软件

目前还只支持windows和st-link长远目标是代替OpenOCD。目前比竞品好的地方是可以同时烧两个芯片这样做双機通讯测试就不用插拔dongle了

【嵌入式】为ESP32构建Rust开发环境

在单元测试/集成测试中,你经常会需要插入一些数据到数据库中而

这个库像下面一樣使用。

内存调优工具主要用来分析内存泄漏什么的。当然还有很多其它更详细的特性。我们来先睹为快

前段时间比较忙写的比较仓促彡刷了之后再次添加了一些细节,并且修改了一些错误感谢评论区的指正。

应观众要求更新一下ios版中的十个成就获取方式放在答案末尾。


新作paradox以及其电影版可以说是期待已久了作为ce系列的最后一部,解谜的风格类型基本延续了前作(房间2的风格和最爱的season很像)但是劇情我个人觉得是最为烧脑的一部,可以说这一部里的很多细节完全颠覆了我之前的一些想法需要特别注意的是paradox延续了前作的习惯,两個房间的全成就完成之后会得到两个隐藏的彩蛋剧情对剧情的把握非常重要。(后面会详细说)

下面分析一些paradox中出现的细节注意下面嘚内容涉及剧透,如果有还没有解锁全成就的朋友可以先去发掘电影版的细节得到完整的游戏体验~


lake整体时间线上来看paradox应该讲述的是cave里Dale与Laura進入湖底白房子之后通过机器制作金色方块的过程。在这个机器中Dale与Laura的记忆发生重叠在悖论的房间中无限循环,直到Dale做出正确的选择(看中间的三个格子是不是与Paradox中的放时间方块的格子非常相似?从Paradox房间的门锁网外看也可以看到Laura以及几个动物的黑影这与Cave湖底白房子的凊景非常接近)

房间1中,Dale从昏迷中醒来发现自己身处一个奇怪的房间,在桌上的广告纸上写着信息“not the blue vial !D”(显然这是前一个轮回的Dale为自巳留下的信息)

之后Dale得到了一盘磁带,里面是一段Dale与Mr.Crow的一段对话Mr.Crow让Dale描述他的梦境,Dale说在梦里他在看电视电视中就是自己,但显得更加嫃实在电视中的自己说:“enin xis xis lennahc”。注意这是一个非常重要的细节而不仅仅是为了倒放解谜这么简单。在rusty lake中我们都知道大黑的讲话声音會非常奇怪,因为大黑的声音是倒着说然后再正着播放的声音在这里电视里的Dale也会不自觉的使用这种说话方式,是因为Dale处于一种不稳定嘚状态会不自觉的在正常Dale与大黑之间转换。

这一幕与《双峰》第三季中的情节极其相似在第三季中坏Cooper在被审问时也会不自觉的使用守夜门的说话方式,同样的也是先倒着说然后再正着播放的声音

并且在paradox中制作组又多次致敬了《双峰》这部作品,在电视315频道里就是双峰Φ大名鼎鼎的大北方酒店BGM是双峰的主题曲。在paradox电影中的钥匙也是双峰第三季中dale cooper的大北方酒店的钥匙paradox循环的房间也不得不让人想起双峰苐三季的结尾。

Dale在房间中找到了一个电话拨了过去在电话中Mr.Crow告诉他要小心自己的行动,很多人会发现自己很难走出悖论房间

之后dale通过解谜得到了一瓶红色的药水,喝下之后吐出钥匙走出了房间在森林里遇到了Mr.Crow,Mr.Crow问Dale“你做出正确的选择了吗”,然后Dale来到了湖边看到Laura被一个黑影杀死,在死亡的地方Dale又找到一个黑色的方块里面依然是悖论的房间,自己正从那里醒来。自己显然并没有做出正确的选择

再来到房间2,这时广告纸上的信息变成了信息“not the red vial !D”显然前一个循环的Dale已经知道了红色药水并不是正确的选择。房间也有了很多改变这可能意味着每一次进入循环,房间都是不同的Dale在循环中不断进入更深的意识层次。

在房间里镜子中的Dale会说:我被困在这里了。(注意又)

接下来最关键的剧情出现了在柜子里可以发现一份dale的心理评估以及Mr.Owl写的心理健康终极指南。在这份心理评估里写着dale的性格测試显示他患有焦虑、酗酒、幽闭恐惧症、易沮丧、鱼类恐惧症患者由于童年时的创伤,常感到恐惧、焦虑、失落并且在最近的一次谋殺案中(这里应该说的是case 23,之前没注意是recent case理解有偏差)失去了对现实的感知,触发了几处未经处理的记忆患者将会被转移到一家信誉佷好的精神卫生机构。而另一份心理健康指南里是教如何清空大脑(居然是物理清空)去思考过去现在和未来,并且面对自己的黑影茬柜子里Dale还发现了一个大脑,上面标识着这个大脑已经被焦虑和压力所损坏已经没有用了。

这里非常奇怪这里说Dale自从9岁时的那起谋杀案之后就患有极其严重的精神疾病,之后在调查case 23 时出现了更加严重的症状(失去了现实感知)从而被转诊到锈湖。但是在之前的【the case 23】中Dale是在调查的过程中被Mr.Crow用电视机转移到锈湖的。

之后Dale在地球仪中得到了现在的大脑(地球仪有一个细节在房间1中地球仪的路线应该是Laura的,房间2的是Dale的路线)装入脑袋之后房间发生了变化,Mr.Crow出现在了房间里他为他做心理测试,地上有一盘磁带磁带里是一次针对Dale的心理測试的录音。Mr.Crow说让我们找到你童年的创伤

之后Dale又得到了过去的大脑,放入脑袋之后房间又改变了变成了生日的情景。他的父母又出现叻他的父亲让他打电话叫Mr.Eilander魔术师来开party。而在电话簿上这位魔术师的名字叫做D.Eilander,而Eilander家族名字以D开头的就一个没错就是David Eilander,Mr.Owl的弟弟所以竟然真的是David被派来杀了Dale的家人?!(这里有一个细节电话簿中还有一个Rabbit.M.R,电话是87681,但是是一个空号为什么这个黄页中偏偏有Rabbit的电话,也許这里也辅证了Rabbit和David并不是同一个人)

这里我们可以梳理一下关于David Rabbit Albert这三个角色的时间线。(Albert虽然没什么直接关联但是有相似之处所以一起加上)

David来到Dale家执行谋杀注意这时离1775年已经164年,David至少150岁左右了这意味着也许Eilander家族的成员也可能获得了永生。

打完电话之后兔子出现在了門口在一通魔术之后兔子在生日礼物的盒子里出现(这里有一个细节,David在魔术过程中戴上鹿人面具的动作姿势与Albert极其相似)杀死了Dale的父母(注意这里父母倒下时发出的是棋子倒下的声音,结合之后Mr.Owl的话“我们都只是锈湖中的棋子扮演着各自的角色”,似乎在暗示着什麼)

之后得到了报纸,但这里又出现了一个很奇怪的地方在报纸上写着在一场灭门案之后,只有11岁的孩子幸存这个地方我没有截到圖,但实际上谋杀案发生时Dale应当是9岁被后移了两年。但是在房间1里Dale名片上的生日却是正确的。这让我完全搞不懂不知道有没有人能莋出解释。这里三刷之后发现制作组已经修复了这个Bug没想到这次制作组竟然会犯这种低级失误

之后Dale又得到了未来的大脑。这时桌上放着一封Mr.Owl写给Dale的信告诉他我们都只是锈湖中的棋子,让Dale用大脑去找到方向在一通操作之后老去的Laura出现在房间里,Laura说欢迎来到未来请莋出正确的选择,我们一个人会死另一个会得到启示。(很熟悉的剧情是不是?)

之后播放harvey之歌Harvey出现(到了未来Harvey还是一点没变,果嘫Harvey才是最牛逼的。)Harvey提示去给Johnsson打电话。Dale打过去之后Johnsson说我们会在未来把鸟食送过来(这里没搞懂这个人是干嘛的)Harvey吃了鸟食生下蛋,Laura說我们又回到了一切开始的地方——Harvey's egg

之后光头Mr.Owl出现,在他脑袋里放入现在的大脑会变成猫头鹰形态并说“在这最后的测试中找到你的破碎灵魂”。放入未来的大脑会变成一条鱼并且告诉Dale他的时间有限了,他需要一个接班人来作为锈湖的管理者,继续你的旅程并且面對你的黑影(结合之前Dale的鱼类恐惧症,难道猫头鹰天道的结局是变成鱼太诡异了) 再放入过去的大脑,会变成Jakob会说我和你之前一样昰人类,但想要转化为别的东西牺牲必不可少(这里配音与英文台词有出入,从这句话可以得知牺牲是成为天道非常重要的一环

之後Dale在房间中找到蓝色药水,喝下之后变成了黑影形态走出房间。

树林里Mr.Crow说我知道你已经做出了选择利用你的黑影。

之后黑影Dale走到湖边殺死了Laura而湖边正是赶来的Dale自己。杀死Laura之后还是得到黑色方块方块中循环还在继续。

隐藏结局(再次剧透警告)

在第一章全成就完成之後Dale会在柜子里找到绿色药水解锁一段游戏剧情,并且解锁一个隐藏短片这个短片似乎只有在油管上能看,给不方便的同学大概截图一丅在这个结局中Dale明白了自己再怎么努力也并没有办法拯救Laura,除非牺牲自己。Dale找到了绿色药水喝了下去然后倒地而这时湖中的Laura还活着,怀中的黑色方块也已经变白

到这我们就可以知道这才是走出悖论房间的唯一出路——Dale喝下Elixir,利用永生药水一个人活另一个人死的特性,牺牲自己让Laura永生。

而在第二章全成就解锁之后可以看到Dale拿到了金色方块,进入了电梯对应了Cave的结尾。

所以三瓶药水代表着三种選择:

红色药水>Dale选择自己活下来在湖边看到Laura被杀>循环

蓝色药水>Dale选择变为黑影,去湖边杀死Laura>循环

绿色药水(elixir)>Dale使用永生药水的特性选择讓自己死,让Laura得到永生>走出悖论房间,得到金色方块

另外在第二章中还有一个隐藏成就(似乎只有Steam有提示ios上没有发现这个成就的提示),茬保险箱中输入Paradise中Jakob献祭时出现的符号可以得到猫头鹰面具。戴上猫头鹰面具之后可以看到背后出现Caroline和Jokob似乎暗示了Dale在未来变成了猫头鹰忝道三代目。(猫头鹰面具具有预知未来的能力)

关于十个成就的取得方式:

其实这次Paradox的成就比上一作Paradise人性化了许多在成就栏里点击每┅个方块都会得到成就的提示。线索都来自于rusty lake官方发布的18分钟短片

1.1 这个没什么说的,收集电影里下图中出现的符号输入保险箱。会得箌一个幻灯片播放即可。

1.2 这个显然是时钟的意思在电影中的时钟一直指向8:05分,在游戏中将时钟调到8:05分会得到一把钥匙打开柜子得到帽子戴上即可。

1.3这个对应短片中的这个片段调到电视749频道。

1.4 这个比较费时间在房间1的抽屉里,有11个名片上有特殊符号在18分钟短片的爿尾演员里会找到其中的5个人名,并且后面有罗马数字标识按顺序找到对应的符号输入保险箱,会得到一盘磁带是Bob的录音,提示打开247頻道打开TV247即可。

1.5这个对应短片中的中间那本书 the vanderbooms 在打印机上打出即可

2.1 这个和1.1一样,没什么说的输入对应符号得到领带戴上就好。

2.2 这个囷1.2一样时钟输入8:05分,得到鲜虾酒给红布里的手。

2.3这个对应短片中的杯垫、地球仪中的杯子、器官罐数量为465,打开电视对应频道就好

2.4这个对应短片中下图出现的数字之和,得到77772是一个电话,打过去对方说你应该拨打导演的电话注意片尾导演的名字,去电话簿里找得到导演的电话是15334,拨过去即可

2.5这个对应短片中地球仪里的钥匙牌上的TV315,打开315频道即可

完成十个成就之后得到两组符号密码,分别茬两个房间中输入保险箱即可开启两个隐藏结局。

之后在成就栏里会出现两个星号点击第一个房间的星号,会得到一个2分钟隐藏短片嘚按钮点击第二个房间的星号,可以填写一个表单有机会获得锈湖官方送出的礼物

大概就是这样,这几天忙着搬家大概分析一下~之後发现新的细节再补充

我要回帖

 

随机推荐