Hummel Hummel!
Momentan beherrsche ich nur die Programmiersprache Python. Eine hervorragende Programmiersprache wie ihr alle sicherlich bereits wisst.
Ich würd jetzt also gerne wissen welche Sprache nach Python interessant oder eine sinnvolle Ergänzung wäre. Perl, Tcl. Lua und Ruby wären zB nicht sinnvoll, da zu ähnliche Stärken wie Python.
Ich hab mich etwas informiert und folgende Sprachen momentan in der Auswahl. Ich bitte darum etwas zu den Sprachen zu sagen die ihr davon kennt und ob was ich, nach derzeitigen Erkenntnisstand, dazu geschrieben habe so stimmt:
funktionale Sprachen:
1. Haskell - rein funktional. Soll daher sehr gut sein um eine komplett neue, "erleuchtende", Sichtweise aufs Programmieren zu bekommen.
2. Common Lisp - ähnlich Haskell jedoch multiparadigmisch. Enorme Flexibilität.
3. Scheme - wie Common Lisp so weit ich weiss. Wo ist der Unterschied?
4. Ocaml - kann funktional. Dazu noch bei Geschwindigkeit auf Augenhöhe mit C++.
Sonstige:
5. Snobol4 / Spitbol - Das beste zum Thema Pattern Matching. Deutlich überlegen gegenüber Perl+RegEx.
6. Smalltalk - rein Objektorientiert. Deutlich besser als Java, C++ für OO.
7. C - eigentlich Standardwissen und sehr sinnvoll im zusammenhang mit Python. Aber ob ich so lust aufs manuelle Speichermanagement habe? Naja. Vielleicht weiss man dann Python noch mehr zu schätzen.
8. APL - hab irgendwo mal positives darüber gelesen. Kann auch sein, dass das ein ein Artikel aus lang vergessenen Zeiten war. In jedem Fall interessant was für Hieroglyphen dort verwendet werden und dass man wohl sogar ne extra Tastatur braucht. Aber wozu ist diese Sprache denn gut?
9. J - ein modernes APL.
10. Prolog - Soll ja ziemlich anders sein aber wozu ist das?
11. Forth - Ebefalls sehr flexible Sprache. Scheinbar gibt es nur Leute die Forth über alles lieben oder hassen. Dazweischen hab ich noch nichts gesehen.
12. Ada - Soll ja ebenfalls ein Konkurent zu C++ sein.
13. Assembler, Hex, Bin, Lötkolben - ? ?
Fällt euch was zu einigen der oberen Sprachen ein? Welche würdet ihr als Zweitsprache nach Python empfehlen?
Für die Frage nach meinem Einsatzzweck: Den habe ich nicht. In erster Linie möchte ich einfach nur eine zweite Sprache erlernen. Ich mache das nicht beruflich sondern nur als Hobby. Eine interessante und/oder sinnvoll ergänzende Sprache wäre daher toll.
Danke im voraus für eure Mühe!
Interessante / sinnvolle Programmiersprache nach Python
Ich würde dir C empfehlen. Auch wenn die Motivation (wenn man von Python kommt) dafür manchmal schwierig ist, lernt man doch eine ganze Menge. Beispielweise über Datenstrukturen (die man in schnell Python als gottgegeben wahrnimmt) und die interne Funktionsweise des Rechners. C ist eine interessante minimale Sprache, sie wird nur allzu oft über ihre eigentlichen Anwendungsgebiete hinaus beansprucht. Zudem bringt es IMO wenig eine Sprache zu lernen die du dann doch nie einsetzen wirst, da sich viele Prinzipien erst mit der intensiveren Nutzung erschließen.
MFG HerrHagen
MFG HerrHagen
Wenn Du Deine Programmierprobleme in Python lösen kannst, brauchst Du keine andere Sprache.
Wenn Du was Schnelleres brauchst oder nur was Neues lernen willst, würde ich mir erstmal C (und dann auch C++) angucken.
IMHO weiß man danach Python tatsächlich mehr zu schätzen.
Gruß
Wenn Du was Schnelleres brauchst oder nur was Neues lernen willst, würde ich mir erstmal C (und dann auch C++) angucken.
IMHO weiß man danach Python tatsächlich mehr zu schätzen.
Gruß
Gewagte Theseproblembär hat geschrieben:Wenn Du Deine Programmierprobleme in Python lösen kannst, brauchst Du keine andere Sprache.
Schließe mich der Hagenschen Argumentation an.
Gruß,
Christian
PS Willkommen im Forum, herakles.
Vielleicht bin ich der Einzige dem das so geht, aber für wirklich ALLE Geschwindigkeitsproblemen, die ich bisher hatte, gab es lediglich 2 Ursachen: Miserable Algorithmen in der "Hauptsprache" und inneffiziente Anfragen an die DB (in SQL oder einer Abstraktion in der Hauptsprache).problembär hat geschrieben:Wenn Du was Schnelleres brauchst [...] würde ich mir erstmal C (und dann auch C++) angucken.
Mag sein, dass das an meinem Umfeld liegt (viel webkrams, nix hardwarenahes), aber irgendwie hab ich den Eindruck, dass dieses "C ist schnell"-Ding hauptsächlich daher kommt, weil so gut wie jeder Programmierer mal versucht hat, ein Spiel zu programmieren, und es ihm in dieser Zeit eingeprügelt wurde.
Um mal eine weitere Sprache einzuwerfen: Erlang. Funktional, Nebenläufig und wird tatsächlich Praktisch eingesetzt (Nokia, afaik).
Es liegt an deinem Umfeld ... für numerisches Programmieren, Simulationen, Echtzeitberechnungen, etc. ist Python selbst viel zu langsam. Bei Webanwendungen fällt die Langsamkeit von Python nur deswegen nicht auf, weil die Leitung meist noch langsamer ist
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Oh klasse, ein Sprachen-Post! Und du hast echt bunt durch die Paradigmen gewühlt
In diesem Umfeld ist vielleicht auch Clojure als ein Lisp auf der JVM erwähnenswert, also zumindest wenn du damit auch wirklich was anfangen willst. Für "Erleuchtungszwecke" würde ich eher auf Scheme zurückgreifen, wenn es denn schon Lisp sein soll.
Falls du Fragen hast: nur her damit!
Ja, und es hat einige ziemlich gute Online-Ressourcen, ist sehr hip und die Community soll ganz toll sein. Außerdem sehr populär zurzeit, GHC wird immer besser und eine Menge Libraries sind im entstehen. Für "erleuchtung" sehr fein, als Zweitsprache für irgendwelche Aufgaben kann ich es mir weniger vorstellen.herakles hat geschrieben:1. Haskell - rein funktional. Soll daher sehr gut sein um eine komplett neue, "erleuchtende", Sichtweise aufs Programmieren zu bekommen.
Nein, eigentlich gar nicht wie Haskell. Dynamisch typisiert, wenig funktional, weniger Syntax. Dafür mehr Metaprogrammierung mit Makros. CL ist im Vergleich zu Scheme IMHO die hässlichere Sprache, gerade wenn man auf "Erleuchtung" aus ist, aber das Objektsystem CLOS (von dem es massig Kopien in der Scheme-Welt gibt) ist sicher etwas recht eigenes.herakles hat geschrieben:2. Common Lisp - ähnlich Haskell jedoch multiparadigmisch. Enorme Flexibilität.
Eine meiner Lieblingssprachen: ein Lisp-1 (mit nur einem Namespace, nicht so wie CL mit mehreren), funktional, hübsche Makros, gute Implementationen. Habe mal gehört jemand nannte Haskell die pythonischste Sprache neben Python; aber für mich ist das Scheme.herakles hat geschrieben:3. Scheme - wie Common Lisp so weit ich weiss. Wo ist der Unterschied?
In diesem Umfeld ist vielleicht auch Clojure als ein Lisp auf der JVM erwähnenswert, also zumindest wenn du damit auch wirklich was anfangen willst. Für "Erleuchtungszwecke" würde ich eher auf Scheme zurückgreifen, wenn es denn schon Lisp sein soll.
Kann nicht nur funktional, bevorzugt dies auch. Der O-Bestandteil ist eher eine nette Dreingabe. Metaprogrammierung via camlp4 und camlp5 möglich, wohl die nächste funktionale Sprache auf meiner Todo-Liste.herakles hat geschrieben:4. Ocaml - kann funktional. Dazu noch bei Geschwindigkeit auf Augenhöhe mit C++.
Ja und es gibt relativ viele Ressourcen dazu. Habe mich aber nicht sonderlich damit beschäftigt, da es seinerzeit keine überzeugenden freien Implementationen gab.herakles hat geschrieben:6. Smalltalk - rein Objektorientiert. Deutlich besser als Java, C++ für OO.
Ja, das ist echt eine gute Idee und als Zweitsprache wohl am empfehlenswertesten.Ich fluche immer ganz fürchterlich über die Datentypen die sich nicht automatisch vergrößern, dagegen ist manuelle Speicherverwaltung ja kein Problem. Und wenn dann gibt es zur Not auch Boehm-GC.herakles hat geschrieben:7. C - eigentlich Standardwissen und sehr sinnvoll im zusammenhang mit Python. Aber ob ich so lust aufs manuelle Speichermanagement habe? Naja. Vielleicht weiss man dann Python noch mehr zu schätzen.
Ich habe hier mal ein APL-Buch gehabt und bin zum Entschluss gekommen, dass es für die Tonne ist. Inzwischen bräuchte man keine eigene Tastatur mehr, das könnte man sicher irgendwie mappen aber im Vergleich zu den anderen Sprachen war es mir doch zu uninteressant und freie Implementationen gab es damals keine (hat sich inzwischen geändert, aber ich habe kein Interesse an APL mehr).herakles hat geschrieben:8. APL - hab irgendwo mal positives darüber gelesen. Kann auch sein, dass das ein ein Artikel aus lang vergessenen Zeiten war. In jedem Fall interessant was für Hieroglyphen dort verwendet werden und dass man wohl sogar ne extra Tastatur braucht. Aber wozu ist diese Sprache denn gut?
Für Logik. Du deklarierst damit wissen und er deduziert dann aus diesem Wissen fakten. Fast wie ein CAS, das Gleichungen löst. Ein Buch dazu steht bei mir im Regal, aber Logik ist momentan für mich das am wenigsten interessante Paradigma. Sinnvolle Anwendungen für den Normalsterblichen: eher kaum.herakles hat geschrieben:10. Prolog - Soll ja ziemlich anders sein aber wozu ist das?
Ich finde andere stackbasierte Sprachen interessanter. Letztens habe ich relativ viel PostScript gemacht und da man damit direkt auf ein Canvas zeichnen kann super für den Einstieg gedacht (und es gibt dafür auch klasse Literatur). Außerdem gibt es Factor: Meine erste Factor-Session war die spannendste Hacking-Session die ich jemals hatte, ich habe (durch den guten interaktiven Modus den es früher mal hatte) eine Menge gelernt. Hat auch eine ganze Menge Tools dabei, die es halbwegs für die reale Welt brauchbar machen.herakles hat geschrieben:11. Forth - Ebefalls sehr flexible Sprache. Scheinbar gibt es nur Leute die Forth über alles lieben oder hassen. Dazweischen hab ich noch nichts gesehen.
Eher nicht. Assembler gibt es ja so viele wie es Prozessorfamilien gibt und ich muss auch sagen dass die Sprache weder interessant sind, noch übermäßig lehrreich. Reicht also sich die Assembler-Konzepte anzuschauen, richtig Assembler-Code zu schreiben finde ich unnötig.herakles hat geschrieben:13. Assembler, Hex, Bin, Lötkolben
Falls du Fragen hast: nur her damit!
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Kann man damit dann wirklich nichts als 2.Sprache anfangen?Leonidas hat geschrieben:Ja, und es hat einige ziemlich gute Online-Ressourcen, ist sehr hip und die Community soll ganz toll sein. Außerdem sehr populär zurzeit, GHC wird immer besser und eine Menge Libraries sind im entstehen. Für "erleuchtung" sehr fein, als Zweitsprache für irgendwelche Aufgaben kann ich es mir weniger vorstellen.herakles hat geschrieben:1. Haskell - rein funktional. Soll daher sehr gut sein um eine komplett neue, "erleuchtende", Sichtweise aufs Programmieren zu bekommen.
Es soll doch durch das funktionale Konzept einiges leichter sein (zB Rekursion oder sowas).
Da könnte man diese Sprache doch für mathmatische Zwecke anwenden. zB auf Seiten wie project-euler. Aber ich habe keine Ahnung von der Sprache, das meiste hab ich nur aufgeschnappt.
Ich find Prolog (nach lesen des Wikipediaartikels) irgendwie cool.Leonidas hat geschrieben:Für Logik. Du deklarierst damit wissen und er deduziert dann aus diesem Wissen fakten. Fast wie ein CAS, das Gleichungen löst. Ein Buch dazu steht bei mir im Regal, aber Logik ist momentan für mich das am wenigsten interessante Paradigma. Sinnvolle Anwendungen für den Normalsterblichen: eher kaum.herakles hat geschrieben:10. Prolog - Soll ja ziemlich anders sein aber wozu ist das?
Ich werd mir das demnächst mal anschaun. Es ist schon cool, wenn man einfach das Problem eingibt und der Computer das dann löst.
Aber das sieht auch eher nach "Spielerei" aus als nach wirklichem Nutzen.
Aber es wird wohl nicht schaden, sich Prolog und Haskell mal anzugucken, allein um zu sehen, was es alles für verschiedene Sprachen gibt
So ähnlich (mit einiger Unschärfe) ist das bei mir auch, gemeinsam ist uns auf jeden Fall, dass es in meinem Leben bisher auch keine Notwendigkeit gab, C/C++ zu lernen (das wird auch so bleiben), ich allerdings beim Versuch, die ein oder andere Aufgabe bei SPOJ zu lösen, an die Geschwindigkeitsgrenzen von Python gestoßen bin (aber die Fälle konnte ich bisher an einer Hand abzählen).herakles hat geschrieben:In erster Linie möchte ich einfach nur eine zweite Sprache erlernen. Ich mache das nicht beruflich sondern nur als Hobby.
Ich habe mir darauf hin die Sprache D angesehen, die gedacht ist (wie der Name schon sagt) als Weiterentwicklung von C/C++. Inwieweit das gelungen ist, weiß ich nicht (weil ich ja weder C noch C++ beherrsche). Ich meine mich zu erinnern, dass es vor einiger Zeit hier im Forum mal jemanden gab, der sich für D erwärmen konnte.
Nett ist es auf jeden Fall, allerdings weiß man dann auch, was man an Python hat. Es gibt ein dt. Buch, das die Grundlagen behandelt, ansonsten sieht es mit Doku (auch engl.) nicht so gut aus. Auf Grund der Nähe zu C und der Möglichkeit, C-Bibliotheken einzubinden, ist es von Vorteil, wenn man C schon beherrscht.
Für die Urlaubszeit habe ich mir mal Haskell vorgenommen. Was mir persönlich daran gefällt - abgesehen von dem Reiz der funktionalen Sprache und der ganz anderen Denkweise - ist wie bei Python ein interaktiver Interpreter (neben dem Compiler) und die Möglichkeit mit beliebig großen Ganzzahlen rechnen zu können.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich habe nicht gesagt, dass man mit Haskell nichts anfangen kann, nur scheint es mir als zweite Sprache für Alltagsaufgaben zu kompliziert. Naja, immerhin gibt es HackageKarl hat geschrieben:Kann man damit dann wirklich nichts als 2.Sprache anfangen?
Es soll doch durch das funktionale Konzept einiges leichter sein (zB Rekursion oder sowas).
Übrigens: *Die* Sprache der Rekursion ist ja traditionell eher Scheme, schließlich wurde "The Little Schemer", das kanonische Rekursionslehrbuch, genau dafür geschrieben
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
HerrHagen und problembär:
Mir ist die nützlichkeit von C durchaus bewusst. Immerhin ist Python selbst ja auch in C implementiert. Und die Kombo Python+C deckt auch >95% der Problemstellungen ab die man normalerweise antrifft.
C für Geschwindigkeit. Python für den Rest.
Ich hab hier sogar ein recht gutes C-Buch rumstehen: "C Programmieren von Anfang an" von Helmut Erlenkötter. Es gibt nur 2 Probleme bei C:
1. mach ich Programmierung nicht beruflich und programmiere auch keine Hardwaretreiber oder Spiele. Ob es da dann lohnt sich Wochen bis Monate in C einzuarbeiten?
2. Es gibt so einige Sprachen die deutlich interessanter sind. ZB so ziemlich alle in meiner o.a. Liste.
keppla:
Erlang hab ich auch schon gehört. Ebenso gibt es auch noch Icon, Mercury, Clean, Eiffel, Dylan, dass bereits erwähnte Factor und einige interessante mehr. Aber ich wollte meine Liste etwas übersichtlich halten.
http://araujoluis.blogspot.com/2007/04/ ... aming.html
Empfehle allen Freunden des funktionalen und von Python folgende Seite durchzulesen:
http://lukeplant.me.uk/blog.php?id=1107301645
"I've found, contrary to what you sometimes read, that learning Python and Haskell has not improved my programming using other languages."
...
"I find I think in Python, and even in Haskell to some extent, even though I have used Haskell very little. I constantly find myself wanting to use idioms from these languages, or noticing how much less code I'd be able to write if I was using one of these languages (which, although very different from each other, are both much more powerful than the language I use at work, C#). It's very common for me to notice that using either of these languages I could decrease a chunk of code by a factor of 2-5, and not rare to see a factor of 10-20 in certain parts of the code base."
...
"When I get frustrated with the C# code I write, I then go and write it again in Haskell and Python, to demonstrate to myself how much better they are, which is a pointless exercise that only demotivates me further."
Eine Frage: Kann man Ocaml als ernsthaften Ersatz für C++ sehen? Wie verhällt sich Ocaml gegenüber C++ für mittlere bis größere Projekte?
Hab übrigens auch schon gesehen, dass Leute tatsächlich Binärcode und Hexcode nutzen, also 100101 01110 und 000EFD6C6 etc. Einmal wars glaub ich so ne nottfalllösung wo kein C-Compiler und auch nicht Assembler vorhanden war. Lediglich ein Editor.
PS: Könnt ihr mal für jede der angegebenen Sprachen einige Referenzprogramme verlinken? Würd gern mal sehen was so geschrieben werden kann. Konnte selbst leider nicht allzuviel bekanntes finden.
Für Ocaml hab ich rausgefunden, dass die P2P-Software MLDonkey darin geschrieben wurde:
http://www.linux-user.de/ausgabe/2003/0 ... donkey.png
Nicht schlecht.
Mir ist die nützlichkeit von C durchaus bewusst. Immerhin ist Python selbst ja auch in C implementiert. Und die Kombo Python+C deckt auch >95% der Problemstellungen ab die man normalerweise antrifft.
C für Geschwindigkeit. Python für den Rest.
Ich hab hier sogar ein recht gutes C-Buch rumstehen: "C Programmieren von Anfang an" von Helmut Erlenkötter. Es gibt nur 2 Probleme bei C:
1. mach ich Programmierung nicht beruflich und programmiere auch keine Hardwaretreiber oder Spiele. Ob es da dann lohnt sich Wochen bis Monate in C einzuarbeiten?
2. Es gibt so einige Sprachen die deutlich interessanter sind. ZB so ziemlich alle in meiner o.a. Liste.
keppla:
Erlang hab ich auch schon gehört. Ebenso gibt es auch noch Icon, Mercury, Clean, Eiffel, Dylan, dass bereits erwähnte Factor und einige interessante mehr. Aber ich wollte meine Liste etwas übersichtlich halten.
herakles hat geschrieben:1. Haskell - rein funktional. Soll daher sehr gut sein um eine komplett neue, "erleuchtende", Sichtweise aufs Programmieren zu bekommen.
Es gibt aber doch Menschen die es für praktische Tätigkeiten einsetzen:Leonidas hat geschrieben:Ja, und es hat einige ziemlich gute Online-Ressourcen, ist sehr hip und die Community soll ganz toll sein. Außerdem sehr populär zurzeit, GHC wird immer besser und eine Menge Libraries sind im entstehen. Für "erleuchtung" sehr fein, als Zweitsprache für irgendwelche Aufgaben kann ich es mir weniger vorstellen.
http://araujoluis.blogspot.com/2007/04/ ... aming.html
Empfehle allen Freunden des funktionalen und von Python folgende Seite durchzulesen:
http://lukeplant.me.uk/blog.php?id=1107301645
"I've found, contrary to what you sometimes read, that learning Python and Haskell has not improved my programming using other languages."
...
"I find I think in Python, and even in Haskell to some extent, even though I have used Haskell very little. I constantly find myself wanting to use idioms from these languages, or noticing how much less code I'd be able to write if I was using one of these languages (which, although very different from each other, are both much more powerful than the language I use at work, C#). It's very common for me to notice that using either of these languages I could decrease a chunk of code by a factor of 2-5, and not rare to see a factor of 10-20 in certain parts of the code base."
...
"When I get frustrated with the C# code I write, I then go and write it again in Haskell and Python, to demonstrate to myself how much better they are, which is a pointless exercise that only demotivates me further."
herakles hat geschrieben:2. Common Lisp - ähnlich Haskell jedoch multiparadigmisch. Enorme Flexibilität.
Ja. Lisp ist schon sehr interessant. Dass die Sprache sich selbst zur Laufzeit programmieren kann ist beeindruckend. Eine der schwierigsten Entscheidungen ist wohl Lisp oder Haskell wenn man in die funktionale Welt will.Leonidas hat geschrieben:Nein, eigentlich gar nicht wie Haskell. Dynamisch typisiert, wenig funktional, weniger Syntax. Dafür mehr Metaprogrammierung mit Makros. CL ist im Vergleich zu Scheme IMHO die hässlichere Sprache, gerade wenn man auf "Erleuchtung" aus ist, aber das Objektsystem CLOS (von dem es massig Kopien in der Scheme-Welt gibt) ist sicher etwas recht eigenes.
herakles hat geschrieben:3. Scheme - wie Common Lisp so weit ich weiss. Wo ist der Unterschied?
Auch eine viel diskutierte schwierige Entscheidung. Scheme ist tatsächlich "reiner". Dafür ist cLisp für den praktischen Eisatz deutlich besser geeignet.Leonidas hat geschrieben:Eine meiner Lieblingssprachen: ein Lisp-1 (mit nur einem Namespace, nicht so wie CL mit mehreren), funktional, hübsche Makros, gute Implementationen. Habe mal gehört jemand nannte Haskell die pythonischste Sprache neben Python; aber für mich ist das Scheme.
In diesem Umfeld ist vielleicht auch Clojure als ein Lisp auf der JVM erwähnenswert, also zumindest wenn du damit auch wirklich was anfangen willst. Für "Erleuchtungszwecke" würde ich eher auf Scheme zurückgreifen, wenn es denn schon Lisp sein soll.
herakles hat geschrieben:4. Ocaml - kann funktional. Dazu noch bei Geschwindigkeit auf Augenhöhe mit C++.
Ocaml ist sehr interessant. Besonders, dass die Geschwindigkeit auf Augenhöhe mit C++ ist, ist beeindruckend.Leonidas hat geschrieben:Kann nicht nur funktional, bevorzugt dies auch. Der O-Bestandteil ist eher eine nette Dreingabe. Metaprogrammierung via camlp4 und camlp5 möglich, wohl die nächste funktionale Sprache auf meiner Todo-Liste.
Eine Frage: Kann man Ocaml als ernsthaften Ersatz für C++ sehen? Wie verhällt sich Ocaml gegenüber C++ für mittlere bis größere Projekte?
herakles hat geschrieben:6. Smalltalk - rein Objektorientiert. Deutlich besser als Java, C++ für OO.
Über Smalltalk hört man ja auch nur gutes. Auch hier würde mich der Vergleich zu C++ interessieren. Also Geschwindigkeitsnachteile ist klar. Aber wie siehts mit der skalierbarkeit aus?Leonidas hat geschrieben:Ja und es gibt relativ viele Ressourcen dazu. Habe mich aber nicht sonderlich damit beschäftigt, da es seinerzeit keine überzeugenden freien Implementationen gab.
herakles hat geschrieben:7. C - eigentlich Standardwissen und sehr sinnvoll im zusammenhang mit Python. Aber ob ich so lust aufs manuelle Speichermanagement habe? Naja. Vielleicht weiss man dann Python noch mehr zu schätzen.
ja, allerdings s.o.Leonidas hat geschrieben:Ja, das ist echt eine gute Idee und als Zweitsprache wohl am empfehlenswertesten.Ich fluche immer ganz fürchterlich über die Datentypen die sich nicht automatisch vergrößern, dagegen ist manuelle Speicherverwaltung ja kein Problem. Und wenn dann gibt es zur Not auch Boehm-GC.
herakles hat geschrieben:8. APL - hab irgendwo mal positives darüber gelesen. Kann auch sein, dass das ein ein Artikel aus lang vergessenen Zeiten war. In jedem Fall interessant was für Hieroglyphen dort verwendet werden und dass man wohl sogar ne extra Tastatur braucht. Aber wozu ist diese Sprache denn gut?
Trotzdem weckt APL u.a. aufgrund seiner exotik mein Interesse. Wohl auch weil ich aus der Mathe-Ecke komme. Weiss aber immer noch nicht wie APL im Vergleich zu anderen Sprachen steht.Leonidas hat geschrieben:Ich habe hier mal ein APL-Buch gehabt und bin zum Entschluss gekommen, dass es für die Tonne ist. Inzwischen bräuchte man keine eigene Tastatur mehr, das könnte man sicher irgendwie mappen aber im Vergleich zu den anderen Sprachen war es mir doch zu uninteressant und freie Implementationen gab es damals keine (hat sich inzwischen geändert, aber ich habe kein Interesse an APL mehr).
herakles hat geschrieben:10. Prolog - Soll ja ziemlich anders sein aber wozu ist das?
Wenns nur für Logik ist, dann ists nichts für mich. Außer es gibt noch andere Anwendungsbereiche. Aber im Vergleich zu anderen hier aufgeführten Sprachen ist Prolog eher weniger sinnvoll.Leonidas hat geschrieben:Für Logik. Du deklarierst damit wissen und er deduziert dann aus diesem Wissen fakten. Fast wie ein CAS, das Gleichungen löst. Ein Buch dazu steht bei mir im Regal, aber Logik ist momentan für mich das am wenigsten interessante Paradigma. Sinnvolle Anwendungen für den Normalsterblichen: eher kaum.
herakles hat geschrieben:11. Forth - Ebefalls sehr flexible Sprache. Scheinbar gibt es nur Leute die Forth über alles lieben oder hassen. Dazweischen hab ich noch nichts gesehen.
Mich würde jetzt noch interessieren wo denn genau die Anwendungsgebiete für Forth und Factor liegen. Welche Stäken und Schwächen hast du festgestellt?Leonidas hat geschrieben:Ich finde andere stackbasierte Sprachen interessanter. Letztens habe ich relativ viel PostScript gemacht und da man damit direkt auf ein Canvas zeichnen kann super für den Einstieg gedacht (und es gibt dafür auch klasse Literatur). Außerdem gibt es Factor: Meine erste Factor-Session war die spannendste Hacking-Session die ich jemals hatte, ich habe (durch den guten interaktiven Modus den es früher mal hatte) eine Menge gelernt. Hat auch eine ganze Menge Tools dabei, die es halbwegs für die reale Welt brauchbar machen.
herakles hat geschrieben:13. Assembler, Hex, Bin, Lötkolben
Kommt natürlich auch wieder auf den Anwendungsbereich an. Disassembler, OllyDBG, uC-Programmierung, OS-Programmierung wären Bereiche. Aber wenn schon Assembler, dann bräuchte man doch erstmal C-Kenntnisse oder nicht?Leonidas hat geschrieben:Eher nicht. Assembler gibt es ja so viele wie es Prozessorfamilien gibt und ich muss auch sagen dass die Sprache weder interessant sind, noch übermäßig lehrreich. Reicht also sich die Assembler-Konzepte anzuschauen, richtig Assembler-Code zu schreiben finde ich unnötig.
Hab übrigens auch schon gesehen, dass Leute tatsächlich Binärcode und Hexcode nutzen, also 100101 01110 und 000EFD6C6 etc. Einmal wars glaub ich so ne nottfalllösung wo kein C-Compiler und auch nicht Assembler vorhanden war. Lediglich ein Editor.
Schon geschehen. Danke allen für die Antworten.Leonidas hat geschrieben:Falls du Fragen hast: nur her damit!
PS: Könnt ihr mal für jede der angegebenen Sprachen einige Referenzprogramme verlinken? Würd gern mal sehen was so geschrieben werden kann. Konnte selbst leider nicht allzuviel bekanntes finden.
Für Ocaml hab ich rausgefunden, dass die P2P-Software MLDonkey darin geschrieben wurde:
http://www.linux-user.de/ausgabe/2003/0 ... donkey.png
Nicht schlecht.
Das halt ich ich für ein Gerücht...Hab übrigens auch schon gesehen, dass Leute tatsächlich Binärcode und Hexcode nutzen, also 100101 01110 und 000EFD6C6 etc. Einmal wars glaub ich so ne nottfalllösung wo kein C-Compiler und auch nicht Assembler vorhanden war. Lediglich ein Editor.
Wohl eher 99,9%.Und die Kombo Python+C deckt auch >95% der Problemstellungen ab die man normalerweise antrifft.
So schwierig ist C nicht. C ist eine minimalistische Sprache. Die Lernkurve hat bloß einen großen Srpung in der Mitte. Wenn man einmal das Konzept von Pointern und der statischen Typisierung verstanden hat, ist eigentlich alles recht einfach.1. mach ich Programmierung nicht beruflich und programmiere auch keine Hardwaretreiber oder Spiele. Ob es da dann lohnt sich Wochen bis Monate in C einzuarbeiten?
Zudem ist die C-Syntax nun mal der Standard (ob einen das nun gefällt oder nicht (mir sicher nicht)). Und bevor man sich mit irgendwelchen Exoten (APL, Forth) beschäftigt, sollte man sich erstmal den Basics zuwenden. Und wenn es nur ist um zu verstehen warum Software auch heute noch so oft abstürzt.
MFG HerrHagen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du hast nicht genau gesagt, was du damit machen willst. Je nachdem was du vorhast kann die Antwort irgendwo zwischen "Nein, ganz sicher nicht" und "Ja, umbedingt" rangieren.herakles hat geschrieben:1. mach ich Programmierung nicht beruflich und programmiere auch keine Hardwaretreiber oder Spiele. Ob es da dann lohnt sich Wochen bis Monate in C einzuarbeiten?
Das habe ich nicht bestritten. Nur vermute ich, dass Kosten/Nutzen für praktische Sachen bei ganz vielen Sachen sich nicht rentieren. Wobei es natürlich schwer ist, bei Kosten/Nutzen in irgendeiner Sprache im vergleich zu Python zu Punkten.herakles hat geschrieben:Es gibt aber doch Menschen die es für praktische Tätigkeiten einsetzen:
http://araujoluis.blogspot.com/2007/04/ ... aming.html
Kann da nicht zustimmen. Er jammert das C# keine funktionale Sprache ist und die Frameworks nicht funktional sind. Das ist so als würde er bei Haskell-Libraries jammern, dass sie nicht objektorientiert sind.herakles hat geschrieben:Empfehle allen Freunden des funktionalen und von Python folgende Seite durchzulesen:
Eher Haskell.herakles hat geschrieben:Ja. Lisp ist schon sehr interessant. Dass die Sprache sich selbst zur Laufzeit programmieren kann ist beeindruckend. Eine der schwierigsten Entscheidungen ist wohl Lisp oder Haskell wenn man in die funktionale Welt will.
Du scheinst hier "just for fun" mit "enlightenment" mit "practical use" zu mischen. Für den praktischen Einsatz ist Scheme auch brauchbar, das einzige Problem ist halt, dass es weniger Libraries gibt (dafür bringen die Implementationen oftmals mehr mit, als die CL-Implementationen). Naja, wie man halt brauchbar definiert. Ich habe 2 Tage für ein (funktionales) Scheme-Programm gebraucht, was in Python imperativ nach 30 Minuten fertig wäre. Mit CL wäre das imperativ vielleicht 1,5 Tage gewesen.herakles hat geschrieben:Auch eine viel diskutierte schwierige Entscheidung. Scheme ist tatsächlich "reiner". Dafür ist cLisp für den praktischen Eisatz deutlich besser geeignet.
Wenn du einen Ersatz für C++ suchst, dann ist D wohl interessanter.herakles hat geschrieben:Eine Frage: Kann man Ocaml als ernsthaften Ersatz für C++ sehen? Wie verhällt sich Ocaml gegenüber C++ für mittlere bis größere Projekte?
Wenn du komische Zeichen im Quellcode magst - Fortress unterstützt auch so etwas.herakles hat geschrieben:Trotzdem weckt APL u.a. aufgrund seiner exotik mein Interesse. Wohl auch weil ich aus der Mathe-Ecke komme. Weiss aber immer noch nicht wie APL im Vergleich zu anderen Sprachen steht.
Anwendungsgebiete: Hacken aus Spaß und Freude. Oder wie Zed Shaw es sagte: "Factor ist cool, weil es nie, unter keinen Umständen Enterprise werden wird". Stärken sind wohl die wahnsinnig reguläre Syntax, Schwächen sind die IMHO relativ geringe Abstraktion. Das man bei Funktionsaufrufen schauen muss dass die Parameter richtig auf dem Stack liegen und dass dann die Funktion nicht irgendeinen Blödsinn mit dem Stack anstellt ist nicht ganz so übersichtlich. Auch kommen mir stackbasierte Programme "rückwärts" vor.herakles hat geschrieben:Mich würde jetzt noch interessieren wo denn genau die Anwendungsgebiete für Forth und Factor liegen. Welche Stäken und Schwächen hast du festgestellt?
Nein und nein. Wir programmieren unseren Atmega8515 mit C und würden nie im Leben auf die Idee kommen dort Assembler rauszupacken. Auch in einem OS ist der Assembler-Anteil sehr überschaubar.herakles hat geschrieben:uC-Programmierung, OS-Programmierung wären Bereiche.
Nein, wie kommst du darauf?herakles hat geschrieben:Aber wenn schon Assembler, dann bräuchte man doch erstmal C-Kenntnisse oder nicht?
Ja, kommt alle paar Monate auf TheDailyWTF.herakles hat geschrieben:Hab übrigens auch schon gesehen, dass Leute tatsächlich Binärcode und Hexcode nutzen, also 100101 01110 und 000EFD6C6 etc. Einmal wars glaub ich so ne nottfalllösung wo kein C-Compiler und auch nicht Assembler vorhanden war. Lediglich ein Editor.
Neben MLdonkey für OCaml und Unison sowie darcs für Haskell gibt es nichts bekanntes.herakles hat geschrieben:PS: Könnt ihr mal für jede der angegebenen Sprachen einige Referenzprogramme verlinken? Würd gern mal sehen was so geschrieben werden kann. Konnte selbst leider nicht allzuviel bekanntes finden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich glaube das Thema alternative Sprachen wurde hier schon einige male diskutiert. Dennoch..
Ich halte C/C++ eigentlich für ein MUSS. Es ist speziell in der Industrie noch immer der Standard. Auch wenn zumindest C etwas ärmlich an Funktion daherkommt. C++ hat mit der STL schon einiges zu bieten.
Haskell gehört ebenso zu meinen Favoriten. Bedarf aber immer einem Stück Motivation und vor allen Dingen Durchhaltevermögen. Z. Bsp. die Tatsache das es keine Schleifen gibt ist für mich immer wieder eine Challenge. Ohne Übung lässt sich bei weitem nicht so intuitiv ein Problem lösen.
Selbst bin ich auch an OCaml interessiert. Vielversprechend.
Ich halte C/C++ eigentlich für ein MUSS. Es ist speziell in der Industrie noch immer der Standard. Auch wenn zumindest C etwas ärmlich an Funktion daherkommt. C++ hat mit der STL schon einiges zu bieten.
Haskell gehört ebenso zu meinen Favoriten. Bedarf aber immer einem Stück Motivation und vor allen Dingen Durchhaltevermögen. Z. Bsp. die Tatsache das es keine Schleifen gibt ist für mich immer wieder eine Challenge. Ohne Übung lässt sich bei weitem nicht so intuitiv ein Problem lösen.
Selbst bin ich auch an OCaml interessiert. Vielversprechend.
Wenn es einem um "Erleuchtung" und das Erweitern des eigenen Horizonts geht, würde ich extreme Sprachen vorschlagen, die sich auf ein Paradigma konzentrieren. Pragmatischer sind Multiparadigmen-Sprachen, wo die einzelnen Paradigmen dann natürlich schwerer zu erlernen sind, weil sie zu vermischt sind.
Für rein funktionale Programmierung mit statisches Typsystem bietet sich ML (moderne Variante mit ein bisschen Objektorientierung ist OCaml) an. Für funktionale Programmierung mit dynamischem Typsystem würde ich Scheme empfehlen. Scheme ist zudem ideal, wenn man Metazirkularität und Homoikonizität kennenlernen möchte. Siehe auch http://www.python-forum.de/post-83870.html#83870
Haskell ist rein funktional, statisch getypt und träge in der Auswertung, was der Sprache einen ganz eigenen Twist gibt. Wer in die Welt der Monaden und Arrows vordringen will, ist hier richtig.
Für echte Objektorientierung führt ein Weg an Smalltalk vorbei, schon weil das Smalltalk-System historisch nicht nur wichtig als Programmiersprache ist, sondern auch für Maus, GUIs und Entwurfsmuster wie MVC und MVP. Für den Extrakick an Strangeness lohnt ein Blick auf Self, Io oder, zusammen mit den beiden oben genannten Schlagworten auf Ola Binis Ioke.
Stackbasierte Programmiersprachen wie Forth sind einfach anders und erlauben sowohl maschinennahe Programmierung als auch starke Abstraktionen. Factor ist eine moderne Implementierung. Wer eine Sun Sparc, einen PowerPC-Mac oder sonst ein Gerät mit OpenBoot BIOS hat, kann dort übrigens direkt Forth benutzen, es ist eingebaut. Ist es nicht cool, dass die nakte Maschine Fibonacci-Zahlen berechnen kann: `: fib dup 2 < if drop 1 else dup 1- fib 2- fib + then ; 10 fib`. Siehe auch http://www.python-forum.de/post-122068.html#122068
Prolog kann man machen, bringt einem aber IMHO nicht so viel. Selbst Syntax, aber funktional und nebenläufig ist Erlang. Kann man auch machen.
Ada, C, usw. finde ich zu gewöhnlich. Assembler bringt außer Schmerzen glaube ich auch nicht viel. Ich habe nach Basic zwar Z80 (teilweise sogar im Hexcode) erlernt, aber ich denke nicht, dass man heutzutage noch diesen Weg gehen muss.
Wichtig ist eigentlich nur eins: Wenn man eine neue Sprache erlernen will, darf man nicht einfach die bekannte Sprache in einer Syntax einzusetzen versuchen, sondern muss sich auf die neue Sprache auch wirklich einlassen.
Stefan
Für rein funktionale Programmierung mit statisches Typsystem bietet sich ML (moderne Variante mit ein bisschen Objektorientierung ist OCaml) an. Für funktionale Programmierung mit dynamischem Typsystem würde ich Scheme empfehlen. Scheme ist zudem ideal, wenn man Metazirkularität und Homoikonizität kennenlernen möchte. Siehe auch http://www.python-forum.de/post-83870.html#83870
Haskell ist rein funktional, statisch getypt und träge in der Auswertung, was der Sprache einen ganz eigenen Twist gibt. Wer in die Welt der Monaden und Arrows vordringen will, ist hier richtig.
Für echte Objektorientierung führt ein Weg an Smalltalk vorbei, schon weil das Smalltalk-System historisch nicht nur wichtig als Programmiersprache ist, sondern auch für Maus, GUIs und Entwurfsmuster wie MVC und MVP. Für den Extrakick an Strangeness lohnt ein Blick auf Self, Io oder, zusammen mit den beiden oben genannten Schlagworten auf Ola Binis Ioke.
Stackbasierte Programmiersprachen wie Forth sind einfach anders und erlauben sowohl maschinennahe Programmierung als auch starke Abstraktionen. Factor ist eine moderne Implementierung. Wer eine Sun Sparc, einen PowerPC-Mac oder sonst ein Gerät mit OpenBoot BIOS hat, kann dort übrigens direkt Forth benutzen, es ist eingebaut. Ist es nicht cool, dass die nakte Maschine Fibonacci-Zahlen berechnen kann: `: fib dup 2 < if drop 1 else dup 1- fib 2- fib + then ; 10 fib`. Siehe auch http://www.python-forum.de/post-122068.html#122068
Prolog kann man machen, bringt einem aber IMHO nicht so viel. Selbst Syntax, aber funktional und nebenläufig ist Erlang. Kann man auch machen.
Ada, C, usw. finde ich zu gewöhnlich. Assembler bringt außer Schmerzen glaube ich auch nicht viel. Ich habe nach Basic zwar Z80 (teilweise sogar im Hexcode) erlernt, aber ich denke nicht, dass man heutzutage noch diesen Weg gehen muss.
Wichtig ist eigentlich nur eins: Wenn man eine neue Sprache erlernen will, darf man nicht einfach die bekannte Sprache in einer Syntax einzusetzen versuchen, sondern muss sich auf die neue Sprache auch wirklich einlassen.
Stefan
Was meinst du in diesem Zusammenhand mit „Skalierbarkeit“?herakles hat geschrieben:Über Smalltalk hört man ja auch nur gutes. Auch hier würde mich der Vergleich zu C++ interessieren. Also Geschwindigkeitsnachteile ist klar. Aber wie siehts mit der skalierbarkeit aus?
Für Smalltalk-80 wurde Anfang der 90er noch bevor es Java gab der JIT-Compiler erfunden. Es hat Jahre gedauert, bis Java aufholen konnte und jetzt mit Hotspot die selbe VM-Technologie benutzt und weiter entwickelt hat, wie sie für Smalltalk (genauer Self) entwickelt wurde. Googles V8 JavaScript-Engine benutzt den selben Ansatz und ist daher mit Abstand die schnellste Implementierung. Prinzipiell kann die Performance daher vergleichbar mit Java und C++ sein. Viele existierende Systeme sind aber irgendwo auf dem Weg zu diesem Ziel bei "gut genug" stehen geblieben bzw. hatten wie CPython nie ein JIT-Compiler.
Squeak-Smalltak ist ein reiner Interpreter und von der Performance gleichauf mit CPython - jedenfalls was einen kurzer Test für Fibonacci-Zahlen angeht. Auf Grund der einfacheren Objektstruktur und des besseren Garbage-Collectors würde ich sagen, dass andere Benchmarks in Squeak besser abschneiden als sie es in CPython würden.
Was mit Skalierbarkeit gemeint ist, kann ich auch nur raten.
Wie bei CPython haben alle mir bekannten Smalltalk-Systeme ein Problem mit Mehrkernsystemen, da die Klassenbibliothek nicht für mehrere Threads ausgelegt ist. Das schränkt die Skalierbarkeit ein, denn man muss jetzt über Betriebssystemprozesse skalieren und jeder Prozess will ein komplettes Smalltalk-System mit eigenen Objekte und 10+ MB Hauptspeicher oder so haben. Die selbe Einschränkung hält aber auch Ruby-on-Rails-basierte Systeme davon ab, beliebt zu sein. Dort geht man von 50+ MB pro Prozess aus. Man müsste es JRuby nachmachen und ein JSmalltalk basierend auf der JVM entwickeln. Dabei hätte man natürlich die selben Probleme wie JRuby, auf einer eigentlich zu statischen Plattform laufen zu müssen, könnte aber die selbe Performance erreichen.
Ein Nachteil ist IMHO eher, dass die Entwicklungsumgebungen, auch wenn sie in den 80er und 90er Jahren führend waren, irgendwie in die Jahre gekommen sind. Squeak-Smalltalk wirkt so einfach fremdartig. Das Pharo-Projekt, auf dem jetzt Seaside aufbaut, bemüht sich allerdings, dies ein bisschen abzumildern. Es gibt da jetzt z.B. neuerdings moderne Truetype-Fonts mit Antialiasing, so wie das native UIs schon seit 10 Jahren oder so haben. Squeak zeichnet, das sollte man erwähnen, wie das Original-Smalltalk-80 von dem es geklont ist, sein UI bis zum letzten Pixel komplett selbst. Es lebt in einem Image, einem Speicherdump aller Objekte und man kann eigentlich sagen, dass das Original-Smalltalk seit es irgendwann im Jahre 1978 gestartet wurde, seit dem nie wieder beendet wurde. Es wird zum Speichern einfach nur angehalten und eingefroren.
Stefan
Squeak-Smalltak ist ein reiner Interpreter und von der Performance gleichauf mit CPython - jedenfalls was einen kurzer Test für Fibonacci-Zahlen angeht. Auf Grund der einfacheren Objektstruktur und des besseren Garbage-Collectors würde ich sagen, dass andere Benchmarks in Squeak besser abschneiden als sie es in CPython würden.
Was mit Skalierbarkeit gemeint ist, kann ich auch nur raten.
Wie bei CPython haben alle mir bekannten Smalltalk-Systeme ein Problem mit Mehrkernsystemen, da die Klassenbibliothek nicht für mehrere Threads ausgelegt ist. Das schränkt die Skalierbarkeit ein, denn man muss jetzt über Betriebssystemprozesse skalieren und jeder Prozess will ein komplettes Smalltalk-System mit eigenen Objekte und 10+ MB Hauptspeicher oder so haben. Die selbe Einschränkung hält aber auch Ruby-on-Rails-basierte Systeme davon ab, beliebt zu sein. Dort geht man von 50+ MB pro Prozess aus. Man müsste es JRuby nachmachen und ein JSmalltalk basierend auf der JVM entwickeln. Dabei hätte man natürlich die selben Probleme wie JRuby, auf einer eigentlich zu statischen Plattform laufen zu müssen, könnte aber die selbe Performance erreichen.
Ein Nachteil ist IMHO eher, dass die Entwicklungsumgebungen, auch wenn sie in den 80er und 90er Jahren führend waren, irgendwie in die Jahre gekommen sind. Squeak-Smalltalk wirkt so einfach fremdartig. Das Pharo-Projekt, auf dem jetzt Seaside aufbaut, bemüht sich allerdings, dies ein bisschen abzumildern. Es gibt da jetzt z.B. neuerdings moderne Truetype-Fonts mit Antialiasing, so wie das native UIs schon seit 10 Jahren oder so haben. Squeak zeichnet, das sollte man erwähnen, wie das Original-Smalltalk-80 von dem es geklont ist, sein UI bis zum letzten Pixel komplett selbst. Es lebt in einem Image, einem Speicherdump aller Objekte und man kann eigentlich sagen, dass das Original-Smalltalk seit es irgendwann im Jahre 1978 gestartet wurde, seit dem nie wieder beendet wurde. Es wird zum Speichern einfach nur angehalten und eingefroren.
Stefan