Фундаментальные ограничения между Solidity и Serpent

Solidity можно считать языком «более высокого уровня», чем Serpent. Существуют ли какие-либо «низкоуровневые» функции в Serpent или которые могут быть реализованы в Serpent, которые либо невозможно, либо неосуществимо сделать с помощью Solidity?

Если есть, порядок от того, что невозможно, до того, что невозможно или вряд ли будет реализовано в Solidity, поможет нам определить, следует ли использовать одно над другим.

Ответы (3)

Отвечать

Я не думаю, что у Solidity есть «ограничение», позволяющее реализовывать низкоуровневые функции/доступы, такие как типы вещей, которые может делать Serpent. Однако эти два языка могут иметь разные приоритеты. Serpent, вероятно, ориентирован на функции более низкого уровня по сравнению с флагманским языком высокого уровня Solidity.

Языки высокого уровня Ethereum, чтобы по близости вы могли получить прямой доступ к EVM:

  1. LLL (самый низкий уровень, в основном на 1 шаг выше байт-кода EVM)
  2. Змей (супер-набор LLL)
  3. Solidity (компилируется непосредственно в байт-код EVM)

Подробности

Serpent имеет прямой доступ к кодам операций EVM (это надмножество языка высокого уровня LLL) , но он также имеет ряд высокоуровневых функций. Недостатком Serpent является более сложный компилятор, который теоретически может содержать больше ошибок.

Можно утверждать, что Solidity более подвержена проблемам, связанным с глубиной стека:

Виталик Бутерин написал комментарий на Reddit :

Solidity компилирует все переменные в значения в стеке, а методы DUPN в Ethereum позволяют извлекать из стека только 2-16-е значение в любой момент времени. Фактическая глубина стека составляет 1024. Переменные Serpent компилируются в обращения к памяти, поэтому у вас нет этой проблемы в serpent; чтобы обойти это в солидности, я бы порекомендовал вам попытаться больше упаковать вещи в структуры.

Будучи флагманским языком, Solidity ориентирован на другие приоритеты, чем Serpent. Solidity уделяет меньше внимания добавлению функций низкого уровня в пользу функций более высокого уровня, но я не думаю, что невозможно добавить в Solidity больше функций низкого уровня. На самом деле, в дорожной карте разработки Solidity есть история по добавлению встроенного ASM в Solidity , что позволило бы доступ более низкого уровня к EVM.

Чтобы свести к минимуму путаницу, возможно, просто используйте один из терминов байт-код ASM или EVM? Читатели могут не понять, что это одна и та же концепция. (последний IMO более понятен и используется больше из того, что я видел)
Я согласен. Отредактировано :)

Это не совсем сравнение двух языков, но актуально для тех, кто хочет рассмотреть один по сравнению с другим.

В ходе аудита в Serpent были обнаружены критические ошибки, при этом аудиторы назвали проект Serpent «низкокачественным» и «несовершенным».

Виталик, написавший Serpent, написал об этом в твиттере : «PSA: теперь я считаю Serpent устаревшей технологией, недостаточной защиты по текущим стандартам».

Также похоже, что Виталик не будет продолжать развивать Serpent, сосредоточившись на Viper, который, как он также написал в Твиттере , не будет готов до тех пор, пока не пройдет внешний аудит.

В отчете Zeppelin говорится, что Solidity — лучший доступный ответ на сегодняшний день, поскольку над ним работает больше разработчиков, и это флагманский язык. Сказав это, им еще предстоит провести такой же аудит для Solidity.

Основное отличие заключается в синтаксисе. Serpent больше похож на python, а Solidity - на javascript cpp.

Но Solidity также лучше проработан и имеет приятную функцию в качестве шаблонов.

Вы найдете гораздо больше примеров кода Solidity в Интернете.

Это начало хорошего ответа, но я согласен с OP, что лучший ответ, вероятно, будет включать список, который масштабируется от возможного до невозможного. Хотите получить код солидности, а затем создать / запустить список?