Limitaciones fundamentales entre Solidez y Serpiente

Solidity puede considerarse un lenguaje de "nivel superior" que Serpent. ¿Hay características de "bajo nivel" en Serpent o que podrían implementarse en Serpent, que son imposibles o inviables de hacer con Solidity?

Si los hay, un orden de lo que es imposible, a lo que es inviable o poco probable de implementar en Solidity, nos ayudaría a determinar si uno debe usarse sobre el otro.

Respuestas (3)

Responder

No creo que haya una "limitación" para que Solidity pueda implementar funciones/accesos de bajo nivel, como los tipos de cosas que Serpent puede hacer. Sin embargo, los dos idiomas pueden tener diferentes prioridades. Es probable que Serpent se centre en funciones de nivel inferior en comparación con el lenguaje insignia de alto nivel Solidity.

Lenguajes de alto nivel de Ethereum en orden por cercanía puedes llegar a acceder directamente a la EVM:

  1. LLL (nivel más bajo, básicamente 1 paso por encima del código de bytes EVM)
  2. Serpiente (superconjunto de LLL)
  3. Solidez (se compila directamente en el código de bytes EVM)

Detalles

Serpent tiene acceso directo a los códigos de operación EVM (es un superconjunto del lenguaje de alto nivel LLL) , pero también tiene un montón de características de alto nivel. La desventaja de Serpent es que el compilador es más complejo y, en teoría, podría contener más errores.

Se puede argumentar que Solidity es más propenso a problemas relacionados con la profundidad de la pila:

Vitalik Buterin escribió este comentario en Reddit :

Solidity compila todas las variables en valores en la pila, y los métodos DUPN en Ethereum solo le permiten obtener el valor 2-16 de la pila en cualquier momento. La profundidad real de la pila es 1024. Las variables de serpiente se compilan en accesos de memoria, por lo que no tiene ese problema en serpiente; para sortearlo con solidez, le recomiendo que intente empaquetar las cosas en estructuras más.

Siendo el lenguaje insignia, Solidity se ha centrado en diferentes prioridades que Serpent. Solidity se ha centrado menos en agregar funciones de bajo nivel en favor de funciones de nivel superior, pero no creo que sea imposible agregar más funciones de bajo nivel a Solidity. De hecho, hay una historia sobre la hoja de ruta de desarrollo de Solidity para agregar ASM en línea a Solidity , lo que permitiría un acceso de nivel inferior a EVM.

Para minimizar la confusión, ¿quizás solo use uno de los términos ASM o código de bytes EVM? Es posible que los lectores no entiendan que son el mismo concepto. (IMO último es más claro y se usa más por lo que he visto)
Estoy de acuerdo. Editado :)

Esto no es exactamente una comparación de los dos idiomas, pero es relevante para alguien que busca considerar uno sobre otro.

Una auditoría encontró errores críticos en Serpent, y los auditores llamaron al proyecto Serpent "de baja calidad" y "defectuoso".

Vitalik, quien escribió Serpent, dijo esto en un tweet : "PSA: ahora considero que Serpent es una tecnología obsoleta; no hay suficientes protecciones de seguridad para los estándares actuales".

También parece que Vitalik no continuará desarrollando Serpent, con su enfoque en Viper, que también tuiteó que no estará listo hasta después de una auditoría externa.

El informe de Zeppelin sugiere que Solidity es la mejor respuesta disponible en la actualidad, ya que más desarrolladores están trabajando en él y es el lenguaje principal. Habiendo dicho esto, todavía tienen que hacer la misma auditoría para Solidity.

La principal diferencia es una sintaxis. Serpent es más como python mientras que Solidity es como javascript cpp

Pero Solidity también está mejor desarrollado y tiene buenas características como plantillas.

Encontrará muchos más ejemplos de código de solidez en línea.

Este es el comienzo de una buena respuesta, pero estoy de acuerdo con OP en que la mejor respuesta probablemente incluirá una lista que va de factible a inviable. ¿Le gustaría el código de solidez y luego crear / iniciar una lista?