Phil Tomson wrote:
Indeed. I understand exactly, but I suspect there are about 3 of us
on
this list who have done hardware design (or used HDLs). I think
perhaps
we're having a hard time conveying what we're trying to do and how a
':='
operator could really help. Maybe we need to come up with a more
general use
for a ':=' operator that everyone can relate to. I'm sure some
examples exist.
I have an simple but nice example which was found when I prototyped
crypto algorithms.
Modular mathematics are common operations in public key encryption. Say
that "Zx" is a Class represents the group of integer [0,x-1], whose
math ops are modular reduction to x after do integer operation. e.g.
class Z31 # should implemented dynamically, just for sample
Modulus=31
def initialize(v=0)
@value=v.to_i % Modulus
end
def to_i
@value
end
def :=(v)
@value=v.to_i % Modulus
end
def +(v)
(@value+v) % Modulus
end
# .. some methods
end
c = Z31.new #=> 0
a = Z31.new(120) #=> 27
b = Z31.new(a) #=> 27
c := a #=> 27
c := a + b #=> 31
c := 100 #=> 7
Without ":=", you have to write "c=Z31.new(100)" whenever you want
assign an integer to a variable and Z31.+() must return a new Z31
object (I don't know whether this will affect the performance when
deals with Bignum). But we need no new objects indeed!
With ":=", you can write crypto algorithm programs in very clear and
natural way, which are just pseudo-codes in eyes of the person who
don't know ruby.