Skriptsprachen-Hassen leicht gemacht

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Das, was man mit Skriptsprachen bevorzugt macht, trägt den klangvollen Namen Rapid Prototyping (nein nicht Rabbit Prototyping!), zu deutsch: schnelles Zusammenpfuschen, damit man Interessenten bald etwas vorführen kann. Nun ist es aber so, dass sich der normale Programmierer von einmal geschriebenem Programmtext nicht wieder trennen kann, also bleibt es für immer bei der Pfuschversion, um die herum ständig neue Flicken gesetzt werden. Um diese Vorgehensweise zu unterstützen, bieten auch Skriptsprachen rudimentäre Mechanismen zum Zusammenstellen von Bibliotheken. Diese Modularisierung ist schon deswegen immer unterentwickelt, weil es keine ausdrücklichen und typsicheren Schnittstellen gibt. (siehe unten) Diese Modularisierung wäre auch völlig unnötig, wenn man Skriptsprachen nur verwenden würde, wozu sie geeignet sind, nämlich um Wegwerfprogramme zu schreiben.
Hier habe ich aufgehört weiter zu lesen. :lol:

Ist aber wirklich *lol* was er von sich gibt :lol:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das selbe gibt es für C auch: http://www.math.uni-bremen.de/~thielema/CHater.html :roll:

Der Typ hat IMHO zuviel Zeit...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Natürlich sind alle hier dargestellten Fehlerquellen maßlos überzogen und treten in der Praxis kaum auf, denn der seriöse Skriptsprachenbenutzer hat noch einen gewaltigen Trumpf in der Hand: Automatische Tests, die er geschrieben hat, um alle Funktionen auf korrekte Ergebnisse zu überprüfen. Er nimmt sich zwar keine Zeit, um über Schnittstellen und Typen nachzudenken, dafür umso mehr Zeit für die Kreation automatischer Tests - Ehrenwort! Dass man mit Typen vielerlei dumme Fehler erkennen kann, ohne einen Riesenhaufen Tests zu fahren (die einem auch nur sagen würden, dass ein Fehler vorhanden ist, aber nicht so genau, wo), überzeugt ihn nicht, denn schließlich kann man mit statischer Typenprüfung nicht alle Fehler entdecken. Viel schneller hat er eine Reihe von Tests entwickelt, die alle Typenfehler abfangen, und er vergisst keinen! Außerdem steht statische Typenprüfung dem Ziel möglichst kurzer Programmtexte direkt entgegen, wie man an C++ und Java sehen kann, den bekanntermaßen einzigen Programmiersprachen mit einem Typensystem (oder so etwas ähnlichem).
:lol: Da ist einer meiner bisherigen lieblingsstelle :D

BTW: Ja, ich Lese doch weiter ^^
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Viele Haskell-Anfänger scheinen sich nicht die Mühe zu machen, sich mit dem Konzept von Funktionen und den vielfältigen Einsatzmöglichkeiten von Funktionen höherer Ordnung zu befassen. Stattdessen meiden sie alles systematische und errichten ihre Programme hauptsächlich aus syntaktischem Zucker wie Listenkomprehension, Guards, Pattern-Guards, Infix-Operatoren und do-Notation, wahlweise auch mit kleinkarierten Rekursionen.
Joa, der hat IMHO echt richtig gelitten der Typ :roll:

Bin raus, bevor ich anfange den Thread hier zuzuspammen...
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Als Skriptsprache legt MatLab Variablen dynamisch zur Laufzeit an. Dies schließt das Überschreiben vordefinierter Variablen ein. Eine Warnung gibt es in diesem Falle nicht. Somit kann ich endlich alle Definitionen vornehmen, die mir schon immer plausibler erschienen:

>> false = true; % ich bin der Geist, der stets verneint
>> pi = 3; % nie wieder Rundungsfehler, das bevorzugte schon Archimedes
>> cos = 1; % ich rechne eh immer mit kleinen Winkeln
:lol: :lol: rofl :D Ich lieg am Boden ^^

Leute Sorry für den Spam.


Rebecca, vielen dank für den Link. Hast meinen Tag gerettet :D

thx & lg
sape
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Bin durch.

Fazit: So ganz unrecht hat er ja stellenweise nicht! ;) Besonders was die Inkonsistenz von MatLab betrifft!

Aber der größte Teil den er von sich gibt ist einfach nur Schwachsinn und sicherlich auch nicht ernst gemeint.

lg
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Ähm es gibt auch einen Edit Button ;)

Ich würde nix gegen 2 Posts nacheinander sagen, weil das hier manchmal z.B. von Gerold so gehandhabt wird, aber 4 Posts nacheinander ist recht viel.

