[fpc-devel] RFC: Support for new type "tuple" v0.1
Michael Van Canneyt
michael at freepascal.org
Sun Jan 27 18:19:33 CET 2013
On Mon, 28 Jan 2013, Alexander Klenin wrote:
> On Mon, Jan 28, 2013 at 2:59 AM, Michael Van Canneyt
> <michael at freepascal.org> wrote:
>>
>>
>> On Mon, 28 Jan 2013, Alexander Klenin wrote:
>>> I have a compromise suggestion:
>>> Implement for-index extension with the syntax:
>>> for (k, v) in a do
>>> this syntax is forward-compatible with both tuples proposals,
>>> is simple to do (basically, already done -- only a small change in
>>> parsing is required)
>>
>> what concerns syntax, I have no problem with this.
>>
>> What bothers me immensely is the same what bothered me in the totally
>> braindead
>> Delphi implementation of the "for in" loop : the bunch of requirements you
>> put on the iterator implementation: an interface with special status. You
>> can't get more stupid and ugly than that.
> Out of curiosity -- how would you implement it?
Define an iterator type/operator.
- No interface
- No 'specially named function' in the class. The iterator should be separate from the class.
Now they promoted 1 function with a special name to a special status: 'GetEnumerator'
(I know this is how Python and so did it, but I'm not particularly fond of that either).
> (Except "the Oberon way" -- by telling the programmer that he is
> better off without this feature :-))
I am still not convinced that language support for iterators are needed.
You may be bothered by the various loop methods in the rtl/fcl.
But I am not in the least bothered by it.
> I have no particular like or dislike for the Delphi's enumerable implementation,
> but it is quite similar to for-in iterators in most other compiled languages.
Well, I do not like to give special status to certain functions or interfaces.
All identifiers should be equal for the law :-)
I was horribly disappointed when they introduced that.
>> Your initial proposal makes it even worse by adding more conditions to the
>> interface, it would not even be an interface any more.
> I am not sure what are you talking about. Interface is a list of methods.
> My for-in proposal would add a new interface (with a single method)
> which, if supported by enumerator, would allow user to write for-in-index loops.
I know. I just do not like the approach.
Probably because I don't particularly like interfaces themselves.
>> That is why I think you need a proper "tuple" value to solve this.
>> it gives a more fundamental solution: the loop variable type equals the type
>> returned by the iterator/enumerator. No messing with index (bad syntax) and
>> even worse: special 'interfaces' and whatnot.
> I agree that "index" keyword was perhaps not optimal choice.
Quick, we should call the newspaper, we agree on something ;-)
> New interface is needed anyway to preserve backwards compatibility
> (and efficiency for the case when the key is not needed).
> "Do not slow down existing code".
Yes.
>> Pascal is a strongly typed language. So, if we absolutely must solve this:
>> introduce a proper type. A tuple fits the job.
> So does the record -- tuple is needed here only to deconstruct that
> record in separate variables.
True.
Which begs the question why you didn't use a record to begin with.
I still do not see why the enumerator could not simply return a record
record
key : tkey;
value : tactualtype
end;
for r in myclass do
begin
Writeln(r.key);
With r.value do
end.
to recapitulate:
The construction with interface/index is really very ugly in my opinion,
and I would very much regret it if it became part of Object Pascal.
I can understand the need to have simpler variables.
So a tuple and/or a record deconstructor comes in naturally.
I think a tuple as a type construct may have value in itself.
and as such would prefer to see it as a 'first class citizen' of Object Pascal,
just as it is in e.g. Python, and to a lesser degree, other languages.
The exact details are for me less important.
A small word:
Like most people here I think Pascal is an elegant language, easy to read
and whatnot. It was meant/designed as such, and Wirth did a good job.
I am very passionate about that, I'm sure you noticed. I may use
exuberant language, and probably bad humor, in my efforts to defend it.
Despite that, please do not make the mistake of thinking that I would stop
features just because I do not like them. That said, I will zealously defend
possible alternatives that I think add to the elegance and readability of Pascal.
(as witnessed by the discussions this weekend...)
Borland did a world of good for (Object) Pascal, up to Delphi 7.
After that, it went seriously downhill in my opinion;
Adding randomly features without clear direction or regard for the
intent and philosophy of the Pascal language - or so it seems to me.
Like a ship at the mercy of the waves...
I would be very sorry to see that happening to Free Pascal.
Michael.
More information about the fpc-devel
mailing list