[#111472] [Ruby master Bug#19274] Error installing ruby 3.2.0 on RH 8 — "aalllop (Alberto Allegue) via ruby-core" <ruby-core@...>
Issue #19274 has been reported by aalllop (Alberto Allegue).
5 messages
2022/12/28
[#111508] Data support for versions before 3.2.0 — Eustáquio Rangel via ruby-core <ruby-core@...>
I was wondering that every piece of code (gems, etc) that use the new Data =
3 messages
2022/12/29
[ruby-core:111302] [Ruby master Feature#8223] Make Matrix more omnivorous.
From:
"hsbt (Hiroshi SHIBATA)" <noreply@...>
Date:
2022-12-15 08:48:00 UTC
List:
ruby-core #111302
Issue #8223 has been updated by hsbt (Hiroshi SHIBATA).
Status changed from Open to Third Party's Issue
`matrix` has been extracted to https://github.com/ruby/matrix.
----------------------------------------
Feature #8223: Make Matrix more omnivorous.
https://bugs.ruby-lang.org/issues/8223#change-100669
* Author: Anonymous
* Status: Third Party's Issue
* Priority: Normal
* Assignee: marcandre (Marc-Andre Lafortune)
----------------------------------------
Let's imagine a class Metre, whose instances represent physical magnitudes =
in metres.
class Metre
attr_reader :magnitude
def initialize magnitude; @magnitude =3D magnitude end
def to_s; magnitude.to_s + ".m" end
end
Let's say that metres can be multiplied by a number:
class Metre
def * multiplicand
case multiplicand
when Numeric then Metre.new( magnitude * multiplicand )
else
raise "Metres can only be multiplied by numbers, multiplication b=
y #{multiplicand.class} attempted!"
end
end
end
And that they can be summed up with other magnitudes in metres, but, as a f=
eature,
not with numbers (apples, pears, seconds, kelvins...).
class Metre
def + summand
case summand
when Metre then Metre.new( magnitude + summand.magnitude )
else
raise "Metres can only be summed with metres, summation with #{su=
mmand.class} attempted!"
end
end
end
Now with one more convenience constructor Numeric#m:
class Numeric
def m; Metre.new self end
end
We can write expressions such as
3.m + 5.m
#=3D> 8.m
3.m * 2
#=3D> 6.m
And with defined #coerce:
class Metre
def coerce other; [ self, other ] end
end
Also this expression is valid:
2 * 3.m
#=3D> 6.m
Before long, the user will want to make a matrix of magnitudes:
require 'matrix'
mx =3D Matrix.build 2, 2 do 1.m end
#=3D> Matrix[[1.m, 1.m], [1.m, 1.m]]
It works, but the joy does not last long. The user will fail miserably if z=
e wants to perform matrix multiplication:
cv =3D Matrix.column_vector [1, 1]
mx * cv
#=3D> RuntimeError: Metres can only be summed with metres, summation wi=
th Fixnum attempted!
# where 2.m would be expected
In theory, everything should be O.K., since Metre class has both metre summ=
ation and multiplication by a number defined. The failure happens due to th=
e internal workings of the Matrix class, which assumes that the elements ca=
n be summed together with numeric 0. But it is a feature of metres, that th=
ey are picky and allow themselves to be summed only with other Metre instan=
ces.
In my real physical units library that I have written, I have solved this p=
roblem by
defining an =FCber zero object that produces the expected result, when summ=
ed with objects, that would otherwise not lend themselves to summation with=
ordinary numeric 0,
and patching the Matrix class so that it uses this =FCber zero instead of t=
he ordinary one.
But this is not a very systematic solution. Actually, I think that the Matr=
ix class would be more flexible, if, instead of simply using 0, it asked th=
e elements of the matrix what their zero is, as in:
class << Metre
def zero; new 0 end
end
But of course, that would also require that ordinary numeric classes can te=
ll what their zero is, as in:
def Integer.zero; 0 end
def Float.zero; 0.0 end
def Complex.zero; Complex 0.0, 0.0 end
# etc.
I think that this way of doing things (that is, having #zero methods in num=
eric classes and making Matrix actually require the class of the objects in=
it to have public class method #zero defined) would make everything more c=
onsistent and more algebra-like. I am having this problem for already almos=
t half a year, but I only gathered courage today to encumber you guys with =
this proposal. Please don't judge me harshly for it. I have actually alread=
y seen something like this, in particular with bigdecimal's Jacobian (http:=
//ruby-doc.org/stdlib-2.0/libdoc/bigdecimal/rdoc/Jacobian.html), which requ=
ires that the object from which the Jacobian is computed implements methods=
#zero, #one, #two etc. Sorry again.
--=20
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- [email protected]
To unsubscribe send an email to [email protected]
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-c=
ore.ml.ruby-lang.org/