Nur als kleiner Hinweis.
mfg

Thomas :-)
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Sorry dafür, hast vollkommen Recht.

lg
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

v.a. über das C hab ich jetzt nur mal schnell drübergescrollt, aber irgendwie muss ich ihm sowohl bei MATLAB als auch bei C zum Teil recht geben und bin dennoch einiges davon entfernt die beiden zu hassen :)

vllt. sollte ihm mal wer vorschlagen ein mex-File in C zu schreiben...

aber toll finde ich das logspace - das sollte man eigentlich direkt auf dailywtf posten
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52


Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Um mal diesem Schwachsinnsschwall entgegenzuwirken empfehle ich Bruce Eckels Strong Typing vs. Strong Testing (mit Beispielen in Java und Python).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich selbst finde das die beiden *-Hater Artikel FUD sind. Nichteinmal lustig, denn über so extreme Dummheit kann ich nicht wirklich lachen. Ich denke mir nur, dass alle die das Lesen ihre Lebenszeit nur damit verschwenden. Harte Worte, ja. Aber wenn man nicht lustig schrieben kann, wenn es denn schon eine Satiere ist, dann sollte man es lassen, bevor Leute den Quark ernst nehmen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Der Grossteil vom ScriptingHater befasst sich mit MatLab-Macken und die sind teilweise wirklich heftig. Ich glaube nicht, dass es für MatLab-Anfänger verschwendete Zeit ist, sich das durchzulesen, weil einige von den Macken Mathe-Studenten, die mit MatLab an die Programmierung herangeführt werden, sicher schwer zu schaffen machen und die "Features" prägen deren Eindruck von "Programmierung" nachhaltig. Und den Programmierstil den man sich damit angewöhnt, muss man auch erst einmal wieder loswerden.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Leonidas hat geschrieben:Ich selbst finde das die beiden *-Hater Artikel FUD sind. Nichteinmal lustig, denn über so extreme Dummheit kann ich nicht wirklich lachen. Ich denke mir nur, dass alle die das Lesen ihre Lebenszeit nur damit verschwenden. Harte Worte, ja. Aber wenn man nicht lustig schrieben kann, wenn es denn schon eine Satiere ist, dann sollte man es lassen, bevor Leute den Quark ernst nehmen.
Dan fehlt dir der Humor. Ich kann sehr gut über solche derben Sachen und Idioten lachen ;) Und das witzige ist, das er das nicht mal als Humor dargestellt habe will (denke ich mir mal so.), sonder so als ob das sein voller Ernst ist :lol: Und gerade diese unsachlich, zynische Art die er im Artikel nutzt, vermischt mit Fakten, ist sehr amüsant.

Naja, Leo, das ist so ähnlich wie in dem einen Thread, wo ich nicht über die eine Sache über Web2.0 lachen konnte und es nicht als lustig empfunden habe, da mir der nötige Hintergrund gefehlt hatte. Nachher hab ihr mich ja darauf hingewiesen warum es witzig ist und das man sich darüber nicht aufregen braucht...

Aber Fakt ist: Klar, der Typ der die beiden Artikel geschrieben hat, ist sehr zynisch und ein Arsch. Dumm ist er aber keines falls. Ein Idiot ist er aber dennoch, weil er diese Form gewählt hat um seine Antipathie auszudrücken.

Aber in vielen Punkten hat er auch Recht, auch wenn er es wirklich in übelster Form darstellt. Seinen Standpunkt gegenüber C kann ich nachvollziehen, da ich selber mit C genug zu tun hatte und weiß wie ätzend, fehleranfällig und inkonsistent die Sprache ist. Auch seine Meinung gegenüber Scriptsprachen kann ich verstehen, obwohl ich es so nicht empfinde wie er (Und das sage ich als einer der Python Super findet), bis auf das mit MatLab wo er meine volle Zustimmung hat.

