Ray Eldath's Bloghttps://ray-eldath.me/img/avatar.jpg2022-11-09T18:40:27.000Zhttps://ray-eldath.me/Ray EldathHexo深入 MIT 6.824:实现 LeaseRead 和全异步 shardkvhttps://ray-eldath.me/programming/deep-dive-in-6824/2022-03-15T14:33:40.000Z2022-11-09T18:40:27.000Z<p>「生活,就是当你忙着做其它计划时,发生在你身上的事」:要问起开始学 MIT6.824 的缘由,这是一句恰如其分的描述。一个学期结束,原本的计划是深入研究一下编程语言和形式化验证,然后换到一个和操作系统关系更大的岗位;不知不觉却变成了写个数据库,在做操作系统相关的工作前先试试存储的方向——刚放假时我还对自己说,我是绝对不会喜欢上存储的。也许人们对自己还没下过苦功的事情,就是提不起劲的吧?</p>
<p>于是春节假期开始,明显一年比一年淡漠的气氛(今年甚至没看拜年祭)环绕,倒也是为思考提供了较好的场所:没有多少亲戚前来拜访,也就没有多少生硬蹩脚的玩笑和紧张尴尬的时刻需要消化。到现在,整一个月,算是把 MIT6.824 彻底完成了。</p>
<p>老实说,这并不如我想象中的难。在上手之前总觉得 824 的高不可攀,非顶尖学府的高手不可;但在自己<em>突然</em>完成之后却发现虽然过程并不是「出乎意料地」顺利,但产出确实是出乎意料地好。</p>
<p><a href="https://github.com/Ray-Eldath/MIT6.824">我已开源了</a>这份实现。这一实现稳定通过了 Lab 1 到 Lab 4 的每一个测试点(至少 1000 次,通常 2000 次;其中 <code>Linearizability2B</code> 通过了 10000 次——这么做是因为在<a href="https://www.anishathalye.com/2017/06/04/testing-distributed-systems-for-linearizability/">提出 porcupine 的文章</a>中,作者说TA “没有找到<em>任何一个</em>线性一致性测试不能发现的错误”),完成了 Lab 4 的两个 Challenges(即标题中的<em>全异步 shardkv</em>),同时还<em>额外</em>实现了 LeaseRead with noop 的优化,使得读请求无需经共识层——本文中提出的解决方案或许是对如何在 MIT 6.824 中实现这一优化的较好参考。另一方面,我谨慎地组织了代码结构,保证代码的粒度适宜——既不引入过多重复,又不引入过多函数(是不是想起了洗试管的原则?嘿嘿),每一次修改都执行了充分的回归测试,并且非常谨慎地操作 squash 和 cherry-pick,保证修改最少、最必要,且和我<strong>完成 Lab 的进度</strong>严格对应:这意味着读者可以从代码的提交历史中明确看到<em>某个 Lab 和下一个 Lab</em> 之间应要做哪些修改。</p>
<article class="message is-info">
<div class="message-header">
<p><i class="fas fa-image"></i> 关于头图</p>
</div>
<div class="message-body">
头图来自 <a href="https://twitter.com/werlosk" target="_blank">Twitter@Werlosk</a>。
</div>
</article>本博客评论区现已支持邮件提醒https://ray-eldath.me/notice/now-support-email-notice/2022-03-09T16:00:00.000Z2023-02-01T18:35:35.614Z记忆、目光、另一种迷惘:the end of 2021https://ray-eldath.me/life/the-end-of-2021/2022-01-06T07:19:14.000Z2023-02-01T18:35:35.618Z<p>和这里的许多文章一样,本文的标题依然是仿照了某篇令我印象深刻的文章的标题。:-)</p>
<blockquote>
<p>最近考完试就在忙课设,这两天才终于有时间把这篇文章写完…</p>
</blockquote>
<p>「时间之矢向前飞逝 / 祂飞离时震颤的双翼总拍伤我的灵魂」,几个月前读到的这句诗如今无论是它的作者(是里尔克吗?)还是其全貌都已无从知晓,只觉得以这句想象力奇绝的诗句概括行将结束的整整一年,确实恰如其分。</p>
<p>写下上一篇年终总结(不知为何我很不喜欢「年终总结」这个词——如你所见,标题很努力地做到了不用这四个字)至今已有一年有余,而 2021 这一年,可以说是空前的烂漫和精彩。这一年,无数美好的事情,以我此前从来不敢想望的方式,完全不可预料地扑面而来(未来像盛夏的大雨,在我们还不及撑开伞时就扑面而来<sup>1</sup>):今年的许多许多段<em>回忆</em>都是出奇的美好,它们是如此的弥足珍贵,冥冥之中我总觉得,即便是以一个人整整一生的时间尺度来衡量,这些回忆都将在时间的长河中熠熠生辉,就像华兹华斯笔下那些总能「让我们在困顿之时为之一振」的「卓越超群、瑰伟壮丽的若干时间点」<sup><em>2</em></sup>。</p>
<p>可是,正当世界向我们显露它那丰富多彩的<a href="https://m.thepaper.cn/baijiahao_10470277">衬里</a>的同时,祂却又向我们徐徐展开了一副人们受苦受难图景的画卷。大三上已经结束,大家突然都紧张了起来,似乎才刚品尝到青春这甘醇甜美的琼浆,就要去体会人们这<a href="https://www.zgnfys.com/m/a/nfwx-52600.shtml">毫无意义地辛苦劳作、不得休息的无望图景</a>。人们出于经济富足、出人头地等种种平凡低微的原因,在日常生活中从事各个琐碎、侮辱人才能又耗费人精神的工作,无论是不是心甘情愿,都要在就在这无尽的琐事中逐渐被「磨损」,逐渐只觉得,生活,永远在触不可及的地方,因为「此时此刻」永远是那么的无聊、那么的缺乏诗意、那么的死气沉沉——生活永远不在<em>这里</em>,因为生活永远在<a href="https://book.douban.com/subject/25900388/"><em>别处</em></a>。</p>
<p>这是<em>另一种迷惘</em>。人总要在不断的学习中成长,可是只有很少的人能够对一个领域怀有足够纯洁的热诚,从而主动地学习并自得其乐;任何成就的取得都需要决绝的努力,可是人们很难为一个虚无缥缈、触不可及的目标和「理想」长久地坚持,并摒弃种种安逸的生活方式。时日无多,回首你这过去的日子,几乎都在随性而为的自由和放纵中度过,你是否已经失去了(甚至是从未拥有过?)沉着刻苦的品格?考研还是工作?你能坚持下去吗?曾以为坦荡无比的生活最终坍缩(是的,在<em>目光</em>的<em>观测</em>下)成区区几个选择而已,怎样做你才不会后悔?在被抛入 “就像海洋的生活”(广东孩子请会意地笑笑)之前,你还要做些什么?你<strong>到底</strong>想要怎样的生活,又<strong>到底</strong>是否有相称的品格和<strong>毅力</strong>来得到它?</p>
<p>我依然没有答案。或者确切的说,自从一个月前学期仿佛是毫无预兆地结束以来,我一直在<strong>逃避</strong>这些问题,因为我实在是无从回答。我只希望当我完成本文,为这飞快过去的 2021 做完注时,我能有一丁点儿的头绪。</p>
<article class="message is-info">
<div class="message-header">
<p><i class="fas fa-camera"></i> 关于头图</p>
</div>
<div class="message-body">
头图摄于 2020 年 12 月,是我们乐队在学校一年一度的音乐节演出前最后一次排练。那次排练效果很好,大家都非常高兴,那晚就是这美好、珍贵回忆中的一段。图中两人未出镜:我(因为这张照片是我拍的)和我们的贝斯手(我真的没有黑贝斯——至少当时没有!)。
</div>
</article>还有什么应该去写的事情?https://ray-eldath.me/life/what-left-behind/2021-06-22T08:56:22.000Z2023-02-01T18:35:35.618Z<p>大概两个星期以前,被朋友问到了一个问题。她问我:如果明天就是世界末日,你有没有什么想做的事?</p>
<p>她自己的回复是要<strong>立刻</strong>到重庆(原话大意是 “不管发生什么我都要立刻飞过去”)去吃正宗的重庆火锅,因为在这边吃到的所有火锅都不怎么样。她说,这种回复其实表明她并不对自己当下的生活感到全然满意,因为明天就是世界的终结也会想去「最后疯狂一把」,而如果是真正满意自己的生活的话,回复应该是 “该怎么过就怎么过” 才是。</p>
<p>这几天我也一直在想这个问题。如果明天就是世界末日,我又会去做什么呢?</p>一无所有https://ray-eldath.me/literature/poem-nothing-but-thee/2021-04-25T18:28:31.000Z2023-02-01T18:35:35.614Z第二首诗,献给一位朋友。如果事情起了变化…https://ray-eldath.me/literature/poem-if-things-changed/2021-04-11T11:54:28.000Z2023-02-01T18:35:35.614Z那会不会变回来呢...?Self:编程语言的变革仍未到来https://ray-eldath.me/programming/self-language/2021-03-15T07:09:20.000Z2023-02-01T18:35:35.614Z<blockquote>
<p>本文是一篇<em>小作品</em>。</p>
</blockquote>
<p>本文引用并翻译了在 HOPL III 上发表的论文 <em>Self</em>(DOI: <a href="https://doi.org/10.1145/1238844.1238853">10.1145/1238844.1238853</a>)中的倒数第二节。在 ACM Digital Library 收录的所有 <a href="https://dl.acm.org/conference/hopl">HOPL(<em>History of Programming Languages</em>)</a> 论文中,这篇论文的下载量排到了第八位。</p>
<p>我将要引用并翻译的段落出自论文的倒数第二节 <em>“8. Conclusion”(8. 结论)</em> 。在读完全文后,我在我的私人群里如此表达我的感受:</p>计算机领域的三个重要思想:抽象,分层和高阶https://ray-eldath.me/programming/three-important-ideas/2021-03-05T18:53:11.000Z2023-02-01T18:35:35.618Z<p>昨晚看了点比较有意思的东西,于是决定写一篇文章简单讲一下。</p>
<p>本文致力于概括本寒对计算机界三个重要思想的体会和认识。我希望做的并不是简单的百科全书式的列举(“<code>A</code> 体现了抽象思想;<code>B</code> 体现了分层思想…”),而是从这些思想中选取几个我个人<strong>较有体会</strong>(或者是我单纯觉得<strong>十分有趣</strong>)的侧面拿来细讲。这些侧面仅仅能覆盖这些思想应用范围中十分微小的一部分,它们<strong>并不是</strong>最有代表性的、<strong>亦非</strong>最为重要的——仅仅因为,我个人对这点侧面有些体会,或者我个人认为它比较有趣而已。</p>
<p>同样需要强调,和本博客大多数文章一样,本文<strong>个人意见色彩浓厚——本文并不客观,更绝不权威。</strong></p>
<p>为方便行文,文中提到的大量引述来源不会标号、也不会在文中注明。关于攥写时参考的资料,请参见文末 “参考文献”。</p>从 SML 到 Scala:简单考察 typeclass 范式的演变和各种实现,以及🎉🎉🎉https://ray-eldath.me/programming/on-typeclass-paradigm/2021-02-13T09:35:11.000Z2023-02-01T18:35:35.614Z<blockquote>
<p>本文是一篇「小作品」</p>
<p><del>这次要是还写巨长我就吃了渚薰((((大雾)</del></p>
</blockquote>
<p>Typeclass 范式是对于 <em>表达式问题 Expression Problem</em> 的一个重要的解。在我了解的编程语言范式中,个人认为,typeclass 范式是<em>较为优雅</em>的一个。本文将简要考察这一范式本身,以及更加重要的:它在各种编程语言中到底如何落地。具体而言,本文将在各种落地语言中构造<strong>同一个</strong>示例:一个类似 Ruby 中的 Comparable <em>mixin</em>,或者 Java 中的 Comparable 接口,并且演示这些结构如何对既有的类型同样具备可扩展性。</p>
<p>阅读本文需要一定的代码基础,尤其是对 typeclass 范式的认识和相关的编码经验。本文并不会对文中的举例作详尽解释。</p>简单聊聊编程语言的哲学,以及关于 Rust 的一些想法 (1)https://ray-eldath.me/programming/thoughts-on-rust-1/2021-02-12T14:29:31.000Z2022-11-16T17:54:46.000Z<blockquote>
<p><del>本文是一篇「小作品」。</del></p>
<p>草,写着写着发现越写越长,<strong>一点也不「小」嘛。</strong></p>
<p>或许我真的应该尝试一下「小」作品的体例才是。</p>
</blockquote>
<p>我的长期TODO列表里已经躺着五六篇以“博文”开头的条目——原本想着寒假一周一篇很快就能写完,然而到现在也没动笔。爆肝填坑了一个星期,今天实在有点累,不大想打开 RustLion,于是把这篇坑了很久的文章写一写。</p>
<blockquote>
<p>在这几篇坑了这么久的文章中其实有一篇已经写了前半部分了,然而咕了太久后半部分要写什么都有点不大记得,于是只能前功尽弃…</p>
</blockquote>
<p>本文的主要内容是从<strong>我个人的经验</strong>出发,简单聊聊对于 Rust 的一些想法和体会。我会尽量避开诸如 “文档质量良好”、“很有特点” 这类宽泛的概括,而尽量将自己在使用 Rust 编程的过程中感受到的一些特别之处、尤其是和此前经历的不同之处拿来说说。我期望如此行文能使得本文对无论是 Rust 初学者、还是仍在观望的开发者甚至是 Rust 老手们都能带来一定启发。</p>
<article class="message is-warning">
<div class="message-header">
<p><i class="fas fa-exclamation-triangle"></i> 可能过时</p>
</div>
<div class="message-body">
<p><strong>2022/11/17:</strong>经过快两年的学习和工业实践,我对编程语言又有了新的认识。本文中对于 Ruby 的评论、尤其是对于 Ruby <i>优于</i> Python 的评论,已不再是我当前的看法。不过,很大程度上我仍然保持着占本文主要篇幅的对 Rust 的各种见解,但由于在过去的一年间我的兴趣发生了重大转移(转向系统、尤其是数据系统的领域),我现在较少使用 Rust 语言(这恰恰是由于在本文中提出的一系列 Rust 语言设计不尽人意的原因),较少关注 Rust 语言社区,也更少广泛地思考编程语言本身,本文中的许多观点可能不再能反映编程语言发展的最新情况。</p>
<p>如上文所述,占本文主要篇幅的观点并未明显改变,如果将来发生这种情况,我会修订或补正本文。</p>
</div>
</article>有关媒体、社会学、阶级流动、人工智能、还原论、爱情、人类沙文主义和其它一些话题https://ray-eldath.me/life/me-and-the-world/2021-01-28T20:19:22.000Z2023-02-01T18:35:35.606Z<p>我有一个非常、非常、非常不好的习惯,那就是喜欢沉浸在深刻、反复的自言自语中,不断地与现实中并不存在的、永远忍受永远包容的倾听者对话。显然这并不实际——并没有能一直忍受我烦人聒噪的慷慨之士。危险之处在于,我自己会经常陷于这样反复的自我对话当中,导致长久持续的失眠,以及更加危险的,一种单调思想的不断反复叠加最终造成极度不理智的言行。</p>
<p>所以昨晚就发生了这样的事情(事实上回家以来这经常发生,令我十分绝望——奇怪的是在学校并不会这样),辗转反侧、自我对话直到四点多彻底睡不着觉,于是起来将自己乱七八糟的思绪记录一二。</p>
<p>这就是这篇文章的由来——事实上我认为理想的形式应该是作为“访谈”,由一位永远忍受永远包容的倾听者记录并编辑,但显然本垃圾并没有这样的社会地位和条件= =。所以,本文是以一种“访谈”,或者说是“随笔”的形式组织并行文的,你应该已经从标题中看出了本文话题的跳跃性——正是如此。</p>
<p>创作本文的动机是作为一种<em>价值观输出</em>。我可能会引用多个领域的各种文献(见文末)以期使读者对我的观念有更好的理解,但我并不了解这些领域中的<strong>任何一个</strong>,正因如此,我的观点难免片面偏颇;考虑到本文是作为一篇<strong>自我<em>陈述</em></strong>而非<strong>观点<em>论证</em></strong>组织和行文,关于这一点,还请读者理解。</p>我与科幻的故事,以及不情愿地2021https://ray-eldath.me/life/me-and-scifi-and-2021/2021-01-10T11:20:23.000Z2023-02-01T18:35:35.606Z<blockquote>
<p><strong>Update 2021.1.10:</strong></p>
<p>本文主要内容是一篇旧文,以及一些有关2021的文字。</p>
<p>最终还是打算把文章贴到博客上来(其实是一直忘了),做了一些修改,补了一些最近的<em>我与科幻的故事</em>。<br>顺便这篇短文的一个选段居然还真在SFW2005的《回声》专栏上刊出来了…… 然而选的是现在看来比较尴尬的一个段落,感觉是真的羞耻(((</p>
<p>以下内容(直至文末的分割线)作于2020年2月份,经少量修订。文末有关2021的内容作于今日。</p>
</blockquote>[选译] Nature 论文:关于动物同性性行为演化的另一种假说https://ray-eldath.me/science/monk2019/2020-08-18T04:36:12.000Z2023-02-01T18:35:35.606Z<p><strong>译者按:</strong>这篇论文最早是微信公众号「Nature自然科研」在每周新闻中推送给我的,是刊发于2019年11月号《自然:生态学与演化》(Nature Ecology & Evolution)上的「观点(Perspective)」文章。我前天一个晚上看完了,看完总有种大脑升级的感觉,幼小的心灵受到了极大的震撼……. 花了三天,<em>选译</em>了几个比较有意思、比较重要或者单纯比较<strong>令人震惊</strong>的段落,放上来,各位当个“奇文共赏”就好。</p>
<p><strong>论文原文:</strong>Monk, J.D., Giglio, E., Kamath, A. <em>et al.</em> An alternative hypothesis for the evolution of same-sex sexual behaviour in animals. <em>Nat Ecol Evol</em> 3, 1622–1631 (2019). <a href="https://doi.org/10.1038/s41559-019-1019-7">https://doi.org/10.1038/s41559-019-1019-7</a></p>
<p>译者对原文内容、价值观不负责任,仅对<em>翻译本身</em>负责。</p>
<p>以下是选译的段落。译文中<strong>省去了所有的引用注记</strong>,并以 <strong>[粗体方括号]</strong> 标明跳过不译的段落。译文中<strong>粗体</strong>和<em>斜体</em>均为译者所加。</p>[译] 病毒学家内森·拉尔夫:我无比期待“最后一场瘟疫”https://ray-eldath.me/science/nathan-wolfe/2020-08-17T04:03:26.000Z2023-02-01T18:35:35.614Z<p>本文是一篇旧文。最早是作为知乎的<a href="https://zhuanlan.zhihu.com/p/113318789">独立文章</a>发出去的——果然没什么人感兴趣,这么久以来,现在咱也算是半退乎了。最近刚好又在<em>选译、纯手译</em>一篇<strong>巨震惊</strong>的文章(各位敬请期待),于是想着把以前这篇稍微改改放上来算了,估计反正也不会有人看的。</p>
<p>好吧,就这样。以下是旧文章内容。</p>
<hr>
<p>本篇文章是刊登在非盈利机构 <a href="https://www.edge.org/">edge.org</a> 上的英文访谈辑要的翻译。原文地址:<a href="https://www.edge.org/conversation/nathan_wolfe-waiting-for-the-final-plague">WAITING FOR “THE FINAL PLAGUE” - edge.org</a>。翻译经 Edge.org 编辑 Russell Weinberger 授权。</p>作为现代音乐支柱的爵士鼓(架子鼓)(1):总论https://ray-eldath.me/music/drum-1/2020-08-16T01:00:31.000Z2023-02-01T18:35:35.494Z系列文章(咕咕咕咕咕)的第一篇。内容不少,文章较长,还请各位耐心读完;可能有各种事实性错误,也请各位在评论区指出,本垃圾会第一时间订正。相信无论是初学者还是已有一定经验的鼓手,都能从本文中学到一些东西——至少是笔者希望如此😜。我的大一啊,sighhttps://ray-eldath.me/life/freshman/2020-07-02T07:00:00.000Z2023-02-01T18:35:35.606Z😞😖😭First Step Towards FPGA (1): SystemVerilog Quick Take & Pros and Conshttps://ray-eldath.me/hardware/fpga-journey-1/2020-06-16T05:40:51.000Z2023-02-01T18:35:35.606Z<p>Every time programmable hardware programming is mentioned, Verilog or SystemVerilog comes to our mind — such fact, IMHO, is ironically contrasts with another interesting, if not consensus, but at least first impression of those hardware newbies just like me, that the fundamental software and development toolkit in hardware programming field is far from diverse, mature and easy-to-use. Comparing to software engineering, there are not too much languages, tools or methodology to let you pick and choose, even among the limited available choices, most of them are either lack some important features, or just too expensive to investigate. Undoubtedly my first step towards FPGA, looking around and pick a combination of <em>language, simulator and testing method</em>, is a brief journey, but it also involved too many investigation as well as unexpected disappointment, which makes this journey more difficult, and more tiring. This article is intended to outline some of my conclusion, which is what I’m using now, and what I have used but quited.</p>阿尔贝·加缪其人https://ray-eldath.me/literature/albert-camus/2020-06-12T16:00:00.000Z2023-02-01T18:35:35.490Z<blockquote>
<p>他在本世纪顶住了历史潮流,独自继承着源远流长的警世文学。他怀着顽强、严格、纯洁、肃穆、热情的人道主义,向当今时代的种种粗俗丑陋发起胜负未卜的宣战。但是反过来,他以自己始终如一的拒绝,在我们的时代,再次重申反对摒弃道德的马基雅维利主义,反对趋炎附势的现实主义,证实道德的存在。</p>
</blockquote>咱的新博客https://ray-eldath.me/misc/hello-world/2020-06-11T16:00:00.000Z2023-02-01T18:35:35.606Z<p>一直打算自己写博客的一套前端和后端,前端本来已经写了挺多的了,现在看来是要搁置很长一段时间了… 感觉折腾这些毕竟没啥用,还是要花时间写文章才行。。</p>