状态栏置顶,应用Dock栏落底!“鸿蒙PC版”预计今年登场!

thbcm阅读(176)

7月20日,深圳开鸿数字产业发展有限公司CEO王成录在其社交平台上宣布,他已收到哈尔滨工业大学电子信息专业的博士研究生录取通知书,将在徐晓飞教授的指导下,用三年时间系统、全面地建立鸿蒙操作系统的理论体系。

王成录并非哈工大新人,他此前曾在该校获得工学博士学位,并曾在华为担任终端BG软件部总裁,主导鸿蒙系统的开发。

2022年,他从华为离职后加入深开鸿,担任CEO,继续深耕鸿蒙生态。此次重返校园,体现了王成录对鸿蒙系统未来发展的深远思考和坚定决心。

近年来,鸿蒙系统在手机、平板、智能穿戴等领域取得了显著进展,用户规模不断扩大,生态建设也取得了阶段性成果。然而,要真正挑战现有操作系统格局,鸿蒙还需要在PC等更多领域实现突破。

网友们对鸿蒙PC的期待十分高涨。在王成录宣布重返校园的微博评论区,有网友问道:“今年能买到鸿蒙PC吗?”王成录明确表示“会有的!”

这已是他第二次公开回应鸿蒙PC相关事宜,进一步印证了相关产品正在稳步推进中。

事实上,华为对于鸿蒙PC的布局早已展开。华为开发者官网的设计指南中已出现鸿蒙 PC 版的界面布局,整体风格简洁流畅,类似 Mac,包括顶部的状态栏和底部的 Dock 栏。

状态栏显示输入法、音量、电池容量以及时间等信息,Dock 栏则包含常驻功能和应用,方便用户快速访问常用功能。

鸿蒙 PC 版的应用预计将与手机和平板版本保持一致,覆盖影音、社交、拍摄、阅读、购物、金融、生活、出行等类别使用场景,以便在不同设备间提供统一且流畅的使用体验。

这也与鸿蒙系统“一次开发,多端部署”的理念相契合,开发者只需一次开发,即可将应用部署到手机、平板、PC等多种设备上,大大降低了开发成本,提高了开发效率。

华为此前发布了针对 2in1 设备的HarmonyOS 应用设计指南,其中就涉及到了鸿蒙 PC 版应用 UI 的展示。

窗口作为应用的载体,由容器层和内容区构成,容器层用于展示应用品牌和控制整体窗口,内容层用于查看内容及与内容进行交互。

支持默认尺寸显示和任意尺寸拉伸,提供了灵活的窗口管理体验。

据悉,华为计划在 2024 年 8 月启动华为 HarmonyOS NEXT 的公开 Beta 测试,并在四季度推送正式版。

作为鸿蒙操作系统的一部分,鸿蒙 PC 版很可能会在同一时期推出,届时将为用户带来全新的PC操作系统体验。

程序员都应该关注的3种编程语言!告别 C++?

thbcm阅读(174)

有关编程语言的争论从未停歇。

虽然近期讨论的焦点集中在 AI 的影响以及生成式 AI 是否会完全取代编程语言的熟练程度,但学习和掌握编程语言仍然是不可或缺的一部分。

科技媒体 VentureBeat 发布了一份报告,列出了他们认为程序员需要重点掌握的三种语言,一起看看吧!



Swift

苹果公司语言和运行时总监 Ted Kremenek 曾明确表示,程序员应该将目光投向 Swift,而不是传统的 C++。他认为,Swift 的安全性、速度和易用性,加上内置的 C 和 C++ 互操作性,使其成为 C++ 的最佳继任者。

Swift 由苹果公司于 2014 年推出,最新迭代版本 Swift 6 预计将在今年晚些时候发布,并带来多项改进。其中包括更安全、更简单的编程,新的编码时数据安全保障功能,可以在编码时诊断开发者项目中并发访问内存的情况。

这一优化可以在对整个代码库进行最小改动的情况下发现和修复错误,增强了未来代码的安全性和可维护性。

