Glimmer: DSL Framework for Ruby GUI and More

github.com

144 points

thunderbong

19 hours ago


22 comments

weatherlight 9 hours ago

That's one hell of a introduction

    Glimmer started out as a GUI Library and grew into a full-fledged DSL         
    Framework with support for multiple GUI DSLs. Glimmer's namesake is         
    referring to the Glimmer of Ruby in Graphical User Interfaces (contrary to             
    popular myth perpetrated by Charles Nutter, Glimmer has nothing to do with             
    the ill-fated Whitney Houston movie, which does not in fact share the same             
    name)
jonkoops 15 hours ago

Note there is already UI component framework called Glimmer that is used by Ember.js: https://glimmerjs.com/. It's pretty much upstreamed into Ember itself these days, but the devs also have a big Rails background so I found the coincidence funny.

  • xinuc 13 hours ago

    As a long time rubyist, I know that Andy's Glimmer preceded Yehuda's.

    • caseyohara 13 hours ago

      The first commit to the Ruby Glimmer project (2008-11-25 is the earliest I found) long predates the first commit to even Ember itself (2011-04-30).

msie 17 hours ago

This is great! Just yesterday I was looking at wxruby3 but I didn’t see a way to package/distribute apps. This does solve that problem.

flippyhead 13 hours ago

And only 21,000+ commits. Nice!

  • qup 8 hours ago

    What a strange criticism.

desireco42 12 hours ago

Congrats Andy for consistently shipping! He has been working on this and perfecting it for years.

jimbokun 12 hours ago

From that little demo looks like a lot of fun to develop.

Alifatisk 11 hours ago

Looks really fun, I have to try it

artemonster 18 hours ago

How debuggable is this (besides sifting through wall of debug log text)? Can you step through your declarative GUI building process inside DSL or its like this: "DSL text goes into magic magic...POOF! here is the result. hopefully nothing went wrong or glhf"

  • chao- 17 hours ago

    The popular debugger for Ruby is a combination of two libraries: byebug and pry. Using these should allow you to step into/over code in a familiar way, if you've used most breakpoint-based debuggers.

    If you end up giving it a try, please report back!

    • 3ds 17 hours ago

      These two gems have been superseded by the `debug` gem.

      https://github.com/ruby/debug

      • runako 12 hours ago
        2 more

        Could you say more about that? I have been using pry, and it appears to still be updated. Is there a reason to stop using pry, or are you expressing a preference for the official debug gem?

        Thanks!

        • Nuzzerino 8 hours ago

          Seems like the latter to me. One or the other gem is fine depending on your preferred interface.

  • verdverm 12 hours ago

    I've built a DSL engine on top of CUE + Go's text/template [1]. This largely becomes feeding data into a set of templates, and even this can be hard to debug because template engines often lack the extras needed to support it.

    I'd be curious to see if a more code based DSL engine has better debug support. I would imagine you would be stepping through both the DSL code and the engine, if it is more dynamic (i.e. there is not a two step process for DSL authoring)

    What I like about a text/template engine is that anyone can use it (create new DSLs) without knowing the language the engine is implemented in. CUE appeals to me as the language for writing/using the DSL because (1) I don't have to learn a new syntax per DSL and (2) it becomes data (json/yaml) I can use anywhere for other purposes beyond generating code.

    [1] https://github.com/hofstadter-io/hof

    • artemonster 12 hours ago

      my experience with interpreter pattern is that you will be spending 90% of debugger time stepping through abstract "eval" functions that are irrelevant to what you want debug.

      • sitkack 11 hours ago

        I solved this by writing code to walk the stack and extract the information I needed (this was Python, but am sure it would translate to Ruby).