查看 Solidity 编译器 Github 存储库,我看到该项目还集成了 LLL 编译器。
这让我想知道 Solidity 在编译为 EVM 字节码的过程中是否会被简化为 LLL?
我读过 LLL 作为 EVM ASM 的包装器,所以直观地将 Solidity 编译为 LLL 是否有意义?
或者 LLL 编译器是否只是作为 Solidity 项目的一部分包含在内,因为它本身太小而不能作为一个项目?
其实我有同样的问题,但我认为答案是肯定的!在 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
与上一个答案相反,实际正确答案是否定的。solidity 编译器将solidity 代码直接编译为EVM。有一种称为 Julia 的 Solidity 中间语言,它实际上是被assembly{}
块所接受的,但它还没有发展到从 Solidity 代码生成 Julia 代码的地步。LLL 编译器包含在solidity 存储库中主要是出于历史原因。