Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产第一区,精品视频一区二区三区,国产精品九九

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          從業(yè)余項(xiàng)目到全世界最受歡迎的編程語(yǔ)言之一,Rust 是如何做到的?

          CSDN 編者按】從日常生活中發(fā)現(xiàn)電梯軟件的系統(tǒng)崩潰,到將一個(gè)業(yè)余項(xiàng)目發(fā)展成為最受開(kāi)發(fā)者喜愛(ài)的編程語(yǔ)言,這是全球開(kāi)發(fā)者Graydon Hoare與Rust的一段奇妙故事。

          原文鏈接:https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/

          未經(jīng)授權(quán),禁止轉(zhuǎn)載!


          作者 | Clive Thompsonarchive page 譯者 | 彎月

          出品 | CSDN(ID:CSDNnews)

          許多軟件項(xiàng)目的建立都是因?yàn)槟硞€(gè)地方的某個(gè)程序員遇到了一個(gè)需要解決的問(wèn)題。Graydon Hoare 的故事也源于此。


          Rust 誕生背景


          2006 年,Hoare 是一名 29 歲的計(jì)算機(jī)程序員,就業(yè)于開(kāi)源瀏覽器公司 Mozilla。有一天,回到溫哥華的公寓,他發(fā)現(xiàn)電梯壞了,原因是電梯的軟件系統(tǒng)崩潰了。這已不是第一次發(fā)生這樣的事情。
          Graydon Hoare 住在 21 樓,想到要爬樓梯回家,他頓時(shí)感到很惱火:“我們這些從事計(jì)算機(jī)工作的人甚至無(wú)法制造出一部不會(huì)崩潰的電梯!”
          Graydon Hoare 知道,許多此類的崩潰都是由于程序使用內(nèi)存的方式存在問(wèn)題而造成的。電梯之類的設(shè)備內(nèi)部的軟件通常是用 C++ 或 C 等語(yǔ)言編寫的,用這兩種語(yǔ)言編寫的代碼運(yùn)行速度非常快,而且代碼非常緊湊。然而,問(wèn)題在于,這兩種語(yǔ)言也很容易意外引入內(nèi)存錯(cuò)誤,這些錯(cuò)誤會(huì)導(dǎo)致程序崩潰。根據(jù)微軟的估計(jì),其代碼中 70% 的漏洞是由于使用這些語(yǔ)言編寫的代碼存在的內(nèi)存錯(cuò)誤造成的。
          對(duì)于大多數(shù)人而言,當(dāng)知道自己需要爬到 21 樓時(shí),都會(huì)很生氣,但也就僅此而已了。但 Graydon Hoare 決心為此做點(diǎn)什么。于是,他打開(kāi)筆記本,開(kāi)始設(shè)計(jì)一種全新的計(jì)算機(jī)語(yǔ)言,他希望這種語(yǔ)言能夠編寫出沒(méi)有內(nèi)存錯(cuò)誤、小而快的代碼。他將其命名為 Rust,英文單詞“rust”本是一種真菌,中文中叫植物銹病的不少都是這類真菌造成的,他說(shuō)這個(gè)名字的寓意是:“為了生存而過(guò)度設(shè)計(jì)”。


          成為“最受程序員喜愛(ài)”的編程語(yǔ)言

          17 年后,Rust 發(fā)展成為了全球最熱門的新語(yǔ)言之一。有將近 280 萬(wàn)程序員使用 Rust 編寫代碼,從微軟到亞馬遜,許多公司都將其視為未來(lái)的關(guān)鍵。聊天平臺(tái) Discord 使用 Rust 來(lái)加速其系統(tǒng),Dropbox 使用它來(lái)將文件同步到用戶的計(jì)算機(jī),而 Cloudflare 使用它來(lái)處理超過(guò) 20% 的互聯(lián)網(wǎng)流量。
          在 Stack Overflow 的年度調(diào)查中,Rust 連續(xù)七年蟬聯(lián)“最受程序員喜愛(ài)”的編程語(yǔ)言。就連美國(guó)政府也在積極地推廣 Rust 軟件,將其作為確保流程更安全的一種方式。與許多成功的開(kāi)源項(xiàng)目一樣,Rust 的發(fā)展也離不開(kāi)社區(qū)的共同努力,現(xiàn)有數(shù)百名貢獻(xiàn)者仍在支持,其中許多是志愿者。Graydon Hoare 本人在 2013 年退出了該項(xiàng)目,很放心地將其移交給了其他工程師,包括 Mozilla 的核心團(tuán)隊(duì)。
          創(chuàng)造一種新的計(jì)算機(jī)語(yǔ)言并不罕見(jiàn)。許多程序員都會(huì)利用業(yè)余時(shí)間建立一個(gè)小項(xiàng)目。但是,能夠在 JavaScript、Python 或 Java 等眾多流行的編程語(yǔ)言之中站穩(wěn)腳跟,實(shí)屬罕見(jiàn)。


          C/C++ 的天然“大坑”


          為了理解 Rust 為何如此實(shí)用,我們應(yīng)該深入了解編程語(yǔ)言對(duì)計(jì)算機(jī)內(nèi)存的處理。
          簡(jiǎn)單來(lái)說(shuō),你可以將計(jì)算機(jī)中的動(dòng)態(tài)內(nèi)存想象成一塊黑板。軟件運(yùn)行時(shí)會(huì)不斷地在黑板上寫數(shù)據(jù),記錄哪個(gè)數(shù)據(jù)保存到了哪里,并在不需要的時(shí)候?qū)⑵洳脸5牵煌挠?jì)算機(jī)語(yǔ)言,管理這塊黑板的方式也不同。C 以及 C++ 等早期的語(yǔ)言傾向于賦予程序員很大的權(quán)力,讓他們來(lái)決定何時(shí)以及如何使用這塊黑板。這種能力很強(qiáng)大,代碼可以動(dòng)態(tài)控制內(nèi)存,加快軟件的運(yùn)行速度。這就是為什么 C 和 C++ 常用于編寫“裸機(jī)”代碼,即直接與硬件交互。許多沒(méi)有 Windows 或 Linux 之類的操作系統(tǒng)的機(jī)器,比如透析機(jī)或收銀機(jī)等,都運(yùn)行著這樣的代碼。(此外,C 和 C++ 之類的語(yǔ)言也用于更高級(jí)的計(jì)算:有時(shí)操作系統(tǒng)需要與硬件通信。Windows、Linux 和 MacOS 的內(nèi)核都是用 C 語(yǔ)言編寫的。)
          雖然 C 和 C++ 的速度很快,但這是有代價(jià)的。編程人員需要仔細(xì)記錄寫入哪塊內(nèi)存,以及何時(shí)擦除。如果不小心忘記刪除某些內(nèi)容,結(jié)果會(huì)怎樣?可能會(huì)導(dǎo)致軟件崩潰,當(dāng)軟件嘗試使用它認(rèn)為是空的內(nèi)存,但實(shí)際上其中已保存了數(shù)據(jù),就會(huì)崩潰。或者,這會(huì)成為非法用戶的入侵渠道。
          黑客會(huì)發(fā)現(xiàn)程序沒(méi)有正確清理內(nèi)存,本應(yīng)被清除的密碼或財(cái)務(wù)等信息仍然存在,他們就會(huì)偷偷攫取這些數(shù)據(jù)。隨著 C 和 C++ 代碼的規(guī)模增大,即便是程序員再細(xì)心,也可能會(huì)犯很多內(nèi)存錯(cuò)誤,從而導(dǎo)致軟件中 bug 累累。
          無(wú)人機(jī)公司 Fusion Engineering 的聯(lián)合創(chuàng)始人兼 Rust 庫(kù)團(tuán)隊(duì)負(fù)責(zé)人 Mara Bos 表示:“在 C 或 C++ 中,你總是會(huì)擔(dān)心代碼隨時(shí)出現(xiàn)問(wèn)題。”
          上個(gè)世紀(jì) 90 年代,Java、JavaScript 和 Python 等一系列語(yǔ)言開(kāi)始流行。這些語(yǔ)言采取了完全不同的方法。為了減輕編程人員的壓力,這些語(yǔ)言使用“垃圾收集器”自動(dòng)管理內(nèi)存,這些組件會(huì)在軟件運(yùn)行時(shí)定期清理內(nèi)存。你可以編寫沒(méi)有內(nèi)存錯(cuò)誤的代碼。但缺點(diǎn)是失去了細(xì)粒度的控制。程序的執(zhí)行速度也減慢了(因?yàn)槔占加昧岁P(guān)鍵的處理時(shí)間)。用這些語(yǔ)言編寫的軟件需要使用更多的內(nèi)存。因此,編程世界分成了兩大陣營(yíng)。如果軟件需要快速運(yùn)行或在嵌入式設(shè)備的微型芯片上運(yùn)行,則選用 C 或 C++ 編寫更合適。如果是網(wǎng)絡(luò)應(yīng)用程序或手機(jī)應(yīng)用,則可以選用一種更新的、具有垃圾收集功能的語(yǔ)言。


          編程大佬紛紛加入 Rust


          Graydon Hoare 創(chuàng)建的 Rust 語(yǔ)言與上述這些方法有很大的不同。Rust 不需要程序員手動(dòng)找出數(shù)據(jù)在內(nèi)存中的位置,而是由語(yǔ)言本身來(lái)管理。但 Rust 對(duì)于如何在程序中使用或復(fù)制數(shù)據(jù)有許多嚴(yán)格的規(guī)則。程序員必須學(xué)習(xí)這些編程規(guī)則—— 比 Python 或 JavaScript 更繁瑣的規(guī)則。雖然編寫代碼的難度有所提高,但代碼是“內(nèi)存安全的”,你無(wú)需擔(dān)心不小心插入致命的內(nèi)存錯(cuò)誤。最為重要的是,Rust 還將提供“并發(fā)安全”。現(xiàn)代程序可以同時(shí)做多件事——并發(fā),有時(shí)不同的線程會(huì)嘗試修改同一塊內(nèi)存,而 Rust 的內(nèi)存系統(tǒng)會(huì)阻止這種操作。
          在剛開(kāi)始設(shè)計(jì) Rust 時(shí),Graydon Hoare 在 Mozilla 工作,已是一名擁有十多年軟件開(kāi)發(fā)經(jīng)驗(yàn)的老程序員。起初,Rust 只是一個(gè)業(yè)余項(xiàng)目。Graydon Hoare 花了幾年時(shí)間來(lái)開(kāi)發(fā) Rust,當(dāng)?shù)谝淮蜗蚱渌绦騿T展示這門語(yǔ)言時(shí),收到的反饋褒貶不一。“有些人很熱情,而有些人則表示不喜歡,還說(shuō)這門語(yǔ)言壓根不行,永遠(yuǎn)沒(méi)機(jī)會(huì)使用。”
          然而,Mozilla 的高層卻對(duì) Rust 很感興趣。他們認(rèn)為,Rust 可以幫助他們構(gòu)建更好的瀏覽器引擎。瀏覽器是非常復(fù)雜的軟件,出現(xiàn)內(nèi)存錯(cuò)誤的風(fēng)險(xiǎn)極高。
          Patrick Walton 也是 Mozilla 的一名員工,他也參與了 Rust 的開(kāi)發(fā)工作。當(dāng)初,Patrick Walton 放棄繼續(xù)攻讀編程語(yǔ)言博士的學(xué)位,并加入了 Mozilla。偶爾的一次機(jī)會(huì),JavaScript 的創(chuàng)建者 Brendan Eich 把他拉進(jìn)了 Mozilla 的一次會(huì)議:“我們?cè)谟懻?Rust 的設(shè)計(jì)決策,你要不要來(lái)看看?”Patrick Walton 覺(jué)得 Rust 非常棒,于是,他開(kāi)始和 Graydon Hoare 一起開(kāi)發(fā)該語(yǔ)言。后來(lái)越來(lái)越多的工程師加入了他們的隊(duì)伍。當(dāng)時(shí)的很多人,包括 Mozilla 的工程師 Niko Matsakis 和 Felix Klock,都有內(nèi)存和編程語(yǔ)言相關(guān)的研究經(jīng)驗(yàn)。

          Patrick Walton Niko Matsakis Felix Klock Manish Goregaokar圖源:MITTechnologyReview

          2009 年,Mozilla 決定正式支持 Rust。該語(yǔ)言是完全開(kāi)源的,而且其決策由創(chuàng)造者全權(quán)負(fù)責(zé),不過(guò) Mozilla 同意出錢資助幾位工程師。于是,Rust 小組占據(jù)了公司的一間會(huì)議室,Mozilla Research 的聯(lián)合創(chuàng)始人 Dave Herman 將其稱為“書(shū)呆子洞穴”,并在門外張貼了一個(gè)標(biāo)志。在這之后的十年里,Mozilla 雇傭了十幾名工程師全職研究 Rust。
          Walton 回憶道:“每個(gè)人都覺(jué)得自己在從事一項(xiàng)偉大的事業(yè)。” 這種興奮延伸到了 Mozilla 的大樓之外。2010 年代初期,Rust 吸引了世界各個(gè)角落的科技志愿者,他們中的有些人在大型科技公司工作。其中一名主貢獻(xiàn)者是德國(guó)的一名高中生。2010年,Mozilla 在加拿大不列顛哥倫比亞省舉行會(huì)議,Eich 發(fā)表了關(guān)于實(shí)驗(yàn)性語(yǔ)言的演講,他說(shuō):“如果你對(duì)編程語(yǔ)言充滿了興趣,就一定要試試看 Rust。”


          確認(rèn) Rust 核心,程序運(yùn)行更快,更安全

          2010 年代初期,Mozilla 的工程師和世界各地的 Rust 志愿者逐漸打磨出了 Rust 的核心:內(nèi)存的管理方式。他們創(chuàng)建了一個(gè)“所有權(quán)”系統(tǒng),一個(gè)數(shù)據(jù)只能由一個(gè)變量引用,這大大降低了內(nèi)存出問(wèn)題的風(fēng)險(xiǎn)。Rust 的編譯器會(huì)嚴(yán)格執(zhí)行所有權(quán)規(guī)則。如果編程人員違反這些規(guī)則,編譯器將拒絕編譯代碼,也不會(huì)將其變成可運(yùn)行的程序。
          Rust 使用的許多技巧都算不上新穎,Manish Goregaokar 是 Rust 開(kāi)發(fā)人員工具團(tuán)隊(duì)的負(fù)責(zé)人,早年曾在 Mozilla 工作,他表示:“大多是幾十年前的研究”。但 Rust 工程師善于發(fā)現(xiàn)這些設(shè)計(jì)概念,并將它們轉(zhuǎn)化為實(shí)用的功能。
          隨著這個(gè)團(tuán)隊(duì)不斷改進(jìn)內(nèi)存管理系統(tǒng),逐漸地 Rust 不再需要自己的垃圾收集器,直到 2013 年,他們刪除了垃圾收集器。如今用 Rust 編寫的程序運(yùn)行速度更快,因?yàn)橛?jì)算機(jī)不會(huì)每隔一段時(shí)間就停下來(lái)清理垃圾。Hoare 指出,一些軟件工程師認(rèn)為 Rust 仍然擁有類似于垃圾收集的元素:“引用計(jì)數(shù)”系統(tǒng),這個(gè)系統(tǒng)是內(nèi)存所有權(quán)機(jī)制的一部分。但無(wú)論采用了哪種方式,如今 Rust 的性能確實(shí)提高了,距離硬件越來(lái)越近,就像 C 和 C++ 一樣,同時(shí)也保證了內(nèi)存安全。
          2012 年,Steve Klabnik 開(kāi)始接觸 Rust 的開(kāi)發(fā)工作,并在之后的十年里負(fù)責(zé)編寫相關(guān)文檔,他表示,刪除垃圾收集后“Rust 變成了一門更精簡(jiǎn)且更有效地語(yǔ)言。”

          友好的社區(qū)文化


          在此過(guò)程中,Rust 社區(qū)建立了一種文化:對(duì)新人異常友好,而且非常開(kāi)放。微軟首席工程師 Nell Shamrell-Harrington 曾在 Mozilla 從事 Rust 的開(kāi)發(fā)工作,她表示:“我們不會(huì)稱任何人為菜鳥(niǎo),沒(méi)有任何問(wèn)題是愚蠢的問(wèn)題。”
          她說(shuō),部分原因是 Hoare 在很早以前就發(fā)布了“行為準(zhǔn)則”,任何為 Rust 做出貢獻(xiàn)的人都應(yīng)該遵守這些準(zhǔn)則。Rust 社區(qū)成員說(shuō),社區(qū)接受了這套準(zhǔn)則,并且成功地吸引到了很多編程高手加入 Rust。即便程序員犯錯(cuò),編譯器拋出的錯(cuò)誤消息也很友好,不僅描述了錯(cuò)誤,而且還會(huì)就如何修復(fù)禮貌地提出建議。
          Shamrell-Harrington 說(shuō):“當(dāng)我犯錯(cuò)誤時(shí),C 和 C++ 的編譯器會(huì)讓我覺(jué)得自己是一個(gè)很糟糕的人。而 Rust 編譯器更像是在指導(dǎo)你編寫超級(jí)安全的代碼。”
          2015 年,該團(tuán)隊(duì)全力以赴最終發(fā)布了 Rust 的“穩(wěn)定”版本。這個(gè)版本非常可靠,可用于為真正的客戶編寫軟件。距離 Rust 歸入 Mozilla 旗下已經(jīng)過(guò)去六年了,在漫長(zhǎng)的開(kāi)發(fā)期間內(nèi),編程人員一直渴望嘗試演示版本,盡管這些版本的表現(xiàn)會(huì)很糟糕,Goregaokar 說(shuō):“編譯器一直在崩潰”。終于是時(shí)候?qū)ⅰ?.0”推向世界了。
          Walton 記得自己蜷縮著身體坐在電腦前奮戰(zhàn)了幾個(gè)小時(shí)。Klabnik“在過(guò)去兩周內(nèi)寫了大約 45 頁(yè)的文檔,”他回憶道。2015 年 5 月 15 日,他們終于發(fā)布了第一個(gè)版本,眾多 Rust 粉絲聚集在世界各地慶祝。
          Mozilla 的投資很快開(kāi)始獲得回報(bào)。2016 年,Mozilla 小組發(fā)布了 Servo,這是一款使用 Rust 構(gòu)建的新型瀏覽器引擎。第二年,另一個(gè)小組使用 Rust 重寫了 Firefox 中渲染 CSS 的部分。這一變化給瀏覽器帶來(lái)了明顯的性能提升。此外,Mozilla 還使用 Rust 重寫了處理 MP4 多媒體文件的代碼。
          很快,Rust 開(kāi)發(fā)人員就聽(tīng)到很多公司都在嘗試他們的新語(yǔ)言。

          榮獲科技巨頭青睞

          三星公司的程序員告訴在法國(guó) Mozilla 辦公室工作的 Klock,他們已經(jīng)開(kāi)始使用 Rust 語(yǔ)言了。Facebook(現(xiàn)改名為 Meta)使用 Rust 重新設(shè)計(jì)了程序員管理其內(nèi)部源代碼的軟件。Walton 如今在 Meta 工作,他表示:“無(wú)論怎么夸 Rust 的重要性都不為過(guò)。”
          很快,許多重要軟件的核心部分都開(kāi)始采用 Rust 編寫。2020 年,Dropbox 推出了其“同步引擎”的新版本,他們的工程師也用 Rust 重寫了該引擎。該系統(tǒng)最初是用 Python 編寫的,但現(xiàn)在要處理幾十億個(gè)文件(以及在線同步的數(shù)萬(wàn)億個(gè)文件)。軟件工程師 Parker Timmerman(最近離開(kāi)了 Dropbox)表示,Rust 降低了處理如此復(fù)雜的系統(tǒng)的難度。
          他說(shuō):“使用 Rust 寫程序很愉快,這門語(yǔ)言太棒了,很有趣。你感覺(jué)自己就像一位魔術(shù)師,使用其他語(yǔ)言時(shí)根本不會(huì)有這樣的感覺(jué)。我們做了一個(gè)很明智的決定,這是一項(xiàng)新技術(shù)。”
          一些公司發(fā)現(xiàn) Rust 減輕了他們對(duì)內(nèi)存錯(cuò)誤的恐懼,Mara Bos 使用 Rust 重寫了控制無(wú)人機(jī)的軟件,該軟件最初是用 C++ 編寫的。
          還有一些人感受到放棄垃圾收集的好處了。在 Discord,長(zhǎng)期以來(lái)工程師們一直對(duì) Go 中的垃圾收集器很不滿。他們用 Go 編寫的軟件大約每?jī)煞昼娋托枰獔?zhí)行一次垃圾收集,盡管 Discord 的工程師寫得非常仔細(xì),沒(méi)有垃圾需要收集。2020 年,他們用 Rust 重寫了該系統(tǒng),如今運(yùn)行速度提高了 10 倍。
          現(xiàn)如今,就連科技巨頭亞馬遜的云計(jì)算平臺(tái) AWS 的高管和工程師也越來(lái)越相信 Rust 可以幫助他們編寫更安全、更快的代碼。Shane Miller 為 AWS 創(chuàng)建了一個(gè) Rust 團(tuán)隊(duì),他表示:“Rust 具有獨(dú)特的優(yōu)勢(shì),可以提供其他語(yǔ)言無(wú)法提供的優(yōu)勢(shì)。Rust 能提供一種語(yǔ)言的多種超能力。”
          對(duì)這家云計(jì)算巨頭來(lái)說(shuō),最重要的是,一項(xiàng)基于 Rust 代碼的研究發(fā)現(xiàn),Rust 代碼的運(yùn)行效率非常高,其耗電量只有用 Java 編寫的同等程序的一半。Miller 說(shuō):“因此,我可以創(chuàng)建一個(gè)數(shù)據(jù)中心,運(yùn)行 2 倍的工作負(fù)載。或者,只需一半大小的數(shù)據(jù)中心就可以完成同等量的工作,畢竟數(shù)據(jù)中心需要建立在城市中心,不能放到郊區(qū)。”
          Rust 的成功讓一些長(zhǎng)期貢獻(xiàn)者感到有些緊張。隨著科技巨頭陸續(xù)開(kāi)始采用這種語(yǔ)言,他們對(duì) Rust 產(chǎn)生的影響也越來(lái)越大。這些巨頭公司資金充沛,足夠負(fù)擔(dān)工程師全職開(kāi)發(fā) Rust,實(shí)際上如今 Rust 團(tuán)隊(duì)的幾位領(lǐng)導(dǎo)者就是亞馬遜和微軟的員工。而其他有價(jià)值的貢獻(xiàn)者必須在業(yè)余時(shí)間從事 Rust 的開(kāi)發(fā),比如 Bos 除了運(yùn)營(yíng)她的無(wú)人機(jī)創(chuàng)業(yè)公司外,還需要承擔(dān)華為的 Rust 工作,但作為 Rust 庫(kù)的團(tuán)隊(duì)負(fù)責(zé)人,她的這部分工作并不會(huì)獲得任何酬勞。
          Bos 表示,這種現(xiàn)象在開(kāi)源項(xiàng)目中很常見(jiàn):大公司有能力更多地參與項(xiàng)目開(kāi)發(fā),他們可以推動(dòng)整個(gè)項(xiàng)目,解決他們關(guān)心的問(wèn)題,但小公司就沒(méi)有這種能力。她說(shuō):“大公司確實(shí)有這樣的一些影響力”。但到目前為止,沒(méi)有任何公司采取任何措施來(lái)敲響警鐘。Klabnik 對(duì)亞馬遜參與 Rust 的開(kāi)發(fā)表示擔(dān)憂,“我擔(dān)心嗎?當(dāng)然擔(dān)心了。我會(huì)覺(jué)得這個(gè)項(xiàng)目比其他項(xiàng)目更糟糕嗎?并不會(huì)。”


          基金會(huì)成立,開(kāi)源不再用“愛(ài)”發(fā)電


          2021 年,各大科技公司出資成立了一個(gè)非營(yíng)利性 Rust 基金會(huì),以支持志愿者。在 Miller 領(lǐng)導(dǎo)該基金會(huì)的頭兩年里,他們提供了 2 萬(wàn)美元的資助,用于支持希望承擔(dān) Rust 主要功能開(kāi)發(fā)但短期內(nèi)需要資金支持的貢獻(xiàn)者。此外,該基金會(huì)還為托管 Rust 代碼的服務(wù)器提供了資金,并付錢給一家技術(shù)公司,以確保這些服務(wù)器全天候運(yùn)行。Miller 說(shuō),在常見(jiàn)的開(kāi)發(fā)風(fēng)格中,這項(xiàng)工作以前是由“兩名志愿者完成的,他們基本上有 50% 的時(shí)間在待命,其中一名是來(lái)自意大利的學(xué)生。
          這種語(yǔ)言的發(fā)展速度非常不可思議。如果說(shuō) Rust 誕生于 2006 年,那么如今即將結(jié)束青春期,走向成熟期。汽車公司正在采用 Rust 來(lái)構(gòu)建運(yùn)行車輛的關(guān)鍵代碼,航空航天公司也在使用這種編程語(yǔ)言。Dropbox 的 Timmerman認(rèn)為:“將來(lái),到處都會(huì)使用 Rust。”微軟高管甚至公開(kāi)表示,他們將使用 Rust 編寫越來(lái)越多的新代碼,而C和C++的使用將越來(lái)越少,最終為零。
          所有使用 C 和 C++ 編寫的舊代碼不會(huì)消失,會(huì)一直使用,可能會(huì)持續(xù)數(shù)十年。但是,如果 Rust 成為編寫快速和裸機(jī)代碼的常用語(yǔ)言,我們會(huì)逐漸地意識(shí)到,我們的軟件環(huán)境將變得越來(lái)越可靠,不那么容易崩潰,也不至于那么不安全。
          看到 Rust 如今的發(fā)展,最驚訝的人莫過(guò)于 Hoare 本人。因?yàn)椋霸S多語(yǔ)言都半路夭折了,”他說(shuō)。

          . 使用語(yǔ)義化標(biāo)簽:盡可能使用語(yǔ)義化標(biāo)簽,這樣可以讓搜索引擎更好地理解你的頁(yè)面結(jié)構(gòu),同時(shí)也更容易閱讀和維護(hù)。

          2. 遵循標(biāo)準(zhǔn)結(jié)構(gòu):HTML有一些固定的結(jié)構(gòu),如<head>、<body>等,不要隨意更改它們的順序或忽略它們。

          3. 不要濫用標(biāo)簽:避免過(guò)多使用無(wú)意義的標(biāo)簽,如<div>、<span>等,應(yīng)該盡可能使用合適的語(yǔ)義化標(biāo)簽。

          4. 標(biāo)簽閉合:HTML標(biāo)簽必須成對(duì)出現(xiàn),即必須有起始標(biāo)簽和結(jié)束標(biāo)簽,確保標(biāo)簽的正確閉合。

          5. 屬性使用雙引號(hào):HTML屬性值必須用雙引號(hào)括起來(lái),如< img src="image.jpg">。

          6. 避免使用內(nèi)聯(lián)樣式:內(nèi)聯(lián)樣式會(huì)增加HTML文件的大小,而且不利于維護(hù),應(yīng)該將CSS樣式單獨(dú)寫在一個(gè)外部文件中。

          7. 避免使用表格布局:表格布局雖然簡(jiǎn)單易用,但是不利于SEO和響應(yīng)式布局,應(yīng)該盡可能使用CSS布局。

          8. 圖片添加alt屬性:所有圖片都應(yīng)該添加alt屬性,描述圖片的內(nèi)容,這不僅有助于SEO,還可以提高網(wǎng)站的可訪問(wèn)性。

          9. 避免使用過(guò)時(shí)標(biāo)簽和屬性:如<center>、<font>等已經(jīng)被廢棄,不應(yīng)該再使用,應(yīng)該使用CSS來(lái)實(shí)現(xiàn)相應(yīng)的效果。

          10. 注釋代碼:注釋代碼可以幫助其他開(kāi)發(fā)人員更好地理解你的代碼,也有助于自己以后維護(hù)代碼。


          ython和其他編程語(yǔ)言不同,可選的IDE(編程集成環(huán)境)很多,但很多并不是為中小學(xué)的信息科技教學(xué)設(shè)計(jì)的,鑒于此,作者所在研究團(tuán)隊(duì)根據(jù)一線教學(xué)需求,開(kāi)發(fā)了XEdu信息科技教學(xué)版,集成了教學(xué)中涉及的絕大多數(shù)庫(kù)和模塊,降低了中小學(xué)教師教學(xué)Python的技術(shù)門檻。


          近兩年,筆者一直在努力開(kāi)發(fā)一個(gè)名叫“XEdu”的開(kāi)箱即用的人工智能開(kāi)發(fā)工具。為了解決環(huán)境搭建的問(wèn)題,筆者借助Conda(一個(gè)開(kāi)源的軟件包管理系統(tǒng))封裝了一個(gè)綠色軟件,用戶只要一解壓,就擁有了深度學(xué)習(xí)的編程環(huán)境。很多信息科技(技術(shù))教師看到這個(gè)“XEdu一鍵安裝包”后,想到可以用這樣的方法將中小學(xué)常見(jiàn)的Python庫(kù)封裝起來(lái),然后形成一個(gè)定制的教學(xué)環(huán)境,省去維護(hù)上的很多成本。


          理由:為什么要定制編程環(huán)境


          中小學(xué)新版的信息科技教材幾乎都選擇了Python,Python是一個(gè)開(kāi)源編程語(yǔ)言,擁有很多IDE(編程集成環(huán)境),如IDLE、Anaconda、PyCharm、VSCode、Spyder、Subl i me、Atom和Thonny等,那為什么一線教學(xué)還會(huì)提出定制教學(xué)環(huán)境的需求呢?


          1.Python IDE太多導(dǎo)致選擇困難


          Python的IDE種類繁多,各有各的特點(diǎn),且功能使用差別較大,教師們難免患上選擇困難癥。IDE本身沒(méi)有優(yōu)劣之分,主要是看用戶需求。高校的數(shù)據(jù)科學(xué)、人工智能課程一般推薦Anaconda,而工程師和程序員往往選擇PyCharm和VSCode。對(duì)于教學(xué)來(lái)來(lái)說(shuō),Jupyter Notebook的文本和代碼相結(jié)合方式特別適合做“學(xué)案”。對(duì)于初學(xué)入門的學(xué)生來(lái)說(shuō),界面簡(jiǎn)潔干凈的Thonny則是最佳選擇。


          2.為中小學(xué)設(shè)計(jì)的Python IDE很少


          雖然IDE很多,但為中小學(xué)信息科技教學(xué)設(shè)計(jì)的Python IDE很少。中小學(xué)的Python學(xué)習(xí)應(yīng)該聚焦在編程和算法上,而弱化軟件附加的功能。程序員選擇PyCharm和VSCode,是因?yàn)殚_(kāi)發(fā)工程需要項(xiàng)目管理、版本管理方面的功能;而信息科技教學(xué)一般不會(huì)寫很復(fù)雜的代碼,不會(huì)去開(kāi)發(fā)信息系統(tǒng),也不需要太復(fù)雜的輔助工具。


          3.庫(kù)環(huán)境管理困難


          Python的最大特點(diǎn)是擁有無(wú)窮無(wú)盡的第三方庫(kù)或者模塊,教學(xué)中往往需要用PIP工具安裝各種庫(kù)。因?yàn)閃indows系統(tǒng)不帶完整的編譯工具,對(duì)于一些沒(méi)有預(yù)編譯的庫(kù)或者依賴關(guān)系比較復(fù)雜的庫(kù),往往容易安裝失敗。而信息科技的教學(xué)環(huán)境一般在機(jī)房,如果一開(kāi)始沒(méi)有把可能涉及的庫(kù)都裝好,那么每一次開(kāi)機(jī)都要重新安裝。這不僅需要足夠的網(wǎng)絡(luò)帶寬,還很浪費(fèi)時(shí)間。


          因此,一線信息科技教師會(huì)期望有一個(gè)工具,可以將信息科技教學(xué)中常用的庫(kù)文件全部?jī)?nèi)置,并且內(nèi)置Jupyter、Thonny和常見(jiàn)的第三方庫(kù)。只要解壓,就能使用,既方便教師部署機(jī)房環(huán)境,也方便學(xué)生在家自學(xué)。


          方案:定制編程環(huán)境的技術(shù)實(shí)現(xiàn)


          XEdu之所以能做到將編程環(huán)境打包為一個(gè)文件,是因?yàn)榻柚恕癮nconda”(一個(gè)著名的Python IDE)中的“conda-pack”。顧名思義,“conda-pack”就是一個(gè)環(huán)境打包的工具,其使用的大致步驟如下:


          第一步:安裝conda環(huán)境。


          下載miniconda安裝包并安裝(https://docs.conda.io/en/latest/miniconda.html#)。


          第二步:構(gòu)建一個(gè)新的Python環(huán)境,如筆者取名為“env”的環(huán)境。


          在conda的PowerShell Promp(t下面簡(jiǎn)稱為“Prompt”)中輸入conda create-n env python=3.8.3-y

          在Prompt中繼續(xù)輸入命令conda activate env,激活環(huán)境“env”。


          第三步:安裝所需要的各種庫(kù)文件。


          在Prompt中繼續(xù)輸入pip install XEdu-python MMEdu BaseNN BaseDT BaseML BaseDeploy。

          在Prompt中繼續(xù)安裝Jupyter和Thonny:pip install jupyter notebook thonny==4.0.0。

          以此類推,完成所有的第三方庫(kù)的安裝。


          第四步:打包編程環(huán)境。

          在Prompt中繼續(xù)輸入conda pack-n env-o env.tar.gz。

          由于環(huán)境打包只能是tar.gz格式,對(duì)Windows支持不友好,等待打包完成后,再使用解壓軟件解壓,然后做一些細(xì)節(jié)調(diào)整,最后壓縮成自解壓文件。


          第五步:為編程環(huán)境添加啟動(dòng)腳本文件。


          要想激活這個(gè)Python環(huán)境,還需要在命令行中執(zhí)行env\Scripts\activate.bat,為了讓學(xué)生有更好的體驗(yàn),可以把這個(gè)命令行指令封裝成為啟動(dòng)腳本文件。


          封裝的IDLE啟動(dòng)腳本文件,如圖1所示。同樣,可以封裝出啟動(dòng)CMD腳本,如圖2所示。


          圖1

          圖2


          對(duì)Thonny和Jupyter Notebook的啟動(dòng),需要稍做一些處理,以避免和計(jì)算機(jī)上已經(jīng)安裝的舊環(huán)境產(chǎn)生沖突。具體的腳本內(nèi)容有點(diǎn)長(zhǎng),這里略過(guò)。


          第六步:壓縮為自釋放文件。

          利用7zip、WinRAR等工具,將整個(gè)目錄打包為自解壓文件。


          實(shí)踐:以XEdu為模板設(shè)計(jì)信息科技教學(xué)版本


          在明確了定制編程環(huán)境的方案后,核心的工作就是確定需要預(yù)裝哪些庫(kù)。


          考慮到XEdu的定位是人工智能教育的工具包,那么XEdu-Python、MMEdu、BaseDT、BaseNN、BaseML和BaseDeploy是必備的核心庫(kù)。因?yàn)橐蕾囮P(guān)系,在安裝這些庫(kù)時(shí)會(huì)自動(dòng)安裝另外一些庫(kù),如opencv-python、numpy、pandas、matplotlib、scikit-learn、pillow、requests、onnxruntime和tqdm等。


          上面列出的庫(kù),已經(jīng)覆蓋了絕大多數(shù)信息科技教材涉及的庫(kù)。考慮到不可能將全國(guó)的教材都全部整理一遍,因此筆者以浙江教育出版社的高中教材和清華大學(xué)出版社的初中教材為主,又加入了如下一些庫(kù):pyinstaller、flask、pyautogui、pypinyin、gradio、tkinter、wordcloud、jieba、pywebio、pyttx3、pinpong、pysmplegui、remi、turtle等。


          此外,筆者認(rèn)為需要規(guī)范學(xué)生的代碼和相關(guān)文件存放習(xí)慣,于是梳理了文件目錄。如圖3所示,其中checkpoints是存放AI訓(xùn)練的權(quán)重文件的,dataset是存放數(shù)據(jù)集的,EasyDL是簡(jiǎn)易深度學(xué)習(xí)軟件系列,env是Python的運(yùn)行環(huán)境和庫(kù)文件,utils是一些可能需要的內(nèi)置功能,XEdu示例代碼是XEdu系列人工智能教學(xué)所需的代碼文件,教學(xué)資源則供教師存放各種配套的資源。


          圖3


          反饋:來(lái)自一線教師的測(cè)試和評(píng)價(jià)


          筆者將這個(gè)解壓就可以使用的Python編程環(huán)境,命名為“XEdu信息科技教學(xué)版”,并提供給身邊熟悉的信息技術(shù)教師使用。目前得到了不錯(cuò)的使用反饋,尤其是兼容性很好,在Win7(64位)系統(tǒng)上運(yùn)行正常。


          這一編程環(huán)境不僅可以用于信息科技教學(xué),還可以用于人工智能科創(chuàng)活動(dòng)。針對(duì)部分教師給出的反饋,需要讓Jupyter Notebook支持中文,筆者在Jupyter Notebook的啟動(dòng)腳本中增加了“set.UTF8”,同時(shí)再次修改了一些細(xì)節(jié),包括去除thonny文件的標(biāo)語(yǔ)等。


          總結(jié):幸福都是奮斗出來(lái)的


          當(dāng)完成這個(gè)“XEdu信息科技教學(xué)版”后,筆者心情特別好,因?yàn)榻處焸冋莆樟私鉀Q方案和技術(shù)后,編程環(huán)境完全可以根據(jù)自己的需求來(lái)定制。信息科技教師的幸福要由自己來(lái)掌握。


          本文作者:


          謝作如

          溫州科技高級(jí)中學(xué)


          邱奕盛

          華東師范大學(xué)教育信息技術(shù)學(xué)系/上海數(shù)字化教育裝備工程技術(shù)研究中心


          文章刊登于《中國(guó)信息技術(shù)教育》2023年第19期


          引用請(qǐng)注明參考文獻(xiàn):

          謝作如,邱奕盛.為信息科技教學(xué)定制一個(gè)Python編程環(huán)境[J].中國(guó)信息技術(shù)教育,2023(19):82-84.


          主站蜘蛛池模板: 亚洲熟女乱综合一区二区| 无码乱人伦一区二区亚洲一| 美女免费视频一区二区三区| 亚洲片一区二区三区| 亚洲国产成人一区二区三区| 国产伦精品一区二区| 日本一区二区三区爆乳| 国产日韩AV免费无码一区二区| 欧亚精品一区三区免费| 亚洲午夜在线一区| 日韩免费无码视频一区二区三区| 午夜福利国产一区二区| 国产91精品一区| 国产精品成人一区无码| 日本精品高清一区二区2021| 欧美av色香蕉一区二区蜜桃小说| 亚洲国产福利精品一区二区| 亚洲一区二区三区无码国产| 91在线精品亚洲一区二区| 成人区精品一区二区不卡亚洲 | 在线观看午夜亚洲一区| 香蕉在线精品一区二区| 伊人色综合一区二区三区| 亚洲日韩精品无码一区二区三区| 97精品国产福利一区二区三区| 人妻无码一区二区视频| AV无码精品一区二区三区宅噜噜| 国产精品99无码一区二区| 香蕉视频一区二区三区| 一区二区三区视频在线观看| 精品一区二区三区免费毛片爱| 国产吧一区在线视频| 精品国产亚洲一区二区三区在线观看| 韩国福利一区二区美女视频| 中文字幕日韩欧美一区二区三区 | 亚洲一区中文字幕久久| 亚洲乱码一区av春药高潮| 精品无人乱码一区二区三区| 国产乱码精品一区三上| 日韩精品无码视频一区二区蜜桃| 国产精品视频一区二区噜噜|