[#96321] parent of TrueClass, FalseClass — "Ara.T.Howard" <Ara.T.Howard@...>

19 messages 2004/04/01
[#96356] Re: parent of TrueClass, FalseClass — matz@... (Yukihiro Matsumoto) 2004/04/02

Hi,

[#96404] Variable names — David King Landrith <dlandrith@...>

About a year ago, I wrote a simple type enforcement library that adds a

33 messages 2004/04/02
[#96406] Re: Variable names — ts <decoux@...> 2004/04/02

>>>>> "D" == David King Landrith <dlandrith@mac.com> writes:

[#96424] Re: Variable names — David King Landrith <dlandrith@...> 2004/04/02

[#96430] Re: Variable names — Dan Doel <djd15@...> 2004/04/02

On Friday 02 April 2004 2:43 pm, David King Landrith wrote:

[#96432] Re: Variable names — David King Landrith <dlandrith@...> 2004/04/02

On Apr 2, 2004, at 3:51 PM, Dan Doel wrote:

[#96447] Learning Ruby, was a C geek... — Nicholas Paul Johnson <nickjohnson@...>

Hello all,

17 messages 2004/04/02

[#96634] Where does the name Rite come from? — Michael Neumann <mneumann@...>

Hi,

15 messages 2004/04/06
[#96642] Re: Where does the name Rite come from? — matz@... (Yukihiro Matsumoto) 2004/04/06

Hi,

[#96652] Re: Where does the name Rite come from? — Eric Hodel <drbrain@...7.net> 2004/04/06

Yukihiro Matsumoto (matz@ruby-lang.org) wrote:

[#96697] Idea: Simplified GTK — Hal Fulton <hal9000@...>

Here's an idea. I've begun implementing it.

74 messages 2004/04/07
[#96699] Re: Idea: Simplified GTK — Chad Fowler <chad@...> 2004/04/07

[#96876] RedCloth bug and suggestion — Jim Menard <jimm@...>

_why_ and fellow RedCloth users,

15 messages 2004/04/09

[#96877] Instiki 0.3.0: Before the Storm — David Heinemeier Hansson <david@...>

What's new in Instiki 0.3.0?

12 messages 2004/04/09

[#97020] test / unit question: facility to mark some tests as "missing" or "incomplete" — "Its Me" <itsme213@...>

I often find myself with some unit tests that run, and several more test

14 messages 2004/04/12

[#97077] Instiki 0.5.0: Getting Serious — David Heinemeier Hansson <david@...>

What's new in Instiki 0.5.0?

16 messages 2004/04/13

[#97083] New Ruby questions... — Jeff Massung <jma@...>

I've just started Ruby a couple days ago (man this is cool). Coming from

14 messages 2004/04/13

[#97109] New Local Variable Scope rule — "Shashank Date" <sdate@...>

In one of Matz's slides at RubyConf ,

33 messages 2004/04/14

[#97134] BlueCloth: a Markdown implementation for Ruby — Michael Granger <ged@...>

Hi all,

17 messages 2004/04/14

[#97201] File locking, portably? — Hugh Sasse Staff Elec Eng <hgs@...>

Searching the web and books for information on this, I can't seem to

12 messages 2004/04/14

[#97277] Hash, ==, key-value comparison — walter@...

Ok,

20 messages 2004/04/15

[#97308] Instiki 0.6.0: Feeds, Exports, Safety, and Compatibility — David Heinemeier Hansson <david@...>

What's new in Instiki 0.6.0?

14 messages 2004/04/15

[#97351] "bad file descriptor" in Win32 DLL — "Christian Kaiser" <chk@...>

Using Ruby 1.81, the DLL (msvcrt-ruby18.dll) sometimes raises an exception

14 messages 2004/04/16

[#97363] BlueCloth 0.0.2 (beta) — Michael Granger <ged@...>

Hi,

18 messages 2004/04/16
[#97399] BlueCloth on Instiki (was Re: [ANN] BlueCloth 0.0.2 (beta)) — David Heinemeier Hansson <david@...> 2004/04/16

> Thanks to all of you that have offered your suggestions and code. I

[#97405] RubyConf 2004 — Ian Macdonald <ian@...>

Hello,

46 messages 2004/04/17
[#97409] Re: RubyConf 2004 — Chad Fowler <chad@...> 2004/04/17

[#97460] Re: RubyConf 2004 — Paul Duncan <pabs@...> 2004/04/17

* Chad Fowler (chad@chadfowler.com) wrote:

[#97465] Re: RubyConf 2004 — Hal Fulton <hal9000@...> 2004/04/17

Paul Duncan wrote:

[#97466] Re: RubyConf 2004 — Chad Fowler <chad@...> 2004/04/17

[#97486] Ruby Installer for Windows 1.8.1-12 — "Curt Hibbs" <curt@...> 2004/04/18

The Ruby Installer 1.8.1-12 for Windows has been released and is now

[#97418] Objects in perl6 (rubyish :) — gabriele renzi <surrender_it@...1.vip.ukl.yahoo.com>

Hi gurus and nubys,

20 messages 2004/04/17

[#97426] $0 is messed up — Simon Strandgaard <neoneye@...>

I have just upgraded to 1.9 16-apr-2004 from 1.9 7-apr-2004.

15 messages 2004/04/17

[#97473] convert yield to proc — Simon Strandgaard <neoneye@...>

How do you guys convert yield to block ?

21 messages 2004/04/18

[#97565] Gateway — "Robert Klemme" <bob.news@...>

34 messages 2004/04/19

[#97628] Instiki 0.7.0: Flavors of Expression — David Heinemeier Hansson <david@...>

What's new in Instiki 0.7.0?

15 messages 2004/04/19

[#97631] proposal: call_up() for use in redefined methods — Mark Hubbart <discord@...>

Hi all,

18 messages 2004/04/19

[#97640] Fox --> GTK ? — Hal Fulton <hal9000@...>

Who has experience converting Fox to GTK and might like to

29 messages 2004/04/19

[#97705] The quest for opensource database... — "Ruby Tuesdays" <NoSpamPlease_rubytuzdaiz@...>

Perhaps you database guru able to suggest what would be a good choice for

35 messages 2004/04/20

[#97743] Setting up a wiki when you don't have root — ptkwt@... (Phil Tomson)

12 messages 2004/04/20

[#97785] Creating bang methods — "Jon Hurst" <jon@...>

(newbie) I can't for my life figure out how to create bang methods. Please

20 messages 2004/04/21

[#97797] rexml: how to get element type? — "Its Me" <itsme213@...>

doc = REXML::Document.new <<EOF

14 messages 2004/04/21

[#97808] binding - how to get current script? — Szymon Drejewicz <drejewic@...>

18 messages 2004/04/21

[#97866] Is Ruby is better than PHP ... — "Useko Netsumi" <usenets_remote_this@...>

or perhaps Java for developing web application?

46 messages 2004/04/21

[#97873] Re: how to get ri/rdoc working for 1.8.1 on Windows? — "John W. Kennedy" <jwkenne@...>

Part 1 is to chdir \Ruby\bin and delete the five *.bat files

41 messages 2004/04/21
[#97910] Re: how to get ri/rdoc working for 1.8.1 on Windows? — "Its Me" <itsme213@...> 2004/04/21

[#97964] Re: how to get ri/rdoc working for [user-installed libraries] — Gavin Sinclair <gsinclair@...> 2004/04/21

On Thursday, April 22, 2004, 4:44:09 AM, Its wrote:

[#97984] Re: how to get ri/rdoc working for [user-installed libraries] — Dave Thomas <dave@...> 2004/04/22

[#98000] Re: how to get ri/rdoc working for [user-installed libraries] — "Gavin Sinclair" <gsinclair@...> 2004/04/22

>

[#97926] Re: how to get ri/rdoc working for 1.8.1 on Windows? — Lothar Scholz <mailinglists@...> 2004/04/21

Hello John,

[#97936] Re: how to get ri/rdoc working for 1.8.1 on Windows? — Dave Thomas <dave@...> 2004/04/21

[#97971] Re: how to get ri/rdoc working for 1.8.1 on Windows? — Jos Backus <jos@...> 2004/04/21

On Thu, Apr 22, 2004 at 05:50:40AM +0900, Dave Thomas wrote:

[#97985] Re: how to get ri/rdoc working for 1.8.1 on Windows? — Dave Thomas <dave@...> 2004/04/22

[#97997] RedCloth 2.0.7 -- A Textile Humane Web Text Generator — why the lucky stiff <ruby-talk@...>

more and more, you've seen it all before (i swear it's slowin down):

12 messages 2004/04/22
[#98008] Re: [ANN] RedCloth 2.0.7 -- A Textile Humane Web Text Generator — David Heinemeier Hansson <david@...> 2004/04/22

> I've wanted this feature to work right for awhile. It took a rewrite

[#98101] Extract all occurences from a text — Michael Weller <michael@...>

Hi!

11 messages 2004/04/23

[#98135] Problem assigning an Array object to an Array-subclass object — "Richard Lionheart" <NoOne@...>

[ I apologize if this is a second post. My earlier one seems to have gotten

29 messages 2004/04/23

[#98177] Psyco — Jim Moy <web@...>

Interesting stuff for Python, is any work like this being done in Ruby?

14 messages 2004/04/23

[#98181] Playing with sockets... — Hal Fulton <hal9000@...>

I'm writing a little expect-like piece of code and trying to test it

16 messages 2004/04/23

[#98281] String#unpack and null-terminated strings — Michael Neumann <mneumann@...>

Hi,

15 messages 2004/04/24

[#98362] How's ruby compare to it older brother python — "Hunn E. Balsiche" <hunnebal@...>

in term of its OO features, syntax consistencies, ease of use, and their

51 messages 2004/04/26
[#98597] Re: How's ruby compare to it older brother python — "Ken Hilton" <kenosis@...> 2004/04/28

Amen, brother.

[#98778] Re: How's ruby compare to it older brother python — "trevor andrade" <trevor.andrade@...> 2004/04/30

I agree that flaming the question is not appropriate and its also bad for

[#98789] Re: How's ruby compare to it older brother python — Dan Doel <djd15@...> 2004/04/30

I'm not saying the topic isn't appropriate. I don't mind the topic, and I find

[#98365] Introducing myself - Sascha Ebach — Sascha Ebach <se@...>

Hello dear Rubyists,

51 messages 2004/04/26
[#98568] Re: Introducing myself - Sascha Ebach — "Josef 'Jupp' Schugt" <jupp@...> 2004/04/27

Hello from Beethoven's home town,

[#98569] Re: Introducing myself - Sascha Ebach — Sascha Ebach <se@...> 2004/04/27

Hello Jupp

[#98570] Re: Introducing myself - Sascha Ebach — Simon Strandgaard <neoneye@...> 2004/04/27

Sascha Ebach <se@hexatex.de> wrote:

[#98753] Re: Introducing myself - Sascha Ebach — "Josef 'Jupp' Schugt" <jupp@...> 2004/04/29

Simon Strandgaard wrote:

[#98762] Re: Introducing myself - Sascha Ebach — Simon Strandgaard <neoneye@...> 2004/04/29

Josef 'Jupp' Schugt <jupp@gmx.de> wrote:

[#98817] Opportunities and pitfalls; was "Introducing myself - Sascha Ebach" — Mike Calder <ceo@...> 2004/04/30

A word of warning from a potential friend. Please don't take this negatively,

[#98847] Re: Opportunities and pitfalls; was "Introducing myself - Sascha Ebach" — Mark Hubbart <discord@...> 2004/04/30

[#98854] Re: Opportunities and pitfalls; was "Introducing myself - Sascha Ebach" — "Curt Hibbs" <curt@...> 2004/04/30

Mark Hubbart wrote:

[#98858] Re: Opportunities and pitfalls; was "Introducing myself - Sascha Ebach" — Mark Hubbart <discord@...> 2004/04/30

[#98366] How do I scale large Ruby web applications? — Sascha Ebach <se@...>

Hi there,

19 messages 2004/04/26

[#98409] Semantics of Multiple Values — Kristof Bastiaensen <kristof@...>

Hi liszt,

25 messages 2004/04/26

[#98435] Approaches to localization? — ptkwt@... (Phil Tomson)

I'm developing a GUI app using Ruby and FLTK. One of the requirements

22 messages 2004/04/26

[#98714] Ruby under Suse Linux — Mike Calder <ceo@...>

Hi.

14 messages 2004/04/29

[#98750] coerce(), what protocol to implement it — Jean-Hugues ROBERT <jean_hugues_robert@...>

Hi,

14 messages 2004/04/29

[#98758] File.expand_path(__FILE__) — John Platte <john.platte@...>

I'm having a problem with File.expand_path(__FILE__) after a chdir.

30 messages 2004/04/29

[#98796] SciTE Ruby Lexer — Kaspar Schiess <eule@...>

-----BEGIN PGP SIGNED MESSAGE-----

13 messages 2004/04/30

[#98820] ruby CVS can't use shared libs on NetBSD — Dick Davies <rasputnik@...>

11 messages 2004/04/30

[#98832] def [](v) xx; return yy; end # returned value is ignored !? — Jean-Hugues ROBERT <jean_hugues_robert@...>

Hi,

27 messages 2004/04/30

[#98851] Lazy evaluation — Michael Neumann <mneumann@...>

Hi,

51 messages 2004/04/30
[#98871] Re: Lazy evaluation — Jean-Hugues ROBERT <jean_hugues_robert@...> 2004/04/30

At 03:45 01/05/2004 +0900, you wrote:

[#98875] Re: Lazy evaluation — Florian Gross <flgr@...> 2004/04/30

Jean-Hugues ROBERT wrote:

[#98896] Re: Lazy evaluation (evil) — ptkwt@... (Phil Tomson) 2004/05/01

In article <c6uh31$gaq2i$1@ID-7468.news.uni-berlin.de>,

[#98913] Re: Lazy evaluation (evil) — Florian Gross <flgr@...> 2004/05/01

Phil Tomson wrote:

[#98917] Re: Lazy evaluation (evil) — ts <decoux@...> 2004/05/01

>>>>> "F" == Florian Gross <flgr@ccan.de> writes:

[#98919] Re: Lazy evaluation (evil) — Florian Gross <flgr@...> 2004/05/01

ts wrote:

Re: Semantics of Multiple Values (updated RCR)

From: Kristof Bastiaensen <kristof@...>
Date: 2004-04-27 13:44:11 UTC
List: ruby-talk #98519
Hi, here is my update RCR.
It adds a unify operator := , multiple variables
comparison, and some more goodies (:-)

TITLE

Semantics of Multiple Values

ABSTRACT

This RCR describes a possible change in semantics of multiple values,
by making them equivalent to argument passing.

PROBLEM

Currently Array's are used as multiple variables, which creates some
ambiguous or unclear situations. i.e.:

a, b, c = x #where x = [1, 2, 3]

PROPOSAL

*  model
========

This proposal favors the use of multiple values as inherent to the
language, rather than a separate data-type. It is based on the
observation that returning (multiple) values is similar to passing
arguments. This is even more apparent when using continuations.

for example:

  def mymethod(a, b)
    return a + 1, b + 2, a
  end

  x, y, z = mymethod(1, 2)

would mean this

  def mymethod(a, b)
    callcc { |cc| cc.call(a + 1, b + 2, a) }
  end

  #(the following isn't legal syntax, but just to show the meaning)
  mymethod(1, 2) |x, y, z|

basicly the expression:

  x, y, z = <expression returning multiple arguments>

will pass the multiple arguments to the given variables like in
function argument passing.

The difference with argument passing in functions are the following:


*   no new scope is created, bound variable are just replaced
    
*   there is no strict checking if the number of arguments is correct
    
*  new constructs and method
============================

-  new constructs:
------------------
because Array's are now treated different from multiple arguments I
would like to suggest the following construct:

*[a, b] = [1, 2]

meaning the same as

a, b = *[1, 2]

but useful inside blocks that pass arrays. Optionally allow:

*[a, *b] = [1, 2, 3]
=> a == 1, b == [2, 3]

or perhaps with hashes:

*{:a => c, :b => d} = {a: 1, b: 2}
=> c == 1; b == 2

*{:a => c, *b} = {a: 1, b: 2, c: 3}
=> c = 1, b = {:b => 2, :c => 3}

these constructs would work both in argument passing and variable
assignment.

-  new method:
--------------
(for now called values) method returning multiple values as an array

def values(*params)
  params
end

values(1, 2, 4) => [1, 2, 4]


*  variable assigment examples:
===============================

def multi
  return 1, 2, 3
end

#multi may be replaced everywhere with (1, 2, 3)

x = multi
=> x == 1

x, y = multi
=> x == 1, y == 2

x, y = multi, 3
=> x == 1, y == 3

(x, y), z = multi, 4
=> x == 1, y == 2, z == 4

(*[x, y], z), p = ([1, 2, 3], 4, 5), 6
=> x == 1, y == 2, z == 4, p == 6

*  calling to functions
=======================

I would recommend the following behavior:

*   when passing multiple values from one function to another, spread
    the values in a relaxed way (don't check the number of parameters).
    When used with an explicit list, use strict checking.
    
        def func1(a) a end
    
        func1(multi)
        => 1
    
        func1(1, 2, 3)
        => error
    
        def func2(*a) a end
    
        func2(multi)
        => [1, 2, 3]
    
        def func3(a, b) [a, b] end
    
        func3(multi)
        => [1, 2]
    
*   when passing nested multiple variables just pass the first element
    
        func3(multi, 4)
        => [1, 4]
    
        func3((1, 2), 4)
        => [1, 4]
        #or maybe signal error?  not sure about this one
    
        func2(multi, 4)
        => [1, 4]
    
        func2(*values(multi), 4)
        => [1, 2, 3, 4]

*   allow nested multiple values in method definitions
    
        def func4(a, (b, c), d)
          [a, b, c, d]
        end
    
        func4(1, 2, 3)
        => [1, 2, nil, 3]
        #maybe raise an error?
    
        func4(1, (2, 3), 4)
        => [1, 2, 3, 4]
    
        func4(1, multi, 4)
        => [1, 1, 2, 4]
    
        def func5(a, *[b, c], d)
    
        func5(1, 2, 3)
        => [1, 2, nil, 3]
    
        func5(1, [2, 3], 4)
        => [1, 2, 3, 4]
    
        func5(1, (2, 3), 4)
        => [1, 2, nil, 4]
        # (what will happen here is only the 2 from (2, 3) will be passed
        # to func5, converted into an Array, and passed to b
      
*  Making argument passing and multiple assignment more similar
===============================================================

There may be other features of multiple assignment that could be taken
from argument passing, for example hash parameters(?). Other may not
be appropriate (i.e. blocks).

example:

def func6
  return 4, b: 5, c:6
end

a, b:, **keys = func6
=> a == 4; b == 5; keys == {:c=>6}

*  Comparing multiple values
============================

Multiple values may be compared using comparison operators. For
example:

a, b, (c, d), e == 1, 2, (3, 4), 5

would mean

a == 1 && b == 2 && c == 3 && d == 4 && e == 5

with the exception that in the first, all the expressions will be
evaluated. It would return false if the number of arguments to the left
aren't equal to the ones to the right.

It would be also useful to be able to compare with the operator ===, so
multiple values can be compared inside case statements. When
comparing one value with multiple values, return true if at least on
matches.

1 === (1, 2, 3)
=> true
#same as 1 === 1 or 1 === 2 or 1 === 3

case a, b
when 1, 2
  puts "is 1 and 2"
when (2, 3), 4
  puts "is (2 or 3) and 4"
end

*  Unify operator
=================

This section descibes a unify operator, that works like a combination
of comparison and assignment (similar to unify in Prolog). The
expression

a, b, c := multi

would assign the lefthand values, if unbound (or nil?) to the
corresponding righthand value, and if bound (or an immediate value)
compare if they are equal. If one of the comparisons would return false,
no assignment will be done.

examples:

a, b, c := 1, 2
=>true  (a == 1, b == 2, c == unbound or nil)

a, b := 1, 3
=>false (a == 1, b == 2, c == unbound or nil)

a, c := 1, 2
=>true (a == 1, b == 2, c == 2)

def amethod
  return true, 1, 2,
end
true, x, y := amethod
=>true (x == 1, y == 2)

ANALYSIS

The changes I proposed here provide a consistent way of using multiple
values, by using (mostly) the same semantic model for assignment as for
argument passing, without losing any power to the language. The major
drawback is that programs written using the old semantics may not work
correctly, (but the current behavior will change anyway?). It also
descibes some other extensions to the language that may or may not be
useful.

IMPLEMENTATION

These changes will have to be made to the core of the language. Some
features I described above may be to hard to implement or decrease
performance (nested multiple values in method definitions,
assigning variables from hash elements), and therefor disallowed.

In This Thread