這名開發(fā)人員正在將Python塞入微控制器
目前,,Python是最流行的編程語言之一。它以大量的實用程序庫而聞名,,而且作為一種動態(tài)編程語言,,Python程序的調(diào)試速度比那些必須在執(zhí)行前進行編譯的程序更快。Instagram,、谷歌,、聲田(Spotify)和YouTube等公司都在使用Python。
在Python繼續(xù)統(tǒng)治桌面和云領(lǐng)域的同時,,微型Python(MicroPython)和電路Python(CircuitPython)兩個陣營正在為以硬件為中心的嵌入式項目開發(fā)解釋語言版本,,如基于微控制器的小產(chǎn)品。從傳統(tǒng)上來說,,嵌入式硬件嚴格的計算約束條件有利于編譯語言,,但更強大的微控制器正在改變這種局面。
開源硬件公司阿德弗里特工業(yè)公司的斯科特?肖克羅夫特(Scott Shawcroft)領(lǐng)導(dǎo)了電路Python的開發(fā),。阿德弗里特工業(yè)公司的首席執(zhí)行官利莫?弗里德(Limor Fried)是本刊編輯顧問委員會的成員,,但她沒有參與本文的編寫。
肖克羅夫特說:“(阿德弗里特工業(yè)公司的)目標用戶是那些從未編寫過程序的人,?!彼€解釋道,電路Python能夠讓簡單項目的運行更容易,?!拔蚁矚g人們直接參與?!?/p>
肖克羅夫特說,,他十幾歲時就對編程產(chǎn)生了興趣,他是“第一代通過Web進入涉足編程的人”,。在攻讀計算機工程學(xué)位期間,,肖克羅夫特曾在知識共享組織(Creative Commons)和谷歌實習(xí)。2009年,,他加入了谷歌地圖團隊,,之后在那里工作了6年。2015年他從谷歌離職,,成立了一家無人機飛行控制器公司,。“2016年我們進行了一次小規(guī)模生產(chǎn),,大概有10人購買了我們的產(chǎn)品,。”肖克羅夫特笑著說,。
在每周的視頻直播系列節(jié)目《表演與講述》(Show and Tell,,一檔分享個人項目的真人秀節(jié)目)中,,肖克羅夫特引起了阿德弗里特工業(yè)公司創(chuàng)意總監(jiān)菲利普?托羅內(nèi)(Phillip Torrone)的注意?!拔以诠?jié)目的最后說道:‘我需要一份工作,!’” 肖克羅夫特說。
托羅內(nèi)與肖克羅夫特取得了聯(lián)系,,希望將當時已有兩年歷史的微型Python——物理學(xué)家達明?喬治(Damien George)開發(fā)的一個精簡版Python——移植到一種特殊的微控制器上,。
“我沒有聽說過微型Python,但把Python放在硬件上的想法立刻吸引了我,?!毙た肆_夫特說,“利莫說完成這項工作大約需要3周,,但我只花了一半的時間,,因為開始以后我就停不下來了?!?/p>
阿德弗里特工業(yè)公司同意為肖克羅夫特安排全職工作,,他的工作是對微型Python進行開發(fā)。因此,,微型Python的創(chuàng)建者喬治開始收到阿德弗里特工業(yè)公司提交的大量代碼,,喬治“對我們的介入和改變有些擔憂”,肖克羅夫特說,。
在與喬治討論技術(shù)方面的問題時,,阿德弗里特工業(yè)公司意識到他們對該語言未來的看法與喬治不同。他們不贊成在微型Python的性能和易用性之間進行取舍,,肖克羅夫特想把重點放在Python庫上,,希望微型Python能夠成為以Arduino微控制器系列為核心的編譯軟件生態(tài)系統(tǒng)的替代選擇。
“喬治主張為C核心用戶服務(wù),,而且他堅信Python的速度能夠很快?!毙た肆_夫特解釋道,,“但他們根本不是阿德弗里特工業(yè)公司的目標用戶群?!币虼?,阿德弗里特工業(yè)公司決定另起爐灶,于2017年年中正式推出電路Python,。
電路Python社區(qū)自誕生以來一直發(fā)展穩(wěn)定,。肖克羅夫特工作中最大的挑戰(zhàn)就是管理這個蓬勃發(fā)展的社區(qū)?!白鳛橐粋€開源維護者,,如果有人要求你實現(xiàn)這個功能,、完成那個效果,而且態(tài)度和方式很不客氣,,很自以為是,,你該怎么辦?”肖克羅夫特說,。
一套正式的規(guī)范會有幫助,。肖克羅夫特說:“這是現(xiàn)代所有民用開源項目的一條重要底線,你必須捍衛(wèi)這條底線,。我們的這條底線就曾發(fā)揮過作用,。”
肖克羅夫特說,,對于那些有興趣為電路Python語言做貢獻的人來說,,關(guān)鍵在于實踐?!熬帉懘罅看a,,并盡可能多地參與阿德弗里特工業(yè)公司所創(chuàng)建的這類社區(qū)?!彼f,,“我過去會說你必須熱愛它,其實這樣說并不公平,,因為如果你喜歡這種語言,,你就會自然而然地想要去實踐?!?/p>