Two standard libraries?

Chris Nicholson-Sauls ibisbasenji at gmail.com
Sun Jul 29 13:53:25 PDT 2007


renoX wrote:
> Chris Nicholson-Sauls a écrit :
>> renoX wrote:
>>> Steve Teale a écrit :
>>>> Sean Kelly Wrote:
>>>>
>>>>> Steve Teale wrote:
>>>>>> It seemes to me that given Walter's definition of the language - a 
>>>>>> system programming language - that Phobos is closer to the mark.  
>>>>>> If users want a more object oriented standard library, that's all 
>>>>>> well and good, but it should be a shoe-in, then if you want to use 
>>>>>> the OO stuff you can, but code that's been written to work with 
>>>>>> Phobos should work unmodified with other libraries.  (Note the 
>>>>>> recent discussion on C++ security).
>>>>> While one might argue that it is easier to wrap a strictly 
>>>>> procedural library with an OO layer than vice-versa, I think the 
>>>>> ease with which any library may be encapsulated in a wrapper is 
>>>>> more dependent on its design (the assumptions it makes, how 
>>>>> features are exposed, etc) than on whether the interface uses 
>>>>> functions or objects.  That said, I don't personally consider Tango 
>>>>> to be an object-oriented library because it does not require the 
>>>>> user to define his own objects in order to use it.
>>>>>
>>>>>
>>>>> Sean
>>>>
>>>> Sean, I take your point, and maybe should not have used the term 
>>>> "OO", but my idea of progress is:
>>>>
>>>> printf("X is: %s\n", toStringz(x))
>>>> cout << "X is: " << x << endl;
>>>> Stdout("X is: ")(x).newline;
>>>> writefln("X is: %s", x);
>>>
>>> I agree with you that cout or Stdout strike me as particularly ugly 
>>> and that writefln is a (small) progress over printf.
>>>
>>> But when I see Ruby's way: puts("X is ${X}\n"); I can't help but 
>>> feeling that even writefln is not enough..
>>>
>>> renoX
>>>
>>
>> Technically the Ruby sample would usually just be:
>> puts "X is #{X}"
> 
> Oops, a long time since I've made Ruby thanks for the various 
> explanation of how it works in Ruby.

I just happen to be working on a Ruby project lately, so it was fresh in 
mind.  ;)

>> Which is essentially shorthand for:
>> $stdout.method(:puts).call('X is ' + X.method(:to_s).call());
>  >
>> And if you need to format X any at all, you'd use something like this:
>> puts 'X is %08x' % [X]
> 
> I don't like this syntax: the interesting part of #{X} is that the 
> variable name is located at the same point as its string representation 
> which reduce greatly the risk of mistake, when I've made my 'puts' like 
> function for D (which used template,posted a while ago) , I used %{X} 
> for normal embedding and allowed also %08x{X}.
> 
> I'm surprised that Ruby doesn't allow puts "X is #08x{X}"..
> 

Actually I feel much the same way.  If I ever find a clean way to code 
my own formatter that can borrow the calling context.... I'll get 
shivers.  (Probably have to write a Ruby extension in C to do so.)

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list