Krautkanal.com

Veröffentlicht am 2015-06-11 15:00:45 in /prog/

/prog/ 7212: Was ist die Sprache mit der du am wenigsten "dreck...

kreativosweb Avatar
kreativosweb:#7212

Was ist die Sprache mit der du am wenigsten "dreckigen" Code produziert hast, und warum ist es Haskell?

marshallchen_ Avatar
marshallchen_:#7213

>>7212
Weil das Typsystem mich in vielen bereichen Zwingt, sauber zu bleiben und der funktionale Stil dafür sorgt, dass ich wiederverwendbareren Code schreibe.

Nicht-Haskell-Bernd wird vermutlich antworten: Weil ich noch nie eine Zeile Haskell geschrieben habe.

1markiz Avatar
1markiz:#7215

>>7213
>funktionale Stil
>wiederverwendbareren Code schreibe
Sehr komplex kann der Code ja nicht sein.

oscarowusu Avatar
oscarowusu:#7216

Oh, schau. Es ist schon wieder dieser Faden.

OCaml, weil bester Kompromiss zwischen akademischem Kreisgewichse sicherem Typsystem und Pragmatismus.
Danach folgt Rost.

agromov Avatar
agromov:#7217

>>7216
/Faden

jonesdigidesign Avatar
jonesdigidesign:#7239

Es ist haskell weil mit haskell überhaupt kein Code generiert wird :^)

oanacr Avatar
oanacr:#7240

Bernd hat schon Haskell geschrieben. Ich würde nicht unbedingt sagen, dass damit der Code besonders sauber oder leserlich wird.

Man kann sehr kurzen Code schreiben und extrem abstrahieren. Allerdings führt das nicht immer zu besonders lesbarem Code. Oft ist gerade durch die extreme Abstraktion es schwer zu verstehen was in Code vorgeht, den man liest. Currying ist elegant macht aber Code auch schwerer verständlich.
Die übliche nichtssagende Benennung von Variablen x, xs, t, ty ist auch nicht gerade hilfreich beim Verständnis.

dhooyenga Avatar
dhooyenga:#7244

>>7240
>Die übliche nichtssagende Benennung von Variablen x, xs, t, ty ist auch nicht gerade hilfreich beim Verständnis.

Aus solchen Gründen dürfen Mathebernds Bernd grundsätzlich erstmal die Pumpe schmatzen. Ab besten noch griechische Buchstaben einführen, damit man noch spezielle Eingabemethoden braucht.

n_tassone Avatar
n_tassone:#7247

Bernd bewundert Haskell für seine teilweise simple, schöne und geniale Syntax, dennoch hat er noch nie ein "richtiges" Haskell Programm geschrieben.

ankitind Avatar
ankitind:#7250

> pure, simple, fun
simple ≠ easy
Haskell ist sehr elegant, aber schwer zu lernen und zu benutzen.

1markiz Avatar
1markiz:#7272

Weil ich es erst ein mal im meinem Leben genutzt habe.

grantrobinson Avatar
grantrobinson:#7274

>>7250
Wenn man es erstmal geschafft hat geistig auf dieses hohe Level zu kommen (WAS soll mein Programm machen, nicht wie schiebe ich Datentypen herum) ist es deutlich einfacher.

ryandownie Avatar
ryandownie:#7275

Du wirst lachen Bernd, aber die Sprache, in der Bernd
bis jetzt am wenigsten dreckigen Code produziert habe ist Perl 5.

Das liegt ganz sicher nicht an der Sprache, sondern daran, dass Bernd erst
sehr spät angefangen hat beruflich Perl verwenden zu müssen und alle Fehler
schon zuvor mit anderen Sprachen gemacht hatte und daraus gelernt hat.

Was funktionale Sprachen angeht findet Bernd StandardML am schönsten.
Standard ML ist klein, elegant und sehr performant.

Ocaml ist wie in >>7216 auch sehr schön und die Sache mit dem
Kompromiss aus akademischen Kreisgewichse und Pragmatismus stimmt auch.

Was Haskell angeht, Bernd kann verstehen, warum Menschen es schön finden mag es aber nicht.
Von Haskell hatte Bernd nie das Gefühl das es gut darin ist Probleme zu lösen
oder ihm dabei zu helfen. Bernd kennt einige Haskell Programmierer und unterhält sich
öfter mit ihnen, er hat aber oft das Gefühl sie reden mehr über die Sprache, die Typen
oder Monaden, als über das Problem, das sie mit Haskell lösen müssen/sollen/wollen.
Was ja auch völlig okay ist und es ist ja auch wichtig sich elitär fühlen zu können.
Nur Bernd mag das alles nicht so.

