[#3101] Compile_err — "Fergus Hayman" <shayman@...>
[#3109] Is divmod dangerous? — Dave Thomas <Dave@...>
[#3110] my wish list for Ruby — Mathieu Bouchard <matju@...>
[#3119] Re: Min and max? — ts <decoux@...>
>>>>> "M" == Mathieu Bouchard <matju@CAM.ORG> writes:
[#3149] Retrieving the hostname and port in net/http — Roland Jesse <jesse@...>
Hi,
[#3154] 3-d arrays? — Hugh Sasse Staff Elec Eng <hgs@...>
Is there an idiom for 3-dimensional arrays in Ruby? I see that
[#3167] ruby.h needed to compile Interbase module — Jilani Khaldi <jilanik@...>
Hi all,
[#3189] BUG or something? — "Park Hee Sob" <phasis@...>
Hi,
[#3221] Re: Ruby & Interbase -- Please answer if you know! — ts <decoux@...>
>>>>> "J" == Jilani Khaldi <jilanik@tin.it> writes:
[#3222] Ruby coding standard? — Robert Feldt <feldt@...>
On Fri, 9 Jun 2000, Robert Feldt wrote:
Mathieu Bouchard <matju@cam.org> wrote:
[#3277] Re: BUG or something? — Aleksi Niemel<aleksi.niemela@...>
> |I am new to Ruby and this brings up a question I have had
Aleksi Niemel<aleksi.niemela@cinnober.com> writes:
On 12 Jun 2000, Dave Thomas wrote:
ts <decoux@moulon.inra.fr> writes:
[#3296] RE: about documentation — Aleksi Niemel<aleksi.niemela@...>
> I want to contribute to the ruby project in my spare time.
Aleksi Niemel<aleksi.niemela@cinnober.com> writes:
Hi,
On Tue, 13 Jun 2000, Toshiro Kuwabara wrote:
Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
[#3331] Selling Rubies by the Carat — Dave Thomas <Dave@...>
[#3338] PID of child processes — Andrew Hunt <Andy@...>
[#3363] chomp! — "David Douthitt" <DDouthitt@...>
I was looking at the documentation for chomp and chomp! - and the results of chomp startled me to say the least.
"David Douthitt" <DDouthitt@cuna.com> writes:
[#3407] Waffling between Python and Ruby — "Warren Postma" <embed@...>
I was looking at the Ruby editor/IDE for windows and was disappointed with
[#3410] Exercice: Translate into Ruby :-) — Jilani Khaldi <jilanik@...>
Hi All,
Jilani Khaldi <jilanik@tin.it> writes:
Hi,
"NAKAMURA, Hiroshi" <nahi@keynauts.com> writes:
Hi, Dave,
Hello,
[#3453] Re: Static Typing( Was: Waffling between Python and Ruby) — Andrew Hunt <andy@...>
[#3515] Options database (was: Define & Include?) — claird@... (Cameron Laird)
In article <8ikot4$ki$0@216.39.170.247>, Dave LeBlanc <whisper@oz.net> wrote:
[#3516] Deep copy? — Hugh Sasse Staff Elec Eng <hgs@...>
Given that I cannot overload =, how should I go about ensuring a deep
In message "[ruby-talk:03516] Deep copy?"
On Tue, 20 Jun 2000, GOTO Kentaro wrote:
[#3532] Extension in C++? — Robert Feldt <feldt@...>
[#3541] function objects? — Johann Hibschman <johann@...>
Hi folks,
[#3544] A small quiz — Dave Thomas <Dave@...>
[#3588] Interface polymorphism — hal9000@...
Another question, guys.
[#3607] Is there a statistician in the house? — Dave Thomas <Dave@...>
[#3662] Ruby 1.4.5 install from Mandrake cooker rpms ?problem? — Charles Hixson <charleshixsn@...>
This is the first time that I've installed ruby, so
[#3685] no traffic — matz@... (Yukihiro Matsumoto)
Hi,
[#3694] Why it's quiet — hal9000@...
We are all busy learning the new language
Hi,
Hi,
Hi, matz,
Hi,
Hi,
[#3699] Multithreaded/Embedded Ruby? — "Warren Postma" <embed@...>
Is there any information on Thread safety in ruby. Suppose I embed Ruby in a
Hi,
[ruby-talk:03601] Re: Interface polymorphism
> I have not given up on the idea of implementing a DBC module in
> Ruby. But every time I get into it, it makes my brain itch. I
> want to (have to!) make the conditions heritable, but I want to
> make it easy to use as well...
I've given some thought to this too and my conclusion, so far, has been to
change the Ruby interpreter code.
class Gem
use DBC
@carats
attr_accessor :carats
def invariant
@carats > 10
end
def pre_value(price)
price > 0
end
def value( price )
@carats * price
end
def post_value(price, ret)
ret > 40 # a little bit made up condition
end
end
class Ruby < Gem
def value( price )
@carats ** price
end
end
class PieceOfWorthlessGlass < Gem # like in nethack
def invariant
@carats > 0
end
end
stone = Gem.new
stone.carats = 5 # should raise InvariantFailed
stone.carats = 15
stone.value( 0 ) # should raise PreConditionFailed
stone.value( 1 ) # should raise PostConditionFailed
stone.value( 2 ) # should raise PostConditionFailed
stone.value( 3 )
stone = Ruby.new
stone.carats = 5 # should raise InvariantFailed
stone.carats = 15
stone.value( 0 ) # should raise PreConditionFailed
stone.value( 1 ) # should raise PostConditionFailed
stone.value( 2 )
stone.value( 3 )
stone = PieceOfWorthlessGlass.new
stone.carats = 5
stone.value( 0 ) # should raise PreConditionFailed
stone.value( 1 ) # should raise PostConditionFailed
stone.value( 2 ) # should raise PostConditionFailed
stone.value( 3 ) # should raise PostConditionFailed
stone.value( 9 )
To make this happen we can't use the trick to execute some
'changeMethodCallsToDBCStubs()' directly (as Ruby code) as we discussed in
earlier threads. It will break with inheritance and even when we add
something to the class.
So the options are (should I say include):
1) to change the method calling to check for DBC functions (pre_method,
post_method and invariant) and the normal first singleton, self, modules and
parents order works out the inheritance of DBC.
2) to change the inner workings of 'def' to replace automatically real
methods with {pre(args) method(args) post(args) invariant} type of code
I think I prefer the second one if it's applicable at all. The performance
penalty would be minimal (or as small as possible :?).
For those who're going to note that the second way wouldn't work when we add
special DBC-checkers to singleton classes or just afterwards, I could say
that it does work.
So imagine there has been no pre_value DBC precondition checker written
earlier (I'm too tired to write real example). When "executing" the 'def' in
class << stone
def pre_value(price)
price > 100
end
end
will restub the value by executing
class << stone
def value(price)
raise PreConditionFailed unless pre_value # ###
orig_value(price)
raise PostConditionFailed unless post_value
raise InvariantFailed unless invariant
end
end
behind the curtains. The earlier stub didn't have the marked line before,
but now we see that there exists a proper pre_condition checker we can use,
thus the new version incorporates new call.
Even this version isn't elegant for various reasons, but most notably
because Class.methods would list DBC-methods too. But this is probably minor
thing now (and probably can be hacked easily).
In any case, I'd like to make it clear that I would be really happy to see
Ruby with more or less built-in DBC support (widely used).
- Aleksi