Введение:
Джен:
Приветствуем всех на нашем новом сеансе AMA, посвященном языку программирования Move. Сегодня здесь с нами наши милые инженеры Mysten, Адам и Тодд. Пожалуйста, представьтесь.
Адам:
Меня зовут Адам Велк. Я работаю в команде Move в Mysten Labs примерно семь или восемь месяцев. Мой основной фокус — опыт разработчиков и инструменты.
Тодд:
Я Тодд Новаки. Я был на Move почти с момента его создания. Все это время это была небольшая команда, и многие из нас просто работали над тем, что в то время было самым приоритетным. Самой большой частью этого был компилятор и исходный язык. В последнее время в Mysten Labs я больше работал над тем, чтобы язык интегрировался в более специфичный для Sui стиль Move.
. . .
Вопрос № 1. Как команда Move планирует привлечь больше разработчиков и ускорить принятие разработчиками языка Move, особенно учитывая тот факт, что это новый язык?
Адам:
Мы запустили инициативу по проведению хакатонов и воркшопов; некоторые из них проводились в Корее, но есть планы провести их в разных частях мира виртуально и физически. Таким образом мы действительно пытаемся повысить осведомленность о языке и его возможностях.
Другим аспектом этого является то, что язык был создан в Meta, но теперь используется во многих различных цепочках, и цепочка Sui Mysten Labs является одной из них. Есть некоторые усилия сообщества, которые будут исходить не только от Mysten Labs, но и, надеюсь, от других компаний, чтобы сделать его популярным.
Тодд:
Единственное, что я кратко добавлю к этому, это то, что пространство все еще довольно молодое и маленькое, и эти вещи требуют времени, чтобы построить. Что касается учебных ресурсов, мы пытаемся повысить осведомленность. Если у вас есть отзывы оПереместить книгуили чтоДамир написал для репо, пожалуйста, дайте нам знать! Такие отзывы очень полезны.
Джен:
Что касается того, что говорил Адам, у нас запланировано еще много мероприятий для разработчиков с различными наборами навыков. Мы прекрасно понимаем, что многие люди проявляют живой интерес, и мы поставили перед собой задачу смотреть как виртуальные, так и очные семинары. Мы получили ошеломляющий ответ, чтобы получить больше контента, ориентированного на видео, и это то, над чем мы работаем в данный момент. Мы очень ценим то, что люди отметили это как то, что им нужно, и мы надеемся ответить с точки зрения того, как мы можем предоставить эти ресурсы.
. . .
Вопрос № 2: Как Sui Move может гарантировать безопасность активов так, как другие традиционные блокчейны просто не могут?
Адам:
Move — это эволюция идей, которые присутствовали в первом поколении языков смарт-контрактов. Таким образом, это похоже на эволюцию с точки зрения размышлений об изменениях безопасности и безопасности, которые произошли между тем, когда были разработаны и реализованы языки C и даже C++, и теперь, когда у нас есть такие языки, как Go или Rust.
В старые времена это было похоже на «О, вы должны быть очень осторожны, если программируете как потоки, чтобы избежать гонок или взаимоблокировок». Rust применил совершенно другой подход в этом отношении; в основном они говорили, что мы разработаем язык так, что если вы напишете программу, наш компилятор примет ее программу. Определенный класс ошибок просто не будет присутствовать в вашей программе по определению или по замыслу. Например, если вы пишете параллельную программу на Rust и она компилируется, вы не сможете освободить память, а затем повторно использовать ее неправильно, как это было бы в C или C++.
Таким образом, Move попытался пойти в том же направлении, что и Rust с этими традиционными языками, а именно попытаться предотвратить некоторые из этих вещей по замыслу. Например, у вас не будет двойной траты по замыслу, и не каждое свойство может быть проверено компилятором. У вас есть дополнительный инструмент под названием Prover, который можно использовать в сочетании с дополнительными спецификациями, которые вы записываете в свой код. Но если вы напишете эти спецификации, вы сможете доказать другие вещи о том, что ваша программа будет или не будет делать во время выполнения, но вы будете знать эти вещи статически еще до того, как ваш контракт будет развернут.
Тодд:
Это было очень хорошо. Что я хотел бы добавить, так это то, что в решении вещей, которые вы не хотите разрешать, есть сложность и некий нюанс. В примере, который Адам привел о C++ и Rust, их идея состоит в том, что мы хотим оставаться как бы близкими к C++, но это создает кучу проблем, связанных с безопасностью памяти. Такой подход позволил бы небезопасный для памяти код, поэтому вам просто нужно было бы обернуть его, а затем представить его как безопасный с внешней точки зрения. Move решил использовать другой подход, который обеспечивает безопасность памяти, аналогичную Rust.
. . .
Вопрос № 3: Как мы обеспечиваем безопасность, встроенную в наш язык Sui Move?
Тодд:
Для Move это что-то вроде «все или ничего». Вы либо не вносите никаких изменений в блокчейн, за исключением оплаты газа и сбоя, либо у вас есть успешное изменение хранилища. В терминах Sui это будет так, что вы берете какие-то объекты в качестве входных данных и либо создаете какие-то новые объекты, либо переносите объекты, либо иным образом видоизменяете их, либо ничего не делаете. Я знаю, это звучит очень просто, но такое поведение по принципу «все или ничего» исключает множество ошибок, потому что вам не нужно беспокоиться о ручном управлении памятью этих изменений.
Доказательство начинает приходить, когда вы хотите определить более широкие логические свойства вашей программы, например, эта функция никогда не даст сбой, если значения на входах больше нуля. Это может быть полезно знать, пока вы передаете достаточное количество монет или токенов в функцию, невозможно потерпеть неудачу, или, может быть, если вы правильно аутентифицируете свои ключи для этой функции, вы никогда не потерпите неудачу.
Адам:
Так сказать, с точки зрения языка, иногда локально, трудно сказать, является ли объект, который вы видите, общим или принадлежащим, и я думаю, что прувер может помочь убедиться, что если ваша функция ожидает общий объект, он будет общим. объект, который будет передан ему, или если есть переданный объект, не являющийся общим. Затем вы можете определить аналогичные свойства, которые упомянул Тодд, но в отношении свойств объектов, которые также можно проверить не локально.
Тодд:
Как я говорил ранее, мы продолжим развивать язык, изучать новые вещи и вносить изменения с течением времени. Одной из первых вещей, которые мы сделали в Move, была настройка базовой модели хранения Move на основе учетной записи, но у этого есть некоторые недостатки, которые сильно изменились. Предположим, что все ваши монеты управляются этим одним монетным модулем, вы не знаете, есть ли над ним какой-либо модуль, вызывающий этот монетный модуль. Таким образом, вы не знаете, может ли кто-нибудь вызвать эту функцию и украсть все ваши монеты. И когда мы попробовали несколько разных способов решить эту проблему, ничего особенного не вышло. Но в объектной модели Sui мы фактически заставляем вас представлять все объекты, которые вы собираетесь модифицировать, во время выполнения. Итак, когда вы начинаете выполнение, вы можете вырезать целые области памяти и сказать:
Это еще один набор гарантий, он просто делает намного проще и понятнее понять, что именно делают функции Move и Sui Move по сравнению с основным Move.
. . .
Вопрос № 4. Не могли бы вы поделиться с нами некоторыми сведениями о плагине VS Code?
Адам:
У нас был довольно примитивный плагин кода VS, который был разработан в Meta одним из первых членов команды. Когда я пришел в Mysten, я как бы понял, что он не совсем готов, и если кто-то привык работать с более традиционными языками, он не будет очень доволен опытом разработки. Итак, изначально мы просто приступили к задаче предоставления плагину кода VS некоторых функций, которые вы хотели бы и ожидаете от более современной IDE. Так что такие вещи, как переход к определению типа, поиск всех ссылок, набранных при наведении, и передача диагностики компилятора обратно в редакторы.
. . .
Вопрос № 5. Как плагин VS code повлияет на опыт кодирования и команды разработчиков?
Адам:
Я получил несколько сообщений о том, что люди действительно начали использовать новые функции, и это приятно. В Корее был семинар, на котором Дамир, наш защитник разработчиков и часть основной команды Move, лично руководил семинаром и работал с людьми, и он как бы передал более неформальные отзывы об этом, которые заключались в том, что люди действительно используют это и им понравилось.
Тодд:
Я думаю, что это, вероятно, будет другой инструмент. Я мог представить различные наборы инструментов в будущем, которые облегчили бы понимание. Может быть, как применяются спецификации, какой охват вы получаете определенными вещами, или какой-то другой способ сделать опыт кодирования отличным от опыта разработчика. Это больше похоже на «Я пишу эту функцию, какова сигнатура этой другой функции, или я хочу увидеть код здесь?» Я думаю, что определение, вероятно, наиболее полезно для тех, кто не является разработчиком, если вы повторно не используется для данной кодовой базы. Определение кода потрясающее.
В конце концов, если вы думаете о других, облегчая их жизнь, или о других нетехнических людях, просматривающих код Move, вам, вероятно, понадобится другой набор инструментов, чтобы помочь им.
. . .
Вопрос № 6: Какие сторонние вклады могут быть интересны людям?
Адам:
Я могу поговорить с теми, кто уже внес свой вклад и уже является частью расширения плагина кода VS. Итак, если вы пойдете и поищите проблемы с тегом анализатора Move в репозитории Move, вы сможете более подробно увидеть то, что мы планируем сделать и что мы будем делать сами или с помощью сообщества.
Помните, что недавно появилось расширение плагина кода VS — люди только начали понимать, что там было добавлено, то есть поддержка этих дополнительных функций, которые были разрешены более тесной интеграцией компилятора, который создает промежуточное представление, которое позволяет вам делать более умные вещи на уровне редактора.
Это позволило сделать некоторые дополнительные вещи, и одним из этих внешних вкладов было предоставление схемы редактируемого файла. Если вы знакомы с редактором кода VS в целом, с левой стороны есть окно, в котором, если вы откроете его в этой схеме, оно должно отображать функции, определения типов и основную схему определенного исходного кода. в файле. Это было добавлено одним из внешних участников.
. . .
Вопрос № 7: Каковы планы относительно способности Move писать общий код?
Джен:
Например, у меня недавно был пример использования для сравнения двух вещей, которые являются универсальным типом T, и я думаю, что вы не можете делать границы свойств, способности, а также передавать функции в качестве аргументов другим функциям.
Тодд:
Да, трейты, как и следовало ожидать, являются указателями на функции, которые никогда не появятся в Move. Вы, наверное, думаете, что я все время использую программирование высшего порядка, и Rust, или JavaScript, или почти любой другой язык программирования, который вы используете, почему бы не Move? Ну, это предотвращает кучу проблем, и, в конце концов, Move не является языком программирования общего назначения. Мы пытаемся создавать безопасные вещи, которые мы можем доказать, что они безопасны, и как только у вас есть динамическая диспетчеризация, многое из этого уходит в окно.
Существует множество различных способов повторного использования кода, к которым, я думаю, мы, как разработчики, привыкли, точно так же, как использование этого шаблона интерфейса трейтов, и здесь мы пытаемся сделать что-то немного по-другому, чтобы мы могли иметь более высокий уровень уверенности и языка.
. . .
Вопрос № 8: Совместим ли Move EVM или он будет совместим?
Адам:
Короткий ответ: нет и да. Были предприняты попытки найти межъязыковое решение или иметь возможность скомпилировать или транспилировать Move в байт-код EVM в Meta. Насколько я понимаю, это не было подхвачено ни одной другой цепочкой, использующей такой язык, как 0x, Aptos или Sui. Я не думаю, что есть какой-либо план для какой-либо из этих цепочек, использующих Move, чтобы сделать его совместимым с EVM. Причина, по которой я думаю, что это могло быть предпринято в мета, заключалась в том, что вы хотите повторно использовать опыт, накопленный вами при написании языка и разработке кода на языке, и попытаться применить его к более широкому пространству, особенно к исходному продукту, который мета развивалась в этом пространстве из-за проблем с регулированием; как-то никогда не получалось.
Я думаю, это было больше о том, что мы можем сделать с языком Move, чтобы сделать его более привлекательным для более широкой аудитории. Разница в модели исполнения и гарантиях, которые предлагает EVM, достаточно значительна, поэтому я не уверен, что это когда-нибудь сработает на 100%. На самом деле я также не знаю, разрабатывается ли он еще, но, по крайней мере, для лабораторий Mysten и блокчейна Sui нет планов сделать его совместимым с EVM.
. . .
Вопрос № 9: Упускает ли переход на другой язык суть ресурсов и активов, например, взаимозаменяемые и невзаимозаменяемые токены — это, по сути, то, что означает первоклассная кавычка без кавычек в смарт-контрактах?
Тодд:
Я не совсем понимаю вопрос. Я не совсем уверен в некоторых вещах, таких как ресурсы, активы и жетоны, которые являются первоклассными запеченными вещами в Move. Это больше, чем просто слово актив, у нас есть объекты, которые в значительной степени являются NFT, даже ваши монеты являются NFT, если вам действительно небезразлична идея этой монеты; аспект взаимозаменяемости - это человеческая концепция, когда я забочусь о том, чтобы что-то было взаимозаменяемым или не взаимозаменяемым, это человеческий уровень способности различать. Например, если у меня есть купюра в 1 доллар в моем кошельке, а у вас есть купюра в 1 доллар в вашем кошельке, вы готовы обменять их, потому что нас это не волнует, но если кто-то подписал мою купюру в 1 доллар, это может быть важно для меня, но не важно для вас. Для меня это невзаимозаменяемо, но для вас это все еще взаимозаменяемо.
Адам:
Когда люди используют банкноты, банкнота является примером взаимозаменяемого токена, но на самом деле они не взаимозаменяемы, потому что у каждой из них есть серийный номер, поэтому мы просто игнорируем и обмениваем один на другой, но это Такая же точная концепция в Sui, каждый объект монеты будет иметь свой уникальный идентификатор, но если вы их проигнорируете, то у вас в основном будет взаимозаменяемый актив.
. . .
Узнать больше о Sui
- Сайт Sui
- Портал разработчиков Sui
- Переместить язык программирования
- Sui Технический документ
- Форумы сообщества
Стройте вместе с нами!!
Мы в восторге от того, как разворачивается будущее, и приглашаем создателей и строителейПрисоединяйтесь к нам.