第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

從深處而來(lái):我刻意求痛的 Rust 之旅——第一月

標(biāo)簽:
雜七雜八

在其中一位资深开发者拥抱空灵之心的路径,并发现身心转变有着有趣的相似之处

禅般

故意痛苦的一年开始了

“我宁可快乐,也不要正确。” —道格拉斯·亚当斯,《银河系搭便车指南》

在4月1日这最合适的日期——我开始了这一年里刻意追求的痛苦——我的Rust之旅。我要明确地说,这个决定并不是因为我对现有的技术工具感到不满。这也不是对TypeScript或JavaScript的潜在不满,我继续在我的职业生涯中相对轻松地使用这些语言,像挥舞着手边的工具那样。也不是对Python的厌恶,Python依然像一台可靠但略显缓慢的老拖拉机,可靠地完成着它的任务。

这绝对不是我想要向自己证明什么,也不是对Go的厌倦——一种我仍然乐此不疲地使用的语言,无论它可以在哪里插入脚本语言之间。而且不管你们可能怀疑什么,这也不是蟹教信徒的诱惑,他们的传教热情在整个编程界都听得见。

不,如果有什么推动我投身于这个颇具争议的尝试,那就是瑞安·霍利迪的《障碍即路径》和斯多葛主义的原则,即我们攀登高山仅仅是因为它们就在那里——因为困难本身具有内在的价值。我应该指出,Haskell 曾经是我选择的“山峰”,但幸好,一个理智的瞬间让我冷静下来。即使是斯多葛主义也有其局限性。

从一开始,我就答应自己(现在,唉,也包括你,亲爱的朋友)要记录这段旅程——部分是为了约束自己,部分是为了给那些考虑类似自找苦吃的行为的人一个警示。一个月过去了,该写第一篇进度报告了。

疯狂的方法论

“我唯一知道的就是,我一无所知。” — 苏格拉底

…从头开始,…

多年来,我积累了一些杂乱无章的 Rust 知识——主要是通过技术博客、在会议中听到的对话以及前同事偶尔的惊慌低语——发现自己处于一种最危险的境地:在晚宴上听起来足够聪明,但在实际生产中却不够了解以避免潜在灾难。

说实话,我的技能并非一无所有。我可以拼凑出功能正常的 Rust 代码,并且相当准确地发表看法——主要是通过与其他语言的牵强类比。但对自己实在一点,给我一套 Rust 代码,就像把一把左轮手枪给一只猴子而不是给它一根香蕉一样。看着可能会很有趣,可能会有点血光之灾。

于是,我做出了第一个明智的决定:刻意地让心灵保持空灵。以初学者的心态去学习Rust,而是作为一个认识到手头工具既有力量也有潜在危险的人。

以我现在借用的那句不朽的话:“从深处我向你呼唤,Crabby” (De Profundis clamavi ad te, Crabby) (我的小Rust吉祥物Crabby)。

头部清洁与补脑食物准备

“没有经过审查的代码不值得发布。” — 如果苏格拉底是个程序员

咱们来做几个开胃菜吧

我的第一个举动是找到了我那本翻烂了的《Rust编程语言》——这本书主要作为偶尔参考的指南,书页已经折角、染上了咖啡渍,还留有无数次尝试学习这门语言但未成功的痕迹。这并不是一个彻底新手未曾翻动的原版书,而是一个半吊子好奇的探索者历经风霜的伙伴。

我一直都很欣赏这本书——只是表面上。但在随意翻阅时偶尔有所领悟和真正带着目的和理解去阅读之间,存在着巨大的差距。如果我要真正皈依“蟹教”,就只能认真研究这本圣书了。

所以,手握咖啡,我将四月投入到一本本书页的系统性阅读之旅中,随时准备着记下笔记和注释。(是的,我会在书页的边缘做标记——虽然我禁止孩子们这样做,但我却认为自己有作为成人的特权。在这个数字化书籍日益普及的时代,能够在特别令人困惑的代码示例旁边随意写下“?!?!”的感觉就像是一种珍贵的类比特权。)

