[#8566] Visions for 2001/1.7.x development? — Robert Feldt <feldt@...>

Hi matz and other Ruby developers,

18 messages 2001/01/03
[#8645] Re: Visions for 2001/1.7.x development? — matz@... (Yukihiro Matsumoto) 2001/01/04

Hi,

[#8580] bug?? — jmichel@... (Jean Michel)

I don't understand the following behaviour:

19 messages 2001/01/03

[#8633] Interesting Language performance comparisons - Ruby, OCAML etc — "g forever" <g24ever@...>

13 messages 2001/01/04

[#8774] No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...>

So, why not include Comparable in Array by default? It shouldn't have any

28 messages 2001/01/07
[#8779] Re: No :<, :>, etc. methods for Array — matz@... (Yukihiro Matsumoto) 2001/01/07

Hi,

[#8780] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

matz@zetabits.com (Yukihiro Matsumoto) wrote:

[#8781] Re: No :<, :>, etc. methods for Array — gotoken@... (GOTO Kentaro) 2001/01/07

In message "[ruby-talk:8780] Re: No :<, :>, etc. methods for Array"

[#8782] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

[#8829] Sandbox (again) — wys@... (Clemens Wyss)

Hi,

20 messages 2001/01/08
[#8864] Re: Sandbox (again) — Clemens Hintze <c.hintze@...> 2001/01/08

On 8 Jan, Clemens Wyss wrote:

[#8931] String confusion — Anders Bengtsson <ndrsbngtssn@...>

Hello everyone,

21 messages 2001/01/09
[#8937] Re: String confusion — matz@... (Yukihiro Matsumoto) 2001/01/09

Hi,

[#8953] Please remove account from files — "Thomas Daniels" <westernporter@...>

Please take my e-mail address from your files and "CANCEL" my subscription to "Ruby-Talk". Ruby is not right for what I do. The "Bulk Mail" is overwhelming. Please, no more e-mail! Thank you! yours truly, Stan Daniels

14 messages 2001/01/09
[#8983] Re: Please remove account from files — John Rubinubi <rubinubi@...> 2001/01/10

On Wed, 10 Jan 2001, Thomas Daniels wrote:

[#9020] time to divide -talk? (was: Please remove account from files) — Yasushi Shoji <yashi@...> 2001/01/10

At Wed, 10 Jan 2001 14:23:30 +0900,

[#9047] Re: time to divide -talk? (was: Please remov e account from files) — Aleksi Niemel<aleksi.niemela@...>

Yasushi Shoji:

27 messages 2001/01/10
[#9049] Re: time to divide -talk? — Yasushi Shoji <yashi@...> 2001/01/10

At Thu, 11 Jan 2001 00:20:45 +0900,

[#9153] what about this begin? — Anders Strandl Elkj誡 <ase@...> 2001/01/11

[#9195] Re: Redefining singleton methods — ts <decoux@...>

>>>>> "H" == Horst Duch=EAne?= <iso-8859-1> writes:

10 messages 2001/01/12

[#9242] polymorphism — Maurice Szmurlo <maurice@...>

hello

73 messages 2001/01/13

[#9279] Can ruby replace php? — Jim Freeze <jim@...>

When I read that ruby could be used to replace PHP I got really

15 messages 2001/01/14

[#9411] The Ruby Way — "Conrad Schneiker" <schneiker@...>

As a member of the "Big 8" newsgroups, "The Ruby Way" (of posting) is to

15 messages 2001/01/17

[#9462] Re: reading an entire file as a string — ts <decoux@...>

>>>>> "R" == Raja S <raja@cs.indiana.edu> writes:

35 messages 2001/01/17
[#9465] Re: reading an entire file as a string — Dave Thomas <Dave@...> 2001/01/17

raja@cs.indiana.edu (Raja S.) writes:

[#9521] Larry Wall INterview — ianm74@...

Larry was interviewed at the Perl/Ruby conference in Koyoto:

20 messages 2001/01/18
[#10583] Re: Larry Wall INterview — "greg strockbine" <gstrock@...> 2001/02/08

Larry Wall's interview is how I found out

[#9610] Re: 101 Misconceptions About Dynamic Languages — "Ben Tilly" <ben_tilly@...>

"Christian" <christians@syd.microforte.com.au> wrote:

13 messages 2001/01/20

[#9761] Re: 101 Misconceptions About Dynamic Languages — ts <decoux@...>

>>>>> "C" == Christoph Rippel <crippel@primenet.com> writes:

16 messages 2001/01/23

[#9792] Ruby 162 installer available — Dave Thomas <Dave@...>

15 messages 2001/01/24

[#9958] Re: Vim syntax files again. — "Conrad Schneiker" <schneik@...>

Hugh Sasse wrote:

14 messages 2001/01/26
[#10065] Re: Vim syntax files again. — Hugh Sasse Staff Elec Eng <hgs@...> 2001/01/29

On Sat, 27 Jan 2001, Conrad Schneiker wrote:

[#9975] line continuation — "David Ruby" <ruby_david@...>

can a ruby statement break into multiple lines?

18 messages 2001/01/27
[#9976] Re: line continuation — Michael Neumann <neumann@...> 2001/01/27

On Sat, 27 Jan 2001, David Ruby wrote:

[#9988] Re: line continuation — harryo@... (Harry Ohlsen) 2001/01/28

>A statement break into mutliple lines if it is not complete,

[ruby-talk:8918] Re: No :<, :>, etc. methods for Array

From: Aleksi Niemel<aleksi.niemela@...>
Date: 2001-01-09 12:15:46 UTC
List: ruby-talk #8918
Hello,

At least David Alan Black and Ben Tilly have been conversating, the latter's
last comment being: 

> Say modules called ArrayInterface, HashInterface and
> StringInterface.
>
> If you want to use it you would have to write []= and so
> on, but the so-on to get the whole interface would be much
> smaller than it would be now.

Ok. I've been following this thread with great interest, but I've been
somewhat lost. That's mostly due to my quite limited knowledge of Perl Tying
concept. I always thought it's quite simple, but it's referred everywhere as
pure magic. Now I guess I got on the map again.

So if I understand correctly we would like to have (sorry being wordy, I
just wanted to be clear):

module StandardHashClassMethodInterface
  def [];      end
  def new;     end
end

module StandardHashInstanceMethodInterface
  def [];       end  # alias fetch
  def []=;      end  # alias store
  def delete;   end
  def keys;     end  # or first_key, next_key iterators
                     # which is probably better
  def has_key?; end  # alias key? and
                     # include? (which is in Enumerable too)
                     # OTOH, this could be defined in terms of 
                     # Hash#keys, but we'd lose O(1) look-up
  def rehash;   end
end

module StandardHashConvenienceInterface
=begin
  Convenience methods can be described in terms of standard
  instance method interface.

  In most cases one would like to optimize some of these methods
  by redefining them.

  ==
  clear
  default
  default=
  delete_if
  each
  each_key
  each_pair
  each_value
  empty?
  has_value?
  include?
  index
  indexes
  indices
  invert
  key?
  length
  member?
  reject
  reject!
  replace
  shift
  size
  sort
  to_a
  to_s
  update
  value?
  values 
=end
end

And then our current hash and all user defined hashes could be done by
saying:

  class HashAlike
    include StandardHashInstanceMethodInterface
    # and by defining 6 or 7 methods the interface *requires*

    include Enumerable
    # and by redefining methods for speed if needed
    # like include? for Hash

    include StandardHashConvenienceInterface
    # and by redefining methods for speed if needed
  end

Ben, is this explicit separation and grouping of methods to interfaces
(which might be expressed by default in terms of other interfaces) what you
have in mind?

If so, then we might proceed to define interfaces for Strings and Arrays,
and what else needed.

If I understand the underlying concept correctly, by imposing some more
structure to current classes, and keeping eye on backwards compatibility, we
ease up documentation of current behaviour and implementation of user made
FooAlike -datastructures. If we get Perl's TIE behaviour as a bonus, this is
surely the way to go.

This discussion reminds me of the recent String as IO (or the otherway
round) thread. IIRC, the end result was that the APIs should be defined more
clearly and then masquerading classes to act like other classes would be
trivial. Aren't we approach that solution?

	- Aleksi

In This Thread

Prev Next