苹果公司还指出,Swift 6 的速度将比 Python 快 8.4 倍。这一速度优势使其在性能要求较高的领域,例如移动应用开发和系统编程,具有显著的竞争优势。


Finch

Finch 是一种由麻省理工学院研究小组设计的新型编程语言,其目标是支持灵活的控制流和多样化的数据结构。它为程序员进行结构化数组编程提供了一种全新的编程方式。

Finch 的创建者表示,该语言通过将控制流和数据结构结合到一种可以共同优化的通用表示形式中,解决了在结构化数组上进行计算所面临的挑战。

Finch 的主要创新之一在于它支持丰富的结构化数组编程语言。这一特点使其能够处理复杂的数据结构,而不会牺牲表达能力或效率。

尽管 Finch 仍处于起步阶段,但 VentureBeat 认为其在控制流集成等领域的优势,意味着该语言可以用于数据库管理、图像和信号处理、机器学习和数据科学的实现,以及创建图形算法。

此外,Finch 提供比以往更加复杂的阵列结构。这使其能够有效地处理 banded、triangular、run-length-encoded 或 sparse datasets 及其任意组合,为数据处理和分析提供了更强大的工具。


Zig

对于想尽快掌握一门编程语言以提高收入能力的程序员来说,Zig 是一个不错的选择。

Stack Overflow 最新调查显示,Zig 已成为 2024 年最适合开发人员掌握的高薪编程语言之一,Zig 开发人员的平均年薪为 103,000 美元。

Zig 被誉为 C 语言的继承者,它旨在提供一种更安全、更现代的编程体验,同时保留 C 语言的性能优势。

Zig 的主要优势在于其简洁的语法、强大的类型系统和对内存安全的重视。它还提供了许多 C 语言所没有的功能,例如内置的错误处理机制和强大的元编程能力。

Zig 非常适合那些重视速度和大小的程序员,它可以用于开发各种类型的应用程序,从操作系统到嵌入式系统再到高性能计算。



—–


随着技术不断发展,编程语言也将在未来不断演变。

Swift、Finch 和 Zig 只是未来编程语言发展趋势的缩影,它们代表了不同方向的探索和创新。

程序员需要不断学习和适应,掌握新兴的编程语言,才能在快速变化的技术世界中保持竞争力,并为未来创造更多可能性。

如果不考虑失业,最推荐学哪几门编程语言?

thbcm阅读(202)

今天看到一个话题:“如果不考虑失业,最推荐学哪几门编程语言?”

新手在面对编程语言的选择时往往会犹豫不决,总想学个最好的语言。然而,”最好” 的定义见仁见智,有人追求实用性,有人追求高薪资。

而如果你聚焦于一个更纯粹的目标:提升思维逻辑,感受编程的乐趣,那么可以学习什么语言呢?

借鉴著名的“金字塔原理”,我们可以将编程语言学习拆解成若干个独立互斥且完全穷尽的维度,从而构建高效的学习模型。具体来说,我们可以从以下几个方面入手:


类型系统



现代编程语言的类型系统大致可分为:

● 动态类型 vs 静态类型

● 强类型 vs 弱类型

动态与静态类型的区分相对明确,而强类型与弱类型之间则存在一定的争议,这主要取决于个人对这些概念的定义和理解。

接下来,我们如何基于类型系统选择性价比高的编程语言呢?这可以通过集合或矩阵分析来实现。

例如,对于已经掌握 JavaScript(动态弱类型)的学习者,学习 Haskell(静态强类型)的收益显然高于 TypeScript(静态弱类型),因为前者能够补足 JavaScript 所缺乏的强类型思维模型,实现类型系统维度的“完全穷尽”。

因此,对于JavaScript开发者来说,我更推荐学习Haskell,这并非因为TypeScript不值得学习,而是Haskell在类型系统维度上提供了更高的性价比。

编程语言排行榜