当我思绪开始飘忽——这不可避免地在我看到生命周期参数或特征约束时发生时,我强迫自己回到书本上,重新阅读,真正领会而不是只是一扫而过。我现在几乎完成了,刚好赶上了自己设定的期限。这本书,原先只是有些磨损,现在看起来像是考古学家珍视的文物,布满了我努力理解的痕迹。

与此同时,我重新发现了 Rustlings 的数字避难所——一系列旨在帮助逐渐熟悉 Rust 特性的小练习。

沙沙作响(Rustlings),我很快发现,是《Rust圣经》的完美伴侣——可以说是对神圣文本的实际解释。如果说《书》是无瑕的启示,那么“Rustlings”就是其唯一的真正解释,得到了螃蟹领袖的认可,并被所有在系统编程社区中背诵其内存安全咒语的程序员所敬仰。

我理解的那个我决定结交的社区就是这样的——一个对他们的语言近乎宗教般的虔诚的群体,对新人的耐心则在修道院般的善意和审讯般的审视之间摇摆不定。但话说,学习一门编程语言又何尝不是加入一个有着自己仪式、信念和神圣实践的教派呢?

一个清晰的承诺

“知识最大的敌人不是无知,而是自以为是的了解。” — 霍金

(注意:此处添加了逗号,并调整了“自以为是的了解”来更好地传达原文含义。同时使用了更常见的霍金的中文译名“霍金”。)

……要编写这个脚本,让它……

我要澄清一点,虽然我现在能凑合出还算能用的概念验证代码,愿罗比·派克、JavaScript的圣人们,还有吉多这位Python的精神领袖保佑我,在今年的任何公司日常站会中,别因为一时冲动就别提什么“用Rust重写”这样的疯狂建议,愿他们保佑我。

我也发誓,如果我有哪怕一瞬间的念头,想要用 Rust 来进行任何本该用来赚取收入的业余项目,我就会用合适的硬物狠狠地敲自己的头。今年是学习年,不是用来沉溺于初遇新编程范式时那种不可避免的盲目乐观中的。罗马不是一天建成的,我的 Rust 技能也不会一蹴而就。

本修士月

“在池塘里躺着分发宝剑的奇怪女人,这可不是建立政府制度的基础。” — 蒙提派森与圣杯

“monk 模式”

这个月是有意设计的热身期——在更深入的沉浸之前的一个预备阶段。虽然只是简单的安排,但目的明确:

  1. 每天读一点《Rust 书》,像禅宗学生面对公案题一样专心致志。
  2. 通过 Rustlings 练习编码,将每一个编译错误都视为指导。
  3. 轻松接受自己是初学者的身份,放下自尊心,像扔给猪吃的食物一样。
  4. 不把所有权系统视为需要克服的障碍,而是视为需要内化的真理。

而且用一个我只能形容为可疑的比喻同步,我把这种精神上的练习与身体上的变化结合起来。每天当我练 Rust 时,我也会去 The Gym 锻炼一下——仿佛心灵和身体的成长必须同步进行。

…不辛苦不收获…

这有点像是通过砸伤拇指来缓解膝盖疼痛——至少你会暂时忘记最初那件痛苦的事情。但开个玩笑归开玩笑,古语“mens sana in corpore sano”确有其智慧。一个充满氧气的大脑工作得更出色,现在我的大脑有了许多事情可以思考和处理。身体锻炼和肌肉酸痛也提醒我,还有许多事情需要去学习和掌握。那么,必须经历痛苦吗?是的,必须。正如丘吉尔所说过的:“如果你正身处地狱……继续前行。”

或许这里面也有点道理;或许这只是为了确保,如果我的大脑因理解太多而开始萎缩,至少我的胳膊肌肉会很结实。

空杯心态

“初学者心中充满各种可能性,而专家心中却只有少数。” — 铃木俊隆

……什么都不知道……

