Discussion:
why the result type of a procedure can be neither a record nor an array.
(too old to reply)
noch
2005-11-30 14:28:03 UTC
Permalink
I searched through the net, but didn't find answer, why Wirth made
mentioned constrain, and why it exists in component pascal too.

Thanks
August Karlstrom
2005-11-30 22:33:11 UTC
Permalink
Post by noch
I searched through the net, but didn't find answer, why Wirth made
mentioned constrain, and why it exists in component pascal too.
I'm sorry but I don't understand your question. Please try be more specific.


August
--
I am the "ILOVEGNU" signature virus. Just copy me to your
signature. This email was infected under the terms of the GNU
General Public License.
Chris Burrows
2005-12-01 03:31:40 UTC
Permalink
Post by noch
I searched through the net, but didn't find answer, why Wirth made
mentioned constrain
From Page 102 - Compiler Construction, Niklaus Wirth (ISBN: 0201403536) :

"If our primary goal is the generation of efficient code with the minimal
number of memory accesses then a register is the prime candidate for
temporarily holding the function's result. If this solution is adopted. we
must renounce the capability of defining functions with a structured result,
because structured values cannot be held in a register."

--
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
noch
2005-12-01 06:54:24 UTC
Permalink
Thank you very much.
Because I didn't found info like this neither in "From Modula-2 to
Oberon", nor in other works I have read, or in the net in forums.

Thanks again.
Chris Burrows
2005-12-08 03:42:53 UTC
Permalink
Post by noch
Thank you very much.
Because I didn't found info like this neither in "From Modula-2 to
Oberon", nor in other works I have read, or in the net in forums.
If you haven't got Wirth's Compiler Construction book, it is now available
in PDF form to be downloaded from:

http://www.oberon.ethz.ch/books.html

--
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
Chris Burrows
2005-12-11 03:42:23 UTC
Permalink
Post by noch
Thank you very much.
Because I didn't found info like this neither in "From Modula-2 to
Oberon", nor in other works I have read, or in the net in forums.
If anybody does have a requirement to return a record or an array as the
result type of a procedure, note that it is possible to return a *pointer*
to a record or array. That might be an acceptable alternative solution.

--
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
n***@absamail.co.za
2005-12-15 07:40:30 UTC
Permalink
Post by Chris Burrows
Post by noch
Thank you very much.
Because I didn't found info like this neither in "From Modula-2 to
Oberon", nor in other works I have read, or in the net in forums.
If anybody does have a requirement to return a record or an array as the
result type of a procedure, note that it is possible to return a *pointer*
to a record or array. That might be an acceptable alternative solution.
And also the 'use' of returned values ?
Structure := GetStrctrValue(set, of args);
might be 'usefull' some times, but you couldn't conveniently use
structurevalues in the 'equivalent' of .
IntVal := Max( Price(LeastUsed(SetA)),NextMonthStd);

Ie. It's commonly usefull to have int & real valued 'functionally
constructed' expressions, but much less so record/array ones.
So yes, in line with the Wirthian approach.
We don't want unjustified complications which yield a small utility.
KISS ?

== Chris Glur.
llothar
2005-12-15 19:34:20 UTC
Permalink
Post by n***@absamail.co.za
Ie. It's commonly usefull to have int & real valued 'functionally
constructed' expressions, but much less so record/array ones.
So yes, in line with the Wirthian approach.
We don't want unjustified complications which yield a small utility.
KISS ?
I think this KISS thing is going too far. It's not making anything more
complicated.
It's indeed the reason why almost nobody is using the pure Wirth
languages anymore.

It's very convienent to use and it's faster to pass small records by
value and not by reference. The MacOSX Interface (Carbon and Cocoa) are
doing it just for this reason.
s***@gmail.com
2005-12-16 00:03:00 UTC
Permalink
How is it faster? Do you mean faster to type the code, or do you mean
that the code runs faster because a pointer dereference is avoided?
Either way, you are wrong.
llothar
2005-12-16 18:06:37 UTC
Permalink
It is faster for the CPU. At least it seems to be faster on the
Power-PC platform.
If you need to refer to the values in a record often the one copy
operation is better then multiple deferences. Maybe it's not an issue
anymore, but it was in the past.

And please post some benchmarks numbers if you want to argument against
the Apple Performance Guidelines.

Ulrich
2005-12-16 11:37:57 UTC
Permalink
Hallo Lothar
Post by llothar
I think this KISS thing is going too far. It's not making anything more
complicated.
It's indeed the reason why almost nobody is using the pure Wirth
languages anymore.
Du hast völlig recht, dass KISS ein absurdes Prinzip ist. Man kann Wirth allerdings nicht vorwerfen, dass er diesen Unsinn nachgemacht hätte. Sein Ansatz besteht darin, keine überflüssigen Elemente anzubieten, aber alles, was nötig ist, wobei er einen maximalen Quotienten aus Ertrag und Aufwand anstrebt.

