Благодарение на предложения от предишен въпрос, зает съм да изпробвам IronPython, IronRuby и Boo, за да създам DSL за моето C# приложение. Първа стъпка е IronPython, поради по-голямата база от потребители и знания. Ако мога да накарам нещо да работи добре тук, мога просто да спра.
Ето моя проблем:
Искам моят IronPython скрипт да има достъп до функциите в клас, наречен Lib. В момента мога да добавя асемблира към средата за изпълнение на IronPython и да импортирам класа, като изпълня оператора в обхвата, който създадох:
// load 'ScriptLib' assembly
Assembly libraryAssembly = Assembly.LoadFile(libraryPath);
_runtime.LoadAssembly(libraryAssembly);
// import 'Lib' class from 'ScriptLib'
ScriptSource imports = _engine.CreateScriptSourceFromString("from ScriptLib import Lib", SourceCodeKind.Statements);
imports.Execute(_scope);
// run .py script:
ScriptSource script = _engine.CreateScriptSourceFromFile(scriptPath);
script.Execute(_scope);
Ако искам да стартирам Lib::PrintHello, което е просто изявление в стил hello world, моят скрипт на Python съдържа:
Lib.PrintHello()
или (ако не е статичен):
library = new Lib()
library.PrintHello()
Как мога да променя средата си, така че да мога да имам просто основни изрази в скрипта на Python като този:
PrintHello
TurnOnPower
VerifyFrequency
TurnOffPower
etc...
Искам тези скриптове да са лесни за писане от непрограмист. Не искам те да знаят какво е клас или как работи. IronPython наистина е там, така че някои основни операции като for, do, if и основна дефиниция на функция не изискват да пиша компилатор за моя DSL.