shadowfreakapps Avatar
shadowfreakapps:#7280

>>7275
Wenn man Haskell kann, gibt es keine Probleme mehr. Die löst man flockig in ein paar Stunden. Es ist eben nur wichtig wie die Sprache funktioniert, um das richtig anwenden zu können auf die Probleme.

Funktional ist da einfach überlegen. Man beachte diesen Klassiker wo ein Experte der mit Programmier-Consulting Kohle macht über sechs Blog-Postings mal gepflegt KEINEN Sudoku-Solver zusammenbringt, der funktioniert und ein anderer Programmier-Experte mal gepflegt funktional einen Bastelt (in Python zwar, aber eben Funktional)

> http://ravimohan.blogspot.de/2007/04/learning-from-sudoku-solvers.html

Oder dieser Klassiker: Haskell-Programmierer versteht nicht warum in C -3/3 gleich 1431655755 ist. Und warum das laut C Standard so sein muss. Und warum alle C-Programmierer das völlig normal finden.

> http://praisecurseandrecurse.blogspot.co.at/2006/12/division-bell-tolls-for-me-part-four.html

Das ist ein komplett anderes Mindset. Für jemanden der es total normal findet, dass -3/3 1431655755 ist, ist es eben schwierig auf die geistig Abstraktionsschicht zu kommen, auf der man Funktional gut programmieren kann.

im_jsmith Avatar
im_jsmith:#7288

>>7212
Ich habe ziemlich schönen Code mit Java produziert. Man muss nicht Hipstersprache wie Haskell benutzen, um das zu tun.

cat_audi Avatar
cat_audi:#7290

>>7280
Da der Elfenjunge zur Division irgendwie nicht lädt, kannst du mich erleuchten, warum -3/3 = 1431655755?

csteib Avatar
csteib:#7291

Tatsächlich Haskell. Aber ich habe auch nur im Uni-Rahmen einen einfachen Compiler damit geschrieben. Ich denke, die Möglichkeiten, dabei dreckig zu werden, waren stark begrenzt. Für manche Aufgaben ist's aber wie gemacht.

An Java ärgern mich oft die Overkill-Frameworks, die völlig bescheuerte Namensgebungen haben, sodass keiner mehr weiß, was wofür geeignet ist. Dokumentation ist dann oft auch nur ein Snippetsturm. Na ja.

>>7290
Kurz-Antwort: C-Compiler können sich an vielen Stellen beliebig verhalten. Das gilt sogar für / und %, wenn wir negative Ganzzahlen verwenden.

Lang-Antwort: Link geht wieder.

jeremyworboys Avatar
jeremyworboys:#7292

Wegen C-Typenkrebs und C-Sprachanwaltkrebs.

Er stopft -3 in ein int, 3 in ein unsigned int, und macht dann Arithmetik auf diesen. Dabei ist spezifiziert, daß der Compiler das Dümmstmögliche implementiert, nämlich anstatt einen Error zu werfen oder es ordentlich zu machen, wird nach unsigned gecastet, und das ergibt eben 0xfffffffd in dem Falle (oder irgendwas anderes, weil MUH ITANIC NUXI SCHMUXI MUS AUCH FOL UNTERSTÜTZT C!)

Das ist jetzt nicht unbedingt jedem Programmierer klar, selbst dieser Bernd kannte den lustigen Effekt nicht. C besteht praktisch nur aus solchen Fussangeln, macht einfach keinen Spass. isalpha('ß') undefined behaviour. Ja klar. Einen mit der Klatsche. Dagegen ist Pointerarithmetik und immer schön jedes malloc free-en gerade zu trivial, und selbst das schafft praktisch kein Programmierer. Könnte man ja sagen, sind alle zu doof. Sind sie auch. Nur diese Form von "Skill" ist einfach vollkommen unnötig.

cboller1 Avatar
cboller1:#7293

>>7291
In dem Fall darf sich der Compiler nicht mal beliebig verhalten, sondern das ist genau spezifiziert.
Der Wert den -3/3 hat hängt nur von der Hardware ab bzw. welche Größe ein nativer int wert hat und welches Format negative Zahlen.
Macht es aber nicht besser sondern schlechter.

Bei C hat man immer das Gefühl das haben ein paar voll Hardwarenahe Kreiswichser geschrieben, denen immer einer ab geht wenn wieder jemand irgend eine Kleinigkeit nicht bedacht hat. Ich stelle mir die wie so einen 12 jährigen bei CS vor, und jedes mal wenn ein Programm einen Fehler macht, wegen einer unbeachtet Sache dass schreit Dennis Richie "Haha du Kacknoob! Keinen Skill! Voll geowned! Ich fick deine Mutter mit meinem C"

