Недавно в экосистеме TON произошло несколько важных событий, связанных с языком Tact:
Был выпущен Tact 1.0, а это означает, что компилятор получил базовый набор функций, необходимых для того, чтобы полагаться на Tact как на полностью проработанный язык. Следует отметить, что компилятор все еще проходит проверки и проверки безопасности.
Основан фонд программного обеспечения Tact. Поэтому, хотя это сообщество не является частью TON Foundation, оно поддерживается и управляется TON Foundation. Tact Software Foundation управляется четырьмя основателями, очень активными в сообществе TON: Олегом Андреевым , Стивом Коршаковым , Талем Колем и Кириллом Емельяненко . Также есть два советника: Кирилл Малев и Любовь Шомбина .
Появились новые экосистемные проекты, такие как веб-сайт Tact by Example, созданный Tal Kol.
Итак, Tact перешел на новый уровень зрелости, и многим разработчикам в экосистеме TON пора подумать об этом.
Но зачем понадобился еще один язык для TON, если есть FunC и Fift? Как все началось? И как он оказался там, где он есть сегодня? Чтобы ответить на этот вопрос, я связался с некоторыми ключевыми людьми, участвующими в Tact, и они рассказали мне о своей точке зрения.
Олег Андреев
Олег наиболее известен в сообществе TON своей работой над Tonkeeper, но он делает больше: среди прочего, он был первым человеком, который возглавил разработку Tact.
Когда я был новичком в экосистеме TON, я начал использовать язык FunC, и иногда он не казался мне подходящим для поставленной задачи. Я чувствовал, что ему не хватает некоторых функций и некоторых абстракций. Я связался с Кириллом Емельяненко из основной команды TON. Он сказал мне, что новый язык для помощи разработчикам может быть хорошей идеей. И он даже сказал мне, что это должно быть названо Tact.
Название «Tact» расшифровывается как «Актеры TON», ссылаясь на модель актера, используемую в TON. Эта асинхронная модель немного хаотична, она может ввести такие вещи, как условия гонки, поэтому вам нужно очень хорошо спроектировать вещи, имея дело с этим. TON — мощная технология, но разработчик должен иметь абстракции поверх TON, чтобы использовать всю эту мощь. Таким образом, идея Tact (а также некоторых других вещей, таких как TON API) заключалась в том, чтобы раскрыть всю мощь TON и сделать его более полезным для людей.
Я начал работать над этим с двумя другими разработчиками, имеющими опыт разработки языков программирования: Cxmog и Дмитрием Полуниным. На первом этапе у нас были некоторые идеи, но не было полного видения Tact. Так что это был итеративный процесс НИОКР. Пробовали разное, изучали, как работает TVM, особенности TON и что нужно скрывать от разработчиков. Мы создали веб-сайт, демонстрирующий возможности Такта, и многие люди сказали, что такой инструмент необходим.
Нам потребовалось несколько месяцев, чтобы понять, как вообще должны быть написаны смарт-контракты в TON. В начале TON они в основном были написаны в классическом стиле Ethereum. Но уникальность TON в том, что он не позволяет разработчику работать с массивами. Все языки программирования и компьютеры предназначены для эффективного перебора некоторых данных — будь то данные в словарях, массивах, базах данных или векторах. И TON говорит: «Эй, не используйте массивы». У вас есть циклы, но они не масштабируются. Создание базы данных создает вектор атаки типа «отказ в обслуживании».
Итак, как нам с этим справиться и создать сложные системы, требующие списков? Например, если есть DAO и у него много членов, как мы его храним? Я думаю, что вместо того, чтобы создавать списки в контрактах, мы должны сделать контракт для каждого члена. И вот тут становится трудно иметь дело с FunC. Так вот где Tact должен облегчить разработчику и сделать его удобным для создания таких сложных систем.
У нас была эта идея, и мы начали ее изучать. Но у нас все еще не было полного видения Tact; у нас были другие вопросы и нерешенные проблемы. И в какой-то момент проект был заморожен, пока мы лучше не поняли, что с ними делать.
И тут в игру вступает Стив Коршаков. В конце 2022 года он ушел из TON Whales, поэтому у него было достаточно свободного времени, и он хотел что-то сделать с Tact. Мы поговорили с ним, я объяснил свое видение Tact, и он приступил к работе.
Он переписал язык почти с нуля, так что Tact, который мы имеем сегодня, сильно отличается от того, над которым работал я. Но прогресс очевиден. И даже в некоторых случаях, когда я поначалу не соглашался со Стивом, после тщательных технических обсуждений я приходил к выводу, что его видение оригинально и разумно, и оно решает проблему. И я по-прежнему вовлечен в Tact в роли своего рода «советника»: я больше не занимаюсь практической работой, но я разговариваю со Стивом о развитии языка и могу что-то предложить. Так что я очень доволен тем, как все получилось.
Стив Коршаков
Стив стал известен в сообществе TON как соучредитель TON Whales, а сейчас занимается разработкой Tact.
Сначала я присоединился к экосистеме TON в качестве соучредителя TON Whales. И я часто слышал о Tact как о «языке, который решит проблемы, с которыми мы сталкиваемся сегодня». Разрабатывая TON в Whales, я сам столкнулся с множеством проблем. Страшно было обновлять контракт на миллионы. Пришлось выделить полдня, чтобы быть уверенным, что ничего не сломаю и не заблокирую все эти деньги. И я надеялся, что Tact все упростит, но его так и не выпустили.
В конце 2022 года я продал свою долю в Whales и начал думать, что делать дальше. Раньше я создавал несколько стартапов, но у меня всегда был бизнес-соучредитель, и на данный момент я действовал сам. Что я мог сделать как одинокий инженер? Закодируйте что-нибудь полезное. Я заметил, что разработка языка Tact в то время не велась, и я подумал, что было бы здорово заняться этим.
Я связался с Олегом, и мы обсудили, как мне действовать дальше. Я узнал видение Олега и видел, что на тот момент делала его команда. Но мое видение несколько отличается и опирается на то, что я понял, работая над TON в Whales.
В основном мое видение Tact состоит в том, что это прагматичный язык. Люди, создающие новые языки программирования, иногда строят «замки в небе». У них есть какое-то грандиозное видение, много идей, и их языки могут оказаться красивыми, но редко используются для реальной работы. Наоборот, Tact — это все, что нужно разработчикам.
Этот подход похож на язык Kotlin от JetBrains. Это отличный язык, но прежде всего это язык для создания реальных вещей в реальном мире; это не просто здорово ради того, чтобы быть великим. Здесь нет культа вроде «мы занимаемся только чисто функциональным программированием» или «мы используем только вкладки». Раньше я работал в JetBrains — не над самим Kotlin, но имел дело с его TS-компилятором. Мне нравится их подход к Kotlin, и я пытаюсь сделать что-то подобное для экосистемы TON.
Так что многие вещи в Tact сделаны очень просто и понятно. Иногда люди смотрят на код компилятора Tact и говорят мне: «О, он выглядит намного проще, чем я ожидал». Но в том-то и дело; Я не хочу, чтобы это было слишком сложно. Он предназначен для написания смарт-контрактов, и они относительно просты: там намного меньше строк кода, чем, скажем, в мессенджере вроде Telegram. Таким образом, язык для смарт-контрактов может быть намного проще, чем язык для таких вещей, как мессенджеры.
И именно поэтому Tact был выпущен так быстро после того, как я добрался до него, всего за несколько месяцев. Было бы легко работать над этим годами. Но если вы выпускаете его раньше, а потом итерируете, это означает, что язык может помочь людям решить их проблемы сегодня, а не когда-нибудь в будущем.
В настоящее время я в основном работаю один над самим языком, но другие люди помогают с другими вещами экосистемы. Например, Тал Кол, создавший Tact by Example , вдохновленный в какой-то степени «Solidity by Example», но также добавляющий к этому. Я очень впечатлен этим веб-сайтом, я не мог сделать это так хорошо.
Тал Коль
Tal делает множество вещей для сообщества TON: веб-сайты, учебные пособия, сообщения в блогах и многое другое. Неудивительно, что он создал целый веб-сайт, который помогает научиться Такту. Вопрос только в том, когда он спит?
Когда Олег начал работать над «Тактом», я услышал о нем и его видении актерской модели. И я должен сказать, что я не совсем понял это в начале.
Я думал, что проблема с FunC может быть решена с помощью более сильной стандартной библиотеки. FunC — очень низкоуровневый язык: например, когда вы анализируете сообщения, вам нужно знать, какой бит отвечает за отказ (или что-то еще). И я подумал, что мы могли бы создать библиотеку, которая абстрагирует внутренности и создаст API более высокого уровня для разработчиков FunC. И я не был уверен, что создание нового языка стоило всех этих усилий.
Я не особо смотрел на Tact, пока Олег и его команда работали над ним, потому что у них не было общедоступной версии, готовой для всех. Я начал связываться с Tact только после того, как над ним начал работать Стив. И я должен сказать, как только я увидел некоторые вещи, происходящие там, я был убежден, что нам нужен такой язык.
Я думаю, что лучшим примером того, где такт важен для меня, является контракт с несколькими подписями. Мультиподпись очень важна, потому что, когда у вас есть сокровищница, лучше, если ее держит не один человек. Такой контракт реализован в FunC, но он достаточно сложен. И когда я говорил с TON Foundation о переводе грантовых выплат на мультиподпись, тот факт, что это было так сложно, заставил нас работать очень медленно.
Когда я посмотрел, как Стив реализовал контракт с несколькими подписями в Tact, я увидел, что это прекрасно. Он короткий, простой и делает некоторые очень сложные вещи, такие как контракт, развертывающий другой контракт, поэтому каждая транзакция с несколькими подписями является субконтрактом. И все равно очень элегантно.
И это то, что убедило меня в концепции. Потому что, когда вы контролируете язык, вы контролируете гораздо больше вещей, чем просто стандартную библиотеку. Думаю, с библиотекой мы могли бы улучшить FunC на 50%. Но мы бы никогда не смогли упростить взаимодействие контракт-контракт или контракт-пользователь до уровня, когда разработчик вообще об этом не думает: все делается под капотом самим языком. Так я поверил в Такт.
Теперь я один из основателей Tact Software Foundation, и я думаю, что есть три области, в которых мой вклад особенно важен.
Во-первых, я пришел из Web3, я работаю над Ethereum последние пять лет, и для меня очень важна децентрализация. Всякий раз, когда кто-то говорит: «Это недостаточно децентрализовано», обычно это я. И Tact дает мне много возможностей для этого, например, с поддержкой ABI. Идея добавить ABI была идеей Стива, и я думаю, что это очень, очень важно для децентрализации. ABI позволяет людям получать доступ к контрактам без клиента. Это снижает зависимость от разработчиков клиентов, и даже если клиенты будут отключены, пользователи все равно будут иметь доступ к своим деньгам.
Второе направление — снижение барьера для новичков. Мы планируем, что TON станет блокчейном массового внедрения. Для этого вам также необходимо массовое принятие разработчиков. И сейчас TON очень сложен. Если подумать о людях, спроектировавших TON, вроде духовника Николая Дурова — он очень и очень умный человек, но ему, наверное, сложно смотреть на мир глазами обычных людей. И то, что он создал, удивительно, но несколько неприступно. Сделать TON доступным — большая задача. И это то, во что я вкладываю много своего времени, и я очень увлечен такими вещами, как tact-by-example.org .
И третье, что я выношу на обсуждение, — это разрешение конфликтов и объединение всех усилий. Многие люди, работающие над TON, давно знают друг друга. И их совместная работа не всегда была гладкой. Если посмотреть на историю, аргументов было предостаточно. А когда конфликты обостряются, это снижает доверие сообщества: «Если эти люди будут драться, что будет с инструментами, которые нам нужны?» Поэтому я думаю, что очень важно создать что-то стабильное, за что люди будут держаться долгое время. И это то, во что я вкладываю много энергии. И я думаю, что добавляю что-то, что помогает людям ладить и понимать, что, в конечном счете, мы все преследуем одну цель — сделать TON успешным.
Главное, чего не хватает Tact на данный момент, чтобы считаться «готовым к производству», — это тщательная проверка безопасности. Я не думаю, что это очень опасно, но есть гипотетическая возможность уязвимостей, ведущих к бэкдорам в смарт-контрактах. Так что нам нужно, чтобы он был тщательно рассмотрен и одобрен, и я думаю, что мы этого добьемся, но это займет несколько месяцев; это будет не завтра. Так что мое текущее предложение для разработчиков состоит в том, чтобы реалистично смотреть на то, сколько денег будет управлять вашим контрактом. Если это больше 10 000 долларов (например, вы создаете DEX), я бы сказал, что пока пишите в FunC. Но если вы представляете, что стоимость будет меньше 10 000 долларов (например, проект хакатона или небольшая игра), вы можете сделать это уже с Tact.
Если вы сегодня пишете контракт на сумму более 10 000 долларов и действительно хотите использовать Tact — вы можете, но вам следует проверять сгенерированный код FunC, а не исходный код Tact. Компилятор Tact создает код FunC. Этот FunC действительно доступен для чтения и аудита. Аудит FunC позволит вам дождаться полного аудита компилятора Tact.
Если вы разработчик и хотите помочь развитию Tact, есть два способа. Для тех, кто хотел бы «дотронуться до сути» и повозиться с самим языком: в репозитории есть задачи , и некоторые из них помечены как «хорошие первые проблемы». Мы оставили эти вопросы открытыми только для вас, чтобы вы могли внести в Tact что-то значимое, что не так уж сложно.
А для других людей, которые не хотят касаться сути Tact: самым полезным было бы записать видео, показывающее, как вы что-то строите, и объясняющее, что вы делаете. Вы можете сделать простой проект, например, игру в крестики-нолики, в которую играют два игрока, где каждый отправляет одну монету TON, и победитель получает их. На мой взгляд, обучение других тому, как внедрять и мыслить в такте, — это самое важное для нашей экосистемы. Я написал много контента на tact-by-example.org — вы также можете помочь его перевести.
Кирилл Емельяненко
Кирилл входит в основную команду TON, и именно он предложил идею Tact Олегу.
FunC — очень мощный язык для экспериментов: он достаточно выразителен, чтобы его можно было использовать для сложных систем, и позволяет вам перейти на уровень TVM и делать совершенно новые вещи.
Поэтому он абсолютно незаменим при зарождении экосистемы, когда неясно, как должны работать контракты и какие функции и шаблоны использовать. И это по-прежнему важно сегодня, потому что многие функции TVM еще не исследованы (никто не прикасался ко всей мощи доказательств Меркла и хранения кода в стеке).
Однако возможность контролировать все мелкие детали имеет и обратную сторону: разработчикам приходится предоставлять все эти детали и проверять на наличие возможных ошибок. И теперь, когда появились шаблоны программирования смарт-контрактов для TON, кажется хорошей идеей скрыть детали «под капотом» в общих случаях, чтобы разработчикам не приходилось с ними иметь дело.
Это привело к идее Такта. В начале 2022 года я написал несколько примеров того, как может выглядеть язык, мы обсудили это с Олегом, и он, найдя хороших разработчиков, взялся за реализацию. Я резюмировал то, что должно быть «спрятано под капотом» следующим образом:
Что нам нужно?
Нам нужен язык, знакомый разработчикам, привыкшим к другим языкам, таким как JS, Python и Solidity.
Нам нужен язык, ориентированный на лучшие практики и безопасность, а не на эксперименты.
Нам нужен язык, который обеспечивает безопасные высокоуровневые абстракции сложных основ блокчейна TON.
Нам нужен язык, который не требует стандартного кода для общих шаблонов.
Почему FunC недостаточно?
FunC имеет ряд ограничений, которые мы надеемся решить в новом языке:
Отсутствие нативных типов структур данных.
Неудобные операции с хранилищем: когда обновление макета хранилища требует от разработчика проверки и обновления всего кода контракта.
Отсутствует механизм обеспечения безопасности использования газа и границ газа.
Неудобное кросс-контрактное взаимодействие из-за отсутствия строго типизированных интерфейсов и требований по использованию газа.
В этом списке первые две вещи самые простые, третья сложнее, а четвертая самая сложная, но и самая важная.
Команда Олега решила, что начинать с самых простых вещей было бы плохой идеей, потому что было бы невозможно реализовать хорошие интерфейсы и потом сделать удобным межконтрактное взаимодействие. Поэтому, чтобы решить основную проблему, они решили создать мощную систему типов, которая проходит через весь язык и позволяет вам выражать что угодно (включая интерфейсы).
Мы с Анатолием Макосовым поддержали это начинание и обеспечили финансирование. К сожалению, через полгода разработки стало ясно, что появилась мощная система типов, но кросс-контрактного взаимодействия не наблюдалось. Более того, язык стал в некотором роде выглядеть академическим — повышая входной барьер, а не снижая его. Увы, стало ясно, что это тупиковый путь.
Разработка была остановлена. Позже, осенью 2022 года, Стив заинтересовался и решил быть практичным: сделать то, что можно было сделать, а сложности оставить на потом. Это привело к нынешнему состоянию Tact: язык с меньшим количеством шаблонов и более знакомый разработчикам, использующим популярные языки.
Но некоторые проблемы еще предстоит решить: безопасность газа и безопасное межконтрактное взаимодействие через интерфейсы являются огромными проблемами. Некоторые шаги в этом направлении, такие как ABI, были сделаны, но впереди еще долгий путь.
Я вижу свою текущую роль в Tact как советника, который помогает в двух вещах:
Техническая экспертиза (у нас в TON Foundation ее больше, чем у кого-либо, хотя мы приложили много усилий для документации и пояснений).
Сосредоточенность на самом важном. Легко создать красивый и простой язык, строго ограничивая его пользователей. Но чтобы экосистема была успешной, нам нужно сделать «Лего» из смарт-контрактов. Чтобы любой кусок (смарт-контракт) подходил к другим. Нам нужно реализовать сценарии, в которых Jetton можно обменять на другой Jetton, чтобы немедленно предпринять какое-то действие в игре, получить в результате NFT, проголосовать этим NFT, обновить состояние следующего контракта, отчеканить несколько новых Jetton и разместить их. в кредитный протокол. Такое «Лего» создает сетевой эффект не только на уровне пользователя (когда значение сети пропорционально n^2, где n — номер пользователя), но и сетевой эффект на уровне контракта (когда значение пропорционально до n^2*m^2, где m — номер контракта).
Кирилл Малев
Кирилл работает в First Stage Labs, компании, которая инвестирует в стартапы в экосистеме TON. Итак, вот его «точка зрения венчурного капитала».
Я думаю с точки зрения способных и опытных команд, выбирающих TON в качестве основного блокчейна для создания своих проектов. Предположим, 100 команд впервые пробуют разработку на TON. Сколько из них решат остаться в экосистеме? И как мы можем увеличить это число?
Я обсуждал эти вопросы с такими людьми, как Антон Циварев (в настоящее время он отвечает за развитие отношений в TON Foundation). И оказалось, что одной из важных вещей был более удобный для новичков и современный язык программирования. Язык, который снижает входной барьер и делает кривую обучения менее крутой, может привлечь больше разработчиков, привыкших к Swift, Rust или JavaScript.
Смысл был не в том, чтобы уменьшить количество людей, использующих язык FunC. FunC — хороший надежный язык для создания быстрых и эффективных смарт-контрактов и децентрализованных приложений на блокчейне TON. Цель состояла в том, чтобы дать людям с опытом работы, отличным от C или C++, возможность начать работу над TON с чего-то более знакомого. У FunC есть преимущества, но лучше всего он работает для разработчиков C, которым нравится копать глубже. И многие разработчики разные. Они привыкли к таким языкам, как JavaScript и Swift. Их не очень интересуют хардкорные низкоуровневые оптимизации. Так что нужен язык, который дал бы им знакомый синтаксис, скрыл бы некоторые базовые вещи и позволил бы им создавать сложные системы удобным способом.
С того момента, как я услышал о таком языке, я был в нем. Когда Олег Андреев руководил разработкой Tact, я участвовал во внутренних дискуссиях по этому поводу: например, что мы должны использовать в качестве «Определения готовности» при рассмотрении языковой зрелости? Мы решили, что это произойдет, когда на этом новом языке будет написано dApp, которым будут пользоваться 1000 активных пользователей в день в течение недели. Этот день еще не наступил, но теперь, с выходом версии 1.0, он приближается.
Кроме того, мы поняли, что недостаточно создать только язык, например написать компилятор и разместить его на GitHub. Чтобы создать язык, который люди действительно будут использовать, нужно сделать гораздо больше: подсветку синтаксиса в популярных редакторах кода, курсы, статьи и документы... Чтобы добиться успеха, Tact должен был получить все эти элементы экосистемы. Одной из таких вещей был веб-сайт tact-lang.org, демонстрирующий новый язык. Это был успех, и сообщество это оценило.
Но позже разработка остановилась, и это стало для меня обломом: я рассчитывал, что Tact привлечет в экосистему новых разработчиков. Поэтому, когда появилась возможность, что Стив продолжит работу, я снова подключился, чтобы облегчить ее. Я составил документ с представлениями заинтересованных сторон о Tact и помог согласовать видения Олега, Стива и всех заинтересованных сторон, о которых мы только могли подумать. Помимо самого языка, нужно было еще поработать над организационной структурой: кто за что отвечает и как все это работает? Это привело к созданию Tact Software Foundation, где я выполняю роль советника.
Разработка языков имеет свои проблемы. Если вы хотите создать что-то вроде мобильного приложения, вы легко найдете много опытных разработчиков. Но людей, создавших собственные языки программирования, в мире намного меньше, поэтому знания в этой области встречаются гораздо реже. Так что, если вы один из таких людей, мы хотели бы связаться с вами. Возможно, мы оба сможем рассказать друг другу что-нибудь интересное.
Для меня участие в работе над «Тактом» было взрывом — и до сих пор остается взрывом
[редакция от 040523]