在考虑学习或使用编程语言时,可以参考一些基于编程语言人气和热度的排行榜,这些排行榜通常能反映出一些关键信息:一个语言的社区活跃度、生态系统的丰富性、潜在的高薪资水平以及成熟的工业标准。

例如,GitHub作为全球最大的编程社区,其发布的编程语言趋势是一个值得参考的指标。根据2023年度数据,JavaScript是目前全球最受欢迎的编程语言。

当然,人气高低只是参考因素,最终选择仍需回归到类型系统等核心维度。

我们真正要的是找到那些能互补、覆盖所有类型系统的语言。就像选两门语言,我们希望它们的结合能让我们掌握类型系统的方方面面。

设计与实现



除了类型系统,我们还可以从其他角度来分析和选择编程语言,比如:

● 编译 vs 解释

● 内存管理机制

这些维度可以帮助我们更全面地理解每种语言的特点,我们可以通过画出一维或二维的矩阵来比较不同语言。

但有时候也要注意一些边界模糊的区域,某些语言可能同时具备多种特性,例如 JavaScript 介于解释型和编译型之间,Rust 则属于半自动内存管理。

编程范式



编程范式是指编程的思维方式,例如面向对象编程(OOP)、函数式编程(FP)等。

现代编程语言大多支持多种编程范式,因此在选择时,我们应优先考虑能够涵盖尽可能多编程范式的语言,例如 JavaScript。

当然,如果想要深入学习某种特定的编程范式,也可以选择专门为此设计的语言。例如,想要学习逻辑编程,可以选择 Prolog。

———–

无论是选择精通一门语言,还是博采众长,学习多种语言,最终目的都是为了提升自身的编程思维和解决问题的能力。

程序员有没有必要成为业务领域专家?别走偏了!

thbcm阅读(250)

最近和同行聊天,发现一个挺有意思的话题:程序员到底要不要成为业务领域专家?

在科技高速发展的今天,程序员作为数字世界的构建者,其重要性不言而喻。

诚然,程序员需要对业务流程有一定的了解。毕竟,只有深入理解客户的需求,才能开发出真正满足用户需要的软件产品。 

熟悉业务流程,有助于程序员更好地理解需求文档,与产品经理、业务人员进行高效沟通,避免在开发过程中出现偏差。

然而,这并不意味着程序员需要成为无所不知的业务专家。

为什么呢?

首先,我们需要明确“业务领域专家”的定义。

比如在银行 ,业务领域专家需要熟悉银行的各项操作流程及细节,例如计算利息、处理贷款等;

而在保险领域,则需要深入了解保单理赔等业务的具体操作和相关规定。

总而言之,业务领域专家不仅需要对业务流程了如指掌,更需要具备系统性的专业知识。

那么,程序员是否有必要成为这样的专家呢?我认为答案是否定的。

首先,程序员的工作重心在于技术实现,而非业务决策。

程序员的主要职责是根据客户需求完成软件开发,而业务流程的解释权和最终决策权在于客户。程序员需要做的是理解客户的需求并将其转化为可执行的代码,而非对业务本身指手画脚。

诚然,熟悉业务流程有助于程序员更好地理解需求,但过度深入业务细节反而可能陷入“只见树木,不见森林”的困境,忽略了技术实现上的关键问题。

其次,程序员的职业发展路径也决定了他们无需成为业务领域专家。

程序员的职业发展方向主要有两条:一是走技术路线,例如成为架构师、技术专家等;二是走管理路线,例如成为项目经理、部门经理等。

无论是哪条路线,其核心竞争力都在于技术实力和管理能力,而非对特定业务领域的精通程度。

当然,熟悉业务可以为程序员的职业发展锦上添花,但绝非必要条件。

最后,当前的互联网行业发展趋势也决定了程序员无需过度关注业务细节。

与传统行业相比,互联网行业的业务流程更加扁平化,对业务领域专家的需求也相对较低。

例如,各种外卖app的业务流程相对简单,程序员更需要关注的是如何解决技术难题、设计高效的系统架构,而非深究外卖配送的每个细节。

