Al observar el código evmjit , noté que el optimizador LLVM en realidad se usa justo antes de la ejecución de un contrato por parte de la máquina virtual. También noté que el compilador de Solidity tiene su propio optimizador que optimiza el código de bytes.
Por lo tanto, me preguntaba... ¿cuál es el beneficio de tener un optimizador de código de bytes en el compilador de Solidity frente a confiar completamente en el optimizador LLVM en la máquina virtual?
Independientemente de cómo se ejecute un contrato, lo que importa es la contabilidad de la EVM.
El protocolo no sabe si está ejecutando un contrato en x86, ARM7, 6502 o lápiz y papel. Lo que sí sabe es cuánto cuesta cada paso en el EVM, que es lo mismo independientemente. La optimización de Solidity, al optimizar el código de nivel EVM, abarata los contratos en gas . Cualquier optimizador del lado del cliente abarata los contratos en recursos informáticos físicos .
Mi conclusión sobre esto es que definitivamente es posible realizar la misma optimización en LLVM durante la ejecución y reducir Gas en teoría . Sin embargo, este es probablemente un problema intratable en la práctica debido a la naturaleza del LLVM IR, es decir, es un nivel demasiado bajo para este trabajo. Se necesita una abstracción del compilador diferente para que dichas optimizaciones sean más fáciles de implementar y más sólidas, y el compilador de Solidity hace exactamente eso. Sin embargo, el IR del optimizador Solidity no me parece bien definido y más bien ad-hoc. Me preguntaba si hay un plan para mejorar eso en el futuro y crear un optimizador que permita módulos de optimización de terceros (similares a LLVM).
que21
Mateo Schmidt
Jessie lesbiana