0

查看 Solidity 编译器 Github 存储库,我看到该项目还集成了 LLL 编译器。

这让我想知道 Solidity 在编译为 EVM 字节码的过程中是否会被简化为 LLL?

我读过 LLL 作为 EVM ASM 的包装器,所以直观地将 Solidity 编译为 LLL 是否有意义?

或者 LLL 编译器是否只是作为 Solidity 项目的一部分包含在内,因为它本身太小而不能作为一个项目?

4

2 回答 2

0

其实我有同样的问题,但我认为答案是肯定的!在 Solidity 中,您可以使用装配段

assembly {
    // LLL OR OPCODES HERE
}

你可以像在LLL中一样编写代码,语法相同, GAS成本相当便宜,根据我的经验,至少 30%。

pragma solidity ^0.4.24;
/*
    Autor: Javier Guajardo J.
    Website: https://ethereumchile.cl
    Twitter: @EthereumChile
*/
contract Assembly {
    function returnSum1(uint a, uint b) public pure returns (uint sum) {
        // We ADD a and b in a new variable called doSum
        assembly {
            let doSum := add(a, b)
            sum := doSum
        }
    }
    function returnSum2(uint a, uint b) public pure returns (uint sum) {
        // OR you can ADD a and b directly
        assembly {
            sum := add(a, b)
        }
    }
    function returnSum3(uint a, uint b) public pure returns (uint) {
        // OR you can ADD a and b into 0x40 memory address 
        assembly {
            let sum := mload(0x40) // loading 0x40 address memory
            mstore(sum, add(a, b)) // We store the add(a, b) in 0x40 address memory
            return(sum, 32) // We return result.
        }
    }
}

结果在Remix IDE

Screencapture.png Javier Guajardo 的 Solidity 组装

于 2018-06-11T04:50:45.730 回答
0

与上一个答案相反,实际正确答案是否定的。solidity 编译器将solidity 代码直接编译为EVM。有一种称为 Julia 的 Solidity 中间语言,它实际上是被assembly{}块所接受的,但它还没有发展到从 Solidity 代码生成 Julia 代码的地步。LLL 编译器包含在solidity 存储库中主要是出于历史原因。

于 2018-10-06T01:37:14.907 回答