namespace refactoring



  • Unter Eclipse CDT gibt es im Menü Refactor tatsächlich eine tolle Rename Funktion, die auch für namespaces funktioniert. Damit kann man die namespaces aber leider nicht entfernen...

    Die sed Variante riecht in der Tat nach einiger Arbeit und evtl. tagelanger Fehlersuche -- wohl nicht ganz optimal.



  • enki schrieb:

    Die sed Variante riecht in der Tat nach einiger Arbeit und evtl. tagelanger Fehlersuche -- wohl nicht ganz optimal.

    Nur wenn du sed noch nicht kennst/beherrscht. Dann ist es allerdings wie mit allen neuen Werkzeugen - man muss die Bedienung erstmal lernen. 🙂



  • Kóyaánasqatsi schrieb:

    Lässt sich doch relativ schnell selber tippen.

    Na dann mach mal und zeig her.

    Ansonsten nen Header mit den ganzen using namespace's anlegen und inkludieren.

    Man kann sich auch ins Knie schiessen.



  • Hast du irgend ne Klasse die genauso heißt wie dein Namespace? Oder warum sollte "Namespace::" durch "" erstezen nicht einfach gehen?



  • h???? schrieb:

    Hast du irgend ne Klasse die genauso heißt wie dein Namespace? Oder warum sollte "Namespace::" durch "" erstezen nicht einfach gehen?

    Das könnte sein, ich arbeite nicht alleine an dem Projekt. Falls es gleichnamige Klassen mit statischen Methoden gibt funktioniert das jedenfalls nicht. Und es wäre auch nur die halbe Miete. Sowas wie "namespace Namespace{ ...viel Code... }" ist wieder komplizierter.

    Wenn du das sauber hinkriegen willst, kommst du nicht darum herum den Code zu parsen und alle Sonderfälle zu berücksichtigen. -- Falls es geht möchte ich das nicht per Hand machen 😉



  • Um den Code korrekt parsen zu können muss man schonmal alle Präprozessor-Makros erweitern. (Mal ganz davon abgesehen dass C++ parsen so überhaupt gar nicht einfach ist.) Dummerweise erzeugen die aber auch Text. Und wenn ein Namespace Name dann von einem (oder gar mehreren) Präprozessor-Makros erzeugt wurde, wird es richtig interessant.

    Oder man kauft sich ein Tool wie Visual Assist X, und macht es damit. Funktioniert zwar auch nicht zu 100% (das wäre auch unmöglich behaupte ich mal), aber zu 99%, und meistens (fast immer) ist das gut genug.



  • Ich weiß gar nicht, worauf die genau hinaus möchtest, aber ich würde dir von sämtlicher Form des "namespaces" abraten. Es kann zu unerwünschten Überlagerungen und Ungereimtheiten führen.



  • Elexarie schrieb:

    Ich weiß gar nicht, worauf die genau hinaus möchtest, aber ich würde dir von sämtlicher Form des "namespaces" abraten. Es kann zu unerwünschten Überlagerungen und Ungereimtheiten führen.

    Hmm? Eigentlich sind Namespaces dafür gedacht, Überlagerungen und Ungereimtheiten zu vermeiden...



  • Elexarie schrieb:

    Ich weiß gar nicht, worauf die genau hinaus möchtest, aber ich würde dir von sämtlicher Form des "namespaces" abraten. Es kann zu unerwünschten Überlagerungen und Ungereimtheiten führen.

    Und ich glaube du hast keinen Plan was ein Namespace überhaupt ist.



  • Tachyon schrieb:

    Elexarie schrieb:

    Ich weiß gar nicht, worauf die genau hinaus möchtest, aber ich würde dir von sämtlicher Form des "namespaces" abraten. Es kann zu unerwünschten Überlagerungen und Ungereimtheiten führen.

    Hmm? Eigentlich sind Namespaces dafür gedacht, Überlagerungen und Ungereimtheiten zu vermeiden...

    Genau. Und sobald man kein ähnliches System hat, dann fängt man es bereits an zu vermissen. War bei mir so, als ich Eiffel gelernt habe. Ich hatte bereits in den ersten paar Zeilen, die ich geschrieben habe einen Namenskonflikt mit irgendeinem weit entfernten Modul.

    Natürlich habe ich es mir nicht nehmen lassen und Bertrand Meyer auf diese Problematik angesprochen und als Antwort nur bekommen: (frei übersetzt): "Namensräume verschieben das Problem lediglich und darum sind sie kein Sprachbestandteil".



  • Womit er natürlich Recht hat.

    Nur finde ich es doof Namespaces deswegen wegzulassen. Wenn keine vollständige Lösung bekannt ist, dann nehm ich jederzeit eine, die nur zu 90% funktioniert...



  • Natürlich hat er da Recht, aber das ist eine Verschiebung um Kilometer.
    Imo ist das einfach keine ernst zu nehmende Begründung.

    btw:
    Meine Frage, warum das neue Sprachfeature "across" nicht wie in jeder anderen Sprache foreach heisst hat er bis jetzt nicht beantwortet..
    Ich vermute das (und das mit den namespaces) liegt wohl eher an der "Eiffel-Mentalität". Man möchte sich möglichst weit von den bösen Sprachen, wie Java und C++ distanzieren. Das merkt man immer mal wieder, wenn man mit Eiffel programmiert oder Literatur darüber liest.



  • drakon schrieb:

    Natürlich hat er da Recht, aber das ist eine Verschiebung um Kilometer.
    Imo ist das einfach keine ernst zu nehmende Begründung.

    Ja, hab ja auch geschrieben ich finde es doof Namespaces deswegen wegzulassen.

    drakon schrieb:

    Meine Frage, warum das neue Sprachfeature "across" nicht wie in jeder anderen Sprache foreach heisst hat er bis jetzt nicht beantwortet..
    Ich vermute das (und das mit den namespaces) liegt wohl eher an der "Eiffel-Mentalität". Man möchte sich möglichst weit von den bösen Sprachen, wie Java und C++ distanzieren. Das merkt man immer mal wieder, wenn man mit Eiffel programmiert oder Literatur darüber liest.

    Auf mich macht es eher den Eindruck als ob es das Werk eines sehr intelligenten aber auch etwas zu sturen Eigenbrötlers wäre.
    Ich denke also er wird "across" als Name gewählt haben weil er den Namen "besser" findet, nicht um auf Zwang anders zu sein als C++/Java/...
    Ob das gut ist oder nicht ist wieder ein anderes Thema. Etwas übernehmen nur weil es alle anderen so machen hat genau so offensichtliche Nachteile, wie etwas anders zu machen als alle anderen, nur weil es (eine Spur) besser/logischer/... ist.
    Was schwerer wiegt ist dann natürlich Ansichtssache.



  • hustbaer schrieb:

    drakon schrieb:

    Natürlich hat er da Recht, aber das ist eine Verschiebung um Kilometer.
    Imo ist das einfach keine ernst zu nehmende Begründung.

    Ja, hab ja auch geschrieben ich finde es doof Namespaces deswegen wegzulassen.

    Wollte dir nicht widersprechen, sondern eher andeuten, dass ich das einfach vergessen habe oben noch hinzuschreiben. 😉

    Auf mich macht es eher den Eindruck als ob es das Werk eines sehr intelligenten aber auch etwas zu sturen Eigenbrötlers wäre.
    Ich denke also er wird "across" als Name gewählt haben weil er den Namen "besser" findet, nicht um auf Zwang anders zu sein als C++/Java/...
    Ob das gut ist oder nicht ist wieder ein anderes Thema. Etwas übernehmen nur weil es alle anderen so machen hat genau so offensichtliche Nachteile, wie etwas anders zu machen als alle anderen, nur weil es (eine Spur) besser/logischer/... ist.
    Was schwerer wiegt ist dann natürlich Ansichtssache.

    Stur ist die Sprache schon (was sicher auf den Entwickler zurückzuführen ist). Und das meinte ich eben mit Eiffel-Mentalität. 😉
    Aber was ist besser daran etwas so zu nennen, dass es die Leute eher verwirrt, als es ihnen hilft? Als ich das erste mal gesehen habe, konnte ich mir darunter überhaupt nichts vorstellen. Als ich dann die Definition angeschaut habe wurde mir klar, dass es einfach nur ein foreach ist.



  • drakon schrieb:

    Stur ist die Sprache schon (was sicher auf den Entwickler zurückzuführen ist). Und das meinte ich eben mit Eiffel-Mentalität. 😉

    Und ich finde das grundsätzlich gar nicht mal SO schlecht 😉

    Aber was ist besser daran etwas so zu nennen, dass es die Leute eher verwirrt, als es ihnen hilft? Als ich das erste mal gesehen habe, konnte ich mir darunter überhaupt nichts vorstellen. Als ich dann die Definition angeschaut habe wurde mir klar, dass es einfach nur ein foreach ist.

    Warum er "across" besser findet als "foreach", wenn man mal unterstellt dass es überhaupt so ist, weiss ich nicht.
    Ich denke nur es hat beides Vorteile, das "Festhalten an Altbewehrtem" und das "anders Machen weil's anders besser ist".

    Wenn man immer an alten Konventionen festhält, hat das z.B. den Nachteil, dass man den Raum für Verbesserungen auf Erweiterungen einengt.

    In diesem Fall, wo es einfach nur um ein Keyword geht, ist das zwar vielleicht etwas dick aufgetragen, aber grundsätzlich gilt es auch da: wenn "across" (warum auch immer) das logischere und intuitiv besser verständliche Wort wäre, zumindest für Leute die andere bedeutungsgleiche Begriffe noch nie gehört haben, dann hat es Vorteile (nicht nur, aber auch), es zu ändern.



  • Naja. Kommt wohl drauf an in welchem Kontext.

    Ich verstehe nicht, wie across besser aussagen kann was es machen soll als foreach. foreach sagt ja bereits was es macht und ist daher sehr intuitiv verständlich. Korrigier mich, wenn ich falsch liege, aber wenn man das Wort noch nicht kennt und einen Container durchgehen will für jedes Element, dann kommt man da ja sogar selbst drauf. Und noch auf Englisch, damit man es sieht: "I'd like to go throug this container for each element." - Ich denke intuitiver kann man ein Schlüsselwort kaum wählen. 😉

    Aber mir fällt es wieder ein, was wohl der wirkliche Grund (und das meine ich jetzt nicht als Scherz) für die Wahl von across ist. Meyer ist sehr stolz (hat es in der Vorlesung mehrmals erwähnt und in seinem Buch auch), dass alle Schlüsselwörter komplette Englische Ausdrücke sind bis auf elseif. Foreach wäre da natürlich gegen die Namenskonvention.
    Wenn die Sturheit dann bei so etwas zu tragen kommt (falls es so ist und ich vermute, dass es so ist), dann finde ich das schlecht.

    btw:
    Ich finde auch, dass Eiffel sehr gute Konzepte (Umsetzung der Vererbung, Contracts, Agents, Operatoren) hat. Mit ein paar Syntaxänderungen und einer anständigen IDE würde es sogar richtig Spass machen damit etwas zu entwickeln.



  • Und einer anständigen und grossen Standard-Library 🙂



  • hustbaer schrieb:

    Und einer anständigen und grossen Standard-Library 🙂

    Ja, aber mit einer schlechten Dokumentation (vor allem bei zusätzlichen Bibliotheken). 😞

    Ich hatte wirklich ein Weilchen bis ich endlich ein Fenster hingekriegt habe. 😞
    Liegt aber wahrscheinlich an der eher geringen Verbreitung.

    btw:
    Programmierst du auch mit Eiffel? Wenn ja was?



  • Hihi, ich meinte das als Forderung. (Also dass die Std. Library nicht so toll ist, und das noch gändert werden müsste damit ich gerne damit programmieren würde)
    Und nein, ich programmiere nicht in Eiffel. Finde es aber schade dass sich die Sprache so gar nicht durchgesetzt hat.



  • Also ich finde die Standardbibliothek recht umfangreich. Prinzipiell musste ich nie nach eine Bibliothek suchen (weder GUI, noch Internet), aber sie sind nicht gerade einfach zu benutzen, da schlecht dokumentiert und unintuitiv zu handhaben.

    Oder was vermisst du da? Klar so umfangreich, wie bei .net oder Java ist sie nicht, aber das geht imo auch weit über eine Standardbibliothek heraus.


Anmelden zum Antworten