Solidity можно считать языком «более высокого уровня», чем Serpent. Существуют ли какие-либо «низкоуровневые» функции в Serpent или которые могут быть реализованы в Serpent, которые либо невозможно, либо неосуществимо сделать с помощью Solidity?
Если есть, порядок от того, что невозможно, до того, что невозможно или вряд ли будет реализовано в Solidity, поможет нам определить, следует ли использовать одно над другим.
Я не думаю, что у Solidity есть «ограничение», позволяющее реализовывать низкоуровневые функции/доступы, такие как типы вещей, которые может делать Serpent. Однако эти два языка могут иметь разные приоритеты. Serpent, вероятно, ориентирован на функции более низкого уровня по сравнению с флагманским языком высокого уровня Solidity.
Языки высокого уровня Ethereum, чтобы по близости вы могли получить прямой доступ к EVM:
Serpent имеет прямой доступ к кодам операций EVM (это надмножество языка высокого уровня LLL) , но он также имеет ряд высокоуровневых функций. Недостатком Serpent является более сложный компилятор, который теоретически может содержать больше ошибок.
Можно утверждать, что Solidity более подвержена проблемам, связанным с глубиной стека:
Виталик Бутерин написал комментарий на Reddit :
Solidity компилирует все переменные в значения в стеке, а методы DUPN в Ethereum позволяют извлекать из стека только 2-16-е значение в любой момент времени. Фактическая глубина стека составляет 1024. Переменные Serpent компилируются в обращения к памяти, поэтому у вас нет этой проблемы в serpent; чтобы обойти это в солидности, я бы порекомендовал вам попытаться больше упаковать вещи в структуры.
Будучи флагманским языком, Solidity ориентирован на другие приоритеты, чем Serpent. Solidity уделяет меньше внимания добавлению функций низкого уровня в пользу функций более высокого уровня, но я не думаю, что невозможно добавить в Solidity больше функций низкого уровня. На самом деле, в дорожной карте разработки Solidity есть история по добавлению встроенного ASM в Solidity , что позволило бы доступ более низкого уровня к EVM.
Это не совсем сравнение двух языков, но актуально для тех, кто хочет рассмотреть один по сравнению с другим.
В ходе аудита в Serpent были обнаружены критические ошибки, при этом аудиторы назвали проект Serpent «низкокачественным» и «несовершенным».
Виталик, написавший Serpent, написал об этом в твиттере : «PSA: теперь я считаю Serpent устаревшей технологией, недостаточной защиты по текущим стандартам».
Также похоже, что Виталик не будет продолжать развивать Serpent, сосредоточившись на Viper, который, как он также написал в Твиттере , не будет готов до тех пор, пока не пройдет внешний аудит.
В отчете Zeppelin говорится, что Solidity — лучший доступный ответ на сегодняшний день, поскольку над ним работает больше разработчиков, и это флагманский язык. Сказав это, им еще предстоит провести такой же аудит для Solidity.
Основное отличие заключается в синтаксисе. Serpent больше похож на python, а Solidity - на javascript cpp.
Но Solidity также лучше проработан и имеет приятную функцию в качестве шаблонов.
Вы найдете гораздо больше примеров кода Solidity в Интернете.
эт
Хадсон Джеймсон