Und genau wie counter strike gegen 12 jährige spielen fühlt sich das programmieren in C auch an...

danro Avatar
danro:#7294

Naja sie hatten damals ihre süße kleine PDP oder war es das VAXgerät?
Das Ding konnte halt irgendwie int, int, int und nochmal int. Und hatte ne Spezialinstruktion um beim Zugriff den Pointer hochzuzählen. Prompt gab es ++ in der Sprache. Und default int promotion. Ansonsten rührt der Compiler keinen Finger. Wenn du einfach nur 2 hinschreibst tut er ein int 2 auf den Stäck. Für ein Float mußte schon 2.0f schreiben, jaja irgendwann haben sie Prototypen eingeführt, funktioniert aber nicht bei ...) wie printf

Die ganze stdlib hat das Problem. Ständig irgendwelche Zeichen als int übergeben und so. Wenn du so ein Nackenbart damals warst hast du gewußt, was der Compiler daraus macht und es war dir vollkommen klar, daß du 'ß' erstmal in ein unsigned casten mußt. Wie kann das jemandem nicht klar sein?

Das mit int erstmal nach unsigned int "konvertieren" ist natürlich unsagbar bescheuert. He, wenn ich da ein Vorzeichen reinwerfe, dann könnte das vielleicht irgendwie irgendwo wichtig sein oder wie?

jqueryalmeida Avatar
jqueryalmeida:#7296

>>7294
Richtig bescheuert finde ich vor allem, dass man die Standardbibliothek an vielen Stellen erstmal nicht nutzen kann, weil unsicher.

jamesmbickerton Avatar
jamesmbickerton:#7297

>>7296
Ja in der Tat hat C mit den strcopy_s weil strcopy böse ist... Fast PHP Niveau erreicht (mysql_really_really_escape_string_secure)

jamesmbickerton Avatar
jamesmbickerton:#7298

>>7216
>Danach folgt Rost.

In Rost kann man wirklich hübschen Code produzieren. Aber die Ownership- und Borrow-Semantik sorgt doch schon für etwas Overhead. Da würde ein Garbage Collector (wenn auch nicht Designziel von Rust) wohl zu weniger Kognitive Ladung und hübscheren Code sorgen können.

Bernd ist übrigens dennoch Rostlüfter.

turkutuuli Avatar
turkutuuli:#7299

Ihr trollt doch alle hier, oder? Es gibt tatsächlich Leute die funktionale Programmiersprachen produktiv benutzen und nicht um sich einen darauf abzuwichsen wie ULTRA1337 sie sind.

arnel_lenteria Avatar
arnel_lenteria:#7300

Haskell ist top. Bernd programmiert gerade an Cabal herum. In keiner anderen Sprache fand Bernd es je so einfach an einer größere codebase rumzuwerkeln. Doku braucht man kaum, die Typsignaturen sagen eh schon alles. Und null Überraschungen wenn man das Ganze erweitert. Alles funktioniert einfach, und zwar so wie man es erwartet. Nach dieser Erfahrung will ich echt keinen Java Kackberg mehr anfassen.

dwardt Avatar
dwardt:#7303

>Java Kackberg
Meckern auf hoher Nivea.

alexradsby Avatar
alexradsby:#7305

>Programmiersprachen produktiv benutzen
Als ob hier irgendjemand jemals einen lausigen Cent für seine Programmierarbeiten gesehen hat.

wahidanggara Avatar
wahidanggara:#7313

>>7305
Tatsächlich hat Bernd sich damit ein akzeptables Leben finanziert.

Bitte bedenke er, dies ist nicht Halbchan.

BrianPurkiss Avatar
BrianPurkiss:#7317

>>7293
Perfekt auf den Punkt gebracht. Hab als Paste gespeichert :3

bluesix Avatar
bluesix:#7319

>>7212

Laut seinem Entwickler ist es "useless" (nutzlos):

https://www.youtube.com/watch?v=iSmkqocn0oQ

karlkanall Avatar
karlkanall:#7320

>>7319
SPJ ist halt ein Scherzkeks. Wobei es natürlich stimmt wenn man als den Haskell Startpunkt das Haskell vor 1998 nimmt. Seitdem ist es ein gutes Stück den Pfeil nach Nirvana entlanggerutscht.

Neuste Fäden in diesem Brett: