總算把這位講師的所有課程中文介紹完成,如果你是一位好奇的工程師,想要了解 compiler 相關技術 ,這位講師講了一系列的課程,包括實作
為什麼要學習這麼硬的知識?我還蠻喜歡課程介紹中的這句話
「這門課是為任何好奇的工程師準備的,他們想獲得建立複雜系統的技能(為程式語言建立解析器是一項相當高階的工程任務!),並獲得建立這種系統的可轉移知識。」
在 udemy 上很少看到這麼完整跟 compiler 技術相關的課程,所以這位講師的課程目前看到是原價沒有特價,請不要私訊問小編是否有 coupon code 了 ,其中兩堂課在免費特價時,這邊應該有不少網友都拿到,歡迎在底下留言你對這位講師的評價
https://softnshare.com/tag/udemyteacher-dmitrysoshnikov/
「compiler課程」的推薦目錄:
- 關於compiler課程 在 軟體開發學習資訊分享 Facebook 的最佳貼文
- 關於compiler課程 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於compiler課程 在 Re: [請益] 學編譯器的出路好嗎? - 看板Tech_Job 的評價
- 關於compiler課程 在 交大修課心得- 編譯器設計概論 - YK 的評價
- 關於compiler課程 在 清华大学编译原理课程(2022秋季) - GitHub 的評價
- 關於compiler課程 在 2017 年系統軟體系列課程討論區 - Facebook 的評價
- 關於compiler課程 在 【C 編程】 整裝待發!設定C Compiler 編譯器GCC 及環境變數 ... 的評價
- 關於compiler課程 在 [尋人] 徵暑假戰友一起修Compiler 線上課程- studyabroad 的評價
compiler課程 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] 2021 區塊鏈開發入門
✍️ Johnson Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
在我大學的時候,除了學習網頁前端之外,因為課程報告的需要接觸到以太坊(Ethereum),於是開始學寫智能合約,包括它使用的程式語言 solidity。
工作以後鮮少再碰以太坊的相關技術,直到最近想重新把以太坊學起來,故而決定寫這篇文章,讓初次接觸區塊鏈與智能合約的人更好地進入開發者的世界。這篇文章不只面向開發者,同時也希望能夠給對區塊鏈有興趣的人,指引一條清晰的學習路線。
關於區塊鏈
區塊鏈會被廣為人知,無非是因為虛擬貨幣的出現,而虛擬貨幣的鼻祖就是比特幣。在比特幣出現以前,沒有一個能夠在全球網路上通用的數位貨幣;在比特幣出現之後,才真的實現了數位化的貨幣,能夠在全球網路上流通。
這樣的技術性突破,blockchain 的名字從比特幣白皮書中被萃取出來,而這項技術也被更多人拿去做研發以及創新。
區塊鏈這項技術的特性可以簡單概括為兩點:去中心化(decentralized)與不可竄改(immutable)。去中心化有程度上的差別,在公共網路上由世界各地的節點共同維護的區塊鏈,去中心化程度較高;相較之下,私人企業開發由特定節點來驗證交易的區塊鏈,去中心化程度較低。
為什麼是以太坊?
這年頭區塊鏈三個字大行其道,大部分都是為區塊鏈而區塊鏈的商業炒作。容許我獨斷地說,以太坊才是區塊鏈應用的大門。
以太坊由全球最大的區塊鏈社群組成,提供一個去中心化的虛擬機器(Ethereum Virtual Machine)來處理「智能合約」,它是一個公共的區塊鏈平台,逛逛以太坊的官網吧!
智能合約
在以太坊區塊鏈中有所謂的智能合約,智能合約能夠部屬到以太坊區塊鏈上,合約即程式碼,放到區塊鏈上就不能再更新,只能執行合約上的程式,持有以太幣的人能夠與合約進行交易。把智能合約想像成是一台自動販賣機,把錢(以太幣)投進去,飲料會掉出來(合約上的程式會被執行)。
在現實生活中,簽訂合約的雙方認為合約有效而且可以被信任,是因為有國家法律來保障,違反合約可能會受到法律制裁;而用以太幣與智能合約互動,認為智能合約可以被信任,是因為智能合約的不可竄改性 — 以太坊虛擬機會毫無偏袒、完全中立、冰冷不帶任何感情地執行智能合約上已經寫好的程式碼。
建立在智能合約之上的虛擬貨幣
事實上,以太坊擴大了區塊鏈這項技術的應用層面。回頭想想,比特幣來自區塊鏈技術,某個人若想打造一款同比特幣一樣的虛擬貨幣,就得模仿比特幣去建造一個自己的虛擬貨幣區塊鏈,一個區塊鏈網路要能夠有效運作並非易事,還需要節點、需要靠人挖礦去驗證交易。此時,若使用以太坊的智能合約,撰寫虛擬貨幣需要的程式碼,將合約部屬到以太坊區塊鏈上,叮咚!他就可以發行自己的虛擬貨幣,根本不必再去建造底層的區塊鏈,也不用想挖不挖礦了。
此時會發現以太坊就像是一個區塊鏈平台,你不需要親手打造區塊鏈網路,即可享有區塊鏈去中心化與不可竄改的特性。與其他智能合約的開發者共同使用以太坊虛擬機 EVM(Ethereum Virtual Machine),在 EVM 上部屬無上限個智能合約。
以太坊是一項基礎建設,底層區塊鏈幫你架設好,開發者便有更多時間去發想應用到網頁、手機、或物連網設備上,以下是一段簡單的智能合約,該合約創造了一個虛擬貨幣簡稱 MAT…
直接進入開發領域 — 線上編輯器 Remix
Remix 是開發智能合約的線上編輯器,進入Remix官網,點選 Create New File 以後,把上方程式碼複製貼上。在左側欄位中有 solidity compiler 的選項,確認一下左側欄第一列顯示的版本,調成 0.7.0 (上方程式碼使用的版本),就可以按下下方 compile 的按鈕,將智能合約「編譯」成 bytecode(給機器讀的語言)。
接著我們要部屬合約到區塊鏈上,首先到左側欄位點選 DEPLOY & RUN TRANSACTIONS 的選項,可以看到環境是 javascript VM,這是指現在要部屬到的測試用虛擬機。按下下方的按鈕 Deploy 即可將合約「部屬」到 javascript VM 上。成功部屬後,你會發現 ACCOUNT 所持有的以太幣,從 100 變成 99.9999…,我們得知部屬智能合約需要花費一點點以太幣。
左側下方會有 Deployed Contracts,點開來就會列出合約上可供呼叫的函式,點那些函式就能與剛剛部屬上去的智能合約進行互動了。
有些函式呼叫會引發交易,所以需要以太幣,有些則不用。在 ACCOUNT 的地方可以展開來,它提供許多的地址 (address),也就是錢包,每個錢包裡面預設給你 100 顆以太幣,試著用那些地址去操作智能合約,你就能慢慢體會什麼是建立在以太坊之上的虛擬貨幣了。
真正的開發者世界
實際上開發智能合約只能算是以太坊開發的其中一部分,其他包括以太坊區塊鏈擴容方案、節點驗證等等又是另一個開發領域了,那部份我就沒有研究太多。而智能合約的開發是比較接近應用層面的,透過網頁前端或手機應用程式,與智能合約進行互動,稱作 Dapp(Decentralized App) 的開發,也象徵著網際網路走向 web3.0 的時代。
學習 solidity 語言,除了看硬生生的官方文件之外,我推薦去玩cryptozombies,我本身就是從這款網頁遊戲中學習這門語言,聽說是連小孩子都能輕易學習的教材。
除了學 solidity 之外,網路上還有很多方便的開發工具,開發者主要是運用這些工具做測試、自動化部屬、串接前端等等。許多網路上的教學文章會使用 Truffle + Ganache + web3.js 來建置開發環境。但我在這裡推薦另一款開發環境的架構,如果是新手直接從 hardhat 開始也是非常適合的,hardhat 的教學文章寫得清楚完整,本篇文章使用的程式碼也是從 hardhat-hackathon-boilerplate 這個專案而來。hardhat 使用的開發環境是 Waffle + Hardhat + ethers,它幫你把開發環境處理的簡單又舒服,讓開發者可以專注在開發智能合約上。
OpenZeppelin 是很有名的智能合約套件庫,開發時可以引入它的智能合約。智能合約很講究安全性,稍微沒寫好就可能被駭客鑽漏洞,虛擬貨幣就被盜走了!OpenZeppelin 提供的 SafeMath 很常被引入到專案,對新手來說看 OpenZeppelin 的合約也是很好的學習管道。此外,官方也建了一個學習網站ethernaut,主要在教導如何寫出安全性夠強的智能合約,可惜網站在我寫這篇文章的時間一直處於維修不能用的狀態。
最後再介紹一款實際上線的智能合約專案:Argent。它是一款運用智能合約來做虛擬貨幣錢包的公司,除了使用他們的錢包之外,也可以看看他們的智能合約是怎麼寫的,感受一下專業的程式碼架構與寫法。
小結
這篇文章希望能幫助到想了解區塊鏈這項技術的人,同時也想呈現一個智能合約的開發生態系,你大可以不必花太多力氣去了解密碼學、挖礦、節點、共識機制等等五花八門的專有名詞;反之,你可以專注在智能合約的開發,或回到本質去思考去中心化的用意、以及為什麼不可竄改的特性那麼重要。
智能合約除了做虛擬貨幣之外,也能夠做投票系統,原本以貨幣為起始點的區塊鏈技術,是智能合約的出現擴大了區塊鏈更具彈性的用途,這圈子需要更多的開發者來探勘這片新大陸。
尤其鼓勵人文社會科學的人才,無論是哲學、政治、經濟、法律或社會等各方領域,試著撇開人工智慧將主導未來社會的發展路線,與之截然不同的另一種形式:人類社會能否依靠科技的力量,促成彼此之間的合作,創造更有效率的市場、更公平的治理方式?
延伸閱讀:激進市場(Radical Markets: Uprooting Capitalism and Democracy for a Just Society)
2021 區塊鏈開發入門 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
compiler課程 在 交大修課心得- 編譯器設計概論 - YK 的推薦與評價
交大修課心得- 編譯器設計概論. 課程綱要. 課程名稱:(中文授課)編譯器設計概論. 授課教師:游逸平. 當期課號 ... ... <看更多>
compiler課程 在 清华大学编译原理课程(2022秋季) - GitHub 的推薦與評價
compiler course info. Contribute to chyyuu/compiler_course_info development by creating an account on GitHub. ... <看更多>
compiler課程 在 Re: [請益] 學編譯器的出路好嗎? - 看板Tech_Job 的推薦與評價
※ 引述《sooge (喜歡小女友Yerin )》之銘言:
: 小弟不才現在資工研究所還沒有找到教授
: 小弟背景是學店電機系畢業
: 在校成績60%
: 期間只修了一堆爽課混畢業
: 沒有一項技能可以拿來說嘴
: 工數 電子 電磁 電路都很差
: 真要說也只有弄專題要用的arduino有學到東西而已
: 本人"極度"討厭硬體,超級無敵他媽討厭那種,單純覺得冰冷的電子元件很沒生命力很乏味
: 大二大三時每週最討厭的課就是電子學實驗,修課都修到快憂鬱症,超級G8討厭
: 大學選系因為不了解自己興趣所向才選了以後出路比較好的電機系就讀
: 沒想到這麼不合自己口味
: 現在有在網路上學ML的相關課程,會一點數據處理
: 雖然程式基礎不好學的慢但因為是自己喜歡的課程所以學起來滿有成就感的
: 如果有在做ML和DL的老師願意收我當然是很好
: 沒有的話就只好找專攻編譯器的老師當指導教授
: 其實我也不知道編譯器是在幹嘛
: 台灣做這個的人很少?
: 查了一下資料但還不是很懂
: 主要是在寫組合語言和LLVM是嗎?
: 學這個會很操嗎?聽說有學生修這個課期末的project程式碼都是上千行起跳
: 之前有修過微算機8051寫組合語言 不特別討厭和感興趣
: 但就是當時程式差程式碼又多修起來有點辛苦
: 現在只想學個一技之長
: 不排斥編譯器這個領域,只是以後畢業靠這個吃飯出路好嗎?
: 台灣學會編譯器容易找的到工作嗎?編譯器偏底層學起來是不是超難?
: 推薦我這個半路出家基礎爛爛的學生選嗎?
: 不知道這兩年會不會水深火熱
: 請求各位大大幫我解答個疑惑,有任何意見我都會聽的
: 謝謝~
: -----
: Sent from JPTT on my Asus ASUS_X00QD.
其實編譯器很多種 看你指的是哪一種
如果是單純 程式碼 轉成 executable machine code 的話
是最簡單的
軟體的程式語言 大部分都是 control flow
不外乎 if-else, for-while loop, function call/jump
好一點的就包含資料封裝 繼承 多型之類的
目前市面上的語言都有類似語法 去實作上述功能
我想一般公司也不會特地去發明一個語言 大概都是用現有的語言就好了
所以 compliler front-end parser 通常都不會碰到 因為別人早就做好了
而且技術不外乎是 LL LR LALR 之類的 (compiler很久以前學的, 有錯請更正)
至於 backend-end 範圍就很廣 一般人說做compiler 就是這種
有從語法樹(AST)分析的 也有從 control flow 做最佳化的
像是 peephole optimization, data-flow optimizations, loop unrolling
之類的 再進階就要看target machine的 pipeline 做平行運算之類的
或是使用 SIMD 指令
目前做 compiler 最夯的大概就是從 LLVM 開始著手 畢竟軟體架構好
文件也多 Apple也從 GCC 跳到 LLVM
也有人拿 LLVM 拿來做 數學軟體的 script language 像是 Julia (不是AV女優)
compiler 要做出有技術性的 通常都要搞出虛擬機之類的
做出虛擬機 表示可以訂出語言的獨特性 型態轉換, 記憶體配置, 線程 之類的
像是 C#, Java, Python, NodeJS
這要學只能去找 source code 來看了...
上述是軟體程式語言
硬體程式語言 也有所謂的compiler 或者叫 hardware synthesizer
比較合適 就是將硬體描述語言 生成硬體邏輯閘
這我沒學過 沒辦法給你甚麼有用資訊 只能給你科普一下
至於學生寫code破千行 就覺得很操 ...只能說 還不及格阿....
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.59.128 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Tech_Job/M.1563852530.A.804.html
※ 編輯: pponywong (220.137.59.128 臺灣), 07/23/2019 11:35:28
... <看更多>