Сравнение 10 лучших языков программирования смарт-контрактов в 2021 году
Предварительные условияЭта статья предназначена для разработчиков, знакомых с блокчейном и смарт-контрактами. Если вас не устраивает эта терминология, сначала посмотрите это 5-минутное видео, в котором просто объясняется, что такое блокчейн . Вы также можете использовать это руководство по блокчейну для начинающих , чтобы ссылаться на ключевые термины при чтении.
Мотивация
Как разработчик блокчейна, который присоединился к этой сфере с 2017 года, у меня есть опыт кодирования смарт-контрактов на различных языках программирования. Я считаю, что разработчики должны задаться вопросом: «Почему существует так много языков смарт-контрактов и в чем их различия? Как мне лучше всего потратить свое время на изучение одного языка и разработку на нескольких блокчейнах?» Такие вопросы давно засели у меня в голове. Поэтому я счел целесообразным изучить 10 наиболее часто встречающихся языков и опубликовать его в виде сообщения в блоге, в котором излагаются их основные характеристики, чтобы спасти жизнь разработчикам. :)
Введение и план
10 лучших языков смарт-контрактов выбраны на основе моих наблюдений за распространенностью среди текущих сообществ разработчиков, включая Solidity, Vyper, Rust, C/C++, Go, C#, Bitcoin Script, Clarity, Move и Haskell. Среди них некоторые были созданы специально для разработки блокчейна (например, Solidity и Vyper), а другие были адаптированы из существующих языков для работы с блокчейнами и смарт-контрактами (например, C и Rust).
Интуитивно, при сравнении этих языков ключевыми вопросами являются: «Каковы их отличия с точки зрения разработчика? Каково обоснование дизайна? Есть ли необходимость создавать новые языки для конкретных блокчейнов? Почему некоторые языки неполны по Тьюрингу ?» В частности, я суммировал семь показателей сравнения, которые будут описаны в следующем разделе. Я также расскажу о плюсах и минусах разработки на каждом языке, основываясь на своем опыте.
Цель этого поста — помочь вам, как разработчику, лучше понять, как выбирать между различными языками, и предоставить учебные пособия для начала работы.
Краткая сводка таблицы
Эта таблица дает вам обзор нашей сводки сравнения. Не беспокойтесь, если некоторые показатели на первый взгляд кажутся пугающими. Ниже мы подробно расскажем о каждом из них.
Метрики сравнения
Вот список аспектов, которые следует учитывать при оценке языков смарт-контрактов:
1. Какие блокчейны используют этот язык в качестве языка смарт-контрактов?
а. Чем больше блокчейнов поддерживает язык смарт-контрактов, тем лучше. Мы все хотим выучить один язык и применить его к нескольким блокчейнам или перенести существующие проекты на другие блокчейны для более широкой аудитории.
2. Синтаксис какого традиционного языка программирования больше всего похож на этот язык?
а.Эта информация поможет вам оценить, насколько вам сложно выучить этот новый язык. Например, вам может быть проще освоить Solidity, если вы уже являетесь разработчиком JavaScript из-за схожести синтаксиса.
3. Является ли этот язык полным по Тьюрингу? (Для более глубокого анализа обратитесь к этой статье .)
а. Есть плюсы и минусы того, чтобы язык был полным по Тьюрингу. Преимущество Turing Complete в том, что он может «решить любую проблему, если ее можно закодировать». Когда Solidity родился в 2015 году как полный по Тьюрингу язык смарт-контрактов, он открыл неограниченные возможности для создания приложений, использующих мощь блокчейна, в то время как Биткойн рассматривался только как средство сбережения из-за его ограниченных функций, которые могут быть реализованы в Биткойн скрипт.
Однако недостатком метода Тьюринга является то, что он теоретически «не может гарантировать, сколько времени потребуется для решения задачи». В случае первого программируемого блокчейна Ethereum смарт-контракты выполняются последовательно, а не одновременно. Таким образом, бесконечные циклы, которые могут блокировать выполнение других смарт-контрактов, невозможны. Эфириум решает эту проблему, принимая «лимиты газа», устанавливая верхнюю границу, ограничивающую максимальную сложность одного исполнения. Кроме того, исследования показывают, что любой статический анализ полных по Тьюрингу языков либо очень ограничен, либо принципиально неполный. Хорошо сконструированные неполные языки Тьюринга будут поддерживать гораздо более глубокий статический анализ, повышая безопасность.
В результате «неполный» Тьюринг постепенно стал новой «фичей» некоторых языков смарт-контрактов, таких как Vyper и Clarity.
4. Поддерживает ли этот язык циклы?
а. Обычно функциональные языки программирования не имеют циклов. Разработчики должны изучить альтернативный синтаксис, чтобы добиться того же результата, что и при использовании циклов. Например, в Clarity мы можем использовать map или fold вместо циклов.
5. Это интерпретируемый язык или компилируемый язык? (см . эту статью о различиях между интерпретируемым и скомпилированным языком)
а. Интерпретируемые языки минимизируют поверхность для внесения ошибок, удаляя промежуточное скомпилированное представление (например, байт-код EVM для Solidity). Ошибки компилятора наносят ущерб блокчейнам, потому что даже если исходный код не содержит ошибок, конечная программа, достигающая блокчейна, может содержать ошибки ( ссылка ). Однако интерпретируемый код часто работает примерно в 5-10 раз медленнее, чем скомпилированный код ( ссылка ), поскольку интерпретатор должен анализировать каждое выражение во время выполнения. ( Подробнее об интерпретаторе из Википедии ). Таким образом, кодирование на интерпретируемых языках может быть менее подвержено ошибкам, но медленным.
6. Насколько популярен этот язык, исходя из его популярности (по оценке звезд Github)? ( ссылка на данные )
а. Примечание. Если новый язык специально создан для создания смарт-контрактов, мы ссылаемся на язык, который имеет наиболее схожий с ним синтаксис.
б. Если язык имеет большой трафик Github, это означает, что у него относительно активное и устоявшееся сообщество. Это подразумевает еще более впечатляющее внедрение, если язык популярен, но относительно нов, как, например, Move.
7. Каков его рейтинг в рейтинге «Самый любимый язык программирования» по результатам опроса разработчиков Stack Overflow 2020 ?
а. Если язык нравится многим разработчикам, более вероятно, что этот язык станет более распространенным в будущем и получит растущую поддержку сообщества.
8. Каково фактическое количество звезд Github в собственном репозитории?
а. Это должно дать вам количественный обзор того, насколько популярен каждый язык программирования. Ссылка на репозиторий Github также указана в таблице сравнения выше.
10 лучших языков программирования
Обратите внимание, что порядок ниже определяется преобладанием языка в пространстве блокчейна по моим наблюдениям.
Solidity
- пример кода 👆
- Поддерживаемые блокчейны: совместимые с Ethereum и EVM цепочки, такие как Binance Smart Chain (BSC), Tron , Polygon , xDAI , TomoChain , Cronos (разработано crypto.com ) и Quorum .
- Синтаксис похож на: JavaScript
- Построен с помощью: С++
- Полнота по Тьюрингу: Верно
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 1
- Самый любимый рейтинг на основе опроса Stack Overflow: 10
- Описание
- Первоначально предложенный в 2014 году, Solidity представляет собой объектно-ориентированный и статически типизированный язык программирования для написания смарт-контрактов на блокчейнах , совместимых с Ethereum и EVM ( виртуальная машина Ethereum ). Причину создания Solidity можно объяснить тем, почему Ethereum нужна собственная EVM вместо существующих виртуальных машин. Как сказано на Stack Overflow , ни одна из существующих ВМ не удовлетворяла требованиям Ethereum.
- Историческая ценность как одного из первых программируемых языков смарт-контрактов блокчейна.
- Относительно плавная кривая обучения
- Хорошая записываемость и читабельность
- Хорошо зарекомендовавшее себя сообщество с достаточной документацией, видео / письменными руководствами и вопросами и ответами по Stack Overflow.
- Легче найти технических талантов, знакомых с этим языком, для работы над блокчейн-проектами.
- Существующие стандарты четко определены для конкретных приложений, таких как ERC20 и ERC721 .
- Доступно множество инструментов: OpenZeppelin
предлагает библиотеки с открытым исходным кодом для безопасной разработки смарт-контрактов. Разработчики могут наследовать и использовать существующие смарт-контракты, которые со временем доказали свою безопасность. Truffle & Hardhat предоставляет простую в использовании среду разработки и среду тестирования для разработки приложений. - Хорошо развитая экосистема, которая обеспечивает лучший пользовательский опыт в сочетании с существующими децентрализованными протоколами.
- Поскольку это новый язык, некоторые подводные камни безопасности еще предстоит обнаружить. (Ссылка на официальную документацию Solidity )
- Трудно выполнить статический анализ, чтобы избежать ошибок в программе, поскольку свойство завершения по Тьюрингу вводит бесконечные возможности того, как может вести себя программа.
- Разработчикам необходимо написать тесты, обеспечивающие охват более 95%, чтобы гарантировать надежность программы.
- Значительные различия в синтаксисе между разными версиями Solidity, затрудняющие повторное использование кода, написанного в более ранних версиях.
- У разработчиков меньше опыта работы с этим новым языком, что приводит к более высокой вероятности ошибок.
- Отсутствие встроенных проверок переполнения и потери значимости для арифметических операций.
Solidity Wiki , мой собственный опыт
Ссылки: Github (звезд: 11,3 тыс.), документация
Биткойн-скрипт
- пример кода👆
- Поддерживаемые блокчейны: Биткойн
- Синтаксис похож на: Форт
- Построен с помощью: С++
- Полнота по Тьюрингу: Ложь
- Поддерживающие петли: False
- Интерпретируемый или скомпилированный язык: интерпретируемый
- Рейтинг тенденций на основе звезд Github: (Нет соответствующих данных)
- Самый популярный рейтинг, основанный на опросе Stack Overflow: (Нет соответствующих данных)
- Описание
- Факты
a. Появившийся вместе с биткойном в 2009 году, биткойн-скрипт прост, основан на стеке и неполный по Тьюрингу. Инструкции обрабатываются последовательно. Данные помещаются в стек, а коды операций (коды операций) используются для выполнения операций над элементами в стеке. - Плюсы
: а. Историческая ценность сценария самого распространенного блокчейна. - Минусы
а. Коды операций нелегко выучить, написать и прочитать.
б. Мало кто на самом деле использует этот язык для создания приложений. Большинство его вариантов использования предназначены для перевода средств с простой логикой. - Ссылки
Биткойн Вики , мой собственный опыт
Ссылки: Github (звезд: 55,9 тыс.), документация
Vyper
- пример кода👆
- Поддерживаемые блокчейны: блокчейны, совместимые с Ethereum и EVM.
- Синтаксис похож на: Python
- Создано с помощью: Python
- Полнота по Тьюрингу: Ложь
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 2
- Самый любимый рейтинг на основе опроса Stack Overflow: 3
- Описание
- Факты:
а. Vyper — это язык смарт-контрактов Python, созданный в 2017 году, который компилируется в байт-код EVM, такой как Solidity. Разработчики извлекли уроки из проблем Solidity и сделали язык более простым, безопасным и удобным для аудита. Он удаляет функции, которые оказались проблематичными в Solidity. Это не замена Solidity, а язык, который можно использовать, когда им нужен высочайший уровень безопасности. - Плюсы:
а. Синтаксис похож на Python
b. Границы и проверка переполнения при доступе к массиву и арифметике.
в. Программы, написанные на Vyper, всегда будут иметь предсказуемый результат, в то время как программы, написанные на Solidity, не будут иметь предсказуемого результата до тех пор, пока они не будут развернуты и выполнены. - Минусы:
а. Немногие проекты используют Vyper в качестве языка смарт-контрактов. Количество контрактов Vyper и Solidity на Github составляет 1000 против 740 000 на момент написания статьи.
б. Меньше документации и примеров для начала. - Ссылки:
Является ли Vyper хорошей альтернативой Solidity? , документация Vyper Ссылки : Github (звёзд: 3,2 тыс.), документация
Rust
- пример кода (solana), контракт взаимозаменяемого токена на NEAR , контракт ERC20 на Polkadot
- Поддерживаемые блокчейны: Solana , Near , Polkadot
- Синтаксис похож на: (Существующий язык изменен для поддержки смарт-контрактов)
- Построено с помощью: ржавчины
- Полнота по Тьюрингу: Верно
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 13
- Самый любимый рейтинг на основе опроса Stack Overflow: 1
- Описание
- Факты
а. Впервые появившийся в 2011 году, Rust — это язык, разработанный для повышения производительности и безопасности, особенно для безопасного параллелизма. Он синтаксически похож на C++ с хорошей производительностью, но может гарантировать безопасность памяти без сборки мусора. Кроме того, он был признан «самым любимым языком программирования» в опросе разработчиков Stack Overflow каждый год, начиная с 2016 года. - Плюсы:
а. Rust — это язык смарт-контрактов для Solana, блокчейна с одним из самых высоких TPS (транзакций в секунду) на сегодняшний день ( TPS в реальном времени ).
б. Компетентная производительность, такая как C/C++
c. Ошибки (кроме логических) могут быть устранены при компиляции программы.
д. Встроенный менеджер зависимостей под названием Cargo .
е. Разработчики Rust часто более опытны, что приводит к меньшему количеству ошибок в разрабатываемых приложениях.
ф. Программы на Rust можно запускать на встроенных системах. - Минусы:
а. Компиляция программы может занять много времени (более 10 минут для крупных проектов)
. b. Синтаксис более сложен для изучения, написания и чтения.
в. Меньше примеров для смарт-контрактов Rust.
- Ссылки:
Golang vs Rust , Rust Wiki , мой собственный опыт
Ссылки: Github (звезд: 56,8K), документация для Solana , документация для Near , документация для Polkadot
С/С++
- пример кода, Логирование контракта на Солане
- Поддерживаемые блокчейны: EOS , Solana
- Синтаксис похож на: (Существующий язык изменен для поддержки смарт-контрактов)
- Построен на: C/C++
- Полнота по Тьюрингу: Верно
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 7
- Самый любимый рейтинг на основе опроса Stack Overflow: 18
- Описание
- Факты: а.
Впервые появившийся в 1972 году, C представляет собой процедурный язык программирования со статической системой типов. Первоначально он был разработан для создания утилит, работающих в Unix, и применялся для повторной реализации ядра операционной системы Unix. - Плюсы:
а. C/C++ входит в обязательную учебную программу всех студентов, изучающих компьютерные науки. Больше разработчиков знакомы с его синтаксисом.
б. C — переносимый язык, который можно запускать на нескольких машинах.
в. Богатые библиотеки для эффективных алгоритмов и структур данных.
д. Хорошо зарекомендовавшее себя сообщество с достаточной документацией, видео / письменными руководствами и вопросами и ответами по Stack Overflow. - Минусы:
а. По сравнению с Rust, сложно писать безопасный для памяти код.
б. Указатели в C/C++ представляют собой относительно сложную для понимания концепцию, которая потребляет много памяти. Неправильное использование указателей, таких как дикие указатели, может привести к сбою системы или аномальному поведению.
в. Немногие блокчейны используют C/C++ в качестве языка смарт-контрактов. Ржавчина часто более предпочтительна.
д. Код смарт-контракта, написанный на C/C++, не является кратким по сравнению с Solidity. - Ссылки:
C Wiki , Преимущества и недостатки программирования на C , мой собственный опыт
Ссылки: Github (звезд: 168), документация для EOS , документация для Solana
Go
- пример кода (гиперледжер), контракт токена на Neo
- Поддерживаемые блокчейны: Hyperledger Fabric , Neo
- Синтаксис похож на: (Существующий язык изменен для поддержки смарт-контрактов)
- Создан с помощью: Перейти
- Полнота по Тьюрингу: Верно
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 3
- Самый популярный рейтинг на основе опроса Stack Overflow: 5
- Описание
- Факты:
а. Представленный Google в 2009 году, Golang — это статически типизированный язык программирования для создания эффективного серверного программного обеспечения. - Плюсы:
а. Go — это язык для написания смарт-контрактов Hyperledger Fabric (разрешенная, ориентированная на предприятие структура блокчейна).
б. Хорошая производительность, как у C/C++. При схожей простоте синтаксиса Go обычно в 40 раз быстрее оптимизированного Python.
в. Невероятно быстрое время компиляции (обычно за секунды).
д. Имеет богатую стандартную библиотеку. Разработчикам не нужно импортировать или изучать сложные вторичные библиотеки.
е. Синтаксис относительно прост, его легко выучить и прочитать.
ф. Простой код, как правило, безопаснее сложного. Легче выявить ошибки. - Минусы:
а. Не поддерживает объектно-ориентированное программирование.
б. Отсутствие единого доминирующего фреймворка, такого как Rails для Ruby и Django для Python. - Ссылки:
Golang Wiki , Golang vs Rust , Rust vs Go: какой выбрать и почему? , Должен ли я идти? Плюсы и минусы использования языка программирования Go , почему мы перешли с Python на Go Ссылки : Github (звезд: 87,8 тыс.), документация по Hyperledger Fabric
С#
- пример кода
- Поддерживаемые блокчейны: Neo
- Синтаксис похож на: (Существующий язык изменен для поддержки смарт-контрактов)
- Построен с помощью: С#
- Полнота по Тьюрингу: Верно
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 9
- Самый популярный рейтинг, основанный на опросе Stack Overflow: 8
- Описание
- Факты
а. C#, разработанный Microsoft примерно в 2000 году в рамках инициативы .NET, является универсальным и объектно-ориентированным языком программирования. - Плюсы
Синтаксис относительно прост в изучении, написании и чтении.
Код C# можно запускать во встроенных системах.
Разработчики игр, использующие Unity для разработки игр, уже знакомы с этим языком. - Минусы
Немногие блокчейны используют его в качестве языка смарт-контрактов.
Производительность уступает C/C++.
Больше потребляет памяти по сравнению с C/C++.
Для запуска программы требуется установленная правильная версия .NET Framework, что приводит к увеличению времени установки. - Ссылки
C # Wiki , Каковы плюсы и минусы C# по сравнению с Java? , мой собственный опыт
Ссылки: Github (звезд: 7,2 тыс.), документация для Neo
Ясность
- пример кода (NFT)
- Поддерживаемые блокчейны: стеки (поддерживаемый Blockstack, блокчейн уровня 1, который приносит смарт-контракты и децентрализованные приложения в биткойн)
- Синтаксис похож на: Lisp
- Построено с помощью: ржавчины
- Полнота по Тьюрингу: Ложь
- Поддерживающие петли: False
- Интерпретируемый или скомпилированный язык: интерпретируемый
- Рейтинг трендов на основе звезд Github: 40
- Самый популярный рейтинг, основанный на опросе Stack Overflow: (Нет соответствующих данных)
- Описание
- Факты
а. Созданный в 2020 году, Clarity — это новый язык программирования для написания смарт-контрактов на блокчейне Stacks 2.0. Stacks 2.0 привязывает четкие смарт-контракты к биткойну, что позволяет смарт-контрактам работать на основе действий, наблюдаемых в блокчейне биткойна. - Профессионалы
Разработчики могут использовать Clarity для написания удобочитаемого кода, который работает с блокчейном Биткойн.
Ясность — это разрешимый язык. Из самого кода можно узнать, что будет делать программа.
Ясность намеренно неполна по Тьюрингу. Это позволяет проводить полный статический анализ всего графа вызовов данного смарт-контракта.
Как интерпретируемый язык, он не имеет компилятора и, следовательно, не содержит ошибок компилятора.
Безопасный по дизайну: повторный вход не разрешен и проверяется на недополнение и переполнение.
Синтаксис прост в изучении, написании и чтении, как только вы освоитесь со скобками. - Минусы
Язык очень молодой. Языку требуется время, чтобы доказать свою безопасность и отсутствие ошибок.
Единственный блокчейн, который он поддерживает, — это стеки. Код смарт-контракта нельзя перенести на другие существующие блокчейны.
Намеренно ограниченный дизайн может затруднить создание смарт-контрактов.
Поскольку этот язык не имеет ничего общего с Solidity, экосистему стеков нужно строить с нуля.
Примеров и руководств относительно немного. - Ссылки Технический документ
Stacks , книга Clarity , мой собственный опыт Ссылки: Github (звезды: 103), документация , подключаемый модуль Clarity Visual Studio Code
Переместить
- пример кода
- Поддерживаемые блокчейны: Diem (при поддержке Facebook), Pontem
- Синтаксис похож на: Rust
- Построено с помощью: ржавчины
- Полнота по Тьюрингу: Верно
- Опорные петли: Правда
- Интерпретируемый или скомпилированный язык: интерпретируемый
- Рейтинг тенденций на основе звезд Github: (Нет соответствующих данных)
- Самый популярный рейтинг, основанный на опросе Stack Overflow: (Нет соответствующих данных)
- Описание
- Факты
а. Представленный в 2019 году, Move — это исполняемый язык байт-кода, используемый для реализации пользовательских транзакций и смарт-контрактов. Ключевой особенностью Move является возможность определять пользовательские типы ресурсов . Ресурс никогда не может быть скопирован или неявно отброшен, его можно только перемещать между местами хранения программ. Язык был создан для решения проблем существующих языков смарт-контрактов, таких как устранение возможности повторного входа. Это также добавляет гибкости за счет принятия концепций, подобных объектно-ориентированному программированию, таких как модули. - Плюсы
- Move вводит понятие «сценарий транзакции», который допускает одноразовое поведение и повторное использование поведения, в то время как другие языки смарт-контрактов допускают только повторно используемое поведение.
- Разовое поведение: оплата определенному набору получателей
- Повторно используемое поведение: вызов одной процедуры, которая инкапсулирует многократно используемую логику.
- В качестве исполняемого языка байт-кода Move использует верификатор байт-кода и интерпретатор байт-кода вместо компилятора, такого как Solidity, что делает его свободным от возможных сбоев или атак в компиляторах, как указано в официальной документации Solidity .
- Каждый актив в Move имеет собственные свойства дефицита и контроля доступа.
- В Solidity нет встроенной проверки редкости. Когда чеканятся новые токены, вы должны вручную проверить, достигнут ли дефицит (в данном случае общий запас).
- В Solidity нет встроенной проверки контроля доступа, вы должны написать модификаторы, такие как onlyOwner.
- Перемещение Вводит понятие «ресурс», который нельзя дублировать или неявно отбрасывать, его можно только перемещать между местами хранения программ. Это похоже на «токен» в других блокчейнах.
- Например, монета — это ресурс, который можно переместить из одного места в другое только один раз, и его нельзя скопировать или потратить дважды.
- В Solidity такого понятия нет. Перенос активов должен быть указан вручную, что увеличивает вероятность написания кодов с ошибками.
- Модули перемещения связаны с концепцией «умных контрактов» в Ethereum и других блокчейн-платформах, но не совпадают с ней.
- Смарт-контракт Ethereum содержит как код, так и опубликованные данные. В Libra модули содержат значения кода, а ресурсы содержат значения данных.
- В объектно-ориентированных терминах смарт-контракт Ethereum похож на объект-одиночку, опубликованный под адресом одной учетной записи. Модуль — это рецепт создания ресурсов, но он может создавать произвольное количество ресурсов, которые можно публиковать под разными адресами учетных записей. ( ссылка )
- Данные в смарт-контракте могут быть изменены только в рамках контракта, но не в других контрактах извне. В Solidity данные не имеют области действия и, следовательно, не имеют такого типа защиты.
- Например, в следующем фрагменте кода только процедуры модуля Currency могут создавать или уничтожать значения типа Coin .
- Минусы
- Поскольку Move является интерпретируемым языком, в котором каждую строку необходимо оценивать во время выполнения, производительность у него не такая высокая, как у скомпилированных языков. Обратите внимание, что это компромисс в целях безопасности (без ошибок компилятора).
- Язык очень молодой. Языку требуется время, чтобы доказать свою безопасность и отсутствие ошибок.
- Единственные поддерживаемые им блокчейны — это Diem и Pontem. Код смарт-контракта нельзя перенести на другие существующие блокчейны. Тем не менее, стоит отметить, что в ближайшем будущем Pontem предоставит инструменты для переноса приложений. Например, разработчики могут запускать большинство приложений на EVM и вносить необходимые изменения в Move с помощью инструмента автоматической миграции, который заменяет устаревший код текущим.
- Поскольку этот язык не имеет ничего общего с Solidity, экосистему Diem нужно строить с нуля.
- Примеров и руководств относительно немного.
- Глубокое погружение в технический документ Move , Обзор технического документа Move
- Специальные примечания: Связь между Rust и Move ( ссылка )
- Если вы знакомы с Rust, вы можете вспомнить понятия «ресурс», «владение» и «перемещение». В Rust у ресурсов может быть только один владелец.
- При выполнении присваивания (пусть x = y) или передаче аргументов функции по значению (foo(x)), право собственности на ресурсы передается. На языке Rust это называется перемещением.
- Отсюда и название языка программирования «Move». После перемещения ресурсов предыдущий владелец больше не может быть использован. Это согласуется со свойствами цифровых валют, которые нельзя тратить дважды.
- Также стоит отметить, что язык Move и блокчейн Diem написаны на Rust. Руководитель группы кошелька Diem's Novi упомянул на Reddit , что «как проект, в котором безопасность является основным направлением, безопасность типов и памяти Rust были чрезвычайно привлекательными».
- Ссылки: Github (звезд: 15,9 тыс.), документация , начало работы с Pontem , расширение Move VS Code
Haskell*
import qualified Data.Text as Timport Language.Plutus.Contract hiding (when)import Language.PlutusTx.Preludeimport Playground.Contract — | A 'Contract' that logs a message.hello :: Contract BlockchainActions T.Text ()hello = logInfo @String "Hello, world" endpoints :: Contract BlockchainActions T.Text ()endpoints = hello mkSchemaDefinitions ''BlockchainActions $(mkKnownCurrencies [])
- пример кода ( Marlowe встроен в Haskell )
- Поддерживаемые блокчейны: Cardano
- Синтаксис похож на: Миранда
- Построено с помощью: GHC ( компилятор Glasgow Haskell )
- Полнота по Тьюрингу: Верно
- Поддерживающие петли: False
- Интерпретируемый или скомпилированный язык: скомпилированный
- Рейтинг трендов на основе звезд Github: 22
- Самый любимый рейтинг на основе опроса Stack Overflow: 15
- Описание
- Факты
а. Haskell — статически типизированный, ленивый , чисто функциональный язык программирования. Функциональные языки превосходно подходят для написания спецификаций, которые действительно можно выполнять, а также их легче поддерживать.
б. В Haskell легко реализовать формальный процесс проверки, проверяющий, удовлетворяет ли проект некоторым требованиям. - Плюсы
Более короткий, ясный и удобный для сопровождения код.
Даже если вы не в состоянии использовать Haskell в своих проектах по программированию, изучение Haskell может сделать вас лучшим программистом на любом языке.
Пользуется всеми преимуществами функциональных языков программирования. - Минусы
Немногие блокчейны используют его в качестве языка смарт-контрактов.
Не многие разработчики имеют опыт функционального программирования.
На Cardano создается очень мало приложений, а это означает, что существует мало ссылок на разработку смарт-контрактов Haskell. - Ссылки
Haskell Wiki Платформа Plutus Ссылки : Github (звезд: 3,6 тыс.), документация , IDE реального времени
Подтверждение
Эта работа была рассмотрена Chia-Chi Chang, Alejandro Pinto, Chi-Chen Liang, Marvin Janssen и Sean Sie :)
Теперь у вас есть обзор 10 лучших языков программирования смарт-контрактов в 2021 году, их плюсы и минусы, а также сравнение с точки зрения семи показателей оценки. Если вы будете следовать статье, вы сможете ответить: «Почему существует так много языков смарт-контрактов? Каковы их различия? Какой язык лучше всего соответствует моим потребностям». Надеюсь, что эта статья поможет вам выбрать и изучить смарт-контракты.
Спасибо, что уделили время чтению. Предложения приветствуются и не стесняйтесь указывать мне, если что-то неясно. Увидимся в следующий раз! :)