[#17136] Net::SMTP error — Alan Tsang <atsang@...>
[#17151] Calling Marshal.dump/load from C — Emil Ong <onge@...>
Hi,
[#17167] ` (back tick) on Win32 machines — Stephan K舂per <Stephan.Kaemper@...>
Hi all,
[#17177] Question on Net::HTTP — Dave Thomas <Dave@...>
[#17198] enhancing Ruby error messages for out of the bound constant Fixnum? — Guillaume Cottenceau <gc@...>
Hi,
Hi,
matz@ruby-lang.org (Yukihiro Matsumoto) writes:
On Thu, 5 Jul 2001, Guillaume Cottenceau wrote:
[#17206] /* */ comments — Dave Thomas <Dave@...>
On Wed, 4 Jul 2001, Dave Thomas wrote:
Stephen White wrote:
> Over on http://www.rubygarden.org, dv posted a patch to parse.y that
Hi,
Hello --
[#17212] Ruby 1.6.4 Win32 .exe installer question — A Bull in the China Shop of Life <feoh@...>
Folks;
A Bull in the China Shop of Life <feoh@fourfuzzies.org> writes:
[#17224] Getting variable name — DaVinci <bombadil@...>
Hi.
[#17225] Re: /* */ comments — Arnaud Meuret <ameuret@...4you.com>
|From: Mark Slagell [mailto:ms@iastate.edu]
[#17240] Ruby Mascot/logo — "Kevin Powick" <kpowick@...>
Hi there.
"Cameron Matheson" <cmatheson3@yahoo.com> wrote in message
>"Cameron Matheson" <cmatheson3@yahoo.com> wrote in message
[#17254] extension and GC — Shan-leung Maverick WOO <maverick@...>
Hello,
[#17281] Inheritance — "Aleksei Guzev" <aleksei.guzev@...>
>>>>> "A" == Aleksei Guzev <aleksei.guzev@bigfoot.com> writes:
# -----Original Message-----
>>>>> "A" == Aleksei Guzev <aleksei.guzev@bigfoot.com> writes:
What I want to do could be expressed in pseudo-C++.
>>>>> "A" == Aleksei Guzev <aleksei.guzev@bigfoot.com> writes:
I have hardware, wich in case of division be zero generates an
>>>>> "A" == Aleksei Guzev <aleksei.guzev@bigfoot.com> writes:
[#17295] — "Aleksei Guzev" <aleksei.guzev@...>
I found a solution.
[#17307] Re: Extension building — Ed L Cashin <ecashin@...>
Tony Smith <tony@smee.org> writes:
[#17331] SIGUSR1/2 ? — Emil Ong <onge@...>
Hi,
>>>>> "E" == Emil Ong <onge@mcs.anl.gov> writes:
Hi,
[#17348] Adding a method to a class at the top-level — Guillaume Cottenceau <gc@...>
Comrades,
On Fri, 06 Jul 2001 06:24:15 +0900, Guillaume Cottenceau wrote:
[#17396] Problem with Ruby/Gtk and GC — DaVinci <bombadil@...>
Hi all.
[#17413] Default Value in a Hash.. but I need a new object each time! — Guillaume Cottenceau <gc@...>
Hi,
[#17432] performance question — Joseph McDonald <joe@...>
[#17441] Tk - how to clear a canvas? — Tjabo Kloppenburg <tjabo@...>
hi,
[#17477] wget in Ruby with a twist — Steve Price <sprice@...>
Just curious if someone already developed something that creates
[#17482] Aliases for class methods — "HarryO" <harryo@...>
Say I wanted to write my own version of File#open that adds some
Thanks. I put most of my comments in my reply to Dave's post, so I won't
[#17484] % — "Aleksei Guzev" <aleksei.guzev@...>
On Sun, 8 Jul 2001, Aleksei Guzev wrote:
[#17511] Ruby on Slashdot — jweirich@...
Ruby is currently mentioned on Slashdot. I posted some references.
Interesting...
Hi,
> |I thought about that too; what about Ruby being a standard?
Hi,
Hello --
On Mon, 9 Jul 2001, David Alan Black wrote:
[#17540] Dir.chdir — stephen.hill@... (Steve Hill)
Hi,
[#17546] Constants and Variables — mjl@... (Martin J. Laubach)
Hi there,
[#17552] Re: Ruby on Slashdot — "K. Powick" <kpowick@...>
Having been a reader of Slashdot for quite a while, and having taken the
[#17560] low-level TCP/IP manipulations? — Al Chou <hotfusionman@...>
Hi, all,
[#17562] writing arbitrary data to a socket — Al Chou <hotfusionman@...>
Continuing my investigations into my Ruby network hardware emulator, is there a
[#17570] Re: Constants and Variables — r2d2@... (Niklas Frykholm)
Martin J. Laubach wrote:
[#17572] Re: Constants and Variables — "HarryO" <harryo@...>
> If you want objects that don't change, try Object#freeze,
[#17607] Net/Http problem - connect(2) error on windows — jbshaldane@... (S Sykes)
I run ruby on Windows 2000... it works wonderfully, except when
[#17628] Strange warning — Bob Alexander <balexander@...>
What exactly does Ruby's warning message
[#17632] Re: SWIG — Craig Files <Craig_Files@...>
We have done this two ways...
[#17633] WIN32OLE — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>
Have anyone successfully used the win32ole library for ruby?
[#17634] SWIG and strings — Craig Files <Craig_Files@...>
Hi,
[#17637] TkPhoto on a button — "Hal E. Fulton" <hal9000@...>
Ruby/Tk question for you all.
[#17671] IO in a Ruby extension — "Brett W. Denner" <Brett.W.Denner@...>
I need to write a Ruby extension which reads binary data from a C FILE
[#17686] YART (Yet Another Ruby Talk) — Jim Menard <jimm@...>
This talk was given to the New York City CTO Club on July 10, 2001.
[#17688] Ruby jobs — "Peter Hickman" <peterhi@...>
I was looking on Job Serve here in the UK (things aren't going too well down
[#17689] Re: Old chestnut: invariants, pre/post conditions and so on — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>
[#17694] Funky file.each_byte — nlper@... (Tyler)
Howdy! I was filtering some files and ran into an anomaly.
[#17732] Re: Array#sort! returns nil when array empty — hfulton@...
> Array#sort! returns nil if the array is empty, whereas ri
On Fri, 13 Jul 2001 hfulton@pop-server.austin.rr.com wrote:
>>>>> "P" == Paul Brannan <pbrannan@atdesk.com> writes:
On Fri, 13 Jul 2001, ts wrote:
While following the Array thread, I noticed the minus
Jim Freeze <jim@freeze.org> writes:
On Fri, 13 Jul 2001, Dave Thomas wrote:
Jim Freeze <jim@freeze.org> writes:
> pigeon% ruby -e 'p ("a b c :d e f".split(/:(\S.*)|\s+/) - [""])'
[#17773] What happened to Ruby-Fltk? — Damon <adamon@...>
I heard about Ruby bindings to FLTK on this newsgroup, but the Ruby-Fltk
[#17797] Re: .Net, JVM and languages. — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>
[#17798] GC mark — "Aleksei Guzev" <aleksei.guzev@...>
"The mark routine will be called by the garbage collector during its
[#17832] Creating methods on the fly — "HarryO" <harryo@...>
I would like to create a new method on the fly. Assuming I have a
[#17833] Extending objects — "Aleksei Guzev" <aleksei.guzev@...>
Once I fire up Rubywin, and then invoke _R_uby _I_rb from the
At 07:05 PM 7/14/01 +0900, Euan Mee spewed forth:
[#17836] Specialised data structures - good or bad? — Stephen White <spwhite@...>
There's been a move towards implementing sets, bags, red-black trees and
[#17842] Bug ... probably another one — "Aristarkh A Zagorodnikov" <xm@...3d.ru>
[#17859] Re: Creating methods on the fly — "HarryO" <harryo@...>
I
"HarryO" <harryo@zipworld.com.au> writes:
This particular code yields some strange results.
Hello --
Hi,
[#17864] Trapping Ruby exceptions from C — senderista@... (Tobin Baker)
I'm trying to solve the problem of how to trap a Ruby exception from a
[#17872] Overloaded methods — "HarryO" <harryo@...>
A while ago, someone asked whether it was possible to overload methods in
[#17890] Deriving from Class — "Aleksei Guzev" <aleksei.guzev@...>
Why deriving from "Class" class is denied?
Hi,
Would You like to revise this issue? It seems to be inconsistent.
matz@ruby-lang.org (Yukihiro Matsumoto) writes:
[#17901] Rubygarden Poll — Dave Thomas <Dave@...>
Hello --
[#17922] Time vs ParseDate — Kero van Gelder <kero@...4050.upc-d.chello.nl>
Why doesn't Time accept the output from ParseDate.parsedate directly?
[#17925] Movement in scripting language communities to integrate XML-RPC — gsemones@... (Guerry Semones)
Greetings,
Hi,
"out of the box" by including
Hi,
Hi,
[#17931] Re: Rubygarden Poll — "Lyle Johnson" <ljohnson@...>
> The next poll will be interesting: "I prefer building Ruby GUIs with:"
[#17939] RUBY C++ Extension — jglueck@... (Bernhard Glk)
Does anybody have the source to a WORKING C++ Class exported to RUBY
[#17948] FastCGI for Ruby? — Eli Green <eli.green@...>
Hey there. A few weeks back, when I was searching for Ruby-related stuff, I
On Tue, 17 Jul 2001, Eli Green wrote:
[#17984] waiting for `backquotes` to finish — stephen.hill@... (Steve Hill)
Hi,
[#18018] Broadcasting data — "HarryO" <harryo@...>
Does someone have an example of broadcasting data around a network using
Hi,
> |Does someone have an example of broadcasting data around a network using
[#18023] [ANN] libxslt Rubified! — Wai-Sun Chia <waisun.chia@...>
Hello,
Wai-Sun Chia <waisun.chia@compaq.com> wrote:
I've been learning Ruby, mostly with the Pickaxe book, and it's going
At 05:07 PM 7/19/01 +0900, Wayne Vucenic spewed forth:
[#18041] How to define instance variables from 'C'? — Wai-Sun Chia <waisun.chia@...>
Hello Rubyists,
[#18060] Best way to prevent infinite loops... — Sean Chittenden <sean-ruby-talk@...>
Howdy. What's the best way to prevent infinite loops in Ruby? =20
[#18073] 99 bottles of beer — "Dat Nguyen" <thucdat@...>
[#18080] [ANN]: RubyGems (was Re: Rubygarden Poll) — Ryan Leavengood <mrcode@...>
Bill Kelly wrote:
[#18087] Debugging extensions with gdb — Wai-Sun Chia <waisun.chia@...>
Hello,
[#18098] Exceptions — "Aleksei Guzev" <aleksei.guzev@...>
What about "retry"ing from the line where exception occurred and/or just
[#18101] Re: 99 bottles of beer — grady@... (Steven Grady)
(I believe in Perl circles this is called Golf. This is the first
[#18120] Re: An exercise in minimalism — Chris Moline <ugly-daemon@...>
Here's a first attempt. It weighs in at 66 bytes.
At 12:19 AM 7/20/01 +0900, David Alan Black spewed forth:
>>>>> "A" == A Bull in the China Shop of Life <feoh@fourfuzzies.org> writes:
[#18142] Re: instance variables by name? — "Barnett, Aaron" <aaron.barnett@...>
[#18144] Re: instance variables by name? — "Barnett, Aaron" <aaron.barnett@...>
[#18167] Enabling "super" — "Aleksei Guzev" <aleksei.guzev@...>
(1)
>>>>> "A" == Aleksei Guzev <aleksei.guzev@bigfoot.com> writes:
# tt_mM = rb_define_module("M");
>>>>> "A" == Aleksei Guzev <aleksei.guzev@bigfoot.com> writes:
[#18188] Newbie. Sinking fast. Please help. — Matt <matt@...>
I bought Programming Ruby a number of months back and finally have an opportunity to try out Ruby. However, I can't get it to build. Actually, that's not quite accurate. It builds fine. It won't pass 'make test'.
>>>>> "M" == Matt <matt@greenviolet.net> writes:
On Sat, 21 Jul 2001, ts wrote:
"Serban Udrea" <S.Udrea@gsi.de> writes:
On Sat, 21 Jul 2001, Dave Thomas wrote:
[#18193] Re: 99 bottles of beer — "Dat Nguyen" <thucdat@...>
99.downto(0){|x|w=" on the wall";u="#{x!=0?eval(x.to_s):'no more'}
On Sat, 21 Jul 2001, Glen Starchman wrote:
[#18215] Re: 99 bottles of beer — Will Sobel <will.sobel@...>
On Sat, 21 Jul 2001, Will Sobel wrote:
On Sat, 21 Jul 2001, Avi Bryant wrote:
On Sat, 21 Jul 2001, Avi Bryant wrote:
On Sat, 21 Jul 2001, David Alan Black wrote:
On Sat, 21 Jul 2001, Avi Bryant wrote:
Ok. 151 bytes. No warnings.
On Sat, 21 Jul 2001, Avi Bryant wrote:
On Sat, 21 Jul 2001, Avi Bryant wrote:
[#18244] RCR: Transient instance variables — Michael Neumann <neumann@...>
Hi,
[#18271] Re: 99 bottles of beer — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>
[#18280] Re-loading a modified class definition — "HarryO" <harryo@...>
I was chatting with a friend of mine last night and we were discussing
[#18293] NUM2LONG problem :) — "Aleksei Guzev" <aleksei.guzev@...>
Just now I met a funny problem with NUM2LONG macro.
[#18295] Unicode filenames and Ruby porting — Ned Konz <ned@...>
If someone were to port Ruby to Windows/CE, they would have a little
[#18306] Ruby as opposed to Python? — "Mark Nenadov" <mnenadov@...>
Hello. I have toyed with the idea of trying Ruby out for some time now.
Hi, Mark.
Albert Wagner <alwagner@tcac.net> writes:
In article <ExK67.8849$1V1.797914@e420r-atl2.usenetserver.com>, "Albert
I consider Smalltalk to be "pure" OO. You have objects and you have
Michael Neumann wrote:
Yukihiro Matsumoto wrote:
Yukihiro Matsumoto wrote:
On Mon, Jul 30, 2001 at 05:58:22AM +0900, Paul Prescod wrote:
"Florian G. Pflug" wrote:
[#18328] Re: Ruby Book — Todd Gillespie <toddg@...127.ma.utexas.edu>
Tom Malone <tom@hurstlinks.com> wrote:
[#18344] Newbie question: Data structures in Ruby. — Erik <recon_nospam@...>
Hi all,
[#18351] RCR: String./ to concatenate paths — Michael Witrant <mike@...>
[#18356] Still can't get Ruby to compile... — Matt <matt@...>
Quick recap:
[#18374] OO question — "Tom Malone" <tom@...>
Someone please tell me if this is an inappropriate question for this list -
[#18378] More newbie questions — Matt <matt@...>
OK. Now that I have Ruby installed and apparently (mostly) working, I'm trying my hand at simple things. (At least they seem like they'd be simple enough...)
[#18390] RE: OO question — Will Conant <WillC@...>
Over the weekend, I put together my first real Perl project. Perl, of
On Tue, 24 Jul 2001, Will Conant wrote:
[#18393] Trouble Using FXRuby on cygwin/Windows NT — rgilbert1@... (Robbie Gilbert)
Hi,
[#18395] interfaces? — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>
I am fairly new to Ruby (the DDJ generation), so I may have missed something
[#18408] Re: mod_ruby - persistent variables? — Shugo Maeda <shugo@...>
Hi,
Shugo Maeda <shugo@ruby-lang.org> wrote in message news:<87u202on1y.wl@studly.priv.netlab.jp>...
[#18409] Socket vs. TCPSocket & UNIXSocket — Eli Green <eli.green@...>
Socket.accept returns an array, whereas TCPServer.accept and UNIXSocket.accept
[#18439] Re: OO question — "David Simmons" <pulsar@...>
"Tom Malone" <tom@tom-malone.com> wrote in message
[#18452] Re: Ruby as opposed to Python? — "Dat Nguyen" <thucdat@...>
"Dat Nguyen" <thucdat@hotmail.com> writes:
[#18502] Ruby source code and binaries for Mac OS 9 — Dan Moniz <dnm@...>
Hi everyone,
[#18510] Basic OO Tutorial, Ruby & Perl — clpoda@...
I have prepared a document called rubyboot,
[#18542] Tk Demo Patch — "John Kaurin" <jkaurin@...>
I have not been following comp.lang.ruby much since 1.6.3, so please
[#18545] Re: Ruby as opposed to Python? — Ned Konz <ned@...>
Avdi Grimm wrote:
[#18566] Which database should I use? — Urban Hafner <the-master-of-bass@...>
Hello everybody,
Urban Hafner wrote:
[#18573] ruby versus Perl Magic — markus jais <info@...>
hi,
[#18583] My first Ruby program... :-) — "Bjorn Pettersen" <BPettersen@...>
Well, it's now two days into playing with Ruby, and I wrote my first
[#18608] ruby indenter — Joseph McDonald <joe@...>
> Has anyone written a ruby pretty printer or indent-er in ruby?
Hi,
> Yes. But since I no longer program in emacs lisp, and have been too busy
Hi,
[#18616] IO.popen — "Aristarkh A Zagorodnikov" <xm@...3d.ru>
[#18628] State of the Onion Five — Dave Thomas <Dave@...>
[#18629] exit() called in ruby_run()? — Emil Ong <onge@...>
Hi,
[#18634] Most Sig. NonZero bit, efficiently? — Hugh Sasse Staff Elec Eng <hgs@...>
I see that integer types (Bignum and Co.) support [] to get the kth bit out.
FYI - UDP guarantees delivery of uncorrupted, complete datagrams, or no
[#18699] Possible threading problem under Windows — Dave Thomas <Dave@...>
At 23:22 7/28/2001 +0900, you wrote:
[#18704] HTML Librarys and OOP Design Philosophy — David Tillman <dtillman@...>
[#18724] Problem installing IOWA — "James Britt (ruby-talk ML)" <ruby@...>
I've downloaded the IOWA package, and have tried to install it
[#18762] Guide to using class loading (or similar concepts) in Ruby? — JamesArendt@... (James Arendt)
I'll be quite honest I'm quite a Ruby newbie and haven't had much
In Ruby you load entire files rather than individual classes.
On Mon, Jul 30, 2001 at 08:39:15AM +0900, Nat Pryce wrote:
[#18766] Re: Autoflush backquotes?? — Harry Ohlsen <harryo@...>
> def make( action )
[#18768] Re: Ruby vs. Objective Caml — "MikkelFJ" <mikkelj-anti-spam@...1.dknet.dk>
[#18810] Net::HTTP (downloading an image) — Tobias Reif <tobiasreif@...>
Hi;
[#18826] Get a list of class (not instance) functions — "Florian G. Pflug" <fgp@...>
Hi
[#18832] Ruby164-2.exe — "Albert L. Wagner" <alwagner@...>
Ruby164-2.exe does not work in my Win2k box. Judging by other
[#18851] Rubywin uses hard-coded "/cygdrive" prefix. — Lloyd Zusman <ljz@...>
I just noticed today that the version of `rubywin' that comes with the
[#18863] Re: Who can count change?? — teespy <teespy@...>
[ruby-talk:18919] README for Dynamic-ORBit
If anyone wants to comment on my IDL mapping for Ruby, here's the README:
Author/maintainer: Tobin Baker
Email: senderista@hotmail.com
This library is licensed under the GNU Library General Public License.
See COPYING for details.
This is an alpha release of ORBit bindings for Ruby. Most of the code
here has been stolen directly from Owen Taylor's excellent CORBA::ORBit
module for Perl. Some other features (such as automatic loading of
IDL files) have been borrowed from Jason Tackaberry's ORBit-Python
module. A feature that this library shares with these two modules is
dynamic loading of IDL files. No intermediate IDL compilation step is
necessary! You either specify the location of an IDL file directly with
CORBA._load_idl or simply require the top-level module from that file, and
the library will search all IDL files in the current directory, several
hard-coded paths, or the IDLPATH environment variable for an IDL file
containing that module. The library parses the IDL file and dynamically
creates all Ruby objects corresponding to the IDL definitions in the file.
In this release, only client-side bindings are available. Most of
the server-side code has been written and is currently being debugged.
I hope to release it in just a few weeks.
The IDL-Ruby mapping in this release is highly experimental. Some
features are rather "baroque", and may well be withdrawn in the future,
depending on public feedback.
I should also say that I have gotten a few of the ideas for the
IDL-Ruby mapping from Dai, who began work on ORBit bindings for Ruby
long before I did. Our approaches are rather different, but I hope that
by discussions on the newsgroups and mailing lists, we can eventually
arrive at a standardized CORBA mapping for Ruby that will be as portable
as Ruby itself.
Please email me with any bug reports or suggestions. I hope CORBA
bindings bring us one step closer to world domination! (Sorry, must
have been hanging around Linux zealots too long :-)
The IDL-Ruby Mapping
1. Modules
IDL modules map directly to Ruby modules. The fact that Ruby has true
nested modules makes for an especially natural mapping from IDL to Ruby.
E.g.,
//IDL
module Foo {
module Bar {
};
};
#Ruby
module Foo
module Bar
end
end
It should be noted that since Ruby module names must begin with capital
letters, using IDL files with lowercase module names could be a problem.
I especially have in mind IDL written for use with Java, where package
names (which map to IDL modules) are conventionally in lowercase. I have
done nothing to address this problem in this release, but some kind of
name mangling may be necessary for compatibility with existing IDL.
<soapbox>To me, this illustrates the kind of unintended consequences
that can arise from a well-meaning attempt to turn conventions into
rules.</soapbox>
2. Interfaces
IDL interfaces are also mapped to Ruby modules. Each Ruby module
corresponding to an IDL interface includes the base module CORBA::Object,
which declares all the methods found in the IDL CORBA::Object interface,
prefixed with an underscore, along with an additional method, repo_id,
which returns the interface's Repository ID. When an IDL interface
definition is encountered by the parser, a Ruby module corresponding to
the interface is created and each attribute and operation defined in the
interface is defined as an instance method in that module. The Ruby
modules corresponding to base interfaces in the IDL definition are
included in the new module. At runtime, an object reference entering
the ORB is demarshaled into an instance of CORBA::ORBit::Stub, which
wraps ORBit's native object reference type, and extended with the module
corresponding to the object reference's interface. While interfaces are
never directly instantiated by the client, what happens looks something
like this:
//IDL
module Foo {
module Bar {
interface Baz {
void do_it(in long dummy);
};
};
};
#Ruby
module Foo
module Bar
module Baz
def do_it(dummy)
end
end
end
end
myBaz = CORBA::ORBit::Stub.new()
myBaz.extend(Foo::Bar::Baz)
In the server-side mapping, a Ruby module with the suffix "_POA" is
created for each interface definition. Any implementation class for
that interface must include this module. E.g., assuming the same IDL
as the last example:
#Ruby
module Foo
module Bar
module Baz_POA
def do_it(dummy)
end
end
end
end
class Baz
include Foo::Bar::Baz_POA
def do_it(dummy)
#method implementation
end
end
3. Operations
IDL operations are mapped to Ruby method definitions. As a rule,
in arguments are passed as ordinary parameters, return values and
out arguments are returned as a single array, and inout arguments are
passed in like in parameters and returned like out parameters, with no
"pass-by-reference" semantics involved. E.g.,
//IDL
interface Foo {
long do_it(in long in_arg, out long out_arg, inout long
inout_arg);
};
#Ruby
#somehow get reference myFoo to Foo object
ret_val, out_arg, inout_arg_ret = myFoo.do_it(in_arg, inout_arg_par)
This treatment of parameters coincides with the Python Mapping
Specification. This version, however, contains certain experimental
features which attempt to emulate the "call-by-reference" semantics
implicit in the IDL concepts of out and inout arguments. Specifically, if
a block is supplied with a CORBA operation invocation, the block will be
executed with all block parameters set to the values of corresponding out
arguments returned by the invocation. Since Ruby binds block parameters
to any local variables with the same name defined in the enclosing scope
of the block, this can be used to simulate "call-by-reference". E.g.,
//IDL
interface Foo {
void do_it(out long arg1, out long arg2, out long arg3);
};
//implementation sets arg1 = 1, arg2 = 2, arg3 = 3
#Ruby
#somehow get reference myFoo to Foo object
arg1, arg2, arg3 = nil
do_it() {|arg1, arg2, arg3|}
p arg1, arg2, arg3 #prints 1, 2, 3
Another feature emulates "call-by-reference" for inout parameters. If a
parameter to an operation invocation is a Ruby symbol, it is interpreted
as an inout argument, provided the word "inout" is supplied as the last
parameter to the invocation:
//IDL
interface Foo {
void do_it(inout inout_arg);
};
//implementation adds 1 to inout_arg
#Ruby
#somehow get reference myFoo to Foo object
inout_arg = 10
do_it(:inout_arg, inout)
p inout_arg #prints 11
It could certainly be argued that these features are more confusing
than useful. I wanted to include them in this first release, however,
to see if anyone preferred operation semantics that more closely emulate
those implicit in IDL.
4. Attributes
IDL attributes are mapped to Ruby methods of the same name. For ordinary
attributes, a "getter/setter" pair of methods is created; for readonly
methods, only a "getter" method is created. These follow the ordinary
Ruby naming conventions for attributes, e.g.,
//IDL
interface Foo {
attribute bar;
readonly attribute baz;
};
#Ruby
module Foo
def bar; end
def bar=(val); end
def baz; end
end
In the server-side mapping, attr_accessor or attr_reader methods will
be defined in the skeleton module corresponding to an interface:
#Ruby
module Foo_POA
attr_accessor :bar
attr_reader :baz
end
5. Constants
For at least two reasons, IDL constants are *not* mapped to Ruby
constants. In the first place, as we all know, Ruby "constants" are not
really constant. This is at variance with the "immutable" semantics
implicit in IDL. In the second place, Ruby constants must begin with
a capital letter. This is clearly an unreasonable requirement to place
on CORBA implementors who write their IDL with other languages in mind.
Therefore I implement constants as methods returning the value of the
constant. E.g.,
//IDL
module Foo {
const float pi = 3.14159265;
};
#Ruby
module Foo
def pi
3.14159265
end
end
6. Exceptions
Exceptions derive from CORBA::UserException (which derives from
CORBA::Exception, which derives from StandardError). For each attribute
in the IDL definition, a matching parameter is added to the initialize
method for the corresponding Ruby class and an attr_reader is defined
with the same name. E.g.,
//IDL
interface Foo {
exception SystemFailure {
short err_code;
string desc;
};
};
#Ruby
module Foo
class SystemFailure < CORBA::UserException
attr_reader :err_code, :desc
def initialize(err_code, desc)
@err_code = err_code
@desc = desc
end
end
end
7. Structs
Structs derive, naturally enough, from the standard Ruby Struct class.
For each IDL struct definition, an anonymous Ruby struct class is created
and then installed as a constant in the appropriate module. E.g.,
//IDL
module Foo {
struct Person {
short id;
string first_name;
string last_name;
string address;
};
};
#Ruby
module Foo
end
struct_class = Struct.new(nil, :id, :first_name, :last_name, :address)
Foo.const_set(:Person, struct_class)
8. Unions
Unions are a bit more complicated. They derive from a special
CORBA::Union class, whose definition is:
module CORBA
class Union
def initialize(discriminator=nil, value=nil)
@discriminator = discriminator
@value = value
end
def _d
@discriminator
end
def _v
@value
end
end
end
Each subclass of Union has methods corresponding to each attribute in the
IDL definition, which either fetch the value provided the discriminator is
set to the appropriate value, or set the value to the argument supplied
and set the discriminator to the appropriate value for the attribute.
The discriminator cannot be set at all except at initialization. E.g.,
//IDL
union Foo (switch long) {
case 0: short a;
case 1: float b;
case 2: string c;
case 3: boolean d;
};
#Ruby
class Foo < CORBA::Union
def a
@value if @discriminator = 0
end
def a=(value)
@value = value
@discriminator = 0
end
def b
@value if @discriminator = 1
end
def b=(value)
@value = value
@discriminator = 1
end
def c
@value if @discriminator = 2
end
def c=(value)
@value = value
@discriminator = 2
end
def d
@value if @discriminator = 3
end
def d=(value)
@value = value
@discriminator = 3
end
end
No type checking is done when attributes are assigned to; type checking
is currently reserved for marshaling. This may change in the future,
but seems in accord with Ruby's weakly typed nature.
9. Sequences
Sequences are mapped to Ruby arrays, except in the case of octet or
character sequences, which are mapped to strings for efficiency. Bounded
sequences are currently not checked for overflow at assignment, but this
could change. Bounds checking currently only occurs at marshaling.
10. Arrays
Arrays are mapped to Ruby arrays, except in the case of octet or
character arrays, which are mapped to strings for efficiency. They are
currently not checked for overflow at assignment, but this could change.
Bounds checking currently only occurs at marshaling.
11. Enumerations
IDL enumerations are mapped to two entities in Ruby; first each constant
in the enumeration is mapped just as an ordinary constant would be if
it were defined in the same IDL module, with consecutively increasing
integral values starting from 0; then an array is created in the Ruby
module corresponding to the IDL module, with indices matching the constant
values and string values matching the name of the constant. E.g.,
//IDL
module Foo {
enum Color { red, green, blue };
};
#Ruby
module Foo
def red; 0; end
def green; 1; end
def blue; 2; end
Color = ["red", "green", "blue"]
end
It will be noticed again that the name of an enumeration must begin with a
capital letter, since it is defined as a constant in the enclosing module.
This remains to be resolved by some kind of name mangling mechanism.
12. Typedefs
Typedefs are "unwound" to a definition composed of basic types or
non-typedef user-defined types. They never should appear in Ruby code.
13. Any
IDL Any values are mapped to objects of class CORBA::Any. They have
two members, a TypeCode and a value, which are available as read-only
attributes. Any objects delegate all method calls to the enclosed value,
which will raise a TypeError if it does not respond to the method invoked.
Any objects may be generated by the client by instantiating a TypeCode
appropriate for the value to be inserted, and then calling CORBA::Any.new
with the TypeCode and the value as arguments. Type checking for Any
currently occurs only at marshaling.
14. TypeCodes
IDL TypeCodes are mapped to a simple Ruby "wrapper" class for the
ORBit native type. They may be instantiated from Ruby by calling
CORBA::TypeCode.new with the Repository ID of the TypeCode as an argument.
Currently none of the operations in the OMG CORBA::TypeCode interface
are available in Ruby, but this may change if there seems to be reason
to do so (for instance querying the TypeCode member of an Any value
for various attributes). TypeCode constants corresponding to all the
TypeCodes for basic types are defined in the class CORBA::TypeCode,
with the same names as in the C mapping.
15. The Client-Side Mapping for the ORB Pseudo-Object
The ORB pseudo-object is instantiated by calling CORBA::ORB.init with
any legal arguments defined in the CORBA specification or by ORBit
itself. All the operations defined in the OMG CORBA::ORB interface are
available from Ruby, except for the various TypeCode creation operations.
Examples
Examples are available in the files "test-suite.idl", "test-server.py",
and "test-client.rb". Since server-side bindings are not yet complete,
you will have to install ORBit-Python to run this test suite (which is
stolen directly from that project, due to lack of time and imagination on
my part). If there is popular demand, I may also include a server-side
script for Perl (CORBA::ORBit) as well.