2024 11 30 HackerNews

2024-11-30 Hacker News Top Stories #

  1. 给你欣赏的人发送一封正式的“继续并坚持”信,鼓励和支持他们继续做他们正在做的事情。
  2. 乐高界面板的用户体验分析,展示了52种不同的乐高界面板,并讨论了界面板设计的两个关键问题。
  3. 账本系统的重要性,初创公司的工程团队忽略了账本系统的重要性,导致出现了“跳动的美分”问题。
  4. 不要与滚动条作斗争,动量滚动插件虽然被宣传为增强用户体验,但实际上却破坏了自然的、有效的和可预测的网页浏览体验。
  5. Hetzner 云服务器价格上涨,带宽大幅降低,价格上涨的幅度从 4.17% 到 27.52% 不等,带宽配额则平均降低了 88.19%。
  6. 车轮胎是微塑料污染的一个重要来源,每年全球有数十亿辆车辆产生约 6 万吨的轮胎碎片,这些碎片最终会进入土壤、河流、湖泊,甚至我们的食物中。
  7. Ninja 的成功和失败,Ninja 的作者反思了自己在开发 Ninja 时学到的教训,包括架构和社会问题比技术细节更重要,快速执行和简单设计的重要性,以及代码最终变得不那么重要。
  8. 为什么管道有时会卡住:缓冲,管道“卡住”的问题是由于输出的速度较慢,管道可能会“卡住”,导致后续命令无法正常工作。
  9. 2024 年运行 100 万个并发任务所需的内存量,Rust 和 C#(NativeAOT)在内存消耗方面表现出色,尤其是在运行 100 万个任务时,C#(NativeAOT)甚至超过了 Rust。
  10. 再见,Rust,我希望你成功,但我回归 C++,Rust 虽然在技术上优于 C++,但在编程语言作为交流工具的背景下,采用率和临界质量更为重要。

Send someone you appreciate an official ‘Continue and Persist’ Letter #

https://ContinueAndPersist.org 这个网页是由 Boondoggle & Doggle Partners LLP 创建的,目的是为了发出“继续并坚持”(Continue and Persist)的信件。这个信件与传统的“停止并终止”(Cease and Desist)信件不同,它的目的是为了鼓励和支持人们继续做他们正在做的事情。

发送信件的过程很简单,只需要填写表格,选择收件人,然后点击发送。信件将在一周内寄出。信件的内容包括正式的信头、官方的信封、豪华的纸张和手签名的法律专业人士的签名。

关于 Boondoggle & Doggle Partners LLP

Boondoggle & Doggle Partners LLP 是一家全国知名的公司,专门从事“继续并坚持”信件的管理。公司的创始合伙人 Mark Chan 和 Adnan Aga 代表了一个月的综合经验,代表了普通的、非具体的客户。Boondoggle & Doggle Partners LLP 是 Boondoggle Corporation 的子公司。

合伙人

  • Mark Chan:Mark 拥有 3 个小时的法律培训经验,他曾经意外地走进了一所法学院的开放日游览。他拥有法学院的点击笔作为证据。
  • Adnan Aga:Adnan 从 8 岁开始就对法律世界感兴趣,他曾经观看过 Judge Judy 的电视节目。他从未通过任何酒吧考试(没有喝酒)。

HN 热度 1260 points | 评论 212 comments | 作者:adnanaga | 1 day ago #

https://news.ycombinator.com/item?id=42268580

  • 这个项目能带来鼓励和正能量,尽管它看起来很小
  • 项目不是完全免费的,担心个人信息被出售
  • 提供了公开的文档模板,可以自行填写发送
  • 对个人数据的价值和隐私的担忧被过度放大,同时在日常情境中又被忽视
  • 网站的隐私政策表明他们可能收集并使用个人信息提供产品或服务
  • 名字和地址有价值,因为可以与线下行为数据匹配,进一步丰富用户画像
  • 项目规模不大,打印和邮寄信件需要成本,不太可能大规模收集数据
  • 即使收集了一些数据,相比其他数据提供商,这些信息的价值有限
  • 应该学会识别并欣赏出于善意和冒险精神的有趣项目
  • 数据收集的担忧不应影响对项目本身正面意图的认可
  • 免费服务可能增加对数据收集的担忧,但不一定意味着数据会被滥用
  • 项目可能知道用户的朋友关系,如果使用广泛,可能需要遵守更严格的数据保护法规

The UX of Lego Interface Panels (2020) #

https://interactionmagic.com/UX-LEGO-Interfaces/

本文探讨了 LEGO 界面板的用户体验(UX)设计。LEGO 界面板是一种低分辨率的设计,用于控制复杂的机器和系统。文章首先展示了 52 种不同的 LEGO 界面板,并将它们组织成不同的类别。然后,文章讨论了界面板设计的两个关键问题:如何区分不同输入的功能,以及如何组织输入和输出以便于理解。

文章指出,区分输入的功能可以通过形状编码、颜色编码、大小编码、质地编码、位置编码和操作编码等方法实现。这些方法可以帮助用户在不看的情况下通过触觉识别不同的输入。文章还展示了 LEGO 界面板中不同编码方法的应用。

组织输入和输出是界面板设计的另一个关键问题。文章讨论了几种组织方法,包括集中式界面、分布式界面、基于功能的组织和基于操作的组织。集中式界面将所有输入和输出集中在一个界面上,而分布式界面则将输入和输出分布在不同的位置。基于功能的组织将相关的输入和输出组合在一起,而基于操作的组织则将相同类型的输入和输出组合在一起。

文章还展示了 LEGO 界面板中不同组织方法的应用,并讨论了这些方法的优缺点。总的来说,本文提供了一个全面了解 LEGO 界面板设计的框架,展示了如何通过区分输入和组织输入输出来创建用户友好的界面。


HN 热度 490 points | 评论 44 comments | 作者:rcdemski | 1 day ago #

https://news.ycombinator.com/item?id=42267725

  • 乐高 Modulex 品牌及其项目管理展示板在 60 年代到 90 年代期间非常受欢迎,但现在已经停产
  • 乐高界面面板的设计分析有趣,特别是功能/操作/技术/使用场景的区别
  • 某些汽车品牌正在逐渐减少对触摸屏操作的依赖,可能是对苹果设计的盲目跟随
  • 乐高界面面板设计美观,但实际应用中可能过于分散
  • 作者网站在移动端存在缩放问题,已通过移除标签中的 maximum-scale 属性解决
  • 乐高白色雷达屏幕设计对儿童有吸引力,可能激发对 UX 的兴趣
  • 触摸屏操作的车辆存在安全隐患,类似海军舰艇和空难事故中的问题
  • 汽车界面设计中,发动机启动/停止按钮应有安全互锁机制,避免在行驶中误操作
  • 乐高界面砖块中加入加速度计,可以显示工作中的地平线,增加了互动性
  • 一些用户更喜欢实体按钮和旋钮,认为它们更直观和易于操作,尤其是在驾驶环境中

Engineers do not get to make startup mistakes when they build ledgers #

https://news.alvaroduran.com/p/engineers-do-not-get-to-make-startup

本文是关于如何设计一个账本系统(ledger)的文章。作者是一名有着近十年经验的支付系统工程师,他分享了自己在一家初创公司中遇到的问题。初创公司的工程团队为了快速推出产品,忽略了账本系统的重要性,导致出现了“跳动的美分”(dancing cents)问题,即每次交易都会少几美分。这种问题看似微不足道,但实际上给用户带来了很大的困扰和不满。

作者指出,账本系统的设计是非常重要的,尤其是在金融科技公司中。传统的单-entry 系统无法满足现代金融的需求,需要使用双-entry 系统来记录每一笔交易的来源和去向。双-entry 系统可以提供更准确的财务信息,帮助公司更好地管理资金和风险。

