不知不覺間辛块,linkboy面世已到十年朴爬。十年前的這個時候即寒,開始著手設(shè)計開發(fā)這門編程語言,經(jīng)過不斷迭代和升級召噩,目前l(fā)inkboy已具有較為完備的生態(tài)體系母赵。除了用于工控、IoT物聯(lián)網(wǎng)具滴、邊緣計算等專業(yè)領(lǐng)域外凹嘲,在國家推進科技創(chuàng)新的大環(huán)境下,近年來linkboy也逐漸應(yīng)用在中小學(xué)的信息技術(shù)和編程教育中构韵。本文將回顧和總結(jié)過去十年的開發(fā)歷程周蹭,感興趣的朋友可以借此一窺linkboy的內(nèi)部設(shè)計細(xì)節(jié)和研發(fā)演進。
概述
眾所周知疲恢,編程語言是連接軟件和硬件的橋梁凶朗,同時也是計算機科學(xué)中最底層技術(shù),甚至要比操作系統(tǒng)還要底層(因為操作系統(tǒng)本身也是用某種編程語言開發(fā))显拳。由于歷史原因棚愤,各類編程語言大都起源于國外技術(shù)體系并由國外所主導(dǎo),鮮有獲得主流應(yīng)用的國產(chǎn)編程語言杂数。
linkboy是首款面向嵌入式宛畦、物聯(lián)網(wǎng)、工業(yè)自動化等領(lǐng)域的國產(chǎn)編程語言揍移,從語言語法的設(shè)計次和、編譯器詞法語法分析到后端目標(biāo)處理器移植和適配、以及最終機器碼文件的生成那伐,整個過程均為自主開發(fā)踏施,沒有使用和基于任何國外的開源技術(shù)體系石蔗,適合于部分對國產(chǎn)化率有嚴(yán)格要求的場景。
相比于國外的同領(lǐng)域編程語言畅形,linkboy具有一些獨特的優(yōu)點抓督,如支持圖形化連線進行各個模塊的配置;語言具有底層硬件無關(guān)性束亏,免除用戶跨平臺移植的各類底層問題;支持常見MCS51阵具、AVR8位處理器和ARM32位內(nèi)核等功能碍遍。
尤其是語言的跨平臺特性,意味著同樣的程序可以配置在不同的平臺上運行并給出完全一致的結(jié)果阳液。此特性做到極致怕敬,就演化出linkboy的一個標(biāo)志性功能——支持模擬仿真。此前業(yè)界主流的方案是:工控或物聯(lián)網(wǎng)項目原本需要部署到實際設(shè)備上運行帘皿,才能看到結(jié)果东跪,如果出現(xiàn)問題,則需要返工鹰溜,通過專業(yè)手段設(shè)置各種程序斷點虽填,深入到程序內(nèi)部調(diào)試和排錯。 而基于linkboy的仿真機制曹动,則可以直接在電腦上模擬執(zhí)行整個工程項目斋日,工程中各個變量的實時值和各外設(shè)的工作情況可視化展示,一目了然墓陈,程序流程和指令的執(zhí)行也有直觀提示恶守。這樣就把傳統(tǒng)的黑盒開發(fā)轉(zhuǎn)變成了透明的白盒開發(fā),提高了程序調(diào)試和排錯的效率贡必。
除了應(yīng)用在工控兔港、物聯(lián)網(wǎng)行業(yè)實現(xiàn)快速原型設(shè)計外,基于linkboy的圖形化配置仔拟、模擬仿真衫樊,以及極低門檻的中文編程理念(所有庫模塊均有中文指令集接口)等特性,linkboy也在全國各地的中小學(xué)編程教育中獲得了較為廣泛的使用理逊。
一橡伞、緣起
2009年7月,開始編寫程序構(gòu)建linkboy晋被。那時候是大二即將結(jié)束要放暑假兑徘,關(guān)于語言的構(gòu)想已經(jīng)成熟,在學(xué)校實驗室里正式著手開發(fā)這門編程語言羡洛。而之前很長一段時期挂脑,則一直是比較零散的藕漱,模糊的想法。有一些想法其實可以追溯到更早的大一時候崭闲。
大一是學(xué)習(xí)的起點肋联,借助網(wǎng)絡(luò)有無窮無盡的學(xué)習(xí)資料和軟件,對于剛從高中苦海解脫的我來說刁俭,確實是大開眼界橄仍。記得有一次跟同學(xué)去網(wǎng)吧,我下載裝好兩個軟件8051IDE和GBD8051牍戚,然后敲幾行程序后侮繁,在GBD8051上運行,一個紅色的端口就不斷地閃爍如孝。我興奮地演示給同學(xué)看宪哩,他一臉茫然,說:“老大第晰,這個有啥用锁孟?”
但我知道這個意義非凡,就像是開啟了一扇大門通往新奇的計算機世界茁瘦。使用匯編語言編程品抽,大一做了一個俄羅斯方塊游戲機,通過家用小霸王的手柄操縱并在128*64液晶上顯示游戲畫面腹躁。51芯片內(nèi)存有限桑包,外擴了一個6264RAM存儲器。
這個游戲機當(dāng)時幾乎被同班同學(xué)們玩遍了纺非。后續(xù)我又開發(fā)了坦克大戰(zhàn)等程序哑了,每次去網(wǎng)吧先把程序從郵箱里下載,然后修改烧颖,調(diào)試弱左,增加功能;下機時候再把程序發(fā)回郵箱里炕淮,就這樣總共編寫近一萬行匯編代碼拆火。從這些項目的開發(fā)中也總結(jié)了不少的經(jīng)驗,如規(guī)范形參傳遞涂圆、全局變量的使用们镜、手工方式計算寄存器的占用等。實際上這里邊已經(jīng)包含了后來設(shè)計編程語言的萌芽润歉,編譯器無非就是把這些過程自動化模狭。
到了大二開始從匯編轉(zhuǎn)向C語言編程,使用Keil這個國外編程軟件踩衩。根據(jù)老師和學(xué)習(xí)資料的指引嚼鹉,需要在網(wǎng)上尋找并下載破解版本贩汉,也就是盜版;正版是需要一筆錢的锚赤,而且國內(nèi)沒什么購買渠道(當(dāng)時)匹舞。另外到一些工程師論壇上一看,很多公司的開發(fā)人員都在用這個盜版线脚,不乏一些大型的正規(guī)科技公司赐稽。
經(jīng)過調(diào)研,國內(nèi)還沒有自己的面向嵌入式和工控領(lǐng)域的編程語言浑侥,普遍在使用國外的編程工具又憨。此外,電路仿真锭吨、EDA軟件等這類基礎(chǔ)、核心的開發(fā)工具寒匙,基本也都是掌握在國外廠商的手中零如,導(dǎo)致國內(nèi)的技術(shù)研發(fā)人員只能被擠到產(chǎn)業(yè)鏈下游,做做應(yīng)用锄弱。
大二使用Keil做了幾個項目考蕾,又發(fā)現(xiàn)了C語言的一些弊端(也可能是自己過于吹毛求疵了吧)。最明顯的是会宪,C語言移植性比較差肖卧,你需要嚴(yán)格遵守MISRAC規(guī)范才會盡可能保證移植性。兩者經(jīng)常是矛盾的掸鹅,比如C語言提供了三元運算符(塞帐?:),MISRAC規(guī)范中又禁止使用這個運算巍沙;C語言允許任意位運算葵姥,而MISRAC規(guī)定:不得對有符號數(shù)施加位操作。而且這樣的規(guī)則一共有127條句携,即使稍微不注意榔幸,編程語言也不會給你報錯,但是開發(fā)出來的工程卻可能存在安全隱患矮嫉,產(chǎn)生數(shù)據(jù)溢出等嚴(yán)重問題削咆。
經(jīng)過一些模糊想法逐漸清晰和成型,大二下學(xué)期快結(jié)束了時候蠢笋,決定設(shè)計一門全新的面向工業(yè)編程語言拨齐,來在語言層面上做重新設(shè)計,也就是說使用這個語言的工程師挺尿,不需要再刻意遵守那127條規(guī)則奏黑,已全部融合到語言的層面炊邦,如有違規(guī)將給出明確的報錯提示,這樣在程序開發(fā)階段就能避免很多潛在的隱患熟史。
期末考試結(jié)束后馁害,我給家里打電話說這個暑假不回去了,要在學(xué)校做些事(因為家里沒有電腦)蹂匹。根據(jù)計劃原定暑假一兩個月就能完成編程語言的原型開發(fā)并測試完成碘菜,這樣大三開學(xué)就可以準(zhǔn)備外出實習(xí)和找工作了∠弈花點時間做完這個項目忍啸,以后作為畢設(shè)也是可以的,不算白忙活履植。
二.啟程
為了在電腦上開發(fā)編譯器軟件计雌,還需要同時學(xué)習(xí)C#。整個暑假玫霎,用一個正在學(xué)的語言開發(fā)一門新語言的編譯器凿滤,主要是各種字符串處理。這樣磕磕絆絆庶近,邊學(xué)邊做翁脆,總算基本完成一個語言內(nèi)核,參考C語言的語法實現(xiàn)了一個子集鼻种,而且支持指針反番。之后做了一些測試,用這套語言重新編寫了之前的俄羅斯方塊游戲叉钥,運行良好罢缸。于是信心滿滿地在一些專業(yè)工程師論壇上推銷這個編程語言。發(fā)了兩個帖子投队,不過反響平平祖能,工程師們覺得這個東西沒什么前途。還有人表示蛾洛,先能編譯通過UCOS-II那樣的嵌入式操作系統(tǒng)再說吧养铸。
想了想,可能目前的成果確實不太成熟轧膘。僅僅是編譯器內(nèi)核有了钞螟,而配套的庫,調(diào)試環(huán)境等都不完善谎碍。做個原型是可以的鳞滨,可是要想做完整,能應(yīng)用在工業(yè)領(lǐng)域蟆淀,兩三個月的開發(fā)周期實在是太短拯啦。還有不少的工作量要做澡匪,這樣感覺到大三畢業(yè)可能都做不完。那么褒链,要不要繼續(xù)做下去唁情??
真是“無知者無畏”甫匹,決定不去實習(xí)找工作了甸鸟,先考本校的專接本,這樣就又有兩年的充足時間來完善這個項目兵迅。
大一在西校區(qū)上課抢韭,是挨著農(nóng)村的很偏僻的地方,大二開始在校本部上課恍箭。師范學(xué)院的實驗室資源相對有限刻恭,不過在學(xué)院甄老師等安排下,辦公樓里有一個小儲物間收拾干凈扯夭,給我當(dāng)實驗室吠各。還給配了一個臺式機,不用像大一那樣每次去網(wǎng)吧編程了勉抓。很感謝學(xué)校能提供這樣一個學(xué)習(xí)環(huán)境,大學(xué)近四年的時間基本都在這個小實驗室里度過候学,并完成了linkboy最內(nèi)核的編譯器和語言框架藕筋。
即使這樣,到2012年6月畢業(yè)的時候梳码,這個項目還是沒有完成~~ 因為發(fā)現(xiàn)永遠有需要做的事情——編譯內(nèi)核做完后需要做生態(tài)隐圾,要支持大量的工控傳感器、通信協(xié)議掰茶;然后基于此語言開發(fā)面向嵌入式場景的操作系統(tǒng)(RTOS)暇藏,做完生態(tài)后依舊少有人用。于是開始做圖形界面濒蒋,簡化模塊的配置和編程盐碱,基于RTOS實現(xiàn)事件驅(qū)動框架,這又是一個新的方向… 畢業(yè)后同學(xué)們都去找工作沪伙、上班了瓮顽,我看著電腦里這個半成品,想到如果去上班的話围橡,精力一分散暖混,這些已有的成果可能就再也拿不起來了…… 于是決定先不去上班,學(xué)校附近租了個房子翁授,繼續(xù)潛心研究這個編程語言到2013年底(給自己放了一年半的假拣播,哈)晾咪。
三、迭代
畢業(yè)后沒什么收入贮配,老媽托我?guī)Ыo姐姐裝修的錢被我占做生活費了谍倦,堅持到2013年底。文章比較長牧嫉,寫得像流水賬剂跟。你要是能堅持看到這里,估計也猜到了酣藻,此刻還是有一堆的工作沒有做完~ 比如又有了新的想法曹洽,想要支持更多的處理器,如STM32等ARM架構(gòu)辽剧。但時間已經(jīng)不允許了送淆,各種內(nèi)外的壓力之下,新的一年要去北京找工作怕轿。以后所有的研究和計劃偷崩,只能放到晚上和周末進行了。
2014-2016年撞羽,這段時間阐斜,從技術(shù)研發(fā)的狀態(tài)來說,感覺進入一個低谷期诀紊。一方面對于自己研發(fā)一門編程語言的新鮮度逐漸降低谒出,遇到的一些深層次問題和困難也會集中出現(xiàn),更多是靠堅持走下去邻奠;另一方面笤喳,這個語言很難實際推廣,幾乎得不到用戶反饋碌宴,只能自己探索著前進杀狡。原本計劃暑假兩三個月完成的項目,最后居然做了幾年贰镣,而且還看不到什么希望呜象。(估計沒人愿意體驗這種前不著村后不著店的感覺。有時候還真是有點心慌)
那么為何會有這么多需要做的事情碑隆?舉一個比較類似的例子董朝,就好像你在進行叢林探險:順著一條小路進去之后,發(fā)現(xiàn)有個路口有幾條小路干跛,比較新鮮子姜,于是先選擇第一條小路進去看看;走了一會兒發(fā)現(xiàn)還有一個分叉路口,隨便選一個分支繼續(xù)進去哥捕,發(fā)現(xiàn)還有更多的路口在等著你——無窮無盡牧抽,最后已經(jīng)迷路,眼花繚亂了遥赚。想到原本初心是要找到叢林深處散落的所有寶貝扬舒,方知整個工程量之龐大。
當(dāng)然凫佛,如果光靠自己的興趣研究讲坎,最后只是做一個自娛自樂的小玩具。項目要生存發(fā)展愧薛,必須有用戶晨炕,所以還需要不斷尋找最能接近用戶的那些小路。
四毫炉、嘗試突破生態(tài)怪圈
作為一個追趕者來說瓮栗,自研技術(shù)的生態(tài)體系、兼容性等都比不過國外技術(shù)瞄勾,吸引力不夠?qū)е掠玫娜松俜鸭椋欢脩羯儆謺觿∵@個狀態(tài)差異,最終差距越來越大永遠趕不上別人进陡。從純技術(shù)的角度來說愿阐,要想擺脫這種負(fù)面循環(huán),辦法只有一個趾疚,就是要在怪圈上找到一個薄弱處缨历,集中力量重點突破缺口,方有可能跳出怪圈盗蟆。
那么我們不妨以開源硬件體系中應(yīng)用最廣泛的arduino為例,探索一下舒裤。arduino是源自歐洲的一個硬件項目(但本質(zhì)上也是一門編程語言)喳资,優(yōu)點是各類的外設(shè)庫很多。不過腾供,我們切換到中小學(xué)編程教育的場景下看一看:首先arduino中的很多庫在中小學(xué)場景可能根本不會用到仆邓;而常用模塊linkboy也有,這樣就等于抹平了對方的優(yōu)勢伴鳖,使得中小學(xué)編程教育的場景下节值,你和對手短暫性的站在了同一個起跑線上。
然后基于你的自主技術(shù)榜聂,挖掘中小學(xué)編程教育場景的一些隱蔽的重點需求做深度開發(fā)搞疗,形成局部性的優(yōu)勢(而對手可能還顧及不到)。借助于這個微弱領(lǐng)先優(yōu)勢须肆,可以得到種子用戶匿乃,并根據(jù)用戶反饋桩皿,不斷迭代完善得到更大的用戶量。這樣可以認(rèn)為突破原來的生態(tài)怪圈困境幢炸,找到了一個適合你的良性發(fā)展方向泄隔。
17年初,基于linkboy語言跨平臺的特點宛徊,嘗試了一下重定向機制佛嬉。比如原本讓燈亮滅的程序,硬件上是控制針腳高低電壓闸天,那么電腦上我處理為畫一個圓圈在屏幕上(其他部分如RTOS都不做修改)暖呕,實物燈的亮滅表現(xiàn)為電腦屏幕上的圓圈顏色改變,成功實現(xiàn)了最簡單的号枕,燈的模擬仿真缰揪。原本一個無心插柳的嘗試,最后電腦界面上圓圈在閃爍的時候葱淳,我自己也有點驚訝了钝腺,原來硬件編程還可以這樣玩~ 不失為一個全新的方向——而這個方向,是arduino等國外主流技術(shù)都沒有的赞厕。(事實上直到今天艳狐,arduino官方依然沒有增加模擬仿真功能)
整個2017年基本在完善仿真,最后每個模塊都支持了這個功能皿桑。得益于編程語言的跨平臺毫目,只需要修改硬件映射的部分即可。直觀的模擬仿真一定程度上降低了中小學(xué)生的入門難度诲侮,排除了很多不必要的錯誤調(diào)試過程镀虐,另外“所見即所得”的展示效果也能提高小學(xué)生對編程的興趣。
從17年以來沟绪,感受到linkboy用戶量開始不斷增加刮便,有各行業(yè)開發(fā)者,也有各地的一線教師和學(xué)生绽慈。根據(jù)用戶的反饋恨旱,不斷修改優(yōu)化編程語言,以適應(yīng)更多類似用戶坝疼。例如搜贤,有教師反饋,小學(xué)生對這個編程軟件感興趣钝凶,但是孩子手小仪芒,鼠標(biāo)右鍵用不太好。于是軟件的操作習(xí)慣及時做出調(diào)整,把大部分常用功能集中到鼠標(biāo)左鍵上桌硫,這樣也更適合教師觸屏操作教學(xué)夭咬。
作為個人開發(fā)的公益平臺,linkboy沒有相關(guān)的資金支持铆隘,也沒有什么大機構(gòu)做背書和宣傳卓舵,確實感謝各地的一線教師們能試用并喜歡這個編程平臺,有些教師通過本校實踐應(yīng)用膀钠,編寫整理成規(guī)范教材掏湾,進而引起上級教育部門的調(diào)研和重視。2018年肿嘲,linkboy被選入山東省小學(xué)信息技術(shù)教學(xué)軟件融击,并由一線教師們完成了教材的編寫。2019年春季雳窟,小學(xué)六年級部分完成出版尊浪,正通過試點和學(xué)校選修等方式,面向全省開展信息技術(shù)編程課程封救。
江蘇拇涤、廣東等其他省市也有不少一線教師在使用linkboy進行信息技術(shù)教學(xué)。近日誉结,由廣東省教研院編著的廣東省初級中學(xué)信息技術(shù)課本完成出版鹅士,這套教材采用linkboy平臺,展示了智能家居編程惩坑、基于北斗定位系統(tǒng)的防丟器掉盅、多傳感器的校園氣象站等項目式案例。新教材將在9月份投入教學(xué)應(yīng)用以舒。
五趾痘、新征程:人工智能 / 物聯(lián)網(wǎng)
隨著人工智能的應(yīng)用普及以及國家政策的推動,教育部門開始逐步引入python到中小學(xué)信息技術(shù)課程中蔓钟。這之中又存在一個鴻溝永票,就是中小學(xué)應(yīng)用最普遍的Arduino開源硬件無法運行python,學(xué)校需要額外采購更高價的python裝備(如英國的micro:bit)奋刽。經(jīng)過調(diào)研瓦侮,目前國外還沒有讓8位arduino運行python的解決方案艰赞,這對于國產(chǎn)技術(shù)又是一個契機佣谐。未使用任何國外的開源技術(shù)情況下,linkboy首次實現(xiàn)了在arduino2560主板上運行python(子集)方妖。
基于自研python編譯/解釋器可以與linkboy仿真引擎深度整合狭魂,實現(xiàn)“數(shù)據(jù)仿真可視化”:即仿真引擎會自動提取出所有的用戶自定義變量,并根據(jù)程序單步執(zhí)行狀態(tài),實時地在圖形界面上顯示出各個變量的當(dāng)前值雌澄,此功能可直觀展示各種程序算法的運行狀態(tài)斋泄。
這些案例也側(cè)面說明了在當(dāng)今物聯(lián)設(shè)備幾何增長,技術(shù)生態(tài)環(huán)境分散化的趨勢下镐牺,面對國外老牌技術(shù)廠商無暇顧及的一些場景炫掐,如人工智能+物聯(lián)網(wǎng)(AIoT)、人工智能+編程教育等新興方向睬涧,國產(chǎn)EDA/CAE類工業(yè)軟件完全可以放下生態(tài)兼容等思想包袱募胃,和國外技術(shù)站在同一個起點上同臺競技,并依托自主技術(shù)深挖場景需求畦浓,取得單點突破和局部的領(lǐng)先優(yōu)勢痹束。
展望
在探索的道路上越走越遠,總是能發(fā)現(xiàn)更多激動人心的方向讶请。研究編程語言就像是奇妙的山泉祷嘶,如果持續(xù)深挖,那么各種想法和創(chuàng)意能不斷地涌出來夺溢,可做的事情實在是很多÷畚。現(xiàn)在依托目前的成果,一方面可以向應(yīng)用層上擴展企垦,結(jié)合國家產(chǎn)業(yè)政策环壤,適合面向青少年做人工智能、軍民融合(北斗等)科普編程平臺钞诡;另一方面可向底層繼續(xù)扎根郑现,支持龍芯嵌入式CPU、兆易等各類國產(chǎn)處理器荧降。尤其近兩年RISC-V開源指令集在物聯(lián)網(wǎng)領(lǐng)域開始大展身手接箫,華為、阿里都在基于RISC-V研發(fā)更自主可控的芯片朵诫,那么做一些配套的編程語言移植工作辛友,比如面向中小學(xué)提供基于開源指令集的編程仿真工具,也是比較有意義的事情剪返。
大家如果感興趣废累,可以到官網(wǎng)(www.linkboy.cc)下載最新3.6版本,體驗試用脱盲。
————————————————
原文鏈接:https://blog.csdn.net/XiaoYanZiShenFei/article/details/97775275(王強老師)