"C++ is the dumpest language in the world"
-
Den Absatz finde ich richtig gut:
Stepanov schrieb:
Every type has a (potentially infinite) set of computable functions definable on it. Out of this set we can select a subset such that all other functions can be defined in terms of it. I call such a subset a computational basis of a type. I call a computational basis efficient if all the functions on the type can be expressed in terms of the basis as efficiently as if they had access to the bit representation of the type. I call a computational basis orthogonal if no functions in it can be expressed in terms of other functions without loss of efficiency.
-
rüdiger schrieb:
Und die STL hat er ja immerhin erst für Ada entworfen.
Ulkig, dass STL-ähnliche Komponenten erst in Ada 2005 Einzug gehalten haben...
-
wo findet man den diese sample chapter von den elements?
-
Wissensdurstiger schrieb:
wo findet man den diese sample chapter von den elements?
Komisch, er scheint es entfernt zu haben. Das war unter http://www.stepanovpapers.com/eop/eop.pdf zu finden.
http://www.elementsofprogramming.com/ da findet man leider auch noch nichts.
-
namespace invader schrieb:
Wenn es nur darum geht, irgendwas irgendwie zum Laufen zu kriegen, kommt man mit C++ sicher schneller zum Ziel als mit C. Aber elegante Programme kann man damit nicht schreiben.
Wieso nicht? Ich benutze die erweiterten Dinge von C++ dort, wo sie mir nützlich sind - konkret Streams, Overloads und Klassen. Das habe ich mit C einfach nicht. Ein Programm ist nur dann elegant, wenn es übersichtlich zu strukturieren und damit einfach zu warten ist. Das geht mit mit C++ sogar besser als nur mit reinem C!
-
Wow, das Paper "Notes on Programming" ist ja wirklich klasse, da lernt man noch richtig was
Da hat sich dieser Thread für mich ja richtig gelohnt, vor allem die Allgemeingültigkeit ist wirklich beeindruckend. Schade nur, dass man bei den Sprachen kaum Auswahl, denn außer C++ fällt mir gerade gar keine ein, wo man das halbwegs transparent implementieren kann.
Kennt ihr sonst noch Sprachen die nahe genug an der Hardware sind und ausreichend Abstraktionsmechanismen besitzen um die Konzepte umzusetzen?
-
Diskussionsstarter schrieb:
Schade nur, dass man bei den Sprachen kaum Auswahl, denn außer C++ fällt mir gerade gar keine ein, wo man das halbwegs transparent implementieren kann.
was davon meinst du denn?
-
~fricky schrieb:
Diskussionsstarter schrieb:
Schade nur, dass man bei den Sprachen kaum Auswahl, denn außer C++ fällt mir gerade gar keine ein, wo man das halbwegs transparent implementieren kann.
was davon meinst du denn?
Bin noch nicht sonderlich weit in dem Paper (die ersten 7 Lektionen habe ich bisher durch). Konkret meine ich damit ein effizientes und transparentes swap.
-
Diskussionsstarter schrieb:
~fricky schrieb:
Diskussionsstarter schrieb:
Schade nur, dass man bei den Sprachen kaum Auswahl, denn außer C++ fällt mir gerade gar keine ein, wo man das halbwegs transparent implementieren kann.
was davon meinst du denn?
Bin noch nicht sonderlich weit in dem Paper (die ersten 7 Lektionen habe ich bisher durch). Konkret meine ich damit ein effizientes und transparentes swap.
In manchen anderen Sprachen, z.B. in Haskell, gibt es das Konzept "swap" überhaupt nicht. Nur weil man eine Idee in einer Sprache schön implementieren kann, bedeutet das nicht, dass diese Idee in anderen Sprachen überhaupt sinnvoll ist.
-
In den meisten Sprachen ist so ein allgemeines swap auch nicht sinnvoll, weil Value-Objekte nicht den Stellenwert haben, den sie in C++ haben. Man arbeitet also wenn dann mit Referenzen.
swap in Lisp:
(rotatef a b) ; allgemeiner als swap: (rotatef a b c d)
swap in Python:
a, b = b, a
swap in Java:
// F#%&...
-
Bashar schrieb:
swap in Python:
a, b = b, a
sieht ja scheiße aus
-
Bashar schrieb:
In den meisten Sprachen ist so ein allgemeines swap auch nicht sinnvoll, weil Value-Objekte nicht den Stellenwert haben, den sie in C++ haben. Man arbeitet also wenn dann mit Referenzen.
swap in Lisp:
(rotatef a b) ; allgemeiner als swap: (rotatef a b c d)
swap in Python:
a, b = b, a
swap in Java:
// F#%&...
Stimmt, so gesehen hast du recht.
-
Diskussionsstarter schrieb:
Konkret meine ich damit ein effizientes und transparentes swap.
ein 'swap' ist doch bloss das vertauschen zweier dinge, bzw. eine 'rotation' von etwas, das nur aus zwei elementen besteht. dass unter C++ aus solch einfachen dingen eine wissenschaft gemacht wird, ist mal wieder bezeichnend.
-
lolnoob schrieb:
Bashar schrieb:
swap in Python:
a, b = b, a
sieht ja scheiße aus
Nein, das sieht am einfachsten und am schlüssigsten aus.
Lege einem totalen Neuling diese codezeile vor und erkläre ihm dass '=' für das Zuweisen zuständig ist, und er wird dir auf Anhieb sagen können was dieser Ausdruck macht. Und das ganze ohne programmieren zu k.Die lesbarkeit ist hierbei kaum zu Übertreffen und man kann sich auf die Wesentlich probleme konzentrieren und muss sich nicht mit trivialen Kleinigekeiten (wie oft in C++) herumschlagen-
-
Es ist total unklar, ob man das als a, (b = b), a lesen soll (so lese ich das) oder als (a, b) = (b, a).
-
Bashar schrieb:
In den meisten Sprachen ist so ein allgemeines swap auch nicht sinnvoll, weil Value-Objekte nicht den Stellenwert haben, den sie in C++ haben. Man arbeitet also wenn dann mit Referenzen.
swap in Lisp:
(rotatef a b) ; allgemeiner als swap: (rotatef a b c d)
swap in Python:
a, b = b, a
swap in Java:
// F#%&...
Ich muss dir hier widersprechen, zumindest im Rahmen dieses Papers geht es ja um hardwarenahe Programmierung bzw. das Programmieren in einer Sprache in der man auch an den rohen Speicher seiner Daten heran kommt (salopp gesagt). In Lisp(?), Python oder Java ist gar nicht gewollt, dass der Programmierer das kann und das ist auch mit eine Kritik des Autors an diesen Sprachen. Man muss hier natürlich der Fairness zu liebe eingestehen, dass es gar nicht immer sinnvoll ist und man bei Betrachung sämtlicher Programmiersprachen als DSLs das auch gar nicht benötigt.
Aber in einer general purpose Sprache sollte es möglich sein. Und das glaube ich ist auch was "Diskussionsstarter" (toller Name!) eigentlich gemeint hat (ohne sich selbst darüber bewusst zu sein) und der Autor in seinem Paper auch behandeln will.
Dass er C++ dazu verwendet obwohl er an so vielen Stellen harte Kritik an der Sprache äußert lässt auch mich ins Grübeln kommen. Gibt es wirklich keine bessere Sprache? Oder wollte der Autor von den in Frage kommenden Sprache die am meisten verbreitete für sein Paper benutzen?
-
fdgfdgfdg schrieb:
Es ist total unklar, ob man das als a, (b = b), a lesen soll (so lese ich das) oder als (a, b) = (b, a).
Dann schreib es halt als letztes, dann sieht es mehr nach Tuple Unpacking aus (was es eigentlich auch ist). Die Operatorenrangfolge lässt aber auch ersteres zu, und wenn man dabei nicht direkt an Tupel denkt, sondern nur an Vertauschen, ist das auch eine akzeptable Schreibweise.
-
Programmier-Profi schrieb:
Ich muss dir hier widersprechen, zumindest im Rahmen dieses Papers geht es ja um hardwarenahe Programmierung bzw. das Programmieren in einer Sprache in der man auch an den rohen Speicher seiner Daten heran kommt (salopp gesagt).
Nicht nur, aber natürlich ist das Paper in diesem Punkt sehr eingeschränkt. Dieser Sub-Thread ist durch die Bemerkung "Schade nur, dass man bei den Sprachen kaum Auswahl, denn außer C++ fällt mir gerade gar keine ein, wo man das halbwegs transparent implementieren kann." ausgelöst worden. Und hier muss man eben sagen, dass man in vielen Sprachen auch gar keine Notwendigkeit für ein "transparentes swap" hat. Das Paper tut so, als wäre es allgemein, und C++ nur als Repräsentation ausgewählt worden, aber für welche Sprachen träfe denn sowas noch zu? C, Ada, Delphi, vielleicht C# (hat immerhin sowas wie Value-Objekte), noch was? In diesen Sprachen fehlen aber (AFAIK) die Sprachmittel, um das alles so generisch umzusetzen.
In Lisp(?), Python oder Java ist gar nicht gewollt, dass der Programmierer das kann und das ist auch mit eine Kritik des Autors an diesen Sprachen. Man muss hier natürlich der Fairness zu liebe eingestehen, dass es gar nicht immer sinnvoll ist und man bei Betrachung sämtlicher Programmiersprachen als DSLs das auch gar nicht benötigt.
Aber in einer general purpose Sprache sollte es möglich sein.Bleibt "general purpose" zu definieren. Java ist sicherlich eine "general purpose" Sprache in dem Sinne, dass sie für allgemeine Zwecke, nicht nur für einen speziellen Zweck (wie z.B. AWK) entworfen wurde. Das heißt ja nicht, dass absolut alles gehen muss.
Dass er C++ dazu verwendet obwohl er an so vielen Stellen harte Kritik an der Sprache äußert lässt auch mich ins Grübeln kommen. Gibt es wirklich keine bessere Sprache? Oder wollte der Autor von den in Frage kommenden Sprache die am meisten verbreitete für sein Paper benutzen?
Genau das. Vielleicht gibt es eine bessere Sprache dafür, vielleicht auch nicht.
-
fdgfdgfdg schrieb:
Es ist total unklar, ob man das als a, (b = b), a lesen soll (so lese ich das) oder als (a, b) = (b, a).
-
Deine fälschliche Interpretation dieses Ausdrucks kommt daher, da du von C++ vorbelastet bist. Weil du glaubst, dass C++ das Einzig wahre ist, bleiben dir andere Sprachen & Ansätze verwehrt.
-
Lege diesen Code einem Unwissenden vor, also einen, der nicht durch irgendwelche Programmiersprachen vorbelastet ist. Er wird bei dieser Schreibweise recht schnell zum Ergebnis kommen.
-
Ja es handelt sich hierbei um tuples. Wenn du magst, kannst du auch Klammern drumherum machen, was aber in diesem Fall nicht unbedingt notwendig ist. Aber es kann das Gemüt eines C++ Programmierers, wie in deinem Fall, beruhigen.
-
-
n00b, in der mathematik schreibt man das genauso. ohne klammern ist das schrott