想要學習編譯器的原理與實務開發?雖然目前已經有很多開源的編譯器可以參考實作,但是都太龐大了,小編整理了這些開源專案的編譯器都很小,其中有一位開發者還寫了一系列的文章記錄了他的學習編譯器過程。
https://softnshare.com/learning-compiler-from-opensource/
「compiler原理」的推薦目錄:
- 關於compiler原理 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於compiler原理 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於compiler原理 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於compiler原理 在 你所不知道的C 語言:編譯器和最佳化原理(上) (2017-10-10) 的評價
- 關於compiler原理 在 #請益bootstrap 原理 - 軟體工程師板 | Dcard 的評價
- 關於compiler原理 在 [問題] 請問怎麼學compiler 原理- c_and_cpp | PTT數位生活 的評價
- 關於compiler原理 在 lrscy/Principle-of-Compiler-Homework: 编译原理大作业 - GitHub 的評價
- 關於compiler原理 在 從6 個開源專案學習編譯器開發- Soft & Share 線上課程資訊分享 的評價
- 關於compiler原理 在 编译原理, lex&yacc 的評價
compiler原理 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] Solidity Weekly #19
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
v0.5.0 改版說明
幾天前,Solidity Version 0.5.0 正式 released。這次大改版主要變動還是以安全為主,語言本身改為需用比較明確的宣告,edge-cases 問題拿掉,且提供更簡單的低階 compiler 介面。
其實這次可以說是累積了相當多的改變,做一次定版。詳細的改版文件可參考 “Solidity v0.5.0 Breaking Changes”,他會有些範例可參考。也可以看 changelog 簡單的更改清單。
如果要升級你的舊程式到 v0.5.0,需要改變的地方如下:(翻譯至 changelog)
.call() 改寫成 .call(““) 或 .call(signature, a, b, c) 改寫成 .call(abi.encodeWithSignature(signature, a, b, c)),且後者只支援 value types。
keccak256(a, b, c) 改寫成 keccak256(abi.encodePacked(a, b, c)) (原理說明可參考 Solidity Weekly #10)
所有 fallback 或 interface function 要宣告成 external,其他每個 function 都要宣告成 public。(各種宣告方式,可參考 Solidity Weekly #12)
所有變數,都要明確宣告其 data location。例如 uint[] x = m_x 要改成 uint[] storage x = m_x,宣告 x 的 data location 是 storage。特別要注意, external function 的變數,必須用 calldata 的 data location 型態。
合約 address 要執行功能前,須先明確轉換成 address type,才能執行其 functions,例如 c 是合約,以前可以寫 c.transfer(…), 現在必須改成 address(c).transfer(…)
如果你要做 transfer,尤其是 function 的變數,要先宣告成 address payable。
其他還蠻多變動的, 請詳見 Solidity v0.5.0 文件。
Solidity Weekly #19 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
compiler原理 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] Solidity Weekly #9
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
什麼時候用 storage,什麼時候該用 memory?
其實這副標題,有可能又會誤導大家如何寫 solidity。簡單講它們是完全不一樣的東西。所以應該會用在不同的地方,做不同的事才對。
先簡單說明它們的原理:
storage 就是 smart contract 正常存放狀態 (state) 的地方,而這些地方就是用來呈現在區塊鏈裡狀態值的變更。所以一般來說,全域變數就會用 storage 來儲存。
它以 32 bytes 為單位類似 hash 的方式做 key/value 的查詢。所以即時key 1 跟 key 1000,所用的空間跟 key 1 跟 key 2 一樣。(所花的 gas 也應該相同)
另外,通常方程式帶入的變數或回傳值,會以 memory 方式表示,或有些 compiler 會用 stack 來儲存 (不花 gas)。若帶入變數內容來自於一個全域變數,它會複製一份 storage 裡的資料到 memory 做修改。但如果你在方程式帶入的變數前用 storage 保留字來描述,它就變成 passed by reference,把 storage 的位置直接傳給該方程式,因此所有的變動,都會直接改到 storage 裡的值。
而一般在方程式裡的本域變數 (local variables),也預設用 storage 來處理,除非你故意用 memory 保留字來定義它。但用 memory 來處理陣列會有點困難。不像 storage 的陣列,可以用 push。(如下錯誤範例)
function createRoom() public{ address[] memory adr; adr.push(msg.sender); // compiler error ...}
但為了節省 gas 的消耗,在方程式裡本域變數改用 memory 也是很常見的事。
links 分享;
Ethereum Solidity: Memory vs Storage & How to initialize an array inside a struct — (Georgios Konstantopoulos)
Solidity Introduction — (A very good Solidity tutorial from BitDegree)
New Features of Solidity 0.5.0 — (@Christian Reitwiessner)
Solidity Weekly #9 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
compiler原理 在 #請益bootstrap 原理 - 軟體工程師板 | Dcard 的推薦與評價
由於最近剛好翻到編譯器,看到bootstrap,不確定自己的想法有沒有問題,因此來詢問大神們,麻煩各位指教了!,想法:假如我現在有c 以及c 的compiler ... ... <看更多>
compiler原理 在 [問題] 請問怎麼學compiler 原理- c_and_cpp | PTT數位生活 的推薦與評價
想要自學compiler 原理不曉得各位有沒有推薦的書籍、入門方式有聽說從歐萊理的lex & yacc 讀起是不錯的方式希望各位指點先謝謝:) --. ※ 發信站: 批踢踢實業坊(ptt.cc) ... ... <看更多>
compiler原理 在 你所不知道的C 語言:編譯器和最佳化原理(上) (2017-10-10) 的推薦與評價
... <看更多>