Каковы плюсы и минусы создания новых языков, таких как Solidity, для смарт-контрактов, вместо использования других компьютерных языков, таких как Golang или Python?
Каждый язык программирования предназначен для конкретной операционной среды и целевых задач; и эти ограничения определяют почти все проектные решения о том, какие функции поддерживать, а какие исключить.
Некоторое время назад я потратил довольно много времени на создание кросс-компилятора Go -> EVM. Мне удалось запустить несколько тривиальных программ, и это определенно было очень весело, но довольно скоро я начал сталкиваться с ограничениями EVM, которые противоречат основным предположениям, лежащим в основе Go:
Эти проблемы были основными причинами, по которым я решил не продолжать портировать Go на EVM, но они действительно подчеркивают, что современные языки основаны на бесчисленных функциях, поддерживаемых базовыми операционными системами, которые сами основаны на предположениях о том, что представляет собой базовое оборудование. способности и связанные с этим расходы.
В этом аспекте EVM сильно отличается от зверя, поэтому применение одних и тех же предположений приводит к крайне неоптимальному выполнению кода. Поэтому было принято решение разработать язык, специально адаптированный для среды выполнения EVM. Это действительно, вероятно, намного больше работы, чем перенос существующего синтаксиса языка (!), Но это также приводит к созданию пригодной для использования среды по сравнению со всеми видами «задокументированных ограничений», которые, хотя что-то является допустимым кодом Go, вы не можете использовать это потому что "xyz".
Обратите внимание: вполне может быть, что первоначальный дизайн EVM плох и будет расширен, модернизирован или даже полностью заменен, когда кто-то придумает гораздо лучшее решение для работы. Но это возможность будущего, тогда как Solidity — это текущая потребность.
В частности, в мире смарт-контрактов код предназначен для взаимодействия с EVM, и, следовательно, существует несколько ключевых требований к языку, который будет использоваться в смарт-контракте.
Компилятор должен иметь возможность выводить код, оптимизированный для размера кода (в то время как многие другие языки стремятся оптимизировать эффективность вычислений).
Оптимизация для обеспечения безопасности и возможности аудита.
Также возможны другие организационные/социальные преимущества использования нового языка, такие как
См. другой ответ @Péter Szilágyi для примера попытки использовать язык Go для кросс-компиляции в байт-код EVM.
Справка: Виталик отвечает о том, зачем новый язык в АМА
Есть несколько проблем. Во-первых, существующие компиляторы C++ и другие компиляторы имеют тенденцию выводить код, который на самом деле не оптимизирован для компактного размера кода; например. даже самая простая программа выдает файл длиннее 4кб. Это нормально для компьютеров, где хранение стоит дешево, но ужасно для блокчейнов, где хранение дорого. Поэтому требуются специализированные компиляторы
Во-вторых, языки смарт-контрактов EVM должны быть разработаны с особым вниманием к безопасности, а это не то, о чем большинство существующих языков заботятся в той же степени.
Я не уверен, будет ли мой ответ легко слиться с ответом @ Péter Szilágyi , поэтому я делаю его отдельным.
эт