[#32009] merging nokogiri to ext/ — Aaron Patterson <aaron@...>

I would like to merge nokogiri to ext for the 1.9.3 release. I spoke to

82 messages 2010/09/02
[#32010] Re: merging nokogiri to ext/ — "U.Nakamura" <usa@...> 2010/09/02

Hello,

[#32012] Re: merging nokogiri to ext/ — Ryan Davis <ryand-ruby@...> 2010/09/02

[#32030] Re: merging nokogiri to ext/ — "NARUSE, Yui" <naruse@...> 2010/09/03

Hi,

[#32033] Re: merging nokogiri to ext/ — "NARUSE, Yui" <naruse@...> 2010/09/03

2010/9/3 NARUSE, Yui <naruse@airemix.jp>:

[#32155] Re: merging nokogiri to ext/ — Yusuke ENDOH <mame@...> 2010/09/08

Currently, we're discussing three different topics:

[#32189] Re: merging nokogiri to ext/ — Aaron Patterson <aaron@...> 2010/09/09

On Thu, Sep 09, 2010 at 01:40:34AM +0900, Yusuke ENDOH wrote:

[#32056] [Ruby 1.8-Bug#3788][Open] URI cannot parse IPv6 addresses propertly — Adam Majer <redmine@...>

Bug #3788: URI cannot parse IPv6 addresses propertly

16 messages 2010/09/04

[#32110] Ruby 2.0 Wiki/Wish-list? — Joshua Ballanco <jballanc@...>

Hi all,

41 messages 2010/09/07
[#32114] Re: Ruby 2.0 Wiki/Wish-list? — "NARUSE, Yui" <naruse@...> 2010/09/08

2010/9/8 Joshua Ballanco <jballanc@gmail.com>:

[#32117] Re: Ruby 2.0 Wiki/Wish-list? — Joshua Ballanco <jballanc@...> 2010/09/08

On Sep 7, 2010, at 5:21 PM, NARUSE, Yui wrote:

[#32143] Re: Ruby 2.0 Wiki/Wish-list? — Roger Pack <rogerdpack2@...> 2010/09/08

> So, for example, a few things I've wanted for a long time:

[#32135] [Ruby-Bug#3802][Open] freeaddrinfo not found in WS2_32.dll — Thomas Volkmar Worm <redmine@...>

Bug #3802: freeaddrinfo not found in WS2_32.dll

16 messages 2010/09/08

[#32154] Making custom_lambda() work — Magnus Holm <judofyr@...>

A tiny suggestion for how we could make it possible to call lambdas

15 messages 2010/09/08
[#32159] Re: Making custom_lambda() work — Nikolai Weibull <now@...> 2010/09/08

On Wed, Sep 8, 2010 at 18:21, Magnus Holm <judofyr@gmail.com> wrote:

[#32156] Can we convert the standard library to gems? — James Edward Gray II <james@...>

Taken from the bundle Nokogiri thread:

98 messages 2010/09/08
[#32161] Re: Can we convert the standard library to gems? — Marcus Rueckert <darix@...> 2010/09/08

On 2010-09-09 01:45:43 +0900, James Edward Gray II wrote:

[#32166] Re: Can we convert the standard library to gems? — James Edward Gray II <james@...> 2010/09/08

On Sep 8, 2010, at 12:03 PM, Marcus Rueckert wrote:

[#32173] Re: Can we convert the standard library to gems? — Marcus Rueckert <darix@...> 2010/09/08

On 2010-09-09 02:54:26 +0900, James Edward Gray II wrote:

[#32249] Re: Can we convert the standard library to gems? — Aaron Patterson <aaron@...> 2010/09/09

On Thu, Sep 09, 2010 at 05:26:54AM +0900, Marcus Rueckert wrote:

[#32278] Re: Can we convert the standard library to gems? — Lucas Nussbaum <lucas@...> 2010/09/10

On 10/09/10 at 02:41 +0900, Aaron Patterson wrote:

[#32162] Re: Can we convert the standard library to gems? — Yusuke ENDOH <mame@...> 2010/09/08

Hi,

[#32216] Re: Can we convert the standard library to gems? — Ryan Davis <ryand-ruby@...> 2010/09/09

[#32229] Re: Can we convert the standard library to gems? — Yusuke ENDOH <mame@...> 2010/09/09

Hi,

[#32260] Re: Can we convert the standard library to gems? — Ryan Davis <ryand-ruby@...> 2010/09/09

[#32275] Re: Can we convert the standard library to gems? — Urabe Shyouhei <shyouhei@...> 2010/09/10

I'm off today so sorry if I missed some mails.

[#32293] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/10

Urabe,

[#32316] Re: Can we convert the standard library to gems? — Urabe Shyouhei <shyouhei@...> 2010/09/11

(2010/09/10 23:48), James Cox wrote:

[#32322] Re: Can we convert the standard library to gems? — James Tucker <jftucker@...> 2010/09/11

[#32335] Re: Can we convert the standard library to gems? — Urabe Shyouhei <shyouhei@...> 2010/09/12

I'm at an airport back to my home so in short,

[#32343] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/12

On Sun, Sep 12, 2010 at 6:51 AM, Urabe Shyouhei <shyouhei@ruby-lang.org> wr=

[#32382] Re: Can we convert the standard library to gems? — Urabe Shyouhei <shyouhei@...> 2010/09/14

(2010/09/13 3:54), James Cox wrote:

[#32383] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/14

On Tue, Sep 14, 2010 at 12:37 PM, Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:

[#32393] Re: Can we convert the standard library to gems? — Urabe Shyouhei <shyouhei@...> 2010/09/15

How difficult to make myself understood in English.

[#32396] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/15

On Wed, Sep 15, 2010 at 1:43 AM, Urabe Shyouhei <shyouhei@ruby-lang.org> wr=

[#32399] Re: Can we convert the standard library to gems? — Yusuke ENDOH <mame@...> 2010/09/15

Hi,

[#32400] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/15

On Wed, Sep 15, 2010 at 12:07 PM, Yusuke ENDOH <mame@tsg.ne.jp> wrote:

[#32401] Re: Can we convert the standard library to gems? — Marcus Rueckert <darix@...> 2010/09/15

On 2010-09-16 01:42:39 +0900, James Cox wrote:

[#32402] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/15

On Wed, Sep 15, 2010 at 1:35 PM, Marcus Rueckert <darix@opensu.se> wrote:

[#32411] Re: Can we convert the standard library to gems? — Marcus Rueckert <darix@...> 2010/09/15

On 2010-09-16 03:36:56 +0900, James Cox wrote:

[#32412] Re: Can we convert the standard library to gems? — James Cox <james@...> 2010/09/16

On Wednesday, September 15, 2010, Marcus Rueckert <darix@opensu.se> wrote:

[#32414] Re: Can we convert the standard library to gems? — Lucas Nussbaum <lucas@...> 2010/09/16

On 16/09/10 at 11:02 +0900, James Cox wrote:

[#32248] Replacing stdlib Date with C version — Jeremy Evans <code@...>

I've recently been working on a replacement for the stdlib Date class,

15 messages 2010/09/09

[#32290] [Ruby 1.9.2-Backport#3818][Open] Seg fault with ruby tmail and ruby 1.9.2 — Karl Baum <redmine@...>

Backport #3818: Seg fault with ruby tmail and ruby 1.9.2

10 messages 2010/09/10

[#32453] Why doesn’t Enumerable define a #last method? — Nikolai Weibull <now@...>

Hi!

9 messages 2010/09/17

[#32454] [Ruby 1.9-Feature#3845][Open] "in" infix operator — Yusuke Endoh <redmine@...>

Feature #3845: "in" infix operator

20 messages 2010/09/17
[#32489] Re: [Ruby 1.9-Feature#3845][Open] "in" infix operator — Benoit Daloze <eregontp@...> 2010/09/21

On 17 September 2010 12:30, Yusuke Endoh <redmine@ruby-lang.org> wrote:

[#32529] [Ruby 1.9-Bug#3869][Open] Logger#log does not handle or escape new-line characters. — Hal Brodigan <redmine@...>

Bug #3869: Logger#log does not handle or escape new-line characters.

9 messages 2010/09/23

[#32585] Proposal for Optional Static Typing for Ruby — Martin Pilkington <pilky@...>

Hi,

47 messages 2010/09/27
[#32588] Re: Proposal for Optional Static Typing for Ruby — Yukihiro Matsumoto <matz@...> 2010/09/27

Hi,

[#32592] Re: Proposal for Optional Static Typing for Ruby — Martin Pilkington <pilky@...> 2010/09/28

Hi Matz

[#32595] Re: Proposal for Optional Static Typing for Ruby — Asher <asher@...> 2010/09/28

Martin,

[#32611] Re: Proposal for Optional Static Typing for Ruby — Loren Segal <lsegal@...> 2010/09/28

Hi,

[#32628] Re: Proposal for Optional Static Typing for Ruby — Eleanor McHugh <eleanor@...> 2010/09/29

It strikes me that much of the premise behind this thread is misguided =

[#32634] [Ruby 1.9-Bug#3889][Open] Incorrectly detected i686-w64-mingw32 as x64-mingw — Luis Lavena <redmine@...>

Bug #3889: Incorrectly detected i686-w64-mingw32 as x64-mingw

21 messages 2010/09/29

[ruby-core:32661] Re: Proposal for Optional Static Typing for Ruby

From: Eleanor McHugh <eleanor@...>
Date: 2010-09-30 23:52:05 UTC
List: ruby-core #32661
On 30 Sep 2010, at 16:27, Loren Segal wrote:
> We seem to be talking about two very different things here. The fact =
that Ruby takes code blocks as parameters doesn't change the fact that =
you can still insert type annotations for an existing method. "Anaemic" =
is one thing, but we're not talking about a feature that will be useful =
in *all* cases, simply a feature that will have high impact on the =
majority of existing code. While there are many tricks in Ruby, and many =
frameworks use these tricks in limited areas, the majority of Ruby code =
still tends to be standard every day non-metaprogrammed Ruby, which =
could easily benefit from these annotations.
>=20
>>> You can replace the method itself (alias_method), but because type =
annotations would be attached to the methods themselves, the type =
information would be replaced too.
>> As I mentioned in my previous reply to Martin, the compilation =
boundary you are tacitly assuming exists is in fact no such thing. You =
therefore have to consider that any use of module_eval, class_eval, eval =
or class opening may result in type annotations coming into existence at =
an arbitrary point during program execution and likewise being =
discarded.
>=20
> I'm not making any assumption about compilation boundaries, and I very =
much know that Ruby is known for making run-time changes to program =
structures. Fortunately, *_eval has no effect on whether or not type =
information is provided. Again, type annotations are not only meant for =
"compile-time", and I never made that claim. I can easily consider that =
annotations would come into existence at an arbitrary point during =
program execution. That fact has no bearing on the benefits. I ask you: =
what's wrong with that?

It appears that this proposal would require the runtime to add a new =
layer to for checking the posited nominal type annotations which =
perforce could be invoked at any point during program execution and =
indeed possibly repeatedly during the lifetime of that execution. =
Bearing in mind that nominal type is not the primary determinant of =
object validity or code correctness in Ruby, and that there are already =
existing methods for confirming nominal type identity (more of that =
anon) it's not at all clear that type annotations on this model would be =
a noticeable improvement.

>>> Therefore, you can consider any type annotations to a method =
declaration to be something of a "contract" for using the method. Of =
course you can misuse types here (specify something too limiting, or =
something completely wrong), but it wouldn't be fair to consider the =
misused cases first. Do you have any examples of where meta-programming =
would "repurpose" an object such that existing type information would be =
completely invalid?
>> For some classic examples I recommend studying various of _why?'s =
projects, or at least pondering some of the more unusual tricks in his =
(Poignant) Guide which is an excellent exploration of how to really use =
Ruby's type system to your advantage. On a more mundane level, tricks =
like this exist inside various versions of Rails and many other popular =
projects.
>>=20
>=20
> Do you have a specific example? It's easy to say "they're out there, =
just look". Again, I should point out that I'm aware what things can be =
done with Ruby at run-time, but that is not the purpose of this =
discussion. I'll ask again: what Ruby idiom or meta-programming could be =
used in order to make an existing (and still existing) type annotation =
no longer useful for: 1) documentation, 2) optional run-time type =
checking, 3) method overloading, 4) run-time compiler optimization?

Unfortunately runtime mutability is very much at the core of this =
discussion as it carries the implicit assumption that the annotations =
must be checked dynamically as the state of Ruby's type-space changes. =
Not only because the method possessing the annotation might change, but =
because the type to which the annotation refers may itself change or =
disappear. To some extent it's similar to the difference between =
Classical mechanics, where light is either a wave or a particle and =
behaves according to certain macroscopic expectations, contrasted with =
Quantum mechanics where you look beneath the surface and realise that =
such distinctions are really poor approximations of a much richer and =
yet less deterministic reality.

With Ruby you're free to play with the raw type-space in its full glory, =
and that introduces certain fundamental limitations on just how much you =
can definitively say about that type-space at any given point in time. =
Annotations might well be useful markers in some circumstances, but just =
as in QM an observation causes the quantum world to collapse into =
classical reality so with Ruby you run the risk of collapsing back into =
a static nominal type system with all that entails.

I appreciate this is a very high-level analysis so I'll bring this down =
to earth.

In essence every Ruby object is first and foremost an instance of its =
own singleton class backed up by a superposition of classes, =
meta-classes and modules from which that singleton class draws its =
specific character. Any of these elements might be reloaded or redefined =
at any time using appropriate hooks in the runtime. Duck-typing allows =
us to conveniently overlook this fact by focusing on what usually =
matters to us when we're reasoning about our code: whether or not an =
object responds to the messages we're interested in sending it, and how =
to elegantly recover when in fact that message is inappropriate - either =
through runtime exception handling or by capturing the message with =
method_missing and performing some fallback operation.

In this model runtime type checking and method overloading can already =
be performed with Object::kind_of?, but the type guarantee is localised =
to a particular expression in the code and subsequent expressions may =
change the nominal type of the object in question. As such it's a =
brittle idiom because it captures only a snapshot of the full system =
state.

It's possible that Ruby's semantics could be expanded to use kind_of? =
individually or in combination as a guard expression, freezing a given =
object for the duration of the expression so that it becomes type =
invariant and allowing optimised code to be produced. The same pattern =
could also likely be used with responds_to? to optimise method calls. =
Both of these changes would seem more in keeping with the Ruby Way than =
explicit type annotations as proposed, although I'd be loathe to see =
either implemented without considerable proof that they would indeed =
benefit Ruby and not lead to the brittleness and fragility so often =
associated with nominal typing. Otherwise Ruby would become a less =
expressive language to the detriment of all of us.


Ellie

Eleanor McHugh
Games With Brains
http://feyeleanor.tel
----
raise ArgumentError unless @reality.responds_to? :reason=


In This Thread