Ruby Based Kamaelia Core (miniaxon.rb)
September 10, 2007 at 11:07 PM | categories: python, oldblog | View Comments
I finally got around to learning sufficient ruby to write a Mini Axon in Ruby - which means there is a basic Kamaelia core in Ruby available now. This means the following code is valid Ruby code and the components work in exactly the same way as Python based Kamaelia components:
This compares fairly well with the equivalent python mini-axon code:
The first class in that file (Coroutine) and first utility function there come from this entry:
What's next for this? Don't know really. As a proof of concept, it's interesting - its *as* capable an equivalent python based mini-axon, and could in theory give ruby developers the same boost that we get in python. I've no intention on doing a massive rewrite of existing python kamaelia code into Ruby, but it does open up some interesting options.
Language agnosticism is something I've always wanted for Kamaelia and this, along with Michael Barker's Java based experiments (and the fact that jython can run mini axon too), imply to me that the approach really can be language agnostic as was always intended :-)
class Producer < Component(yes, I bought 2 ruby books at pycon uk, so shoot me :-) )
@@name = "Producer"
def initialize(message)
super
@message = message
end
def main
loop do
yield 1
send @message, "outbox"
showboxes if $debug
end
end
end
class Consumer < Component
@@name = "Consumer"
def main
count = 0
loop do
yield 1
count = count +1
if dataReady("inbox")
data = recv("inbox")
print data, " ", count, "\n"
end
end
end
end
p = Producer.new("Hello World")
c = Consumer.new()
postie = Postman.new(p, "outbox", c, "inbox")
myscheduler = Scheduler.new()
myscheduler.activateMicroprocess(p)
myscheduler.activateMicroprocess(c)
myscheduler.activateMicroprocess(postie)
run(myscheduler)
This compares fairly well with the equivalent python mini-axon code:
class Producer(component):The code for this miniaxon is here in subversion:
def __init__(self, message):
super(Producer, self).__init__()
self.message = message
def main(self):
while 1:
yield 1
self.send(self.message, "outbox")
class Consumer(component):
def main(self):
count = 0
while 1:
yield 1
count += 1 # This is to show our data is changing :-)
if self.dataReady("inbox"):
data = self.recv("inbox")
print data, count
p = Producer("Hello World")
c = Consumer()
postie = postman(p, "outbox", c, "inbox")
myscheduler = scheduler()
myscheduler.activateMicroprocess(p)
myscheduler.activateMicroprocess(c)
myscheduler.activateMicroprocess(postie)
for _ in myscheduler.main():
pass
The first class in that file (Coroutine) and first utility function there come from this entry:
What's next for this? Don't know really. As a proof of concept, it's interesting - its *as* capable an equivalent python based mini-axon, and could in theory give ruby developers the same boost that we get in python. I've no intention on doing a massive rewrite of existing python kamaelia code into Ruby, but it does open up some interesting options.
Language agnosticism is something I've always wanted for Kamaelia and this, along with Michael Barker's Java based experiments (and the fact that jython can run mini axon too), imply to me that the approach really can be language agnostic as was always intended :-)