Мы только что открыли исходный код CSML, новый инновационный способ создания чат-ботов, основанный на очень простом языке программирования, который мы создали для этого случая. Вот несколько мыслей о том, почему мы выбрали Rust и Nom!

В Clevy мы стремимся создать лучший инструмент для каждого создателя чат-бота. Мы полагали, что разработчики предпочитают писать код, чем использовать непонятные и ограниченные интерфейсы перетаскивания, но существующие фреймворки были слишком ограничены и требовали слишком много работы, прежде чем что-либо получить, поэтому мы решили разработать новый язык программирования именно для этой цели, и Запустил открытую бета-версию CSML (стандартного разговорного языка мета) в ноябре прошлого года.

Сегодня мы открываем исходный код интерпретатора CSML, чтобы каждый мог увидеть, как он работает изнутри, использовать его в своих собственных проектах или даже внести свой вклад, если они захотят. Но что еще более важно, мы считаем, что это хороший ресурс для обучения классному варианту использования пользовательского языка программирования!

Если вы хотите узнать больше о языке, посетите сайт CSML и его очень подробную документацию. Вы можете попробовать это в нашей бесплатной студии онлайн-разработки, а также воспользоваться некоторыми примерами для начала! У нас также есть еще несколько чат-ботов, доступных на Github, так что обязательно загляните и туда.

В любом случае, не стесняйтесь ставить репо на github, это будет значить для нас весь мир!

Как работает CSML

CSML - это интерпретируемый язык: это означает, что ваш код не компилируется, а скорее будет анализироваться и интерпретироваться во время выполнения.

Для этого требуются две вещи: некоторые потоки, написанные на CSML, и пользовательское событие (то, что пользователь хочет сообщить боту). Потоки будут анализироваться по мере поступления запросов, чтобы ваш бот мог решить, что отвечать пользователю.

Язык предназначен для очень быстрого изучения даже не разработчиками. Вы можете найти несколько примеров ботов на Github, например, this one, созданных специально для того, чтобы помочь кому-то искать интересные репозитории на Github!

Мы также выпустили CLI-клиент для студии CSML, если вы хотите быстро опробовать его, не выходя из своего терминала.

Выбираем Rust

Когда мы начали разработку языка, нашим главным обещанием, помимо качества самого языка, была возможность запускать CSML с безопасным и эффективным двоичным кодом на любой платформе. Многие языки подходят для этой цели, но нас почти сразу привлек Rust. Он рекламируется как быстрый и безопасный, его можно легко построить для работы на любой машине с очень малой занимаемой площадью (очень важно для IoT или автономного использования, но также совместимо с крупномасштабными, дружественными к облаку развертываниями). Это также показалось очень забавным в использовании: как вы наверняка знаете, Rust был признан самым любимым языком несколько лет подряд в опросе разработчиков StackOverflow!

Хотя Rust очень строг в своем синтаксисе и имеет более крутую кривую обучения, чем некоторые другие подобные языки, которые мы могли бы выбрать (например, Go), он также заставляет вас делать правильный выбор дизайна и дает вам уверенность в как он будет вести себя на производстве. Мы все еще небольшая команда, работающая над этим проектом, но мы испытали очень мало серьезных перегибов и ошибок для проекта такого размера (теперь используется в тысячах ежедневных разговоров основных клиентов со всеми типами клиентов).

Одной из основных особенностей Rust, которые нас интересовали, была простота интеграции с другими системами и языками через интерфейс внешних функций (FFI). Мы хотели иметь возможность предлагать максимально широкую поддержку для наших пользователей и клиентов, поскольку мы ожидаем варианты использования вокруг Интернета вещей или даже в автономном режиме (например, мы получили интерес от авиакомпаний и производителей самолетов), с требованиями к низкому потреблению энергии и очень специфические требования к ОС. Мы также обычно сами встраиваем его в программы Node.js, и хотя это действительно заняло немного больше времени и усилий, чем мы ожидали, теперь у нас есть надежный конвейер сборки для этого самого варианта использования.

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

Создание парсера CSML с Nom

Основная библиотека, которую мы используем в интерпретаторе CSML, - это Nom, которая является одной из библиотек синтаксического анализа Rust. Первоначально он был построен для синтаксического анализа двоичных форматов, но он также хорошо работает с текстовыми файлами и языками программирования (кто-то на самом деле построил синтаксический анализатор PHP с помощью nom!).

Мы оценили другие библиотеки, такие как LALRPOP или Pest, но мы обнаружили, что Nom более гибкий. Мы определяли синтаксис примерно одновременно с его реализацией, а Nom делает легко создавать небольшие парсеры для мелких вещей, что делает его очень хорошим выбором для экспериментов! Мы также обнаружили, что он очень масштабируемый, поскольку мы добавили больше правил или изменили большие части спецификаций CSML.

Аспект сообщества также является важной частью уравнения, когда дело доходит до выбора технологии. Мы уже знали, что у Rust есть выдающееся сообщество (которое, я считаю, способствует тому, почему люди любят Rust), а у Нома также самое широкое сообщество, что позволяет нам найти больше помощи, когда мы где-то застряли.

Nom очень активно поддерживается. Пока мы работали над интерпретатором, была выпущена Nom 5, новая основная версия библиотеки, в которой было исправлено большинство недостатков, с которыми мы столкнулись (в основном, связанные с обработкой ошибок, выводом типов и удобочитаемостью громоздкого синтаксиса макросов). Нам потребовалось всего несколько дней, чтобы перейти с Nom 4 на Nom 5, и это почти сразу окупилось улучшением производительности!

Что дальше?

Теперь, когда интерпретатор CSML открыт для всех, мы продолжим интенсивную работу над языком. Последней большой функцией, которую мы выпустили, была стандартная библиотека CSML, набор встроенных вспомогательных утилит для упрощения разработки чат-ботов CSML. Следующим важным элементом, над которым мы хотим работать, является улучшение нашей обработки ошибок, среди прочего, путем добавления линтера. выдача предупреждений и ошибок, упрощающих разработку чат-ботов в CSML. В любом случае вы можете найти нашу открытую дорожную карту по Trello!

Чтобы узнать больше о языке программирования CSML, прочтите документацию, получите бесплатную учетную запись разработчика в CSML Studio, подпишитесь на нас в Twitter и, конечно же…

Откройте для себя интерпретатор CSML на github!