Was sind die Vorteile von MODULA gegenüber PASCAL - welches sind die
Schwächen von PASCAL gegenüber MODULA ?
Besten Dank im Voraus,
NB
wie ausführlich willst du es denn haben?
Und von welchen Varianten reden wir? Das Wirth'sche Standard-Pascal dürfte
einen recht übersichtlichen Sprachschatz haben - ist aber IMHO kaum in
Gebrauch. Und bei Modula hat es erst Modula II zu einer halbwegs
vernünftigen Verbreitung geschafft.
n>Bitte um Auskunft:
n>
n>Was sind die Vorteile von MODULA gegenüber PASCAL - welches sind die
n>Schwächen von PASCAL gegenüber MODULA ?
Das ursprüngliche Pascal diente wohl hauptsächlich dazu, zu zeigen, daß
strukturiertes Programmieren möglich ist und für Lehrzwecke.
Deshalb wurden meist erweiterte Pascal-Varianten verwendet, deren
Kompatibilität untereinander aber eingeschränkt ist.
Modula-2 (über Modula redet heute keiner mehr und wenn doch, dann ist
meistens Modula-2 gemeint) hat als wesentlichsten Vorteil gegenüber Pascal
ein Modulkonzept, mit dem man Projekte modularisieren kann. Dafür sind
auch wieder ein paar ungebräuchliche Eigenschaften gestrichen worden.
Modula-2 ist leider ziemlich aus der Mode. Falls Du nicht aus irgendeinem
Grund unbedingt Modula-2 verwenden mußt, würde ich entweder Oberon-2 (ein
Nachfolger von Modula-2) oder Borland Pascal, Delphi oder einen dazu
kompatibelen Compiler verwenden. Allerdings wurden bei Oberon einige
Features gegenüber Modula-2 gestrichen, während Borland Pascal und
Konsorten einige Sprachfeatures haben, mit denen man zwar effizient, aber
unsauber programmieren kann.
Ciao, Matthias
Der groesste Vorteil von Modula gegenueber Pascal ist meines Erachtens die
Moeglichkeit, mit einer Funktion namens NEWPROCESS einen neuen Prozess auf
eine Prozedur zu erzeugen. Und je nach Implementation braucht man sich um
das Taskswitching nicht selbst zu kuemmern.
Wenn man in den Genuss einer solchen Implementation kommt, dann ist
beispielsweise die Programmierung einer Uhranzeige, die voellig
unabhaengig im Hintergrund arbeitet, ein Kinderspiel. Der Phantasie sind
keine Grenzen gesetzt. Mir selbst gefaellt die Arbeit mit mehreren Tasks.
Und man braucht noch nicht mal Windows dazu!
Zu Pascal: Eines der schlimmsten Vergehen von Turbo Pascal von Borland,
finde ich, ist, dass man einer Konstanten einen neuen Wert zuweisen kann.
Modula hat hier und allgemein ein sehr strenges Typenkonzept. Fuer
groessere Projekte ist dies aber von Vorteil.
Noch ein Vorteil von Modula: Modula trennt strikt Definitions- und
Implentaionsmodule. Diese werden in zwei verschiedenen Dateien gespeichert
(die Quelldateien). Dadurch ist es moeglich, fuer ein anstehendes
groesseres Projekt erstmal vollstaendig alle Schnittstellen zu definieren.
Diese werden in den Definitionsmodulen niedergelegt. Danach kann die
Implementation in vielen Arbeitsgruppen parallel programmiert werden. Die
Schnittstellen stehen ja fest. Aendert sich aber doch mal eine
Schnittstelle waehrend des Projektverlaufs, dann greift eine
Abhaengigkeitspruefung.
Viel Spass noch,
Werner
WK>Der groesste Vorteil von Modula gegenueber Pascal ist meines Erachtens
WK>die Moeglichkeit, mit einer Funktion namens NEWPROCESS einen neuen
WK>Prozess auf eine Prozedur zu erzeugen. Und je nach Implementation
WK>braucht man sich um das Taskswitching nicht selbst zu kuemmern.
Das stimmt nicht. Modula-2 definiert nur "Coroutinen", kooperatives
Multitasking, bei dem der Programmierer die Taskwechsel durch Funktionsaufrufe
anstoßen muß. So etwas läßt sich auch in Turbo Pascal leicht implementieren.
Preemptives Multitasking oder automatische Taskswitches sind mir nicht bekannt.
Falls es solche Implementierungen gibt, so muß es sich um eine zwangsläufig
inkompatibele Spracherweiterung handeln.
WK>Zu Pascal: Eines der schlimmsten Vergehen von Turbo Pascal von Borland,
WK> finde ich, ist, dass man einer Konstanten einen neuen Wert zuweisen
WK>kann.
Kann man natürlich nicht. Es gibt allerdings "typisierte Konstanten", die
nichts anderes als Variablen mit vorinitialisiertem Wert sind.
WK>Noch ein Vorteil von Modula: Modula trennt strikt Definitions- und
WK>Implentaionsmodule. Diese werden in zwei verschiedenen Dateien
WK>gespeichert
WK>(die Quelldateien). Dadurch ist es moeglich, fuer ein anstehendes
WK>groesseres Projekt erstmal vollstaendig alle Schnittstellen zu
WK>definieren. Diese werden in den Definitionsmodulen niedergelegt.
WK>Danach kann die Implementation in vielen Arbeitsgruppen parallel
WK>programmiert werden. Die Schnittstellen stehen ja fest. Aendert sich
WK>aber doch mal eine
WK>Schnittstelle waehrend des Projektverlaufs, dann greift eine
WK>Abhaengigkeitspruefung.
Im Prinzip spricht wenig dagegen, in Turbo Pascal genauso zu arbeiten. Ein
Fehler tritt an der gleichen Stelle auf wie bei Modula-2, nämlich beim
Compilieren eines leeren oder unvollständigen Implementation-Teils, der lt.
Interface-Teil nicht (teilweise) leer sein sollte.
Ciao, Matthias
WK>> Der groesste Vorteil von Modula gegenueber Pascal ist meines Erachtens
WK>> die Moeglichkeit, mit einer Funktion namens NEWPROCESS einen neuen
WK>> Prozess auf eine Prozedur zu erzeugen. Und je nach Implementation
WK>> braucht man sich um das Taskswitching nicht selbst zu kuemmern.
MH> Das stimmt nicht. Modula-2 definiert nur "Coroutinen", kooperatives
MH> Multitasking, bei dem der Programmierer die Taskwechsel durch
MH> Funktionsaufrufe anstoßen muß. So etwas läßt sich auch in Turbo Pascal
MH> leicht implementieren.
MH> Preemptives Multitasking oder automatische Taskswitches sind mir nicht
MH> bekannt. Falls es solche Implementierungen gibt, so muß es sich um
eine
MH> zwangsläufig inkompatibele Spracherweiterung handeln.
Ich kenne eine solche Implementierung, und die fand ich ganz praktisch.
Leider habe ich diese als erstes kennengelernt, spaeter eine andere, bei
der man die Taskwechsel selbst programmieren muss. Da war ich etwas
enttaeuscht.
WK>> Zu Pascal: Eines der schlimmsten Vergehen von Turbo Pascal von Borland,
WK>> finde ich, ist, dass man einer Konstanten einen neuen Wert zuweisen
WK>> kann.
MH> Kann man natürlich nicht. Es gibt allerdings "typisierte Konstanten", die
MH> nichts anderes als Variablen mit vorinitialisiertem Wert sind.
Das kleine Prograemmchen:
---------------------------- CUT -------------------------------------
program test;
const heini : integer = 4;
begin
writeln(heini);
heini := 5;
writeln(heini);
end.
---------------------------- CUT -------------------------------------
lassen die Turbo-Pascal Versionen 3, 4, 5 und 6 ohne Murren durch den
Compiler flitzen und erzeugen die Ausgabe:
4
5
Was soll man dazu noch sagen?
WK>> Noch ein Vorteil von Modula: Modula trennt strikt Definitions- und
WK>> Implentaionsmodule. Diese werden in zwei verschiedenen Dateien
WK>> gespeichert
WK>> (die Quelldateien). Dadurch ist es moeglich, fuer ein anstehendes
WK>> groesseres Projekt erstmal vollstaendig alle Schnittstellen zu
WK>> definieren. Diese werden in den Definitionsmodulen niedergelegt.
WK>> Danach kann die Implementation in vielen Arbeitsgruppen parallel
WK>> programmiert werden. Die Schnittstellen stehen ja fest. Aendert sich
WK>> aber doch mal eine
WK>> Schnittstelle waehrend des Projektverlaufs, dann greift eine
WK>> Abhaengigkeitspruefung.
MH> Im Prinzip spricht wenig dagegen, in Turbo Pascal genauso zu arbeiten. Ein
MH> Fehler tritt an der gleichen Stelle auf wie bei Modula-2, nämlich beim
MH> Compilieren eines leeren oder unvollständigen Implementation-Teils, der lt.
verpflichtet,MH> Interface-Teil nicht (teilweise) leer sein sollte.
Man kann kompilieren, aber linken kann man nicht. Beim Kompilieren wird
nur auf die importierte Def-Datei zugegriffen. Es wird nicht automatisch
eine Kompilation des importierten Moduls angestossen. Dies geschieht erst
beim Make.
Jedenfalls ist das bei meiner Version so. Dort wird unterschieden zwischen
COMPILE und MAKE. Beim Make wird mehr gemacht. Da werden nicht aktuelle
Module, die importiert werden, neu kompiliert, danach wird gelinkt.
Damit ist es dann gut moeglich, in vielen Arbeitsgruppen zu arbeiten. Man
kann seine Module auf jedenfall kompilieren. Zum Testen kann man die
fertigen Module in spezielle Testumgebungen stellen, die die noch nicht
vorhandenen importierten Funktionen simulieren.
Ciao,
Werner