到目前为止,最大的挑战并不是语法,甚至也不是饱受争议的借用检查器,而是保持对编程的新奇感和开放性。正如铃木俊隆曾说的:“初学者的心态充满了各种可能性,而专家的心态则缺少可能性。”

对于那些多年来用各种语言告诉计算机该做什么的人来说,有一种无法抗拒的冲动要说,“如果是用TypeScript做的话,我会这样做……”但这条路就是走火入魔。Rust不是带有更严格规则的TypeScript;它采取了完全不同的方式来解决创建可靠的软件的问题。

    // 我最初想要写的代码
    let data = getSomeData();
    processData(data);
    let summary = summarizeData(data);

    // Rust 礼貌但坚定地建议我重新考虑的写法
    let data = getSomeData();
    processData(&data);  // 借用数据
    let summary = summarizeData(&data);  // 再次借用
    // data 仍然可以由我任意使用或丢弃

这种从“变量作为值的标签”到“变量作为值的主人”(更确切地说是“值的车站”)的转变,不仅仅是语法上的变化,更是一种哲学上的转变。这是将自己视为宇宙中的过客,与对自己拥有的特定地块负责之间的区别。

从围棋的角度来看,这种对比特别明显:

// 在 Go 语言中,这种情况完全没问题,如下所示
data := getData()
数据 data 是按值传递的,但...
data.Field = "changed" // 我们仍然可以通过共享结构来修改它
summarizeData(data)    // 并且可以直接使用它而无需担心
    // 在 Rust 中,整个思维模型发生了转变
    let data = get_data();
    process_data(&mut data);    // 我们明确地进行了可变借用 (mutably borrow)
    data.field = "changed";     // 因为我们有权访问它
    summarize_data(&data);      // 我们可以在之后进行不可变借用 (immutably borrow)

Go 的方法让人感到轻松自然——有点像一种轻松的共享空间。Rust 的方法则更像一个高度规范化的房地产市场,每一种互动都有明确的合同规定。两者都能用,但它们需要不同的思维方式。

当然,老手们会说这些只是基础——“哦,这部分其实很简单,”。从技术上说,他们是对的。是的,理解起来,如果你没有借用,关闭作用域会触发Drop;或者一个值在移动时会迁移并消失——这些概念不像量子物理那么难以理解。

但是从“是的,我知道所有权是怎么回事”到真正内化价值流动及其背景的瞬息这一自然现实之间存在着巨大的鸿沟。这就像读关于冥想的书和真正达到冥想状态之间的区别。一个是知识,另一个是智慧。我仍然处于前者阶段,偶尔透过编译错误的迷雾,偶尔窥见后者。

โซ่พันธุ์副作用们的一些可能副作用
一份可能的副作用清单
一份可能的副作用清单
一些可能的副作用

最终考虑到流畅度和语气,选用:

一些可能的副作用

“世界的问题是,聪明的人总是疑虑重重,而愚蠢的人却自信心满满。” _— 查理·布考斯基

…直到它咔嗒一声为止…

一个意想不到的后果是我逐渐意识到我在其他语言中写的代码中存在的一些隐含假设。现在 JavaScript 对对象修改的随意性让我感觉有点不安——就像看到有人不仅没锁门,还把门大大敞开,门口还竖着一块牌子写着“内有贵重物品,请自行负责”。

    // JavaScript:在JavaScript中,还有什么可能会出问题?  
    function updateConfig(config) {  
      config.timeout = 1000;  // 修改超时时间为1000!  
      return config;  
    }  

    // 受Rust启发,我开始这样写JavaScript:  
    function updateConfig(config) {  
      return { ...config, timeout: 1000 };  // 修改超时时间为1000,创建一个新的配置对象  
    }

为了全面透明,我应该提到,我一直都是函数式编程的支持者,更喜欢在TypeScript中使用effect-ts,这让我的同事们不太高兴。同事们,如果你们看到这里,我得说声抱歉,不过也仅限于此。这些年来,我一直在暗地里吐槽副作用以及面向对象编程的复杂度,经常呼吁“四人帮”和“Uncle Bob”得为这种设计模式的罪过上绞刑架,为他们的架构设计错误负责。