Also, gib den beiden artikeln eine Chance. Wenn du dich halbwegs mit dem auskennst was er da bespricht, wirst du deinen Spaß an seinen überflüssigen Kommentaren haben :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sape hat geschrieben:Dan fehlt dir der Humor. Ich kann sehr gut über solche derben Sachen und Idioten lachen ;) Und das witzige ist, das er das nicht mal als Humor dargestellt habe will (denke ich mir mal so.), sonder so als ob das sein voller Ernst ist :lol: Und gerade diese unsachlich, zynische Art die er im Artikel nutzt, vermischt mit Fakten, ist sehr amüsant.
Nein, mir geht es nicht darum, dass es zynisch und als voller Ernst dargestellt ist, sondern darum, dass die Satire nicht einmal subtil durschscheint. Das sollte bei einer Satire aber sein, sonst liest es sich eben so.. unlustig eben. Besser gemacht finde ich das bei Shelley The Republican.
sape hat geschrieben:Also, gib den beiden artikeln eine Chance. Wenn du dich halbwegs mit dem auskennst was er da bespricht, wirst du deinen Spaß an seinen überflüssigen Kommentaren haben :D
Nö - schon die von Y0Gi hingewiesene Sache mit den static typing ist völlig verbockt. Und ich kenne mich mit dem Thema durchaus ein wenig aus. Ebenso ist das anmängeln der Syntax total daneben, das ist nicht lustig das ist blöd. Man kann durchaus eine angenehme Sprache mit Curly Braces machen. Schaut euch mal blackbird an, der findet seit letztens auch JavaScript toll.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Leonidas hat geschrieben:Ebenso ist das anmängeln der Syntax total daneben, das ist nicht lustig das ist blöd. Man kann durchaus eine angenehme Sprache mit Curly Braces machen.
Ich glaube nicht, dass es um die Curly Braces an sich geht ─ die Kritik zur Syntax greift auch, wenn man die durch Schlüsselworte wie BEGIN und END ersetzt. Man nimmt bei C und ähnlichen Sprachen viel als gegeben hin, was bei näherer Betrachtung ziemlich eigenartig ist und teilweise Fehler begünstigt die einfacher vermieden werden könnten, wenn gewisse Sachen nicht erlaubt wären. Zum Beispiel hätte man bei ``if``, ``while``, ``for`` usw. Blöcke statt Statements in der Syntax vorsehen können. Da wäre niemand dran gestorben. Also in den Anfangszeiten als es noch Rechner/Tastaturen ohne geschweifte Klammern gab vielleicht schon, aber spätestens bei Java oder C# hätte man die Statements an der Stelle abschaffen können.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Leonidas hat geschrieben: Ebenso ist das anmängeln der Syntax total daneben, das ist nicht lustig das ist blöd. Man kann durchaus eine angenehme Sprache mit Curly Braces machen. Schaut euch mal blackbird an, der findet seit letztens auch JavaScript toll.
Es geht doch nicht um ``{}``-Syntax im Zusammenhang mit Inkonsistenz. Darum ging es auch nicht dem Autor das ``{}`` benutzt wird. Nein, es geht darum, wie Jack schon sagt, um wirklich strange inkonsistente Sachen.

Hier mal ein Beispiel:

Code: Alles auswählen

int a=1, b=2;
if (a=b) {
  printf("a ist gleich b\n");
};
Wenn man das Programm startet, erscheint die Ausgabe "a ist gleich b", obwohl a und b ganz offensichtlich verschieden sind. Der versierte C-Nutzer sieht bei diesem einfachen Beispiel natürlich sofort den Fehler - gemeint war wohl (a==b) - nur warum merkt der Übersetzer das nicht?
Ja, weil erstens a=b zwar hauptsächlich eine Anweisung ist, welche den Wert von b in a hineinkopiert, zusätzlich ist aber a=b auch noch ein Ausdruck, welcher b als Wert zurückliefert . Für die if-Anweisung hätte es also den gleichen Effekt, als würde man gleich if(b) schreiben. Und das wird zweitens dummerweise auch noch akzeptiert, weil if nicht zwischen Wahrheitswerten und Ganzzahlen unterscheidet.
Das ist ja noch harmlos.

Code: Alles auswählen

int a=10, b=8, c=6;
if (a<=b<=c) {
   printf("%d <= %d <= %d\n", a, b, c);
}
Man staunt und wundert sich, ob der Rechner jetzt wohl die Relationszeichen vertauscht hat, weil dieses Programm tatsächlich behauptet, dass 10 ≤ 8 ≤ 6. Der Grund ist einmal mehr im versuppten Typenkonzept von C zu finden. Der Übersetzer geht so vor: Der Ausdruck wird von links nach rechts ausgewertet, das entspricht der Klammerung ((10≤8)≤6). Jetzt wird der erste Vergleich ausgewertet: 10≤8 ist falsch, für C entspricht das einer 0. Nun wird diese 0 in den zweiten Vergleich gesteckt: 0≤6 ist wahr, also für C gleich 1, also für if wiederum wahr. Dumm gelaufen, was?
Dass wir uns nicht falsch verstehen: Der Übersetzer braucht diese verketteten Vergleiche nicht zu unterstützen. Sie sind Schreibvereinfachungen, die sich aber nicht damit vertragen, dass Vergleiche eigentlich Relationen zwischen zwei und zwar genau zwei Werten sind. Aber man kann von dem Übersetzer erwarten, dass er solche Irrtümer bemerkt, weil es eigentlich keine sinnvolle Interpretation für den Ausdruck "10 ≤ 8 ≤ 6" gibt, wenn man "≤" als Operation mit zwei Argumenten (linke Seite und rechte Seite) auffasst. Diese Sichtweise ist auch sinnvoll, denn alles andere wäre kaum wasserdicht zu definieren.
Hey, aber auch das ist ja noch nicht sooo schlimm.

Preisfrage: Was steht hier?

pi * diameter;

Blöde Frage, das ist natürlich die bekannte Formel zur Berechnung des Kreisumfanges aus dem Kreisdurchmesser. Lediglich das Speichern des Ergebnisses wurde vergessen.
Schaut noch einmal genau hin. Ganz genau. Würdet ihr eure Antwort ändern, wenn ich noch 100 Euro drauf lege? Ach nein, das ist die falsche Sendung.
Ich habe noch nicht verraten, dass pi ein Typbezeichner ist. Er steht für "product information" oder so und wird weiter oben im Programm definiert. Demnach wird hier die Zeigervariable diameter eingeführt, welche auf Objekte vom Typ pi zeigt.
Wir sehen, dass in C die Syntax für Deklarationen und arithmetische Ausdrücke nicht unterschieden werden kann, dass man also zum Erkennen der Programmstruktur bereits Informationen über die Bedeutung der Bezeichner benötigt. Bei C++ wird übrigens alles noch viel besser.
Nachdem wir nun schon so viel Spaß mit dem Anlegen von Feldern hatten, wie ist es dann mit der Benutzung derselben? Wenn a ein Feld ist, dann bezeichnet a dessen i. Eintrag. Lustigerweise bezeichnet i[a] aber dasselbe! Der Grund ist, dass a syntaktischer Zucker für *(a+i), wobei a+i Zeigerarithmetik ist. Bei der Addition eines Zeigers a und einer ganzen Zahl i (Reihenfolge egal) hat das Ergebnis den Typ des Zeigers. Allerdings wird nicht einfach der Wert von i zu dem Zahlenwert des Zeigers a addiert, sondern es wird das Produkt von i und der Größe des Datums, auf das a zeigt, zu a addiert. Diese Erkenntnisse sind essentiell, um bei Wettbewerben um möglichst unverständlichen C-Code gut abschneiden zu können.
Da muss noch mehr herauszuholen sein! Wie wär's denn mit zweidimensionalen Feldern? Normalerweise indiziert man ein zweidimensionales Feld a so: a[j]. Aber mit unserem Wissen können wir das gleiche viel schöner schreiben, etwa:

* i[a][j]
* j[i[a]]
* j[a]
* (a+i)[0][j]
* ((a+i)[0]+j)[0]
* j[*(a+i)]
* (*(a+i))[j]
* *((a+i)[0]+j)

Das ist ein absolut unverzichtbares Werkzeug um den Lesern seiner Programme überdurchschnittliches Wissen über C zu demonstrieren. Entwickler aller Länder schätzen es, Programme von solch erfahrenen Programmierern weiterentwickeln zu dürfen.
Das ist einer meiner Lieblinge ;)

*i*
Hey, ist aber alles nicht so schlimm. Man lernt es auswendig und macht dann diese Fehler die daraus resultieren könne nicht mehr. Auch Bufferoverflow oder Speicherlecks lassen sich als Profi vermeiden...
*/i*

BTW: Und das ist ja noch nicht 10% der Inkonsistenz die in C existiert. Was ich besonders schön an C finde ist die richtig starke Typsicherheit! ;)

Nett ist auch folgendes: http://www.wackerart.de/c.html
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sape hat geschrieben:*i*
Hey, ist aber alles nicht so schlimm. Man lernt es auswendig und macht dann diese Fehler die daraus resultieren könne nicht mehr. Auch Bufferoverflow oder Speicherlecks lassen sich als Profi vermeiden...
*/i*
Nicht dass es keine GCs für C gäbe, oder Tools wie Valgrind. Und gegen Inkompetenz ist sowieso kein Kraut gewachsen. Denn auch in Python kann man tolle Sachen machen wie exec & Co, XSS-Lücken in Webseiten, CrossSite Forgery etc. etc. Um das zu vermeiden, muss man ja nichteinmal Profi sein. Und Speicherlecks in C lassen sich auch als Nichtprofi vermeiden.

Zu der Inkonstistenz: er bemängelt etliche Sprachen die geschweifte Klammern haben, aber nicht unbedingt die gleiche Inkonsistenz wie C. Das ist doch ebenso grundlos.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten