Turbo C++ 1.01 unbenutzbar?



  • Turbo C++ 1.01 wurde ja vor einiger Zeit als Freeware freigegeben. Aber kann es sein, dass dieses Ding unbenutzbar ist? Ich meine, klar, es ist ein alter Compiler. Aber mit Turbo C++ 3.0 kann man ziemlich gut Programme schreiben, die, wenn vom Stil auch etwas altmodisch, für einen modernen standardkonformen Compiler immer noch gültiger Code sind. Aber 1.01 ist wirklich schrecklich. Beispiel:

    class MeineKlasse
    {
    public:
        typedef int MeinTyp;
    };
    

    In diesem Fall ist es nicht möglich, außerhalb der Klasse folgendes zu deklarieren:

    MeineKlasse::MeinTyp x;
    

    Man muss dann

    MeinTyp x;
    

    schreiben, was natürlich kein moderner Compiler durch lässt.

    Was er auch nicht kann:

    int *p = new int[10]; // Alles OK
    delete[] p; // Compilerfehler (WTF?)
    

    Kann mir irgendjemand erklären, wieso ein Compiler von Februar 91 so viele Probleme macht, während die Nachfolgeversion von November 91 recht ordentlich ist? Oder muss ich beim 1.01er irgendwas einstellen, damit es funktioniert?



  • Für welche Zielplattform möchtest du denn Programme entwickeln? Visual C++ 2010 ist beispielsweise auch frei verfügbar, nicht nur konform zum C++98-Standard den man 1991 nicht kennen konnte sondern der unterstützt auch schon einiges aus dem neuen C++11-Standard.

    Warum zur Hölle möchtest du einen 20 Jahre alten Compiler einsetzen?

    MfG SideWinder



  • Mir ist natürlich klar, dass das Ding veraltet ist und man heutztage neuere Compiler benutzt. Darum geht's auch nicht. Es interessiert mich einfach nur: Die beiden Teile liegen gerade mal neun Monate auseinander. Wie kommt's da, dass der eine Compiler noch so scheiße ist und der andere relativ annehmbar? Oder kann man auch die einser Version dazu bringen, es vernünftig zu machen, wenn man bestimmte Einstellungen vornimmt?



  • Die Antwort ist jetzt nicht intelligenter als die Frage:
    Vermutlich haben sie in den 9 Monaten was verbessert.



  • Das waren Borlands erste Schritte in C++.
    Microsoft hat sich da erst später an C++ versucht und deren frühe C++ Compiler sollen auch nicht die Brüller gewesen sein.

    Wenn ihr beim antiken Büchern mal 20 Jahre alte C++ Bücher finden solltet, werdet ihr feststellen das sich C++ in dem Zeitraum sehr schnell entwickelte.

    AT&T gab damals die Richtung an:
    1988 AT&T Version 1.2
    1990 AT&T Version 2.0
    1991 AT&T version 3.0

    Schätze das sich auch Borland an AT&T orientiert hat.

    MfG f.-th.



  • Ich würde mal mehr auf die Version achten als auf das Datum...



  • Was ich ja im Speziellen interessant finde, ist nicht die Tatsache, dass sie was verbessert haben, sondern die Tatsache, dass es zwischen Turbo C++ 1.1 und heute keine Abwärtskompatibilität gibt, während es die zwischen Turbo C++ 3.0 und Visual C++ 2010 größtenteils gibt. Wie gesagt: Programme, die ich in Turbo C++ 3.0 schreibe, laufen höchstwahrscheinlich auch auf heutigen Compilern, sofern keine OS-spezifischen Bibliotheken benutzt werden. Die einzigen Probleme, die ich bisher gesehen hab, sind:
    - Die Headernamen (iostream vs. iostream.h)
    - Eine Variablendeklaration in einer for-Schleife gilt auf neuen Compilern nur für die Schleife, in Turbo C++ aber noch, als hätte ich sie darüber deklariert.

    Aber die Inkompatibilitäten zwischen Turbo C++ 1.1 und dem heutigen Standard machen es quasi unmöglich, Programme von damals zu kompilieren:

    delete[] array; // Heute und in TC++3 gültig, in TC++1 nicht.
    delete[10] array; // In TC++1 gültig, heute nicht, TC++3 gibt Warnung.
    
    class X
    {
    public:
        typedef int I;
    };
    
    X::I i; // Heute und in TC++3 gültig, in TC++1 nicht.
    I i; // In TC++1 gültig, heute nicht, TC++3 gibt Warnung.
    


  • I ist nach den Scoping-Regeln von C direkt verwendbar, den Scope-Operator X::I gibt es in C nicht. Ich weiß nicht, was so verwunderlich daran ist, dass es in alten C++-Versionen so war wie in C. Du machst das an ein paar Monaten zwischen zwei Turbo C++ Releases fest, wahrscheinlich ist aber, dass das unterschiedliche C++-Sprachversionen sind. Wahrscheinlich hat man lange an Turbo C++ 1.0 gearbeitet und parallel schon an Unterstützung für AT&T C++ 2.0 gebastelt. (In Wirklichkeit ist es etwas komplizierter, es gab kein Turbo C++ 2.0, sondern aus Turbo C++ 1.0 wurde Borland C++ 2.0 und dann 3.0 (erstmals mit AT&T C++ 2.0), wovon Turbo C++ 3.0 als abgespeckte Version abgespalten wurde).



  • Bashar schrieb:

    Ich weiß nicht, was so verwunderlich daran ist, dass es in alten C++-Versionen so war wie in C.

    Verwunderlich ist, dass man bei der Sprachdefinition von C++ damals offenbar noch keinen Wert auf Abwärtskompatibilität gelegt hat, denn während heute in der Regel nur Features hinzugefügt werden, gab es in AT&T C++ 2.0 Dinge, die in AT&T C++ 2.1 eine Warnung auslösten und später dann regelrecht verboten waren und Syntaxfehler auslösten.

    Außerdem würde mich mal interessieren, warum die Turbo C++ 1.01 als Freeware freigegeben haben und nicht die bessere 3.0 Version. Heutige Borland-Compiler unterstützen sowieso kein DOS mehr, also hätte es ihnen doch egal sein können, oder?



  • Abwärtskompatibilität zu was? Der C++ Standard ist doch viel später erschienen.



  • Abwärtskompatibilität von AT&T C++ 2.1 auf AT&T C++ 2.0.


Log in to reply