Оптимистичный взгляд на Aphid… встраиваемый язык сценариев, совместимый с XCopy

Грэг Дункан

А теперь кое-что другое…

Сегодняшний проект Джона Лейча (John Leitch) я считаю интересным с разных точек зрения. Во-первых, мне всегда импонировала идея использования встроенного языка сценариев в приложениях. Во-вторых, мне нравится, что такой подход достаточно прост и самодостаточен. Наконец, исходный код включен целиком.

И хотя этот проект по-прежнему находится на альфа-стадии, он интересен для ряда читателей, от создателей языков, до тех, кто собирается добавить в свои приложения возможность языка сценариев.

Добавление встраиваемого языка сценариев Aphid в . NET -приложения

Aphid – это встраиваемый, кросс-платформенный, много парадигменный и высоко интероперабельный язык сценариев на платформе .NET. Интерпретатор Aphid реализован полностью на C#. Данная статья является введением в Aphid, и поэтому покрывает только некоторые доступные возможности. Кроме того, Aphid в настоящее время находится на альфа-стадии, и поэтому по мере его эволюции данная статья будет меняться и расширяться. Чтобы получить наиболее свежую версию Aphid, посетите страницу CodePlex.

Какими языками был вдохновлен Aphid ?

Aphid – С-подобный язык, вдохновленный главным образом JavaScript. Однако, он несет в себе черты С# и, в меньшей степени, F#.

Зачем еще один язык сценариев?

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

...

Hello , World

Начало работы с Aphid совершенно безболезненно. Во-первых, добавьте ссылку на библиотеку Components . Aphid . dll. Затем создайте экземпляр AphidInterpreter. Наконец, вызовите метод экземпляра AphidInterpreter.Interpret для выполнения сценария Aphid. Просто, правда? Полный код программы «Hello world» на C#/Aphid приведен ниже в листинге 1.

clip_image002

С#-часть приложения должна быть понятна без объяснений. Однако программа Aphid нуждается в некоторых пояснениях. Программа состоит из двух предложений.

Первое – предложение загрузки скрипта, состоящее из оператора загрузки скрипта (#) и строкового операнда ‘Std’. По умолчанию загрузчик Aphid сначала ищет в подкаталоге Library каталога, в котором расположена библиотека Components . Aphid . dll. Загрузчик автоматически добавляет расширение ALX к переданному имени скрипта, так что в данном случае это выглядит как < dll >\ Library \ Std . alx. Предполагая, что всё в порядке, он должен найти и загрузить файл, являющийся стандартной библиотекой Aphid и содержащей полезные функции для работы со строками, вывода на консоль и т. п.

Второе предложение – это вызов выражения, которое запускает print – функцию, являющуюся частью стандартной библиотеки Aphid. Эта строка кода также должна быть понятна.

После запуска программы на устройстве вывода появляется следующее (листинг 2):

clip_image004

...

Aphid

Какие стильные возможности поддерживает Aphid ?

Назовем несколько:

· Лямбда-выражения

· Частичное применение функции

· Конвейер

· Сопоставление с образцом

· Многопоточность

Когда можно попробовать Aphid ?

Прямо сейчас, если хотите. Хотя формально Aphid находится на альфа-стадии, я в настоящее время использую его в нескольких производственных системах с большим успехом. Однако альфа-версия имеет некоторые особенности, текущая документация минимальна, как и имеющиеся библиотеки, а доступные средства разработки еще не зрелы.

Я скачал последнюю версию, и за исключением необходимости поправить ссылку NUnit в проекте Components.Aphid.Tests.Integration (NuGet как всегда помог это сделать) исходник скомпилировался и все примеры отработали как ожидалось (что делает куратора кода вроде меня совсем счастливым).

Вот снимок решения:

clip_image006

Кроме модульных  тестов  есть  ряд  заготовленных  примеров:

clip_image008

clip_image010

Я обнаружил одну очень интересную вещь – работает сервис языка, позволяя реальную интеграцию с Visual Studio, что выводит проект на совершенно иной уровень...

clip_image012

clip_image014

Сейчас это очень круто...  Курс  вперед  и  преуспейте  с  написанием  скриптов...

Замечание: Этот проект лицензируется по GPLv3, так что убедитесь, что вы понимаете эту лицензию и ее ответвления при включении такого проекта в свою работу...