{"id":3197,"date":"2017-09-04T17:31:25","date_gmt":"2017-09-04T16:31:25","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=3197"},"modified":"2017-09-04T17:31:25","modified_gmt":"2017-09-04T16:31:25","slug":"c-guns-semantik-und-concepts-part-3","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=3197","title":{"rendered":"C++ Guns - Semantik und concepts - Part 3"},"content":{"rendered":"<p>Kommen wir nun zu den concepts. Wie anfangs erw\u00e4hnt, las ich das Paper [1].<br \/>\nIch erlaube mir hier ein paar Ausschnitte davon zu kommentieren, um meine Motivation zu begr\u00fcnden.<\/p>\n<blockquote><p>A concept has semantics; it means something; it is not just a<br \/>\nset of unrelated operations and types. Without an idea of what operations mean and how they relate to each other we cannot write generic code that works for all appropriate types.\n <\/p><\/blockquote>\n<p>Ein Konzept bedeutet also irgendetwas. Wenn man sich hinsetzt und irgendetwas programmiert, hat man irgendetwas im Kopf, was es bedeuten soll. Aber diese Bedeutung k\u00f6nnen wir nur schwer in Code formulieren. Das liegt erfahrungsgem\u00e4\u00df nicht nur an der Sprache und ihre Mittel, haupts\u00e4chlich ist es der Programmierer, der nicht wei\u00df was er will.<br \/>\nSo wird viel ausprobiert und viel Code umgeschrieben. Und dabei ein Haufen Bugs eingebaut, die vermeidbar gewesen w\u00e4ren, h\u00e4tte man sich nur mal kurz \u00fcberlegt, was man \u00fcberhaupt will.<\/p>\n<blockquote><p>It follows that a guarantee that all types accepted by concept checking<br \/>\nwill work correctly is impossible: they may have exactly the syntactic properties required, but have the wrong semantics. This is nothing new: Similarly, a function taking a double can<br \/>\ninterpret it differently from what the caller expects. Consider set_speed(4.5). What does this mean? Is 4.5 supposed to be in m\/s or maybe miles\/hour? Is 4.5 an absolute value, a delta to the current speed, or possibly a factor of change?\n<\/p><\/blockquote>\n<p>Genau hier will ich ansetzen und widersprechen.<br \/>\nDer Programmierer der Funktion <em>set_speed<\/em> hat in seinem Kopf gewusst, was die Funktion machen soll, und was der Funktionsparameter bedeutet. Das muss so sein, sonst h\u00e4tte er sie nicht programmieren k\u00f6nnen. Er hat diese Dinge aber nicht in Code formuliert. Wenn zum Beispiel die Funktion <em>set_speed<\/em> als Argument kein <em>double<\/em> entgegen nimmt, sondern ein Type namens <em>Speed<\/em>, welcher intern auf den Physikalischen Einheiten Meter pro Sekunde definiert ist, dann ist es nicht m\u00f6glich aus versehen eine Geschwindigkeit in miles\/hours zu \u00fcbergeben, ohne dass der Compiler aktiv wird.<br \/>\nSelbes gilt f\u00fcr eine Geschwindigkeits<strong>\u00e4nderung<\/strong> welche z.B. durch den Typ <em><strong>Delta<\/strong>Speed<\/em> ausgedr\u00fcckt werden k\u00f6nnte, oder eine \u00c4nderung durch Skalierung. <\/p>\n<p><strong>Genau darum geht es. Um die Bedeutung von Variablen. Um die Bedeutung des Variablentypes, der mittels concepts zur Compilezeit \u00fcberpr\u00fcft werden kann.<\/strong><\/p>\n<blockquote><p>I suspect that perfect checking for all code will forever elude us; <\/p><\/blockquote>\n<p>Hier bin ich vom Gegenteil \u00fcberzeugt. Sobald alle Informationen ohne Fehler f\u00fcr den Compiler in auswertbarer Form vorliegen, muss der Compiler immer ein Fehler liefern, sobald man Schwachsinn programmiert hat.<br \/>\nEs macht in keinem Universum Sinn, Geschwindigkeit und Abstand zu addieren. Hier wird der Compiler sofort aktiv.<br \/>\nAuch Algorithmen m\u00fcssen vom Compiler \u00fcberpr\u00fcfbar sein. Wenn alle Ein- und Ausgabedaten durch Pr\u00e4dikate beschrieben werden, muss der Compiler Fehler im Algorithmus finden.<\/p>\n<p>Wenn aber jemand den Abstand Erde-Sonne in Millimeter berechnen will, ist das nat\u00fcrlich kein Compilezeitfehler. <\/p>\n<p>Im n\u00e4chsten Teil gibt es wieder C++ Code.<\/p>\n<p>[1] Concepts: The Future of Generic Programming or How to design good concepts and use them well - Bjarne Stroustrup<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kommen wir nun zu den concepts. Wie anfangs erw\u00e4hnt, las ich das Paper [1]. Ich erlaube mir hier ein paar Ausschnitte davon zu kommentieren, um meine Motivation zu begr\u00fcnden. A concept has semantics; it means something; it is not just a set of unrelated operations and types. Without an idea of what operations mean and [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-3197","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3197"}],"version-history":[{"count":6,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3197\/revisions"}],"predecessor-version":[{"id":3203,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3197\/revisions\/3203"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3197"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}