为什么我说Rust是靠谱的编程语言

作者:Liigo(庄晓立)
时间:2015年5月16日
原创链接:http://blog.csdn.net/liigo/article/details/45757123
版权声明:未经作者许可不得转载;授权转载需注明出处。


2016年2月22日修补说明:本文最初发表至今已逾半年,这期间Rust语言蓬勃发展,版本从1.0升级到了1.6(1.7也近在咫尺),变化很大。现借《程序员》杂志3月刊发行之际对原文做一些修订和增补,其中增补部分在文中有明确标记。


序言:本文试图帮您解答“我要不要(投入大量时间和精力)学习Rust语言?”这个问题。作者尽量较少的谈及Rust语言本身,反而尝试从Rust语言周边入手,长时间、大范围、多角度地考察,研判Rust语言是否靠谱,并给出尽可能客观的理由。为写成本文,作者Liigo不惜“卧底”Rust“老巢”长达一年多,收集整理总结了大量信息。如果嫌长,可以只看小标题,粗略浏览一番。


1. Rust编程语言

Rust(blog)是一门强调安全、并发、高效的系统编程语言。其中四个关键词,系统编程、安全、并发、高效,是Rust语言的核心特征,也是区别于其他编程语言的首要因素。

  • Memory safety without garbage collection

  • Concurrency without data races

  • Abstraction without overhead

除此之外,我再补充一些关键词,以便读者更直观地了解Rust:静态类型/编译式语言/静态编译/动态编译、泛型/函数式/面向对象、模式匹配/ADT、DST/Associated Types/闭包(Closures)、Static/Dynamic/Multiple-Dispatch、 没有虚拟机(VM)、没有垃圾收集器(GC)、没有运行时(Runtime)、没有空指针/野指针/内存越界/缓冲区溢出/段错误、没有数据竞争(Data Race)……

Rust语言具有特性丰富、设计优良、适用范围广等诸多优点。

我(Liigo)从2013年底开始正式关注Rust项目,……至今有一年半了。其中有赞有批,有争有闹,也有贡献源码。本文所写的是我这些日子以来的所看、所闻、所感。

判断一门新的编程语言“是否靠谱”,是主观性很大的课题。Rust语言今日才刚刚发布1.0版本,它的未来发展走向如何,谁也说不清楚,说到底都是猜测。但是直觉告诉我,如果人靠谱、团队靠谱、技术能力靠谱、态度靠谱、社区靠谱,这个项目在很大程度上就是靠谱的、值得期待的。

谨以此文,献给我长久期待的 Rust 1.0


2. 开放、友好、高效的开源社区

相当彻底的开源项目,开放、透明、友好,进度热火朝天,动作大刀阔斧。这是我第一次亲身参与并观察到的如此大规模的开源编程语言项目的开发过程。(之前也关注过Go语言项目,但其规模要小得多。)

  • 开放源代码、GitHub/Git在线开发 https://github.com/rust-lang/rust

  • 开放系统设计过程,重要设计项目的提出、讨论、评估、决策均在线进行(RFCs)

  • 内部决策过程也公开透明,每周发布会议记录(meetimg-minutes)

  • 公开接受第三方开发者提交的 Pull Requests,必要时还指导开发

  • 有一个核心团队(the core team)负责项目的发展方向和最终决策

  • 有大量的(超过 1000 人!)第三方开发者给Rust贡献源代码、文档和测试用例

  • 多次将优秀的第三方开发者吸纳进入官方开发团队和核心团队

  • 多次在世界各地(包括北京)主办和协办小型本地开发者见面会

  • IRC,internals,Reddit/r/rust,HN(HackerNews), StackOverflow有许多跟Rust相关的技术讨论,常见核心开发者参与其中

  • Github上用Rust语言开发的项目也风风火火(详见下文)

热火朝天”,用于形容其工程量大、进度快、成效显著。看看Rust的 Release Notes,常见这类字眼:

  • Version 1.0.0 (May 2015): ~1500 changes, numerous bugfixes

  • Version 1.0.0-alpha.2 (February 2015): ~1300 changes, numerous bugfixes

  • Version 1.0.0-alpha (January 2015): ~2400 changes, numerous bugfixes

  • Version 0.12.0 (October 2014): ~1900 changes, numerous bugfixes

  • Version 0.11.0 (July 2014): ~1700 changes, numerous bugfixes

  • Version 0.10 (April 2014): ~1500 changes, numerous bugfixes

  • Version 0.9 (January 2014): ~1800 changes, numerous bugfixes

  • Version 0.8 (September 2013): ~2200 changes, numerous bugfixes

  • …​…​

还有很多就不一一列出了。Rust自从2012年1月20日发布0.1版,到现在的1.0正式版,平均每隔三个月发布一版,每次升级改进都多达一两千项。 Rust是在GitHub/Git上在线开发的,开发者对源代码的每一项改动(commits)都被版本管理系统记录在案,有据可查。 大多数是实质性的功能升级,不存在靠修改标点、配置文件、拼写错误、或者每改三五行代码就提交的凑数行为(在此严重鄙视Atom编辑器、Kotlin语言)。 反而常见动不动就甚至行 Rust 代码的情况,

有一个网站叫 "This Week in Rust",每周进展公告,专门介绍Rust语言最近一周的最新重大变动,可供大家参考。里面的内容虽然不全,但颇有代表性。这个网站几经变迁,但是自2013年6月上线时起,两年来,作者cmr坚持每周更新,几乎从未中断。

总之我(Liigo)说Rust的开发“热火朝天”,一点也不夸张。(我还要顺便鄙视Apple公司,发布某某OS新版的时候,动不动就说“新增1500项API”,哎,咱还就较真儿了,去查,算上所有Function、所有Type、Type内的所有Method、所有常量定义—— #define XX 123,你懂的 ——勉强够数!跟Rust的 "~1500 changes" 相比,天上人间。)

大家可以比照近十年在中国大陆和近两年在南中国海的大型基建项目的进展速度,体会Rust那种热火朝天的开发场面。处于这样的开发环境下,所有人都深受鼓舞,所有人都知道,一切都会越来越好,知道所有的欠缺和困难都是暂时的。行动永远比语言有说服力。

大刀阔斧”,用于形容其开发行为豪迈、干脆,持续追求“更好的设计和实现”,无包袱、无迁就。 只要有了更好的设计(或实现),经过深入讨论和评估之后,果断替换掉旧的设计(或实现)。 不管这项改动有多复杂、多麻烦,也不理会因此形成的大量不兼容性,勇往直前的行动。 说去胳膊就去胳膊,说卸腿就卸腿,就是眼睛它也敢摘下来镶个火眼金睛再装回去。牵一发而动全身的事情,干了可不止一次。 例子有很多,最典型的是libgreen,之前Rust靠它一条腿走路,后来有了libnative,两条腿走路,再后来全都砍掉,最终做到没有运行时(Runtime)。其他的例子还有std::io/os/path的大型重构(I/O OSPathReform),重新设计然后无缝替换回去(有rustc、servo为证),可谓自己给自己做了大型手术。 一个新兴的项目,在真正面世之前的开发过程中,如果不经历几次这类大的阵痛,很难说它最终是成熟的和久经考验的。 如果因为各种顾虑而迁就、保留旧的设计(或实现),很难说最终的产品是完善的和设计优良的。 如果面世之前都不肯改进,面世定型之后改进的可能性就更小了(束手缚脚),缺陷可能伴随终生,令所有的用户长期的纠结。 (这种大刀阔斧,与我(Liigo)当年在易语言公司参与研发EF语言时我所主张并践行的观点一致。有意推迟发布1.0也是为了给完善产品留足充裕的时间。)

需要强调的是,Rust开发者大刀阔斧的日子,只发生在Rust 1.0正式版发布之前。1.0之后,他们将老老实实的遵守 SemVer 2.0 规范,再也不会轻易做出破坏代码向后兼容性的行为。本文后面还会谈到这一点。


3. 十年勤耕不辍、低调做人高调做事

2006年,创始人Graydon Hoare启动了Rust编程语言项目,利于业余时间开发了三年,完成Rust语言的第一个可用版本。早期的Rust编译器 rustboot 是用OCaml语言开发的。这三年间发生的事情,我们现在知道的并不多。根据创始人对Rust的命名,可以一窥其设计初衷:

我从很多名称中挑选出了"Rust"。主要受到病原菌的启发——那些令人惊讶的、生死轮回的、多源寄生的奇妙物种。而且"Rust"还有其他内涵:它很好地契合了“贴近金属”(bare metal)、“复古编程语言技术”的主题;它从字面上融合了"Trust"(信任)和"Robust"(健壮)。 —— Graydon Hoare

2009年,Rust项目被Graydon Hoare赠送给(英文原文"was presented to")Mozilla公司,并得到持续活跃地开发支持。Mozilla创建了以Graydon为首的专业团队全职开发Rust,并且开放源代码。

2010年至2011年,Rust语言的编译器被用Rust语言重写,完成自举,采用LLVM作为编译后端——之前的Rust编译器是用OCaml语言编写的。

2012年1月发布0.1版,第一个面向公众的预览版本问世。从那时起,平均每3个月发布一个新版本,版本号每次只加0.1,改动的内容却往往天翻地覆。2012年到2015年这三年多的时间里,开发者持续不断的改进Rust语言、编译器和标准库,翻新重修,精益求精。不断地否定自己,不断地超越自己,一步一个里程碑。

2012年2月,也就是Rust 0.1刚刚发布不久, Servo项目被创建,用Rust语言开发下一代浏览器引擎,目的在于验证Rust语言开发大型实用项目的能力。

2012年到2015年这三年多时间,Rust和Servo互相扶持着茁壮成长起来了。Mozilla公司在Rust和Servo这两个不盈利的开源项目上付出的大量人力物力财力和时间成本,体现了他们全力打造下一代全新系统编程语言的决心和气魄。但是他们很少花费精力在大规模宣传和营销上,导致大部分公众/开发者几乎从没听过Rust语言,仅靠长期的口碑相传吸引了一批慧眼识金的忠实的开发者。

Rust不是富二代也不是官二代,它没有一个有钱或有权的爹。Mozilla公司,论资金规模和影响力,远远不及Google、Apple、Microsoft,勉强算是二流公司,但是它依然给予了Rust长期的坚定的支持。

历经近十年精心打造,Rust靠自身实力赢得未来。2015年5月16日,Rust正式发布1.0版本,破茧成蝶,吹响进入新时代的号角。


4. 定位精准而潜力广泛的应用领域

现今的软件系统开发,从底层到中层到上层,大致分为以下三个层次:

  • (底层)系统底层开发:裸金属(bare metal)、操作系统(OS)、内核(kernel)、内核模块(mod)等

  • (中层)系统应用开发:虚拟机(VM)、容器(Container)、数据库/游戏/Web/Ftp/Dns服务器、浏览器引擎、模拟器等

  • (上层)普通应用开发:编译器、浏览器、消息推送系统、Web应用系统、管理信息系统、其他等等

其中,(底层)系统底层开发,强调对底层硬件的控制;(中层)系统应用开发,对CPU和内存的占用十分敏感;(上层)普通应用开发,更倾向于方便快捷的开发效率。通常意义上所说的“系统编程”,往往是指中底层系统开发。

Liigo认为,Rust语言足以胜任这三个层次的软件开发。理由是:Rust是静态类型的编译式语言,基于LLVM生成高度优化的代码,再加上没有垃圾收集器(GC)等额外的运行时开销,执行效率非常高,对内存的利用十分灵活,因而胜任(中层)系统应用开发;Rust具有丰富的语言特性,便捷的项目编译和依赖管理,充分可用的跨平台的标准库,因而胜任(上层)普通应用开发;Rust支持raw pointer、unsafte block、C ffi、asm!、No runtime,因而胜任(底层)系统底层开发。Rust语言特别强调并保证的内存安全,对于三个层次尤其是中底层,是额外的突出的加分项。

上面的论述偏向于理论,可能不如实践有说服力。下面我们看看现实中Rust已经做到了什么程度(不是能做什么,而是做了什么,咱们靠事实说话):

  • 底层开发: rustbootrustosbarebonesreenix5stepsothers

  • 中层开发: Servo浏览器引擎Piston游戏引擎HyperHTTP服务器SprocketNESNES模拟器LlamaDB数据库

  • 上层开发: Rustc编译器 Cargo项目管理 Iron&NickelWeb开发框架ConrodGUI库

早在2013年我(Liigo)开始关注Rust之前,那时候Rust还有可选的GC,还有不算小的Runtime,还有笨重的标准库。即使在那种情况下,都有人不断地尝试用Rust做底层开发(参见前面的链接)。后来,Rust有了几个大的动作,令其更加胜任系统底层开发工作:

Rust是名副其实的系统编程语言,在这个领域,它不惧怕跟任何对手竞争。向下,Rust可取代C语言地位;居中,Rust可挑战C++市场,向上,Rust可向Java、Python分一杯羹。总之,Rust精准定位于中底层系统应用开发,上可攻下可守,适用范围相当广泛,具有全能型选手的潜质。开发者们学习Rust语言,不怕没有用武之地。


5. 自举(用Rust语言开发Rust编译器)

Rust在2010年至2011年完成自举,使用Rust语言开发出Rust编译器rustc, 取代了之前用OCaml语言开发的Rust编译器rustboot。Rust标准库,很早就是Rust语言写的。这意味着,早在四年前,Rust早期核心开发人员,就已经是全职的Rust程序员了,一天八小时,几乎完全使用Rust语言编程:用Rust开发标准库(和其他库),用Rust调用标准库开发编译器,用编译器编译标准库和编译器。等到1.0发布时,他们已经是具有多年极其丰富的Rust开发经验的程序员,这期间他们积累的大量设计开发经验和教训,无疑不断地推进了Rust自身的迭代更新。

有人说:没有必要自举,不自举不代表它没有这个能力。这话说的没有太大毛病。但是我们考虑如下两点:

  • 1、自举从事实上印证了它(编程语言+编译器)具备这个(强大的)能力,不自举只能在理论上保留它具有这个能力的可能性,两者不在一个层面上,说服力孰强孰弱不言而喻。新语言在大规模推广之前,往往欠缺这种说服力,进而导致推广不利,陷入怪圈不能自拔。

  • 2、自举过程中和自举之后,核心开发者每天使用自己开发的语言工作(开发自己的编译器),不断的在实践中锻造,利于及早发现设计缺陷和不足之处,并及时解决;自举之前,只能每天花费大量的时间和精力,使用其他编程语言开发和维护自己的编译器,学习积累的都是别的语言的经验和教训,缺少在实践中检验自己设计的语言的机会。如果自己设计的语言自己都不去深度地使用,又上哪里获取第一手的反馈信息呢,又如何改善呢。

所以自举越早对编程语言自身发展完善越有利,最好是在自身定型之前尽早自举。

在编程语言自身定型之前尽早自举,这句话说起来容易,实施起来却非常困难。语言不完善,某些功能就可能暂时没法实现;语言不稳定,需要不断的修正和改进,用它写的编译器也需要相应的大量的维护更新甚至重写,是很大的工作负担。所以很多新的编程语言的作者,不愿意(尽早)自举,相应地也就永久失去了自举带来的好处。

我(Liigo)举两个反例:

  • 第一个是Google公司的 Go语言,截止到2015年本文发表时,其编译器和运行时库,包括语言核心数据结构和算法map、channel、scheduler等等,还是用C语言开发的(补记:2015年8月1.5版本之后才替换为Go)——他们的核心开发人员真正用自己开发的Go语言进行实际的大型应用开发的机会并不多。虽然标准库是用Go语言自己写的,但他们却没有大范围使用标准库的经历。实际上,他们缺少使用Go语言的实战开发经验,往往不知道处于开发第一线的用户真正需要什么,无法做到设身处地为程序员着想。缺少使用Go语言的亲身经历,也意味着他们不能在日常开发中,及时发现和改进Go语言设计上的缺陷和不足。

  • 第二个反例是中文编程的翘楚 —— 易语言,它的编译器、核心支持库、集成开发环境(IDE),和绝大多数支持库,都是用C语言或C++语言开发的,他们的主要开发人员,包括创始人吴涛在内,每天的工作是熟练编写大量C/C++代码,写易语言代码的机会少之又少,即使有也是写一些调用支持库的示例这类浅尝辄止的代码。事实上在易语言研发部,只有庄晓立(Liigo)、袁晓辉(海洋)、龚辟愚(GBB)等少数几位开发者具有较深的易语言功底,其他开发人员进入研发部之前甚至都没听过易语言。吴涛本人早年还写过一些较大的易语言程序,代表作是俄罗斯方块(代码多达500行),后期也很少写了,偶尔写一些Sample代码作为支持库的示例(往往不超过100行)。易语言公司里写易语言代码最多的应该是项目教育培训等部的史世恒、潘春华、季翔、王军、张志恒他们。后来易语言暴露出来一些大的设计缺陷,已经不好修复了,除非伤筋动骨地翻修(放弃向后兼容性)。再后来吴涛组织团队又开发了全新的编程语言“易语言.飞扬”(EF),发布之前用EF语言开发了自己的集成开发环境(IDE),是一大进步,但依然没有完成自举。后来听说吴涛自己一个人在搞3D游戏引擎(Volcano3D),气场强大,希望推出真实的游戏(而非demo)检验其优秀品质。

而Rust语言,偏偏克服了诸多困难,提前4年完成自举,成为是最成功的案例之一,充分的享受了自举的好处,不断地在实践中完善了自身的设计。

没有深度的实践,就没有优秀的设计。除了自举,Rust还有其他的深度实践。


6. 两个半"大型成功案例": servo, rustc+std, cargo

(作者Liigo注:本节以下有关代码行数的数据于2015年7月30日得到修正,详情另见《关于Servo项目中Rust代码行数的数据来源》一文。)

  • Servo: 下一代浏览器渲染引擎(类Webkit/Blink),超过25万行Rust代码

Servo是Mozilla公司另外一个独立开发组的项目,启动于2012年初,跟Rust并行开发。多年来,在Rust语言从幼年到少年逐步成长、长期剧烈变动的情况下,Servo居然还能保持正常开发进度,实属不易。Patrick Walton在Servo开发组和Rust开发组都是核心程序员,Servo组的Lars Bergstrom经常参加Rust组的每周会议,这保证了两部门的有效沟通。Rust组经常会优先协助解决Servo组遇到的问题,维持Servo开发任务正常推进。

对于Rust而言,Servo项目存在的最大意义就是,它实践并印证了Rust语言具有实际的大中型项目开发能力(而不仅仅停留在理论上),同时获得了珍贵的设计开发经验和教训,反过来进一步促进了Rust自身的发展。Rust语言和标准库逐步发展到今天,许多优秀的设计得以引进,许多有缺陷的设计得以改良,都要感谢Servo这类大型实践项目,在Rust 1.0之前就已经长期存在。试想,如果Rust定型之后才启动Servo项目,实践中发现语言的重大设计缺陷又能怎样,反正木已成舟,悔之晚矣。

Servo已经通过了 Acid2 标准测试;可以 并发渲染 Github/Reddit/CNN 这类大型静态网页,性能 明显高于 当前的Firefox浏览器的Gecko引擎;可以无缝替换基于Chrome的CEF 框架;已经实验性的应用在Firefox OS平台(b2s)。2015年将发布测试版浏览器。Servo有机会成为浏览器历史上里程碑式的产品。

  • rustc+std: Rust编译器和标准库,超过30万行Rust代码

时至今日,rustc负责编译全世界所有的Rust源代码,包括rustc+std的30万行和servo的25万行,以及crates.io网站上的2000多个第三方库,是名副其实的大型成功项目。

  • Cargo: Rust的package管理器,项目依赖管理

代码量相比前两者而言要小的多,所以我算它是半个成功案例。代码虽少,但实用性、流行度有过之而无不及。全世界大约99%的Rust项目采用Cargo编译。crates.io网站上有2000多个包,总下载量超150万次。Cargo最大幅度地简化了Rust项目的编译和依赖管理,可以说是目前开发Rust项目的必备工具。


7. 十分重视并认真对待1.0版本

Rust 1.0被开发者视为第一个稳定可靠的可用于生产环境的正式版本。也就是要承诺:现有的大部分语言特性和标准库API要稳定下来,以后不能轻易改变,非得要变得话也得保持向后兼容;功能上要基本全面,至少要满足基本的软件开发需求,不能有明显的欠缺;质量上要有可靠性保证,不能动不动就这里有问题那里有问题。此外,还要给语言将来的发展留足余地。官方博客Roadto Rust 1.0 对于 1.0 有详细的阐述。

任何认真的新编程语言面临“何时发布1.0版”这个问题时都会感到纠结。发布的越早吧,初级产品没经过多少实际检验,用户量一上来用的人多了,很可能爆出基础设计缺陷,不得已大幅翻修,导致口碑不佳,然后无人问津,项目就算失败了;发布的越晚吧,影响力小用户量一直上不去,也得不到太多实际检验,始终达不到1.0的水平,可能就一直默默无闻下去了。Rust在1.0发布时机上把握的还算比较到位:诞生快十年,高速发展三五年,吸引了一大批用户,自身也经过的“两个半”大型项目的实际检验。要说早,肯定是不早了。Rust没有盲目的早早发布1.0(例如在2012年),是因为他们对1.0期待很高,他们对自己要求很高,他们心里有一杆秤。因为他们是认真的。

为了在2015年5月保质保量发布Rust 1.0,他们提前做了哪些工作?

7.1. 标准库API的稳定性

Rust为标准库内所有API,即所有fn、所有type(struct/enum/trait)、所有method、所有impl、所有const/static、所有macro_rules!,都逐一标注了稳定性标签:stable、unstable或deprecated。并且声明,1.0版本内包含的所有stable API,都将在SemVer 2.0规范下得到向后兼容性保证,今后所有1.x版本都不会破坏其稳定性(除非遇到重大BUG不得已而为之)。

我们去查Rust开发组公开的会议记录,会发现在2014年6月23日到10月1日,共有8次API review专题会议(01234567),逐一审查确定各API的稳定性标签。此后更长的时间里,又不定期的将更多API标注为stable或unstable/deprecated,在rustrepo里搜索"stabilize" 可以得到大批提交记录,显示出这项系统工程显然不是一朝一夕所能完成的。

目前标准库名下stable API大约有2500条,占总数的80%。新生编程语言中能做到这个程度的,很少见。


增补:针对稳定版API的修改,怎样的修改是向后兼容的、怎样的修改是破坏兼容性的呢? RFC #1105 给出了非常详尽的说明和指导。而且Rust还有一个叫Crater的工具,负责检测某项修改是否破坏了兼容性,其工作原理是,借助集成测试环境,以该项修改为基础构建临时Rust工具链,用之逐一编译crates.io网站上的三千多个Rust开源项目,只要有一个不通过,就说明该项修改存在破坏兼容性的可能。许多代码提交后首先要经过Crater的检验才可能被正式接纳(案例:PR#29498 PR #30796 )。

增补:Rust在1.0发布之前筹划实施了类似Chrome的滚动式版本升级计划(RFC #507)。nightly版本6周后升级为beta版本,beta版本6周后升级为stable版本。新提交到创库里的代码,必然经过nightly和beta两个周期,经过总共约12周的测试和过渡期,才会正式进入stable版本。许多核心开发者都是基于nightly版本工作的,还有很有用beta版本的开发者,再加上完善的travis-ci测试,基本可以保证在stable发布之前发现并修正存在的问题,确保stable版本的可靠性。

7.3. 精益求精的类型系统设计

7.4. 精益求精的文档和代码复审

7.5. 1.0之后的开发计划

1.0是起点而不是终点,1.0之后Rust还将持续不断地开发新的语言特性,打造更完善的标准库。

核心开发者Niko Matsakis在今年4月份发表 Priorities after 1.0 一文,详细阐述了1.0之后的开发任务、计划、优先级,内容很多却安排有序,体现了他们对这些问题的深度思考。此文在开发者社区中引起强烈反响,获得热烈讨论。Niko还发表了系列博客文章的第一篇"VirtualStructs Part 1: Where Rust’s Enum Shines"


8. 精心设计的规范透明的开发流程

在2014年3月之前,Rust开发组并没有十分规范的开发流程,基本过程是这样:修改代码,提交PR,Review,Merger。这样导致的问题是,没有形成设计文档,一旦遇到较大规模的代码改动,别人想理解他的设计思路,首先要读懂他的代码,这给方案评估、代码评审制造了困难,而且容易形成无人理解或难于维护的代码。

从2014年3月开始,Rust引入了规范化的RFC流程。规定,对语言重大改动之前,需先提交RFC文档,写明包括意图、详细设计、优缺点等在内的完整技术方案,供社区集体讨论,最后提交到Rust核心开发组每周的专题会议上评估审核,获得批准之后才进入实施阶段(代码实现)。规范化RFC的好处是,首先形成了完整的技术文档,利于集体讨论、评估(进而优化方案),利于方案实施、后期维护,而且利于核心开发组主导项目进展方向。RFC流程实施一年来,在Rust发展过程中发挥了极其深远的作用,先后通过了一大批十分重要的RFC,有力地推动了Rust语言的革新。

举一个例子,说明社区会主动监督开发流程的规范性和透明度:2014年8月,官方人员aturon居然想偷偷摸摸地把unwrap方法改名为assert, PR #16436: API conventions cleanup(80+),被网友发现(120+) 后引起极大争议。争议的起因是他们工作透明度不够,事先公示(50+)范围不足,未得到充分讨论。最终这一改动被迫撤消。


增补:1.0发布前后筹备创建了Sub Teams,整合了各细分领域的开发专家,负责所属领域的RFC设计、讨论、评估、决策,令过程更专业化。之前的Core Team,只有少数几位官方核心开发人员,地位相当于我党的政治局常委会,技术、能力、威望都很牛逼,但随着开发规模的扩大,他们自己也忙的团团转,疲于参与呈爆发式增长的RFC,工作效率不高,况且他们未必在所有细分领域都是专家,一把抓并不理想。组建Language Design Team, Library Team, Compiler Team, Toolingand Infrastructure Team, Community Team, Moderation Team 等 Sub Teams之后,各自吸纳了来自官方和民间的细分领域专家,可以更加专业化更有针对性的处理本领域的RFC,同时给Core Team节省出宝贵的精力去处理更核心的工作(Sub Teams有时上报某些重要RFC给Core Team决策)。参见RFC#1068

增补:1.0发布后对每周技术例会(meetimg-minutes)做了较大调整。之前的惯例是,民间开发人员在RFC页面上讨论,然后Core Team开发人员在每周例会上讨论并决策,最后公布会议记录。之后的惯例是,民间和官方人员一起在RFC页面讨论,然后Sub team闭门决策(必要时Core Team介入),最后公布决策结果。调整之后,讨论更民主化、透明化,决策更集中化,提升了工作效率。

增补:(2014年那时候,北京时间每周三凌晨Core Team发布会议记录,每周三就是我(Liigo)的节日,早上起床看Core Team的技术讨论和决策过程,持续了大约一年,现在还是美好的回忆。后来Sub Teams的会议记录通常只剩下决策结果,没有技术讨论过程了,而且他们的发布间隔也延长到两周左右。)

增补:1.0发布后为RFC增设了 “Final Comment Period (FCP)” 窗口期,并及时公告,使得关注该RFC的开发者不会轻易错过决策前的最后集中讨论阶段。这也是提供开发透明度的一项措施。同样参见RFC #1068。


9. 不拘一格聘请专业技术人员

Steve Klabnik之前写过一篇介绍Rust的入门教程 Rust for Rubyists,文风娓娓道来,深得群众喜爱。2014年2月,Rust官方人员看重了他的文档写作才华,付费聘请他全职为Rust创作文档。他的主要代表作是Rust官方的TheRust Programming Language(Rust Book),以及大量API Docs。因为其卓越贡献,steveklabnik目前已经成为Rust核心开发组八成员之一。

Tilde公司以前开发的Ruby包管理器Bundler在Ruby领域非常流行,其架构设计被实践证实获得成功。2014年3月,Rust官方 宣布 聘请 Tilde公司的核心技术人员Yehuda Katz和Carl Lerche,全职为Rust设计开发全新的开源的Cargo,目标是打造世界级的包管理器("a world-class package managerfor Rust")。现在Cargo已经初步获得了很大的成功,还在蓬勃发展中。因为Yehuda Katz的卓越贡献,他已经成为Rust核心开发组八成员之一。

深受好评的Rust学习示例网站 http://rustbyexample.com 的早期创建者 Jorge Aparicio(japaric) 后来被邀请加入了(Mozilla公司的)Rust官方团队。

meeting-minutes 里面搜索 "Friend of the Tree" 或 "fott" 你会发现更多人陆续加入了Rust开发团队。


10. 大规模的广泛的社区参与

我上面列出的多是长期以来持续开发和维护的项目,这在Rust语言长期剧烈变动的情况下愈显弥足珍贵。理智的人们不会无缘无故的花费大量时间和精力。许多忠实的第三方开发者长期地投资Rust项目,体现了他们对于Rust语言的热爱和对其前景的看好。

10.1. 社区合力完成的项目(libextra, diagnostics):

10.1.1. 分解extra库 Issue #8784

  • https://github.com/mozilla/rust/pull/11787 (flate)

  • https://github.com/mozilla/rust/pull/11867 (arena glob)

  • https://github.com/mozilla/rust/pull/11912 (uuid)

  • https://github.com/mozilla/rust/pull/11939 (sync)

  • https://github.com/mozilla/rust/pull/11945 (term)

  • https://github.com/mozilla/rust/pull/11984 (serialize)

  • https://github.com/mozilla/rust/pull/12007 (getopts)

  • https://github.com/mozilla/rust/pull/12010 (collections)

  • https://github.com/mozilla/rust/pull/12012 (semver)

  • https://github.com/mozilla/rust/pull/12154 (num)

  • https://github.com/rust-lang/rust/pull/12200 (base64 hex)

  • https://github.com/rust-lang/rust/pull/12343 (test)

  • …​

10.1.2. 详解编译错误Issue #24407

  • https://github.com/rust-lang/rust/pull/24431 (E0297, E0301, E0302, E0162, E0165)

  • https://github.com/rust-lang/rust/pull/24455 (E0152, E0158, E0161, E0170, E0306, E0307)

  • https://github.com/rust-lang/rust/pull/24482 (E0009)

  • https://github.com/rust-lang/rust/pull/24488 (E0015, E0020)

  • https://github.com/rust-lang/rust/pull/24525 (E0018)

  • https://github.com/rust-lang/rust/pull/24552 (E0133)

  • https://github.com/rust-lang/rust/pull/24728 (E0271)

  • https://github.com/rust-lang/rust/pull/24966 (E0282)

  • https://github.com/rust-lang/rust/pull/24975 (E0079, E0080, E0081, E0082, E0083, E0084)

  • https://github.com/rust-lang/rust/pull/25190 (E0046, E0054)

  • https://github.com/rust-lang/rust/pull/25200 (E0062, E0063, E0137)

  • https://github.com/rust-lang/rust/pull/25272 (E0184, E0204, E0205, E0206, E0243, E0244, E0249, E0250)

  • https://github.com/rust-lang/rust/pull/25398 (E0053, E0066, E0069, E0251, E0252, E0255, E0256, E0368)

  • https://github.com/rust-lang/rust/pull/25422 (E0197, E0198, E0199, E0200)

  • …​

10.1.3. 排错语言手册Issue #16676

10.2. 社区广泛参与的大型技术讨论:

10.2.1. inherents:

围绕实现“继承”这一语言特性,社区涌现出一批设计方案,一时间争奇斗艳。暂时没有结果,最终决策要在1.0之后才能做出。(括号内是评论数,下同。)

  • RFC PR #5: Virtual structs(10+)

  • RFC PR #9: Fat objects(20+)

  • RFC PR #11: Extending enums(10+)

  • RFC PR #142: Efficient single inheritance(60+)

  • RFC PR #223: Trait based inheritance(40+)

  • Summary(40+)

  • inheritance meeting 2014-09-23 2014-09-30

10.2.2. scoped thread:

2015年4月11日爆出这个大BUG(Issue #24292),直接拷问Rust“内存安全”核心概念,当时距离1.0发布已不足5周时间。要知道,刚刚一天前,std::thread::scoped()还被官博当作既安全又典雅的优秀API的典型、满怀骄傲地向全世界推介。是不幸,还是该庆幸?我认为该庆幸,有机会消除一个隐患,而不是在不知情中带着重大缺陷进入1.0。

  • Issue #24292: std::thread::JoinGuard (and scoped) are unsound because of reference cycles(30+)

  • RFC #1066: Alter mem::forget to be safe(270+)

  • RFC PR #1084: Scoped threads, take 2(90+)

  • RFC PR #1085: Leak and Destructor Guarantees(70+)

  • RFC PR #1094: Guaranteed non-static destructors(70+)

  • Pre-Pooping Your Pants With Rust(100+)

  • On reference-counting and leaks(110+) andafew more

官方人员一味的强调 Issue #24292 是个例,一味的强调“不保证析构函数务必执行”不违反内存安全,并不能消除群众心中的不安全感。在我看来,官方人员给出的解决方案(RFC PR #1066 #1084)一个是“头痛医头”一个是“脚痛医脚”,反而是民间技术人员提交的方案(RFC PR #1085 #1094)更接地气,至少是朝群众期望的方向努力了。可能是1.0发布日期逼近,实在没有时间评估和实施其他方案,最终官方坚持通过了RFC #1066。这一次我给他们集体评负分。好在他们广泛深入地参与了所有相关的讨论,内部无争议地做出了理性决策,结果未必坏。

10.2.3. mutable & unique:

Rust社区对于可变性(mutable)和唯一性(unique)的反思和争议。所有这些话题,都引发了许多热烈的讨论和激烈的争论,火热程度空前。之前 reddit.com/r/rust 内评论数达到200+的极为少见。

  • 先是RFC 58,DaGenix 要求把 &mut 改为 &only(50+)

  • 再是 Nicholas 要求彻底取消mut,增加 unique(240+) 引用

  • 还有pcwalton发出的 追问(180+):谁表达更清晰,可变性(mutability)还是唯一性(uniqueness)?

10.2.4. others

  • int/uint ⇒ isize/usize:

  • integer overflow:

  • reddit/HN hot posts:

  • Rust中文社区(rust.cc),新手QQ群(303838735)

大量的、广泛的、深入的社区技术讨论,体现了人民群众积极参与Rust开源项目的热情。多个体、多角度、多出发点的争论,有利于参与者充分认清同一个技术问题,有利于鉴别各方案的优缺点,有利于折中优选最佳可行方案。优质社区是Rust发展的基石。

当多方争论不相上下的时候,我们发现,Rust拥有一个坚强的核心团队(the core team),总是会应急出面,充当主心骨,做出最终的理性决策,避免出现互相扯皮却始终一事无成的最坏结局。他们的实力是有目共睹的,他们的信誉是逐步赢得的,他们做出的选择,不一定是最优的,但一定也不差。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

全文完,感谢!(翻页到这里也不容易呀,顺便吐个槽吧:)~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 检测网页是否通过W3C标准的校验

    免费在线检测你的网页中是否存在死链接、所链接网站的状态,以及链接的打开速度。同时检查层叠样式表(CSS)文档和HTML或者XHTML文档中的CSS内容是否可以通过W3C标准的校验,检测HTML、XHTML、SVG或MathML等格式Web页面文档是否符合W3C标准。这就是W3C提供权威的免费在线验证工具…...

    2024/5/3 2:28:11
  2. 【转】关于脱壳。。

    关于脱壳 asprotect版本多,升级快,每一次小小的升级,都足以使以前的脱壳方法或工具失效,没有一种自动脱壳工具是万能的。这里是caspr的作者SAC/UG2000对asprotect的评价: ASProtect是一个非常强大的win32保护工具。它拥有压缩(compression)、加密(encryption)、反跟踪…...

    2024/4/20 17:09:49
  3. 2020年什么编程语言最受欢迎,待遇最高?

    比较编程语言是一件非常复杂的事,因此我们创作了很多好玩的图片或段子用来表达对各种编程语言的定义,本文就以下图开始吧: 编程语言是人类控制电脑的手段,所以绝大多数编程语言都试图使这个过程更加强大和简单。也正因此这个领域诞生了数百种编程语言,不过其中许多编程语言…...

    2024/5/3 1:54:29
  4. W3C盒模型和IE盒模型的区别

    盒模型在初学css的时候就会接触到,其实很容易理解,这里也不多废话,但是实际上在布局的时候还是会出现很多问题。对于盒模型的认识不能只停留在知道一个盒模型由哪些部分构成,也要更多的了解如何在不同情况下利用盒模型的特点进行布局。 这里讨论一下两种不同的盒模型: W3…...

    2024/4/20 17:09:46
  5. 利用ESP定律进行脱壳 ——合天网安实验室学习笔记

    实验链接 通过本实验理解ESP原理的操作机理,并掌握使用ESP原理进行脱壳的流程。 链接:http://www.hetianlab.com/expc.do?ce=ec372be3-7a24-4309-838d-92dc0e83869b 实验简介 实验所属系列: CTF竞赛 实验对象: 本科/专科信息安全专业 相关课程及专业: Windows编程,C语言…...

    2024/4/20 17:09:45
  6. Java解析魔兽争霸3录像W3G文件(一):Header

    魔兽争霸3是一款非常著名的即时战略游戏。相信很多人都听过sky、moon、grubby这些名字,还有塔魔infi、中国的鬼王ted、刚猛的fly、飘逸的th000等选手。遗憾的是WCG2013是魔兽争霸3的最后一届,我自己也去现场观看了魔兽的总决赛。此外,还有DOTA、真三、澄海3C等著名的地图。 …...

    2024/4/21 11:20:17
  7. 我为什么选择使用Go语言?

    谢孟军:EGO会员、GopherChina组织者、《Go Web编程》一书的作者,专注Golang技术架构。本文来自EGO会员群分享,入群方式见文末在这里我主要想和大家分享一些Go和我个人的成长史。首先聊聊Go,在2009年全部开源出来后,它获得了当年的年度语言,但是直到2011年它才发布正式的稳…...

    2024/4/28 12:11:56
  8. 遗传算法原理+程序案例详解

    注明:这篇遗传算法程序我在网上看到多次,很多人在转载时,都称已经修改了错误的地方,程序在matlab上能够运行。当我在学习这段程序时,发现结果仍存在很大问题(不稳定、不准确)。我一行一行看时,发现不仅有少许语法错误,还有几处原理上的逻辑错误。在此预先讲解一下两处我…...

    2024/4/28 14:24:51
  9. Themida/WinLicense V1 8 2 0 +脱壳 FOR PcShare远程控制会员版本20070826

    【文章作者】: 冰橙子【详细过程】今天拿到PcShare远程控制会员版本20070826,看看说明一、加了插默认浏览器的功能二、重新修改了文件下载,一目了然,肉机不上线也可以管理。三、加了窗口管理的功能、四、加了群发消息的功能五、加了强制肉机访问网页的功能六、增加代理(不完善…...

    2024/4/28 9:29:14
  10. 【工作记录0017】vs调试附加到进程w3wp.exe,链接数据库出错

    最近做网站时,前端想要调试api,而我作为后台又要继续开发其他api,于是我就想把网站发布到iis上,我使用的是iis 7+vs2015+mvc+.net4.5 。 怎么发布网站,这里就不做介绍了,请自行百度。 当我发布网站后,访问api总是获取不到数据。比如一个简单的登录api,后台总是返回“用…...

    2024/4/28 2:30:36
  11. 【IT资讯】全新编程语言V发布

    V语言源码下载:V语言0.1版本源码.zip 近日,一种开源的名为V的新的静态类型编程语言发布了。它被描述为一种简单,快速,编译的语言,用于创建可维护的软件。它的创造者Alex Medvednikov表示它与Go非常相似,并受到Oberon,Rust和Swift的启发。 开发者从来就不缺新语言。今天新…...

    2024/4/28 6:07:35
  12. 最全的脱壳,反编译 ,汇编工具

    1 调试工具 Ollydbg V1.10 正式汉化修改版+最新最全插件2.02m SmartCheck V6.20 20.54M Compuware SoftICE V4.3.1 精简版10.57M Compuware (SoftICE) Driver Studio V3.1 完全版176.52M TRW2000 V1.22 汉化修改版+全部最新插件1.47Mforwin9X 动态破解VB P-code程序的工具 WB…...

    2024/4/28 18:32:31
  13. 一个前端面试常考的问题---W3C标准

    W3C标准由结构化标准语言,表现标准语言,行为标准等组成。它不单单指某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括…...

    2024/4/28 23:13:26
  14. 我是如何学习编程的

    我是如何学编程的前世因今世果一轮回一回眸理论基础资源选择编程没有捷径合格程度兴趣培养学习时长解决问题推荐资源学习资源推荐微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊 关注后发送关键资料,免费获取一整套前端系统学习资料和老男孩python…...

    2024/4/28 4:43:24
  15. 天草脱壳视频学习笔记(逆向 OD)

    天草壳世界学习笔记:1.OD的查找支持模糊查找 ?? 比如 要查找 E82091FBFFA1B8 可模糊查找:E8??91FBFF??B82.OD的插件idaficator 可以支持回滚 就是记录你的操作记录往回走 相当于一个跳转或者CALL以后 可以跳回去看 对着idaficator 工具栏的第一个按钮 点击鼠标左键 …...

    2024/4/27 23:44:43
  16. w3wp.exe内存占用过高解决方法(转载)

    w3wp.exe内存占用过高解决方法在IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢。 由于内存释放不及时严重影响到服务器的正常运营,建议采用以下配置,但请考虑自身服务器的使用情况。 可以做以下配置: 1、在IIS中对每个网站进行单独的应用程序池配…...

    2024/4/27 22:53:24
  17. Go和Rust计算性能大比武

    作为Go语言的狂热粉丝最近听说了同样鼎鼎大名的现代化语言-Rust,看了介绍后,发现Rust绝对是一门非常有潜力的系统级语言,因此特抽出业务时间进行了学习。 在网上有不少关于Go和Rust的对比文章,但是从我个人的观点来看,这两个语言没有什么好对比的,因为它们的使用场景基本…...

    2024/4/28 14:09:03
  18. 病毒加壳技术与脱壳技术

    由于大量的杀毒软件的出现,以及杀毒软件病毒库的不断壮大,病毒被查杀的几率也越来越大。所以有些病毒就开始通过加壳的方法来伪装自己,企图骗过杀毒软件,蒙混过关。为了做好病毒防御,我们就该了解什么是加壳?加壳的对立面是不是脱壳?如何脱壳等?   一 什么是壳:   …...

    2024/4/28 3:52:41
  19. 30种编程语言的比较选择问题

    本文涉及到的编程语言:C、C++、Java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、Python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C shell、Objective-C、PHP、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、D,golang,r…...

    2024/4/28 15:22:38
  20. kali2.0下简介及安装W3af(亲试有效)

    简介: w3af是一个开放源码的 web应用程序的安全性扫描器。通过增加插件来对功能进行扩展,这是一款用pyhon写的工具,可以查看所有的源代码,它提供了有关用于渗透测试活动的安全漏洞的信息。扫描仪提供图形用户界面(GUI)和命令行界面。主要插件类型 W3af框架有三个主要的插件…...

    2024/4/29 2:06:44

最新文章

  1. 免安装SQL管理工具HeidiSQL建库如何选Collation字符校对

    免安装SQL管理工具HeidiSQL 文章目录 免安装SQL管理工具HeidiSQL一、安装二、建库因此,通常我们选择: 一、安装 到官方网址:https://www.heidisql.com/ 下载后按不同版本安装或解压,运行目录中的heidisql应用程序。 该工具可以对…...

    2024/5/3 5:59:03
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 磁盘管理与文件管理

    文章目录 一、磁盘结构二、MBR与磁盘分区分区的优势与缺点分区的方式文件系统分区工具挂载与解挂载 一、磁盘结构 1.硬盘结构 硬盘分类: 1.机械硬盘:靠磁头转动找数据 慢 便宜 2.固态硬盘:靠芯片去找数据 快 贵 硬盘的数据结构:…...

    2024/5/1 13:00:58
  4. 理解 Golang 变量在内存分配中的规则

    为什么有些变量在堆中分配、有些却在栈中分配? 我们先看来栈和堆的特点: 简单总结就是: 栈:函数局部变量,小数据 堆:大的局部变量,函数内部产生逃逸的变量,动态分配的数据&#x…...

    2024/5/1 13:25:19
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57