但是自从我开始使用Rust之后,我担心情况可能会变得更糟。我对其他语言中隐式的状态变更的抱怨正在加剧。我对函数式编程的狂热达到了新的、可能令人无法忍受的高度。大家小心了,对我当前和未来的队友们:做好最坏的准备。我可能会在白板上画出所有权图,并对合理的TypeScript代码摇头表示不满。

这种心理转变的物理对应也同样令人启发。就像 Rust 强制显式处理资源一样,徒手体操要求你完全意识到并控制身体的每一部分。两者都会立即反馈你做错的地方——一个是编译器的错误反馈,另一个是重力法则无情的后果。

转换的谜团

“他不是弥撒亚,他是个非常捣蛋的孩子!” — 蒙提·派森的 布莱恩的一生

…别有邪教徒,谢谢合作…

在我结束这个初始的检查点之前,我感到有必要做出一个庄严的承诺:我不会成为螃蟹党的一员。为了尊重我自己和更广泛的编程社区,我无意挨家挨户传播关于借用和所有权的消息,也不会狂热地在网上宣扬关于唯一正确的道路的狂热宣言。

科技界已经有很多狂热信徒了——作为曾经的普通用户,他们现在转变为技术的自我任命传道者,准备解释为什么他们选择的工具是解决所有问题的万能钥匙,包括气候变暖和存在的无意义感。

归根结底,Rust 就是一个工具,和其他工具没什么不同。它是一个令人着迷、有时让人抓狂、设计精良的工具——但终究只是一个工具而已。把它当作宗教来崇拜除了会把潜在用户拒之门外和让同事不爽外,并没有其他作用。看到有人以谈论饮食限制或加密货币投资的那种热情来宣扬编程语言偏好,确实让人觉得不太自在。

所以在我这一年刻意引发的痛苦中,请相信我不会作为一个狂热分子,在技术大会上分发有关内存安全的传单,也不会在每次代码审查时都以“在 Rust 中,这不可能……” 作为开场白。

求螃蟹帮帮我,阿门。

结果:肯定会有血

“痛苦无法避免。是否承受苦难是个人的选择。” _— 村上春树, ——

…准备了…

就这样,在这个奇特的旅程一个月下来,我发现我自己在一些细微但明显的方面发生了变化。我对所写的所有代码更有归属感。我更谦逊地面对问题。我开始对那些像非常严格的老师给出的既失望又建设性的批评的信息产生了奇特的喜爱。

变成像野兽一样——无论是比喻意义上,还是从我理解的系统编程角度来看——都是个缓慢的过程。但我决心坚持到底,也许结果会苦,也可能意想不到地甜。

随着这一年刻意的痛苦与在 Rust 的学习过程中继续,我期待着清晰时刻与困惑的交替出现。我不免会质疑这一自虐式的努力,那时借用检查器不再像一个有用的指南,反而更像是一个专门用来揭露我思维模型缺陷的对手。

但是,这正是关键之处,不是吗?成长往往是在面对阻力的情况下发生的。佛教中的苦谛——即生命本质上包含痛苦——可以更好地引出编程中的“苦”,在编程中,面对挑战性的语言时所经历的挣扎可以被看作是编程中的“苦”。这种挣扎迫使我们重新审视我们的假设。

暂时,我继续着心理和身体双重转变的旅程。《Rust 书》放在我的床边,它的页面上越来越多的注释,书页上记录了问题、启示以及偶尔的脏话。我的肌肉因体操练习而酸痛,我的大脑则因新的概念而感到负担沉重。

下个月,我们将从理论转向实战操作:实际项目正式启动。我预料到会有豁然开朗的瞬间,也会有因编译器而难堪的时刻。会有血有泪,还会有一些糟糕到不应该被任何人看到的提交信息。

我就是喜欢这样。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消