文章还提到了账本系统的设计需要考虑到上下文,不能简单地使用通用的工程实践。作者强调了账本系统的重要性,认为它是金融科技公司的核心组成部分。最后,作者分享了自己在设计账本系统时的经验和教训,希望能够帮助其他工程师避免类似的错误。


HN 热度 434 points | 评论 436 comments | 作者:fagnerbrack | 1 day ago #

https://news.ycombinator.com/item?id=42269227

  • 许多 Synapse 客户的资金失踪,可能是由于糟糕的账本系统导致的,而非欺诈
  • 金融科技公司通常使用一个或几个“FBO”账户来汇集所有资金,然后在上面构建账本,但账本的构建质量参差不齐
  • 金融科技公司承诺的 FDIC 保险只在基础银行倒闭时保护存款,不保护因金融科技公司自身问题导致的资金损失
  • 金融科技公司背后的投资机构(如 Andreesen Horowitz)反对政府监管
  • 人们往往不从历史中吸取教训,即使在资产泡沫破裂后也是如此
  • 当前媒体环境(包括主流媒体和社会媒体)更注重娱乐而非真相,可能导致人们将问题归咎于无关的“替罪羊”
  • 大型公司中,交易系统之间的不一致性可能导致资金凭空消失或出现
  • 摩根大通曾提议使用加密货币来内部管理现金流,但不确定是否实施
  • 交易所和交易公司通常需要一个独立于交易平台的对账系统,以确保交易数据的准确性
  • 网络数据包捕获(pcap)是验证交易数据的最可靠方法,尽管解析 pcap 文件容易出错,但捕获和存储相对稳定
  • 存储 pcap 文件的存储需求虽然大,但存储成本相对较低,因此是可行的
  • 使用 pcap 文件进行日常对账是合理的,因为已经需要编写代码来解析这些文件以应对特殊情况

Don’t Fuck with Scroll #

https://dontfuckwithscroll.com

讨论了动量滚动(Momentum Scrolling)插件的弊端。文章指出,这些插件虽然被宣传为增强用户体验,但实际上却破坏了自然的、有效的和可预测的网页浏览体验,导致可用性、可访问性和性能下降。

文章列出了十个理由,解释了为什么动量滚动插件会毁掉网络体验。首先,动量滚动插件违反了用户的期望,用户习惯于滚动网页时内容会立即移动,但动量滚动插件会引入动画效果,使得用户的肌肉记忆和习惯被打破。其次,动量滚动插件会引起晕动症,尤其是对于容易晕动的用户。第三,动量滚动插件会降低可访问性,尤其是对于残障用户。

文章还指出,动量滚动插件会导致性能问题,增加页面加载时间,破坏浏览器的原生功能,导致滚动位置不明确,增加维护负担,最后,动量滚动插件会不尊重用户的控制权,强迫用户按照插件的方式滚动网页。

总之,文章认为,动量滚动插件是一种不必要的功能,会破坏用户体验,应该避免使用。


HN 热度 336 points | 评论 121 comments | 作者:a_siekierski | 12 hours ago #

https://news.ycombinator.com/item?id=42273505

  • 单页应用(SPA)破坏了网页的基本功能,如 URL、浏览器导航和后退按钮
  • 使用历史 API 可以使 SPA 与浏览器和用户良好协作,而不是对抗
  • 开发 SPA 时,团队往往会忽略传统网页模型中的许多功能,直到为时已晚
  • 服务器返回 JSON 对象可以实现类似服务器重定向的功能
  • SPA 并没有失去 cookie 认证,但需要额外步骤防止 CSRF 攻击
  • 静态生成的网站也可以实现类似的功能,不一定需要 SPA
  • SPA 解决了数据 API 同时服务于网页和移动应用的问题
  • 当正确实现时,SPA 可以提供更好的用户体验
  • 更新 URL 参数时应替换而不是推入历史堆栈,以改善用户体验
  • 有些网站需要改变这些功能,因此不能完全禁止 SPA
  • 很多情况下,是由于需求不合理导致 SPA 破坏了历史记录
  • 浏览器导航和后退按钮在 SPA 之前就已经被全局会话状态破坏
  • 微软 TechNet 文章等破坏了后退按钮功能,给用户带来不便
  • 最近的趋势是将滚动条宽度设置得非常窄,影响用户体验

