Showing posts with label Boo. Show all posts
Showing posts with label Boo. Show all posts

Wednesday, May 7, 2008

Dynamic assembly generation

Interestingly enough, if you build a dynamic assembly, you can not call GetExportedTypes on it, because the method is not implemented. Very funny, ha ha.


Microsoft has confirmed it is a bug


I encountered this bug while trying to compile boo code with boo compiler


[Test, ExpectedExceptionAttribute(typeof(NotSupportedException))]
public void GetExportedTypes_NotSuportedInDynamicAssembly()
{
string assemblyText = @"
class Foo:
x as int
";
BooAssemblyCompiler compiler = new BooAssemblyCompiler("test", assemblyText);
Type[] types = compiler.CompilerContext.GeneratedAssembly.GetExportedTypes();
}



BooAssemblyCompiler is just a helper class, which inside just does these steps

// creates a boo compiler
m_compiler = new BooCompiler();

// adds a CompileToMemory step to the compiler pipeline
m_compiler.Parameters.Pipeline = new Boo.Lang.Compiler.Pipelines.CompileToMemory();

// defines that an output should be a library
m_compiler.Parameters.OutputType = CompilerOutputType.Library;

// finally, compiles boo text
StringInput input = new StringInput(assemblyName, booText);
m_compiler.Parameters.Input.Add(input);
m_compilerContext = m_compiler.Run();

Tuesday, December 18, 2007

Again Ayende writing about Boo. A very helpful insight of why Boo is good language: What makes Boo a great language

Thursday, June 7, 2007

Boo su DSL

Labai įdomus straipsnis apie DSL Friendly syntax in BOO


Nekantrauju išbandyti tai generuojant odt dokumentus :)

Monday, May 28, 2007

Dokumentų spausdinimas

Vienas klausimas yra kokį būda naudoti ataskaitoms generuoti, o visai kitas, kaip į dokumentą duomenis sudėti.

Pirmasis variantas (kurį prieš pusę metų dariau) buvo paprastas switch / replace sakinių rašymas.

Rezultas - dėl kiekvieno menkniekio reikia programuoti. Tikrai nepavydinėtina.

Ką gi, naudojame kitą būdą, juk vis dėlto, gyvename .Net aplinkoje, ir skirtingai nei java yra daug ir įvairių kalbų. Tuo ir pasinaudokime.

Galbūt dar mažai kam žinoma, bet greitai auganti kalba Boo :)

Boo yra dinaminė kalba, pagrįstas pytono sintakse. Ką gi mums duoda Boo.
Ogi du dalykus:
  • Boo turi interpretatorių
  • - kurį galime įtraukti į programą
  • Įdomiau gyventi



  • Taigi, dabar vietoje skurdžių sakinių

    ...
    if (m_node.InnerText = "Studento vardas">)
    m_node.Text = student.Name + student.Surname
    ...



    galime rašyti taip:
    kode:


    Interpretator m_interpetator = new Interpretator()
    m_interpratator.setValue ("RootEntity", student);

    ...
    m_interpretator.Eval(node.InnerText);
    m_node.Text = m_interpretator.LastValue
    ..




    dokumento šablone tuomet galima rašyti ką tik norime.
    Pavyzdžiui, dokumento pradžioje galime įdėti paslėptą tag'ą (jei konkrečiau - tai input field'ą) su tokiu kodu "Mokinys = RootEntity".

    tuomet tose vietose, kur turi atsidurti tekstas įdedame tokius paslėptus tag'us:

    vardas = Mokinys.Name + Mokinys.Surname; vardas.ToUpper();


    Šiais dviem sakiniais sujungėm mokinio vardą ir pavardė ir padarėm juos upper string'ais. Kadangi tai yra .Net aplinka, tai praktiškai galima naudotis absoliučiai visomis funkcijomis, kurias duoda .Net


    Daugiau jokių switch replace! :)