Skip to content

Instantly share code, notes, and snippets.


Mirah Scoping and control structures

If statements

If statements don't introduce a new scope, like ruby, but they are a little tricky.

For example, if b is false in the following, what would a be?

baroquebobcat /
Created Jun 16, 2014
Mirah Macro Help: Some macro notes

If you want to unquote the args from a block, be sure to not include the pipes.


quote do
  `list`.each { `block.arguments` cool_thing; `[block.body]` }


baroquebobcat /
Last active Aug 29, 2015
Mirah Extensions

Extension Methods

In the Mirah compiler, you can make Macros that work on std lib / predefined classes. You can't, however, do it in your own code easily at the moment. You can add macros that apply to your own types but not others. Here's some ideas for an API to change that.



baroquebobcat / sake_scheduler.rb
Last active Aug 29, 2015
A tool for planning sake making
View sake_scheduler.rb
# Sake Brewing Scheduler
require 'date'
def dfmt date
case date
when Date
date.strftime "%a, %b %e"
when Range
[date.first,date.last].map{|d|dfmt(d)}.join(" - ")
View array_blocking_fair.mirah
import java.util.concurrent.ArrayBlockingQueue
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicLong
queue_size = 10
queue = queue_size, true
counts = {"A"=>, "B" =>}
producerA = do
while true
baroquebobcat / mirah_0_1_2_notes
Created Jan 6, 2014
Mirah 0.1.2 release process notes
View mirah_0_1_2_notes
mirah 0.1.2 release highlights
- improvements to the new mirrors implementation (try it with -T)
- improvements to the new backend implementation (try it with -N)
- added better casting for methods that return primitives (754cc38f)
- =~, include? macros added to String (Thanks altamic)
- << operator added to StringBuilder
- improved line number recording in new backend
- fixed a few macro expansion related bugs
- Added Apache 2 license to gem metadata
baroquebobcat /
Last active Jan 2, 2016
Mirah Lambda Proposal

Mirah Lambda Proposal

Lambda types

  • Stabby / Lambda
  • Block
  • Nested Methods

Stabby / Lambda

View gist:8227106
$ rake gem
rm -rf build/bootstrap
mkdir -p build/bootstrap
Compiling 10 source files to /Users/nick/hacking/mirah_hacking/mirah/build/bootstrap
baroquebobcat / symbol_curry.rb
Last active Dec 31, 2015
Symbol#curry, because one kind of curry just isn't enough
View symbol_curry.rb
# add a curry method to symbol for evil/awesome symbol to proc powers.
class Symbol
def curry(n=nil)
->(*args) {
->(obj) {obj.send self, *args}
def call(*n)