Hetzner raises prices while significantly lowering bandwidth (US) #

https://adriano.fyi/posts/hetzner-raises-prices-while-significantly-lowering-bandwidth-in-us/

Hetzner 云服务器价格上涨,带宽大幅降低

Hetzner 近日宣布,其云服务器价格将上涨,同时带宽配额也将大幅降低。价格上涨的幅度从 4.17% 到 27.52% 不等,带宽配额则平均降低了 88.19%。

Hetzner 声称,这次价格调整是为了让全球客户的条件更加公平。然而,很多客户对此表示不满,认为价格上涨太快,带宽配额降低太多。有些客户甚至表示,他们选择 Hetzner 的主要原因就是其丰富的带宽配额。

价格调整将于 2024 年 12 月 1 日开始生效,新价格将适用于所有新创建的云服务器和负载均衡器。对于现有的云服务器和负载均衡器,新价格将于 2025 年 2 月 1 日开始生效。

Hetzner 表示,价格调整是为了让客户能够更好地利用资源,然而很多客户对此表示不满。


HN 热度 296 points | 评论 4 comments | 作者:acaloiar | 1 day ago #

https://news.ycombinator.com/item?id=42268475

  • 这篇帖子是重复的,之前已经有人发布过
  • 评论被移动到了之前的帖子中
  • 今天有很多关于这个话题的重复帖子
  • 之前关于此话题的帖子已经有很多评论和点数

Car tires shed a quarter of all microplastics in the environment #

https://phys.org/news/2024-11-car-quarter-microplastics-environment-urgent.html

汽车轮胎是微塑料污染的一个重要来源,每年全球有数十亿辆车辆产生约 6 万吨的轮胎碎片,这些碎片最终会进入土壤、河流、湖泊,甚至我们的食物中。研究人员在南中国最近发现,轮胎衍生的化学物质存在于大多数人类尿液样本中。

轮胎碎片是微塑料污染的一个重要但常常被忽视的贡献者,它们占全球微塑料污染的 28%。尽管问题的规模很大,但轮胎碎片通常被归类为其他微塑料的一部分,很少被视为一个独特的污染类别。然而,它们的独特性质要求我们采取不同的方法。

我们需要将轮胎碎片分类为一个独特的污染类别。通过这样做,我们可以更好地了解轮胎污染的影响,并采取更有效的措施来减少它。例如,我们可以研究轮胎设计的创新,例如使用环保材料来取代锌氧化物和其他有害化学物质。

此外,我们需要采取全球行动来解决轮胎污染问题。我们可以通过制定相关法规,例如欧盟即将实施的 Euro 7 排放标准,来控制轮胎排放。我们还可以通过教育和宣传来提高人们对轮胎污染的认识,并鼓励他们采取行动来减少轮胎污染。

轮胎污染是一个严重的问题,我们需要采取紧急行动来解决它。通过分类轮胎碎片为一个独特的污染类别,我们可以更好地了解轮胎污染的影响,并采取更有效的措施来减少它。


HN 热度 274 points | 评论 295 comments | 作者:geox | 23 hours ago #

