MAGES является официальным преемником YAMP. Это очень простой, но мощный анализатор и интерпретатор выражений. Вы можете использовать MAGES, чтобы включить в свое приложение сложный, простой в настройке и легкий механизм сценариев.
Помимо других приложений, MAGES использовался в PowerToys от Microsoft.
MAGES был только что обновлен (v3.0.0) с метаданными объектов, поддержкой прямых списков и синтаксисом JSX.
2023 :
MAGES был обновлен (v2.0.0) с поддержкой комплексных чисел. Кроме того, цель сборки и среда выполнения были обновлены с учетом современных возможностей.
2018 :
Выпущена первая стабильная версия. Текущая версия 1.6.0 содержит улучшенный REPL. Библиотека содержит все необходимое для выполнения облегченных операций сценариев на C#. Также доступна статья CodeProject о библиотеке (также содержащая некоторые общие сведения и сравнения производительности).
Сам MAGES не имеет никаких зависимостей, однако тесты зависят от NUnit и в тестах используется BenchmarkDotNet. Обычно MAGES следует устанавливать через исходный код пакета NuGet. Если у вас это не работает, то клонируйте исходный код и соберите MAGES самостоятельно. Убедитесь, что все модульные тесты пройдены.
Вся библиотека была разработана для использования из приложений .NET Core 3.0 (или более поздней версии)/.NET 5.0 (или более поздней версии). Это означает, что он (помимо прочего) совместим с Unity 2021.2 или Mono 6.4. Пакет NuGet доступен через официальный канал пакетов.
В самом простом случае вы создаете новый движок для хранения глобальной области видимости (для переменных и функций) и запуска интерпретации.
var engine = new Mages . Core . Engine ( ) ;
var result = engine . Interpret ( " sin(2) * cos(pi / 4) " ) ; // 0.642970376623918
Вы также можете создавать многоразовые блоки из фрагментов.
var expOne = engine . Compile ( " exp(1) " ) ;
var result = expOne ( ) ; // 2.71828182845905
Или вы можете взаимодействовать с элементами, созданными МАГАМИ.
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Invoke ( new Object [ ] { 4.0 , 3.0 } ) ; // 18.0
Или даже проще (подробности описаны в документе «Начало работы»):
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Call ( 4 , 3 ) ; // 18.0
Это лишь некоторые из наиболее простых примеров. Более подробную информацию можно найти в документации.
Документация представлена в виде документов Markdown, которые размещаются в папке doc этого репозитория. Следующие ссылки заслуживают внимания:
Если что-то отсутствует, неясно или неверно, отправьте запрос на запрос или сообщите о проблеме. Дополнительную информацию см. в следующем разделе о взносах.
Вклад в виде реализации функций или исправлений ошибок приветствуется, но должен осуществляться организованно и последовательно. Перед началом любой работы следует ознакомиться с правилами внесения вклада.
Вклад также может быть принят в виде отчетов об ошибках и запросов на добавление новых функций. Да здравствует разработка с открытым исходным кодом!
Правила семвера — наш хлеб с маслом. Вкратце это означает:
Следовательно: не ждите каких-либо критических изменений в одной и той же основной версии.
Следующие компании спонсировали часть разработки MAGES.
Спасибо всем за поддержку и доверие к проекту!
Лицензия MIT (MIT)
Copyright (c) 2016-2024 Флориан Раппл
Настоящим разрешение бесплатно предоставляется любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), на использование Программного обеспечения без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и настоящее уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.