当然,这并不是说程序员可以完全忽略业务知识。相反,熟悉业务流程对于程序员高效完成工作至关重要。

只有深入了解业务需求,才能开发出真正满足用户需求的软件产品。

然而,程序员需要掌握的是理解和转化业务需求的能力,而非成为业务领域的万事通。

与其花费大量时间研究业务细节,不如专注于提升技术实力,例如深入学习编程语言、掌握各种开发框架、熟悉数据库技术等。

毕竟,技术才是程序员安身立命的根本。

有什么行为习惯昭示着你是个编程大佬?

thbcm阅读(166)

在瞬息万变的软件开发领域,从初出茅庐的代码小白到运筹帷幄的架构大神,除了时间的洗礼,更需要不断打磨自身的技术和习惯。

代码是程序员的语言,而习惯则透露出你的编程思想和境界。

那么,究竟是什么样的行为习惯,能够昭示着你是一个编程高手,甚至是一位架构领域的引领者呢?



行为一:洞悉问题本质的Debug能力

在编程领域,除了掌握基本的调试技巧外,更关键的是要能够深入分析日志和堆栈信息。

这种技能在软件开发中显得尤为重要,并且随着经验的积累,其价值会愈发显著。

行为二:代码架构能力

编程大佬在编码之前会先设计好代码架构,这包括工程架构、模块架构以及类之间的关联和接口设计。

要培养这种能力,你可以从学习软件架构的基础知识开始,然后通过实际项目来应用这些原则。

绘制UML结构图和时序图是一个很好的实践方法,它帮助你清晰地理解代码的组织和执行流程。

行为三:高效精准的官方文档阅读能力

官方文档也许大家都会看,但编程大佬在面对问题时,能够迅速通过阅读官方文档来定位并解决问题。

这得益于他们出色的快速阅读能力、深刻的技术理解力、精准的问题定位能力以及高效的知识应用能力。

行为四精准高效的搜索能力

搜索引擎是程序员的利器,但如何高效利用却是一门学问。

大佬们善用 Google 等搜索引擎,精准描述问题,并利用关键词技巧快速找到高质量的解决方案。

他们不会被海量的信息所淹没,而是能快速筛选出最有价值的内容。

行为五清晰易懂的文档编写能力

在程序员的领域,“文档是第一生产力”这一观点是公认的。

观察一下Spring、Hibernate、Struts等流行的开源软件项目,我们可以看到他们的教程、入门指南和参考文档都编写得非常清晰易懂。

大佬们深知文档的重要性,并能够克服惰性,编写结构清晰、内容详实的文档,为项目留下宝贵的知识财富。

行为六言简意赅的表达能力

普通程序员与顶尖程序员之间的表达能力差异显著,这在很大程度上归因于他们视野和思维格局的不同。

拥有出色的沟通技巧,可以帮助程序员更好地理解产品经理的设计意图,同时也能更有效地展示自己的专业技能和优势。

行为七优雅和美观的抽象能力

一个优秀的系统不仅要功能齐全、易于使用,还要在视觉上美观、在结构上优雅。

然而,普通程序员往往只关注于实现功能,通过简单的代码堆砌来完成任务。

相比之下,编程大佬会从更高层次进行抽象,不仅关注代码的逻辑和功能,还会考虑代码的可读性、可维护性和扩展性。

行为八信手拈来的裸编程能力



有些人被称为”复制粘贴工程师”,他们的代码中可能包含从网上复制的代码段,甚至保留了原始的注释和他人的编码错误。

相比之下,编程大佬通常具备出色的编码能力,他们能够在不依赖外部资料和代码的情况下,快速而准确地实现功能。

他们对编程语言和算法有深入的理解,能够独立思考并解决问题,而不是简单地复制和粘贴代码。

行为九融会贯通的底层原理知识

在处理复杂的任务或解决复杂的BUG时,对底层系统知识的理解至关重要。这包括对数据结构、网络协议、操作系统等基础概念的深入掌握。