https://news.ycombinator.com/item?id=42269925

  • 基于车辆重量征税可能不是最好的选择,应该针对轮胎中的化合物征税
  • 丹麦曾经根据车辆重量征税,但更合理的应该是重量乘以行驶距离
  • 政府通过实时追踪设备征税可以获得更多税收和监控数据,但可能侵犯公民隐私
  • 英国的年度 MOT 检查记录了车辆行驶距离,可以作为征税依据,无需追踪具体位置
  • 车辆在不同国家行驶应由注册地征税,使用里程表读数计算行驶距离
  • 通过公民自报里程或年度检查记录里程,结合 CCTV 等监控数据,可以有效打击里程欺诈
  • 荷兰政府考虑实时追踪车辆以根据道路拥堵情况调整每英里行驶费用

The success and failure of Ninja (2020) #

https://neugierig.org/software/blog/2020/05/ninja.html

Ninja 的成功和失败

大约九年前,我发布了 Ninja,一种与 Make 相比的构建系统。当时我有点尴尬地分享了我的副项目,但自那时以来,它已经变得非常流行。我无法列出所有用户,但一些著名的项目使用 Ninja,包括 Chrome、Android 和 Meson。

Ninja 是我的最成功的开源项目,取决于如何衡量成功。虽然 Chrome 有更多的用户,但我只负责其中的一部分;Ninja 也有重要的贡献者,但它感觉更像是我自己的项目。

我在 2011 年发布了 Ninja,并在 2014 年将项目的所有权交给了他人。现在,我的角色已经完成,我想反思一下我从中吸取的教训。如果我要用一句话总结,我会说:我们谈论编程就像它是关于编写代码,但代码最终变得不那么重要,架构变得比代码更重要,而社会问题比架构更重要。

技术细节

Ninja 的工作原理很简单。用户提供一个 ninja.build 文件,描述了构建过程中需要执行的命令、输入文件和输出文件。Ninja 加载该文件,检查文件的修改时间,并执行需要的命令。

与 Make 相比,Ninja 提供了更少的功能,但更快。Ninja 的目标是快速执行命令,即使在大型项目中。它使用了一些小的优化来实现这一点,例如使用指针比较来检查文件路径的相等性。

架构细节

Ninja 的设计中有一些部分是经过努力才得出的,但现在看起来很明显。例如,Ninja 使用了一个双分图来表示构建过程,而不是 Make 中的文件图。这种表示更好地捕捉了构建过程的结构。

Ninja 还使用了一个依赖日志来存储 C 头文件的依赖关系。它使用了一个简单的表示格式来存储这些信息。

Ninja 不是持久化的守护进程,而是每次执行时都从头开始。这是故意设计的,基于端到端原则和崩溃仅限于软件的理念。这种设计使得 Ninja 可以快速启动和执行。

结论

Ninja 的成功和失败教会了我很多东西。它表明了架构和社会问题比技术细节更重要。它也表明了快速执行和简单设计的重要性。虽然 Ninja 不是完美的,但它已经成为一个非常流行的构建系统。


HN 热度 272 points | 评论 72 comments | 作者:quincepie | 1 day ago #

https://news.ycombinator.com/item?id=42268310

  • 编程不仅仅是写代码,架构比代码更重要,而社会问题又比架构更重要
  • 《Peopleware》一书指出,工作中主要问题更多是社会学而非技术性质的,如团队化学反应、工作环境的安静等
  • 公司管理层往往将员工视为可替代的工具,这在某些情况下对公司是有利的,尤其是在优秀员工并非必需时
  • 员工的高流动率对雇主来说成本高昂,提高最低工资反而可能因减少员工流失而节省公司成本
  • 康威定律表明,组织设计的系统反映了组织内部的沟通结构
  • 技术问题中约 80% 是因为两个团队或个人之间没有坐下来好好沟通
  • 良好的架构既能满足系统需求,又能保持人类可理解性
  • Google Glass 失败的原因在于它不是一个社会上可接受的产品
  • Ninja 相比 Makefiles 的优势在于语言简单和快速处理构建图,尽管 Ninja 文件可能非常大且难以阅读
  • 从 Makefiles/Soong 转换到 Ninja 虽然过程痛苦,但转换后构建速度显著提升

Why pipes sometimes get “stuck”: buffering #

