[爆卦]compiler原理是什麼?優點缺點精華區懶人包

雖然這篇compiler原理鄉民發文沒有被收入到精華區:在compiler原理這個話題中,我們另外找到其它相關的精選爆讚文章

在 compiler原理產品中有4篇Facebook貼文,粉絲數超過5萬的網紅軟體開發學習資訊分享,也在其Facebook貼文中提到, 想要學習編譯器的原理與實務開發?雖然目前已經有很多開源的編譯器可以參考實作,但是都太龐大了,小編整理了這些開源專案的編譯器都很小,其中有一位開發者還寫了一系列的文章記錄了他的學習編譯器過程。 https://softnshare.com/learning-compiler-from-opensou...

  • compiler原理 在 軟體開發學習資訊分享 Facebook 的精選貼文

    2020-08-21 10:10:37
    有 17 人按讚

    想要學習編譯器的原理與實務開發?雖然目前已經有很多開源的編譯器可以參考實作,但是都太龐大了,小編整理了這些開源專案的編譯器都很小,其中有一位開發者還寫了一系列的文章記錄了他的學習編譯器過程。

    https://softnshare.com/learning-compiler-from-opensource/

  • compiler原理 在 Taipei Ethereum Meetup Facebook 的最佳貼文

    2018-11-26 03:20:28
    有 9 人按讚


    📜 [專欄新文章] 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 的精選貼文

    2018-08-23 20:35:20
    有 3 人按讚


    📜 [專欄新文章] 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.

    👏 歡迎轉載分享鼓掌

你可能也想看看

搜尋相關網站