许多程序问题的出现往往是由于对计算机工作原理的误解,即便是在使用高级编程语言的情况下。

底层系统知识为我们提供了一个坚实的基础,让我们能够理解更高层次的架构和框架。


行为十大道至简的代码哲学

代码的注释是否恰到好处、函数模块和类的组织结构是否清晰易懂、架构设计是否简洁明了,这些都是程序员在追求代码简约性时需要考虑的要素。

简约的代码不仅有助于提高代码的可读性和可维护性,也使得其他开发者能够快速理解代码的意图和逻辑。



——————


以上十个习惯,是区分编程高手的重要标志。

不断打磨这些能力,你就能在代码世界里不断精进,最终成为一名优秀的架构师,甚至是一位引领技术潮流的行业先锋!

同城市同经验同学历,月薪10K和20K的程序员差距到底在哪里?

thbcm阅读(170)

在软件开发行业,一个普遍的现象是,即使在同一个城市,同一个行业,拥有同样的工作年限和学历,程序员的薪资水平也可能存在显著差异。

那么抛开裙带关系等外部因素,从能力和技术角度来看的话,10K与20K的程序员之间,究竟存在哪些差别呢?

10K到20K的薪资范围,通常对应的是中级到高级软件研发工程师,尚未触及架构师或技术总监等更高职位。

因此,单纯从技术能力角度来看,这个范围内的程序员之间,理论上并不存在巨大的差距。而 造成薪资差异的关键,很可能来源于以下两个因素


1.技术栈的选择

虽然常说“技术栈没有鄙视链”,但现实情况是,市场对不同技术栈的需求和薪资待遇存在明显差异,这也就形成了事实上的“鄙视链”。

诸如Web前端 UI 设计、页面开发、后台服务器大数据挖掘、服务接口、数据存储以及算法等,在我看来,这些领域只是分工不同,并无高低贵贱之分。

然而,市场却用实际行动告诉你,在其他条件相同的情况下,不同技术栈对应的薪资水平大致如下:

后台算法 > 后台业务 > 数据库 > 本地客户端 > Web 前台客户端 > UI/UX。

当然,游戏行业的原画设计是个例外,但这已经超出了程序员的范畴。

所以,选择一个市场需求大、薪资待遇高的技术方向,对于程序员的职业发展至关重要。


2.自我营销和谈判能力

除了技术能力,程序员的自我营销和谈判能力,也是决定薪资水平的重要因素。

在大厂工作经验、是否有外包经历等因素之外,面试时的谈薪技巧,往往起着决定性作用。

HR通常会压低薪资预期,而如果程序员自身性格内向,缺乏谈判技巧,就很容易接受低薪offer。

相反,那些善于展现自身价值、敢于争取更高待遇的程序员,往往能获得更好的薪资回报。

有位HR分享他的面试经历:

我曾在担任研发经理期间,面试过一位让我印象深刻的候选人。当时招聘的岗位是后台C++语言开发,偏算法方向。这位候选人工作经验只有3-4年,按照当时的市场行情,薪资范围在1200到1800美元之间,最多不超过2200 美元。

然而,这位候选人在技术和业务面试中表现出色,并通过出色的表达能力,成功地说服了我的领导(研发总监)。最后,他竟然开口要了5000美元的月薪!

虽然最终经过几轮谈判,他的薪资定在了3800美元,但这已经远远超出了市场平均水平,甚至比当时的我这个研发经理还要高。

这个例子充分说明,即使技术能力相当,善于自我营销和谈判的程序员,也能在薪资待遇上获得更大的优势。

——

总而言之,决定程序员薪资水平的因素是多方面的,除了技术能力,技术栈的选择、自我营销和谈判能力等软实力,同样不容忽视。

想要获得更高的薪资回报,程序员需要不断提升自身技术实力,同时也要注重培养沟通表达和谈判技巧,才能在职场竞争中脱颖而出。

在编程中,什么时候用C语言而不用C++?

thbcm阅读(181)

在软件开发领域,C 和 C++ 都是备受推崇的编程语言。

C++ 作为 C 的超集,在功能和灵活性方面更胜一筹,但也因此带来了更大的复杂性。

那么,在实际项目中,何时应该选择 C 而不是功能更强大的 C++ 呢?

我们可以将这种情况分为两类:第一类是客观条件限制,C++ 难以施展拳脚,只能选择 C 语言;第二类是项目需求和开发者偏好,即使可以使用 C++,也更倾向于选择 C 语言。


只能或更适合使用C语言的情况



● 资源受限的嵌入式系统开发

比如单片机、无人机、机器人、工业控制等领域,由于硬件资源有限,C 语言的简洁高效、易于控制成为最佳选择。

● 底层开发和系统级编程

涉及硬件驱动、网络产品(如软件交换机)、Linux 内核修改等工作,需要直接操作硬件和内存,C 语言的底层操作能力和可控性更胜一筹。

● 安全领域和逆向工程

在计算机安全领域,破解、反破解、漏洞挖掘、溢出攻击等任务,需要对底层代码和系统机制有深入的理解,C 语言和汇编语言是更合适的选择。

C++可用但仍选择C语言的情况



● 追求极致的性能和效率

C 语言代码简洁,运行效率高,没有 C++ 复杂的语法和特性带来的额外开销,适合对性能要求极高的项目。

● 注重代码的简洁性和可维护性

C 语言语法简单,代码量相对较少,更容易理解和维护,适合开发周期短、维护成本要求低的项目。

● 项目需要高度的兼容性和可移植性

C 语言历史悠久,拥有广泛的平台支持和稳定的 ABI(二进制兼容性),适合需要跨平台运行或与其他系统集成的项目。

● 采用核心层+动态语言扩展的架构设计

使用 C 语言构建简洁高效的核心层,再通过其他语言(如 Python、Lua)实现业务逻辑,可以兼顾性能和开发效率。

——–

总的来说,选择 C 语言而非 C++,往往是因为开发者更看重 C 语言的某些特性,例如简洁性、高效性、可控性和可移植性,而不愿承担 C++ 复杂性带来的成本。

当然,C++ 也有其独特的优势,在某些情况下是更优的选择。

例如,当项目规模不断扩大,代码复杂度增加时,C++ 的面向对象特性和泛型编程可以帮助开发者更好地组织和管理代码。

一些对性能要求极高的领域,例如游戏引擎开发,也会利用 C++ 的模板元编程等高级特性进行优化。

最后,需要强调的是,选择哪种语言最终取决于具体的项目需求、团队技术栈和开发者个人偏好。不存在绝对的好坏之分,只有适合与否。

挑战谷歌?OpenAI开启SearchGPT内测,开启对话式搜索!

thbcm阅读(193)

在数字化时代,信息的获取方式不断革新。

近日,OpenAI公司发布了一则消息,宣布其最新研发的AI搜索引擎——SearchGPT,正式进入测试阶段。

这一消息无疑为搜索引擎领域带来了新的活力,同时也为用户带来了前所未有的搜索体验。


SearchGPT:以对话的方式搜索

SearchGPT的设计理念是将人工智能的深度学习技术与用户友好的搜索体验相结合。目前,这一搜索引擎处于初步测试阶段,仅对少数用户开放。

用户界面简洁明了,一个显眼的文本框提示用户输入搜索需求,鼓励以自然语言进行查询,就像与朋友聊天一样轻松。

OpenAI的博文中提到,SearchGPT的目标是提供清晰、相关的快速答案。

与传统搜索引擎不同,它不只是一个链接列表的简单展示,而是通过组织和理解搜索结果,以对话的形式直接回答用户的问题。

SearchGPT 会分析用户的意图,并利用其庞大的知识库和强大的推理能力,快速、直接地给出答案,并提供最新的网络信息和相关来源的明确链接。

例如,当用户查询音乐节信息时,SearchGPT不仅总结了关键信息,还提供了活动的简短描述和链接。

在另一个例子中,它详细解释了种植西红柿的最佳时机,并区分了不同品种的特点。

更重要的是,SearchGPT 支持多轮对话,用户可以根据之前的搜索结果提出后续问题,每次询问都能得到基于上下文情境的精准回答。

这种对话式的搜索体验,将极大地提升用户获取信息的效率和准确性。

可视化答案:探索更多可能性

除了文本形式的答案,SearchGPT 还将提供“可视化答案”功能。

虽然 OpenAI 尚未公布具体细节,但据推测,该功能可能与 OpenAI 推出的文生视频模型 Sora 有关,未来用户或许可以通过 SearchGPT 直接生成与搜索内容相关的视频。

SearchGPT 仍处于测试阶段

目前,SearchGPT 仍处于“原型”阶段,OpenAI 计划初期仅邀请 1 万名用户参与测试。

OpenAI 发言人凯拉·伍德表示,他们正在与第三方合作伙伴合作,并使用直接的内容馈送来构建搜索结果,目标是最终将 SearchGPT 直接集成到 ChatGPT 中。

SearchGPT的推出,不仅是技术进步的体现,更是对用户需求的深刻理解。它代表了搜索引擎未来发展的一个方向,即更加智能、个性化和互动性。

随着测试的深入和功能的完善,SearchGPT有望成为用户获取信息的强大工具。

让我们期待这一创新引擎如何重塑我们的搜索习惯,引领我们进入一个更加智能的信息获取新时代。

用Rust重写Windows,能阻止150亿美元的蓝屏惨案吗?

thbcm阅读(195)

上周,CrowdStrike的错误更新导致全球范围内的Windows系统出现大规模蓝屏事件,造成巨大经济损失。

据估计,仅美国财富500强企业就面临54亿美元的损失,全球损失可能高达150亿美元。受此影响,CrowdStrike股价暴跌超过20%。

除了对CrowdStrike的质疑和谴责,开发者圈内还兴起了另一个话题:

”如果CrowdStrike改用Rust的话,全球850万PC是不是就不会蓝屏了?“

这次事件的起因竟是一个简单的null deref错误。尽管C++语言已经发展了数十年,拥有各种工具、linter、sanitizer、测试和同行评审机制,但仍然无法阻止此类错误的发生。

因此不少开发者认为,如果采用内存安全机制更完善的Rust语言,或许能够避免类似事件的发生。

然而,一位同样喜欢Rust的资深软件工程师Julio Merino,在理智地进行了一番全盘分析后得出结论:“就算是Rust,也救不了这次CrowdStrike的中断事故。”

我们来看看他怎么说。

首先,CrowdStrike官方将此次事件归咎于一次配置更新引发的逻辑错误,该错误导致部分系统崩溃。

具体来说,Falcon平台在解析配置文件时,由于代码逻辑缺陷,尝试访问了无效的内存地址,最终引发系统崩溃。

诚然,Rust的内存安全机制可以有效避免此类内存访问错误。然而,将此次事件仅仅归咎于内存安全问题,无异于“只见树木,不见森林”。

首先,内核崩溃的原因多种多样,内存错误只是其中之一。

死锁、系统调用处理程序错误、无限递归等等,都可能导致内核崩溃。Rust虽然可以最大程度减少内存错误和其他逻辑错误,但并不能完全杜绝所有潜在问题。

其次,即使Falcon不运行在内核空间,系统崩溃的风险依然存在。

Falcon作为终端安全系统,需要具备防篡改能力,以防止恶意软件和用户的恶意操作。如果将Falcon迁移至用户空间,并通过受控API与内核通信,则需要确保这些API同样具备防篡改能力。

否则,恶意软件或用户可以通过攻击这些API,间接地影响系统稳定性。

因此,仅仅依靠Rust的内存安全机制,并不能完全避免类似事件的发生。

更重要的是,此次事件的根本原因在于CrowdStrike的配置变更发布流程存在严重缺陷。