https://jvns.ca/blog/2024/11/29/why-pipes-get-stuck-buffering/

这篇文章讨论了一个常见的终端问题:管道(pipe)为什么有时候会“卡住”(stuck)。作者发现,当使用管道将输出传递给另一个命令时,如果输出的速度较慢,管道可能会“卡住”,导致后续命令无法正常工作。

作者解释了这种现象的原因:程序在写入管道或文件时通常会使用缓冲(buffering)来提高性能。缓冲是指程序将输出数据暂存起来,直到缓冲区满了(通常是 8KB)才将数据写入管道或文件。这样做可以减少系统调用次数,提高性能。

但是,当管道中的命令需要实时处理输出数据时,缓冲就会导致问题。例如,在命令 tail -f /some/log/file | grep thing1 | grep thing2 中,grep thing1 命令会缓冲输出数据,直到缓冲区满了才将数据传递给下一个命令 grep thing2。如果输出数据的速度较慢,缓冲区可能永远不会满,导致管道“卡住”。

作者还指出,程序在写入终端时通常不会使用缓冲,而是使用行缓冲(line buffering),即每行输出数据都会立即写入终端。因此,当命令直接写入终端时,输出数据会实时显示,而当命令写入管道时,输出数据可能会被缓冲。

为了避免管道“卡住”,作者提供了几种解决方案,包括使用 --line-buffered 选项禁用缓冲、使用 awk 命令代替管道、使用 stdbuf 命令禁用缓冲等。


HN 热度 255 points | 评论 64 comments | 作者:tanelpoder | 8 hours ago #

https://news.ycombinator.com/item?id=42275033

  • 解决管道“卡住”的方法是设置阈值或超时,当达到一定字节数或经过一定时间后刷新缓冲区
  • 在用户空间缓冲的库应该在首次缓冲数据时设置适当的计时器
  • 读取和写入操作都应考虑批处理和合并,但通常读取操作更依赖于数据通道的通知机制
  • 通过在事件循环的顶部同步刷新缓冲区可以处理大多数情况
  • 应用程序和库都设置计时器时可能会产生混淆,需要小心处理
  • 使用信号的典型 Linux 计时器管理起来非常困难,可能影响性能
  • 通过在从空到非空的转换时设置一个计时器,可以保证数据及时刷新
  • 在高吞吐量情况下,应选择合适的阈值和超时,以避免计时器频繁触发
  • 写入合并可以提高性能,但需要在计时器管理上做出权衡
  • 使用 io_uring 和用户空间计时器可以更好地扩展性能,但仍然需要处理大量快速小写入的情况

How much memory do you need in 2024 to run 1M concurrent tasks? #

https://hez2010.github.io/async-runtimes-benchmarks-2024/

本文讨论了在 2024 年运行 100 万个并发任务所需的内存量。文章首先回顾了 2023 年异步编程语言的内存消耗比较,并对 2024 年最新版本的语言进行了 benchmark 测试。

测试程序使用协程(coroutine)代替多线程,分别在 Rust、C#、NodeJS、Python、Go 和 Java 中实现。结果显示,Rust 和 C#(NativeAOT)在内存消耗方面表现出色,尤其是在运行 100 万个任务时,C#(NativeAOT)甚至超过了 Rust。

Go 的内存消耗则显著增加,Java(GraalVM native-image)和 Java(OpenJDK)也表现良好。文章总结了不同语言运行时的内存消耗特点,并强调了高并发任务对内存的巨大需求。


HN 热度 249 points | 评论 179 comments | 作者:neonsunset | 22 hours ago #

