Ethereum + Swarm + λ = Moon, универсальный формат обмена кодами

Я только что опубликовал первую версию лунного языка. Я до сих пор не написал о нем надлежащего введения, но прежде я расскажу немного об одной из самых крутых его функций: децентрализованном импорте.

У Moon нет диспетчера пакетов, как у большинства языков, и приложения Moon не предназначены для размещения на обычных серверах. Вместо этого, когда вы хотите опубликовать библиотеку, программу или приложение, вы используете сеть Ethereum / Swarm. Вот как это работает:

  1. Вы создаете классную программу и называете ее coolProgram.moon.
  2. Заходишь в терминал и набираешь moon publish coolProgram.moon.
  3. Источник coolProgram отправляется в децентрализованное хранилище Swarm.
  4. SwarmHash зарегистрирован на Ethereum под именем coolProgram.
  5. Кто-то пытается использовать coolProgram в своем собственном лунном коде.
  6. Moon следует обратным путем и восстанавливает ваш исходный код.
  7. …?
  8. Децентрализованный импорт!

Это круто по многим причинам. Он не только позволяет людям обмениваться кодом и приложениями так же легко, как и раньше, но также придает этим кодам / приложениям те же замечательные свойства, что и децентрализованные сети. Если coolProgram - это, например, веб-приложение, люди сразу же смогут получить к нему доступ в браузерах DApp, таких как Mist. Не нужно беспокоиться о стоимости хостинга, DDOS-атаках, цензуре и т. д.: пока есть люди, использующие coolProgram, он будет оставаться в сети!

Пример

Предположим, вы написали лунную программу, которая вычисляет чей-то Индекс массы тела. Вы называете это personBMI.moon:

(Пока не обращайте внимания на синтаксис, это все еще обсуждается.)

Теперь вы очень гордитесь своим творением и хотите, чтобы мир увидел его, но вы ничего не знаете о хостинге. Не беспокойтесь, Луна здесь для вас. Но сначала вам нужно проверить, есть ли в вашем CLI Ether:

Если его баланс равен нулю, не волнуйтесь. Публикация обходится очень дешево, поэтому вы можете просто попросить друга отправить несколько центов на адрес вашего интерфейса командной строки:

Получив его, вы можете опубликовать свой код с помощью moon publish:

Вы увидите несколько сообщений с подробным описанием этого процесса:

И готово! Теперь любой другой человек в мире может использовать personBMI, либо сославшись на него внутри программы Moon, либо вызвав его прямо на терминале:

Теперь предположим, что друг только что позвонил вам, чтобы спросить, нет ли у него лишнего веса. Вы могли бы быть откровенно честными об этом… или вы могли бы написать для этого (терминальный) DApp!

Сохраните его как whatsMyBMI.moon и введите moon publish whatMyBMI. Теперь вы можете просто попросить его спросить Мун напрямую:

Ваш (терминальный) DApp будет разрешен в Ethereum, загружен из Swarm, а затем запущен на консоли вашего друга. Круто, не правда ли? Попробуйте запустить его!

Примечание: если вас смущает тот факт, что мы используем prints и getLines в самопровозглашенном чистом языке, не волнуйтесь: это просто адаптация нотации Идриса для монадические вычисления. Но это тема для другого поста. Загляните в Репозиторий Луны, чтобы узнать о других интересных вещах!