根据SRE原则,配置变更应该分阶段、渐进式地进行,并在每个阶段进行充分验证。

然而,CrowdStrike显然没有遵循这一原则,导致一个本应在测试阶段就被发现的错误配置被推送至全球用户,最终引发了大规模系统崩溃。

CrowdStrike最新发布的初步审查报告也证实了这一点,报告指出“测试和流程不完善”是导致此次事件的主要原因。

报告详细描述了从2月28日到7月19日期间,CrowdStrike多次发布更新,并在测试环节存在严重疏漏,最终导致了7月19日的全球宕机事件。

综上,CrowdStrike全球宕机事件的根本原因在于其部署流程的缺陷,而非简单的代码或技术问题。

——-

将Rust奉为解决此类问题的唯一答案,不仅无助于问题的解决,反而会加剧技术社区之间的分歧,不利于Rust的推广和普及。

我们应该认识到,任何技术都有其局限性,Rust也不是万能的。

与其盲目追捧,不如理性看待,将Rust作为提升软件安全性和可靠性的工具之一,并结合完善的流程和最佳实践,共同构建更加健壮的软件系统。

为什么计算机语言不能设计得更简单一些,像和人说话那样?

thbcm阅读(188)

在科技日新月异的今天,我们似乎可以用手机完成一切,编程却依然是一项需要专业技能的任务。

许多人不禁要问:为什么计算机语言不能设计得更简单一些,像说人话一样和机器交流呢?

这个问题的答案并非单一,而是涉及到多个方面的复杂因素。


1.语言的复杂性之源

首先,简单语言与复杂功能之间存在着难以调和的矛盾。

为了实现复杂的功能,简单的语言往往需要更多的逻辑步骤和代码量。虽然我们可以将这些繁琐的逻辑封装成简单的语法和库函数,但随着时间的推移,这些语法和库函数会像滚雪球一样越积越多,最终使得这门语言变得庞杂而难以学习。

这就好比学习数学,我们不可能每次都从头推导公式,而是需要记忆大量的公式定义,才能更高效地解决问题。

2.封装与可操作性的权衡

其次,过度封装会降低语言的可操作性和灵活性,难以进行精细的控制和调整。

许多现代框架都以简洁易用为卖点,声称只需几行代码就能构建复杂的应用程序。

然而,一旦我们需要对程序的某个细节进行微调,就会发现困难重重,因为这些框架将大部分底层逻辑都隐藏了起来,用户很难找到并修改自己想要的部分。

低代码平台将这种封装推向了极致,虽然在某些特定场景下可以提高开发效率,但在灵活性方面却做出了很大的牺牲。

3.硬件性能的限制

最后,计算机硬件性能的限制也是制约语言发展的重要因素。

很多时候,程序员为了追求更高的性能,不得不编写复杂的代码,使用各种奇技淫巧来压榨硬件的性能。数据库查询就是一个典型的例子,如果 SQL 语句写得不好,性能可能会相差几个数量级。

事实上,正是因为计算机硬件和编译器技术不断发展,人类才得以从汇编语言的苦海中解脱出来,使用更加高级和抽象的语言进行编程。

如果想要使用真正简单易懂的语言,或许只能寄希望于未来计算机性能的指数级提升。



—–


当然,这并不意味着我们应该放弃对更简单易用编程语言的追求。

近年来,许多新的编程语言和编程范式不断涌现,例如更加接近自然语言的脚本语言,以及通过可视化界面进行编程的图形化编程工具等,都在试图降低编程的门槛,让更多人能够参与到软件开发中来。

总而言之,计算机语言的设计是一项复杂的系统工程,需要在功能、效率、易用性等多个方面进行权衡和取舍。

虽然现阶段我们还无法创造出像说人话一样简单的编程语言,但随着技术的不断进步,相信未来编程将会变得更加便捷和高效,让每个人都能轻松地表达自己的创意,创造出更多精彩的软件和应用。

联系我们