https://news.ycombinator.com/item?id=42270378

  • 这个基准测试在某些情况下比较了不同的编程方式,例如 Node 的 Promise.all 和 Go 的 goroutines
  • 基准测试展示了当专业 Go 或 Node.js 开发人员解决相同任务时的实际输出,这比编译器之间的差异更有意义
  • 在 Node 中,通常会使用队列来处理大量任务,而不是直接使用 Promise.all
  • Go 和 Node.js 的执行模型不同,Go 可以利用用户空间调度器来分配 goroutines,而 Node 是单线程的
  • 专业 Go 程序员不会无脑地创建 1 百万个 goroutines,而是使用工作窃取方法或合理数量的 goroutines
  • 1 百万并发任务的场景通常是支持 1 百万活跃的并发用户连接,使用异步可以避免所有任务同时运行
  • Go 的标准做法是使用工作池和缓冲通道来处理大量并发任务,而不是直接创建大量 goroutines
  • Go 没有“魔法”功能,而是提供了一种高度意见化的处理方式,相比之下 C#有高度优化的 CLR 和优秀的库

Goodbye, Rust. I wish you success but I’m back to C++ (sorry, it is a rant) #

https://old.reddit.com/r/rust/comments/1h15md8/goodbye_rust_i_wish_you_success_but_im_back_to_c/

这篇文章的作者在三年的 Rust 编程经历后,决定回到 C++,并对 Rust 提出了一些批评。他认为 Rust 在技术上优于 C++,拥有更好的工具(如 Cargo)、更丰富的库生态(如 crates.io),并且在内存管理等方面强制开发者遵循良好的编程实践。然而,他指出,Rust 的缺乏广泛接受度和关键市场地位使得它在职业发展上存在劣势。

作者提到,尽管 Rust 的使用率在上升,但其他编程语言(例如 Go)也在快速发展,提供更快的迭代周期和更温和的学习曲线。此外,Rust 的职业机会多集中在一些特定领域(如加密货币、金融交易、机器学习等),在这些职位中,Rust 的熟练程度往往是 “锦上添花”,而非关键因素。作者认为,雇主更看重的是候选人在特定领域的知识,而非仅仅是 Rust 的掌握。

他还提到,在 Rust 的社区中,工作机会的讨论较少,这与其他语言的社区形成对比。同时,他指出,大型企业的支持是推动编程语言广泛接受的重要因素,而目前并没有看到像 IBM、微软、谷歌等大公司对 Rust 的强力支持。

最后,作者表示,尽管可能会遭到批评,他认为社区的自我隔离将限制 Rust 的影响力,并在后续编辑中表达了自己对这种反响的感慨。总的来说,作者认为 Rust 虽然技术上优秀,但在实际应用和职业前景上却面临严峻挑战。


HN 热度 248 points | 评论 291 comments | 作者:veidelis | 1 day ago #

https://news.ycombinator.com/item?id=42268819

  • Rust 虽然在技术上优于 C++,但在编程语言作为交流工具的背景下,采用率和临界质量更为重要
  • Rust 比 C++ 更容易学习,尤其是在需要替换 C++ 的应用中,Rust 的严格性有助于避免内存安全问题
  • C++ 在许多领域中具有更大的惯性,成为默认选择,因此学习者更倾向于首先学习 C++
  • Rust 的复杂性使得它不太可能在其他领域竞争,必须在高性能/低开销的空间中取代或成为 C++ 的可行替代品
  • Rust 的编译器错误信息非常详细和解释性,使得学习语言变得容易,且编写 Rust 代码很有趣
  • Go 语言在 Docker/Kubernetes DevOps 世界中非常普遍,同时在服务器/微服务领域也是 Node 的替代品
  • Go 语言的使用场景在 Go 创建时几乎不存在,而 Rust 则在 C++ 主导的领域中竞争
  • 编写简单的 Rust 代码时,需要记住许多繁琐的规则和标准库包装,这使得 Rust 的使用变得痛苦
  • 使用 Rust 分析器(rust-analyzer)可以显著提高 Rust 编程的愉悦度,IDE 的紧密集成对 Rust 非常有帮助
  • C++ 在某些情况下存在许多陷阱,但 Rust 也有其自身的繁琐规则,这影响了代码的编写效率