Ich sehe allerdings nicht, dass fast niemand reine Wirthsche Sprachen benutzt. Ich sehe dagegen, dass es kaum gute Programmierer gibt, die keine Wirthsche Sprache verwenden, wobei ich mich nur auf 3 Quellen beziehe:
1.Die veröffentlichten Programme.
2.Die Probleme mit Programmen, die nicht in einer Wirtschen Sprache implementiert sind.
3.Viele Jahre Erfahrung mit Programmierern in der EDV-Branche. C und PERL-Programmierer sind fast (!) alle Bastler oder schlecht Informierte.

Ich sehe zudem, dass es 2 sehr weit verbreitete Programmiersprachen gibt, COBOL und C, die unter keinem technischen Gesichtspunkt etwas taugen. Deshalb ist mir die Absicht Deiner Bemerkung nicht klar. Ich kann mir kaum vorstellen, dass Du von der Masse der COBOL- und C-Pfuscher auf eine Qualitätseigenschaft einer dieser Sprachen schließen willst. Prinzipiell ist meiner Meinung nach ein statistisches Argument in deterministischen Systemen unangebracht. Anders ausgedrückt: Wie kommst Du zu der Annahme, dass "deswegen" niemand mehr eine reine Wirthsche Sprache verwenden würde? Meiner Meinung nach sind sowohl die Annahme (KISS) als auch die Folgerung falsch - ich würde aber doch gerne wissen, worauf der Schlussmechanismus beruht, denn der statistische ist ebenfalls nicht stichhaltig und ich sehe keinen anderen in Deinen Zeilen.

Wenn man die Qualität und die Verbreitung von Programmiersprachen diskutiert, muss man auch berücksichtigen, welche Fortschritte gemacht wurden. Unter diesem Aspekt ist es eine ziemlich fragwürdige Eigenschaft einer Sprache, seit vielen Jahren unverändert verwendet zu werden. Ich verstehe zwar die Liebe zu den Oldtimern, aber ein Rennen gewinnt man mit einem Oldtimer genauso wenig, wie man ein zuverlässiges Geschäft darauf aufbauen kann. Mir scheint es deshalb gerade ein Zeichen von Qualität zu sein, dass Delphi aus Pascal entwickelt wurde.

Inzwischen sind zwar fast alle Wirthschen Ideen von anderen populären Sprachen aufgegriffen worden, aber leider haben diese kommerziellen Sprachen immer noch gravierende Nachteile gegenüber den Originalen von Wirth. Wenn man einen - wie immer hinkenden - Vergleich mit der Autoindustrie bemüht, sind die Wirthschen Sprachen die Porsches, während C++ einem 1960er-Cadillac und Java vielleicht einem PT Cruiser von Chrysler entspräche. Nicht alle fahren Porsche, aber ist es deshalb ein schlechtes Auto?
Post by llothar
It's very convienent to use and it's faster to pass small records by
value and not by reference. The MacOSX Interface (Carbon and Cocoa) are
doing it just for this reason.
Werteparameter sind bei Wirthschen Sprachen Gang und Gäbe. Hier ging es nicht um das Übergeben von Verbünden und Feldern, sondern um strukturierte Resultatswerte von Funktionen, also um die Frage, wie die aufrufende Umgebung ein Resultat von der aufgerufenen Routine bekommt. Technisch besteht kein wesentlicher Unterschied zwischen einer Funktion mit einem strukturierten Resultatswert und einer Prozedur mit einem Referenzparameter.

Hast Du mit Wirthschen Sprachen schlechte Erfahrungen gemacht?
Mit welchen Sprachen hast Du gute Erfahrungen gemacht?
Chris Burrows
2005-12-16 05:02:11 UTC
Permalink
Post by n***@absamail.co.za
Ie. It's commonly usefull to have int & real valued 'functionally
constructed' expressions, but much less so record/array ones.
I agree, particularly when talking about original Oberon and Oberon-2 as
their use of operators on structured types was very limited.

However, more recent Oberon extensions have included the implementation of
"operators" (otherwise commonly known as operator overloading) which then
allow more general expressions to include records and arrays as operands.
This is particularly useful for scientific programming, allowing for complex
arithmetic, matrix manipulation etc.expressions to be expressed in a more
natural way. It should be no surprise therefore that these extensions have
been accompanied by the facility for procedures to return any type.

For more details see OberonX:

http://www.oberon.ethz.ch/native/compiler/x.index.html

These extensions are currently supported in the PC Native Oberon compiler:

http://www.oberon.ethz.ch/native/compiler/index.html

--
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
Loading...