Was sind wichtige Sprachen, um verschiedene Ansätze und Konzepte zu verstehen? [geschlossen]

172

Wenn Sie nur ein Paar Bolzenschneider und eine Flasche Wodka haben, sieht alles aus wie das Schloss an der Tür von Wolf Blitzers Bootshaus. (Ersetzen Sie das durch einen Hammer und einen Nagel, wenn Sie xkcd nicht lesen)

Ich programmiere derzeit Clojure, Python, Java und PHP, daher bin ich mit der C- und LISP-Syntax sowie der Whitespace-Sache vertraut. Ich kenne imperative, funktionale, unveränderliche OOP- und ein paar Systeme und andere Dinge. Jetzt will ich mehr!

Welche Sprachen verfolgen einen anderen Ansatz und sind entweder für die Auswahl praktischer Werkzeuge oder für das theoretische Verständnis nützlich?

Ich habe keine Lust, eine andere funktionale Sprache (Haskell) oder eine andere zwingende OOP-Sprache (Ruby) zu lernen, und ich möchte auch keine unpraktischen Spaßsprachen wie Brainfuck üben.

Eine sehr interessante Sache, die ich fand, sind monoikonische stapelbasierte Sprachen wie Factor.

Erst wenn ich das Gefühl habe, die meisten Konzepte zu verstehen und Antworten auf alle meine Fragen zu haben, möchte ich über meine eigene Spielzeugsprache nachdenken, um alle meine persönlichen Vorlieben zu berücksichtigen.

Pepijn
quelle
3
Ich würde +1 als xkcd-Referenz alleine verwenden, aber die Frage ist auch interessant.
63
Sie scheinen ein erfolgreicher Programmierer zu sein, der Rest ist inkrementell. Ich versuche nicht, ein Schwanz zu sein, aber ... wie ist dein Leben in Bezug auf Finanzen, Beziehungen, Gesundheit, Spaß, Hobby? Vielleicht ist es jetzt an der Zeit, einige dieser Dinge zu verfolgen. Ich glaube nicht, dass Sie mehr als ein Dutzend Sprachen gleichzeitig beherrschen müssen. Wenn Sie dafür bezahlt werden, lernen Sie es. Wenn Sie ein Buch darüber schreiben möchten, lernen Sie es. Ansonsten haben Sie eine gute Programmierbasis. Warum etwas lernen (wie J - meine Subj-Meinung :)), das Sie nirgendwo ernsthaft (lesen Sie make $) verwenden werden? Sei nicht der coolste Hacker auf einem Friedhof.
Hamish Grubijan
6
Ja, ich bin ein erfolgreicher Programmierer nach meinen eigenen Maßstäben. Ich verdiene momentan nicht viel Geld, aber hey, ich bin 19. Ich investiere Zeit in all diese Punkte und mehr, aber ich finde sowohl Hobby als auch Spaß am Programmieren. Ich möchte auch sagen, dass es einen Unterschied gibt, ob man eine Sprache versteht oder beherrscht. Python und Clojure zu beherrschen ist genug für mich. Ich möchte die anderen Optionen verstehen, die es gibt, da dies meinen Code verbessert, mir hilft, meinen Computer zu verstehen und meine eigene Programmiersprache zu definieren.
Pepijn
5
Haben Sie Programmers.SE gesehen ? Dies fällt in die Art der Frage, die dort besser gestellt wird.
3
Dieses Buch könnte interessant sein: Sieben Sprachen in sieben Wochen: Ein pragmatischer Leitfaden zum Erlernen von Programmiersprachen , von Bruce A. Tate
Martin Ba

Antworten:

287

Praktische Fragen sind sehr subjektiv, daher möchte ich einfach sagen, dass das Erlernen verschiedener Sprachparadigmen nur dazu dient, Sie zu einem besseren Programmierer zu machen. Was ist praktischer als das?

Funktional, Haskell - Ich weiß, dass Sie gesagt haben, dass Sie nicht wollten, aber Sie sollten es wirklich wirklich überdenken. Sie haben mit Clojure und sogar Python einige funktionale Erfahrungen gemacht, aber ohne Haskell haben Sie es nicht in vollen Zügen erlebt. Wenn Sie wirklich gegen Haskell sind, sind gute Kompromisse entweder ML oder OCaml.

Deklarativ, Datalog - Viele Leute würden Prolog in diesem Slot empfehlen, aber ich denke, Datalog ist ein saubereres Beispiel für eine deklarative Sprache.

Array, J - Ich habe J gerade erst entdeckt, aber ich finde, dass es eine atemberaubende Sprache ist. Es wird Ihren Geist in eine Brezel verwandeln. Sie werden J dafür danken.

Stack, Factor / Forth - Factor ist sehr mächtig und ich habe vor, mich so schnell wie möglich damit zu beschäftigen. Forth ist der Urvater der Stack-Sprachen, und als zusätzlichen Bonus ist es einfach, sich selbst zu implementieren . Es gibt etwas zu sagen über das Lernen durch Implementierung.

Datenfluss, Oz - Ich denke, der Einfluss von Oz ist auf den Aufschwung und wird erst in Zukunft weiter wachsen.

Prototypbasiert, JavaScript / Io / Self - Self ist der Urvater und hat großen Einfluss auf jede prototypbasierte Sprache. Dies ist nicht dasselbe wie klassenbasiertes OOP und sollte nicht als solches behandelt werden. Viele Leute kommen zu einer Prototypsprache und erstellen ein Ad-hoc-Klassensystem, aber wenn Ihr Ziel darin besteht, Ihren Geist zu erweitern, dann halte ich das für einen Fehler. Verwenden Sie die Sprache in vollem Umfang. Ideen finden Sie unter Organisieren von Programmen ohne Unterricht .

Expertensystem, CLIPS - Ich empfehle dies immer. Wenn Sie Prolog kennen, haben Sie wahrscheinlich die Oberhand, um sich auf dem Laufenden zu halten, aber es ist eine ganz andere Sprache.

Frink - Frink ist eine Allzwecksprache, die jedoch für ihr System der Einheitenumrechnung bekannt ist. Ich finde diese Sprache sehr inspirierend in ihrem unerbittlichen Bestreben, das Beste in dem zu sein, was sie tut. Plus ... es macht wirklich Spaß!

Funktionale + optionale Typen, Qi - Sie sagen, Sie haben Erfahrung mit einigen Typsystemen, aber haben Sie Erfahrung mit "skinnbaren * Typsystemen? Niemand hat ... aber sie sollten. Qi ist in vielerlei Hinsicht wie Lisp, aber es ist Typ System wird Sie umhauen.

Schauspieler + Fehlertoleranz, Erlang - Erlangs Prozessmodell wird viel beachtet, aber seine Fehlertoleranz- und Hot-Code-Swapping-Mechanismen verändern das Spiel. Sie werden nicht viel über FP lernen, was Sie mit Clojure nicht lernen würden, aber die FT-Funktionen lassen Sie sich fragen, warum mehr Sprachen dies nicht richtig zu machen scheinen.

Genießen!

Nebel
quelle
8
+1 - eine gute Antwort.
Duffymo
2
Vielen Dank, dass Sie mich auf so viele Sprachen hingewiesen haben, die ich lernen kann.
2
Ich würde Erlang für die schauspielerbasierte Programmierung und Fortress für die parallele Programmierung hinzufügen.
Nickik
2
+1 für Erlang's Hot Swap und Fehlertoleranzerkennung
Mic
14
Keine Montage? Es ist gut zu verstehen, wie Prozessoren arbeiten, um zu lernen, welche Art von Code sie mögen.
Nick T
33

Was ist mit Prolog (zur Vereinheitlichung / Rückverfolgung usw.), Smalltalk (für "Alles ist eine Nachricht"), Forth (umgekehrte Politur, Thread-Interpreter usw.), Schema (Fortsetzung)?

Keine Sprache, aber die Kunst des Metaobjektprotokolls ist umwerfend

Der archetypische Paulus
quelle
Korrigieren Sie mich, wenn ich falsch liege, aber ich denke, Python macht bereits Fortsetzungen. Und nach dem, was ich gelesen habe, würde ich lieber Faktor und Ziel-C lernen als Forth und Smalltalk, aber ich könnte dort Abstriche machen.
Pepijn
1
@pepijn, Python hat keine erstklassigen Fortsetzungen (obwohl ich an einem Bytecode-Hack arbeite, um ihn zu fälschen)
aaronasterling
1
Objective-C basiert auf Smalltalk, aber ich denke, der eigentliche Vorteil von ST ist die Dynamik der Umgebung.
John Cromartie
33

Ich bin zweiter Haskell. Denken Sie nicht "Ich kenne ein Lisp, also kenne ich funktionale Programmierung". Schon mal was von Typklassen gehört? Algebraische Datentypen? Monaden? "Moderne" (mehr oder weniger - mindestens nicht 50 Jahre alt;)) funktionale Sprachen, insbesondere Haskell, haben eine Vielzahl sehr leistungsfähiger nützlicher neuer Konzepte erforscht. Typklassen fügen Ad-hoc-Polymorphismus hinzu, aber Typinferenz (eine weitere Sache, die die Sprachen, die Sie bereits kennen, nicht haben) funktioniert wie ein Zauber. Algebraische Datentypen sind einfach fantastisch, insbesondere zum Modellieren von baumartigen Datenstrukturen, funktionieren aber auch gut für Aufzählungen oder einfache Datensätze. Und Monaden ... sagen wir einfach, die Leute verwenden sie, um Ausnahmen, E / A, Parser, Listenverständnisse und vieles mehr zu machen - auf rein funktionale Weise!

Außerdem ist das ganze Thema tief genug, um einen jahrelang zu beschäftigen;)

395760
quelle
"Außerdem ist das ganze Thema tief genug, um einen jahrelang zu beschäftigen;)" - Ich frage mich, warum sollte das eine gute Sache sein? Schließlich ist unser Leben endlich.
Vegai
1
@vegai: Warum sollte es eine schlechte Sache sein? Es gibt schlechtere Möglichkeiten, ein Leben lang zu verbringen als zu lernen. Und niemand hat gesagt, dass man jahrelang lernen muss, um die Sprache richtig zu benutzen - nur, dass das Thema nach kurzer Zeit nicht erschöpft ist. (Beachten Sie auch den Smiley - dieser Teil ist nicht ganz ernst.)
32

Ich programmiere derzeit Clojure, Python, Java und PHP. [...] Welche Sprachen verfolgen einen anderen Ansatz und wären entweder für die Auswahl praktischer Werkzeuge oder für das theoretische Verständnis nützlich?

C.

Es liegt viel C-Code herum - es ist definitiv praktisch. Wenn Sie auch C ++ lernen, gibt es viel mehr Code (und der Sprung ist kurz, sobald Sie C und Java kennen).

Es gibt Ihnen auch ein gutes Verständnis für einige theoretische Fragen (oder zwingt Sie dazu). Beispielsweise befindet sich jedes laufende Programm in gewissem Sinne in einem 4-GB-Byte-Array. Zeiger in C sind wirklich nur Indizes in diesem Array - sie sind nur eine andere Art von Ganzzahl. Nicht anders in Java, Python, PHP, außer unter einer Oberflächenebene versteckt.

Sie können auch objektorientierten Code in C schreiben. Sie müssen nur ein wenig manuell mit vtables und dergleichen umgehen. Die Portable Puzzle Collection von Simon Tatham ist ein großartiges Beispiel für einen ziemlich zugänglichen objektorientierten C-Code. Es ist auch ziemlich gut gestaltet und für einen Anfänger / fortgeschrittenen C-Programmierer eine Lektüre wert. Dies ist auch in Haskell der Fall - Typklassen sind in gewissem Sinne "nur eine andere vtable".

Eine weitere großartige Sache bei C: Wenn Sie sich mit erfahrenen C-Programmierern an Fragen und Antworten beteiligen, erhalten Sie viele Antworten, die C anhand von Konstrukten auf niedrigerer Ebene erklären, wodurch Ihre Wissensbasis näher am Eisen liegt.

Möglicherweise fehlt mir der Punkt von OP - ich denke, ich bin es, gemessen an den anderen Antworten -, aber ich denke, es könnte eine nützliche Antwort für andere Leute sein, die eine ähnliche Frage haben und diesen Thread lesen.

Jonas Kölker
quelle
1
Dies erfordert mehr Upvotes. C ist die Sprache Nummer eins, wenn Sie das Bare Metal benötigen oder wollen, um die Funktionsweise der Maschine - oder höherer Programmiersprachen - von Grund auf zu verstehen. Darüber hinaus ist es auch ein sehr universeller C-Compiler, der für (fast) jede jemals entwickelte CPU-Architektur existiert.
Dietr
27

Von Peter Norvigs Seite:

"Lernen Sie mindestens ein halbes Dutzend Programmiersprachen. Fügen Sie eine Sprache hinzu, die Klassenabstraktionen unterstützt (wie Java oder C ++), eine, die funktionale Abstraktion unterstützt (wie Lisp oder ML), eine, die syntaktische Abstraktion unterstützt (wie Lisp), eine, die deklarative Sprachen unterstützt Spezifikationen (wie Prolog- oder C ++ - Vorlagen), eine, die Coroutinen unterstützt (wie Icon oder Scheme), und eine, die Parallelität unterstützt (wie Sisal). "

http://norvig.com/21-days.html

Galactus
quelle
13

Ich bin erstaunt, dass nach 6 Monaten und Hunderten von Stimmen niemand SQL erwähnt hat ...

ypercubeᵀᴹ
quelle
10

In den Typen als Theoreme / fortgeschrittene Typsysteme: Coq (ich denke, Agda kommt auch in diese Kategorie).

Coq ist ein Proof-Assistent, der in eine funktionale Programmiersprache eingebettet ist.

Sie können mathematische Beweise schreiben und Coq hilft beim Erstellen einer Lösung. Sie können Funktionen schreiben und Eigenschaften darüber beweisen.

Es hat abhängige Typen, die mich allein umgehauen haben. Ein einfaches Beispiel:

concatenate: forall (A:Set)(n m:nat), (array A m)->(array A n)->(array A (n+m))

ist die Signatur einer Funktion, die zwei Arrays der Größe n und m von Elementen von A verkettet und ein Array der Größe (n + m) zurückgibt. Es wird nicht kompiliert, wenn die Funktion das nicht zurückgibt!

Basiert auf der Berechnung induktiver Konstruktionen und hat eine solide Theorie dahinter. Ich bin nicht klug genug, um alles zu verstehen, aber ich denke, es lohnt sich, einen Blick darauf zu werfen, besonders wenn Sie zur Typentheorie tendieren.

EDIT: Ich muss erwähnen: Sie schreiben eine Funktion in Coq und dann können Sie beweisen, dass sie für jede Eingabe korrekt ist, das ist erstaunlich!

GClaramunt
quelle
Ich zweite coq. Wenn Sie die meisten Sprachen lernen, können Sie immer noch Ihre alten Techniken verwenden, aber coq zwingt Sie, Gesamtprogramme zu schreiben, die immer funktionieren.
Bruno Martinez
Ich habe letzten Sommer versucht, Coq zu lernen, habe aber aufgegeben, weil ich Schwierigkeiten hatte, eine gute Dokumentation zum Lernen und Verwenden zu finden . Irgendwelche Vorschläge?
Ich habe aus einem Kurs an meiner Uni gelernt und dann "Coq'Art: Der Kalkül induktiver Konstruktionen" gelesen. Es reicht nicht aus, es wirklich zu beherrschen, aber es reicht aus, es zu schätzen.
Bruno Martinez
6

Eine der Sprachen , die ich interessiert bin für eine ganz andere Sicht haben (einschließlich einer neuen Vokabular der Sprachelemente und eine radikale diff Syntax zu definieren) ist J . Haskell wäre für mich die offensichtliche Wahl, obwohl es sich um eine funktionale Sprache handelt, da das Typsystem und andere einzigartige Funktionen Ihren Geist öffnen und Sie dazu bringen, Ihre Vorkenntnisse in der (funktionalen) Programmierung zu überdenken.

jneira
quelle
5

Genau wie Fogus es Ihnen in seiner Liste vorgeschlagen hat, rate ich Ihnen auch, sich die Sprache OzML / Mozart anzuschauen Viele Paradigmen, die hauptsächlich auf Parallelität / Multi-Agent-Programmierung abzielen.

In Bezug auf Parallelität und verteilten Kalkül wird das Äquivalent des Lambda-Kalküls (das hinter der funktionalen Programmierung steht) als Pi-Kalkül bezeichnet.

Ich habe erst angefangen, mir eine Implementierung des Pi-Kalküls anzuschauen. Aber sie haben meine Vorstellungen vom Rechnen bereits erweitert.

Stephane Rolland
quelle
5

Die Datenflussprogrammierung, auch bekannt als flussbasierte Programmierung, ist ein guter Schritt voraus. Einige Schlagworte: Paralell-Verarbeitung, Rapid Prototyping, visuelle Programmierung (nicht so schlecht wie zuerst klingt).

Die Artikel von Wikipedia sind gut:

In der Informatik ist Flow-Based Programming (FBP) ein Programmierparadigma, das Anwendungen als Netzwerke von "Black-Box" -Prozessen definiert, die durch Nachrichtenübermittlung Daten über vordefinierte Verbindungen austauschen, wobei die Verbindungen extern zu den Prozessen angegeben werden. Diese Black-Box-Prozesse können endlos wieder verbunden werden, um verschiedene Anwendungen zu bilden, ohne dass sie intern geändert werden müssen. FBP ist also natürlich komponentenorientiert.

Lesen Sie das Buch von JPM: http://jpaulmorrison.com/fbp/

(Wir haben eine einfache Implementierung in C ++ für Heimautomationszwecke geschrieben und sind sehr zufrieden damit. Die Dokumentation befindet sich im Aufbau.)

ern0
quelle
+1, ich glaube, dass Datenfluss und flussbasierte Programmierung (möglicherweise auch funktionsreaktive Programmierung) ein wichtiger Bestandteil unserer Multicore-Zukunft werden.
5

Sie haben viele Sprachen gelernt. Jetzt ist es an der Zeit, sich auf eine Sprache zu konzentrieren und sie zu beherrschen.

Sandman
quelle
3

Vielleicht möchten Sie LabView für seine visuelle Programmierung ausprobieren, obwohl es für technische Zwecke ist.

Trotzdem scheinen Sie ziemlich interessiert an allem zu sein, was da draußen ist, daher der Vorschlag

Sie können auch den Android Appinventor zum visuellen Erstellen von Inhalten ausprobieren

Belun
quelle
LabView hat eine lustige 'Syntax', aber es ist ein echtes Problem, den gesamten Code anzuklicken und zu ziehen. Ich würde es keinem Programmierer empfehlen.
Ishtar
Das ist es, was mit dem Lego NXT geliefert wird, richtig? Hat bei mir total nicht funktioniert. Vielen Dank für den Vorschlag.
Pepijn
Es ist von National Instruments. LabVIEW ist eine grafische Entwicklungsumgebung, die Wissenschaftler und Ingenieure produktiver macht
Belun
2

Bruce A. Tate schrieb auf einer Seite von The Pragmatic Programmer ein Buch darüber: Sieben Sprachen in sieben Wochen: Ein pragmatischer Leitfaden zum Erlernen von Programmiersprachen

In dem Buch behandelt er Clojure, Haskell, Io, Prolog, Scala, Erlang und Ruby.

Aissen
quelle
2
Seien Sie gewarnt, dass das Buch voller Verweise auf Filme ist, die anscheinend Teil der US-Popkultur geworden sind. Wenn Sie die Filme nicht gesehen haben, werden Sie sich fragen, worum es bei Tate geht. Wenn Sie die Filme gesehen haben, kann es sein, dass Sie immer noch von der ständigen Anthropomorphisierung der Programmiersprachen abgeschreckt sind oder einfach die fraglichen Charaktere nicht mögen (ich mag Mary Poppins nicht; zufällig mag ich auch Ruby nicht, also die Analogie kann auf etwas sein).
Alan Plum
2

Quecksilber : http://www.mercury.csse.unimelb.edu.au/

Es ist ein typisierter Prolog mit Eindeutigkeitstypen und -modi (dh Angabe des Prädikats) append(X,Y,Z) an Y angehängte X Z ist, ergibt ein Z bei einem X und Y, kann jedoch mehrere X / Ys für ein gegebenes Z ergeben). Auch kein Schnitt oder andere außerlogische Prädikate.

Wenn Sie so wollen, geht es um Prolog wie um Haskell um Lisp.

yatima2975
quelle
1
  1. Die Programmierung deckt nicht die Aufgabe von Programmierern ab.
  2. Neue Dinge sind immer interessant, aber es gibt einige sehr coole alte Sachen.

Das erste Datenbanksystem war für mich dBaseIII. Ich habe ungefähr einen Monat damit verbracht, kleine Beispiele zu schreiben (dBase / FoxPro / Clipper ist eine tabellenbasierte Datenbank mit Indizes). Dann traf ich an meinem ersten Arbeitsplatz MUMPS und bekam Kopfschmerzen. Ich war jung und frisch, aber es dauerte 2 Wochen, um das MUMPS-Datenbankmodell zu verstehen. Es gab einen Moment, wie in Comics: Nach 2 Wochen wurde ein Knopf eingeschaltet und die Glühbirne hat sich in meinem Kopf gerade aufgehellt. MUMPS ist natürlich, niedrig und sehr, sehr schnell. (Es ist ein unausgeglichener, nicht formalisierter Baum ohne Typen.) Die heutigen Trends zeigen den Weg zurück: NoSQL, Schlüsselwert-Datenbank, mehrdimensionale Datenbank - es sind also nur noch einige Schritte übrig, und wir erreichen Mumps.

Hier ist eine Präsentation über die Vorteile von MUMPS: http://www.slideshare.net/george.james/mumps-the-internet-scale-database-presentation

Ein kurzes Dokument zur hierarchischen Datenbank: http://www.cs.pitt.edu/~chang/156/14hier.html

Eine Einführung in MUMPS-Globals (in MUMPS sind lokale Variablen, kurz: Locals sind die Speichervariablen, und die globalen Variablen, kurz: Globals sind die "DB-Variablen", das Festlegen einer globalen Variablen wird sofort auf die Festplatte übertragen): http: // gradvs1.mgateway.com/download/extreme1.pdf (PDF)

ern0
quelle
1

Angenommen, Sie möchten ein Liebesgedicht schreiben ...

Anstatt einen Hammer zu verwenden, nur weil sich bereits einer in Ihrer Hand befindet, lernen Sie die richtigen Werkzeuge für die Aufgabe: Lernen Sie, Französisch zu sprechen.

Sobald Sie das muttersprachliche Niveau erreicht haben, können Sie mit Ihrem Gedicht beginnen.

Roger
quelle
4
Natürlich wird es ein Müllgedicht sein, denn Sie müssen weit über dem normalen Niveau der Muttersprachler sprechen, um Gedichte zu schreiben. Und deine Freundin muss Französisch lernen, um es zu lesen. Es sei denn, sie ist bereits Französin. In diesem Fall wird sie es wahrscheinlich peinlich finden.
John Lawrence Aspden
Köstliche Ironie, John, ich mag es (ich bin übrigens Franzose)
Vinzz
1

Während das Erlernen neuer Sprachen auf akademischer Ebene ein interessantes Hobby ist, können Sie meiner Meinung nach erst dann wirklich lernen, eine zu verwenden, wenn Sie versuchen, sie auf ein Problem der realen Welt anzuwenden. Anstatt nach einer neuen Sprache zum Lernen zu suchen, würde ich an Ihrer Stelle zuerst nach neuen Dingen suchen, die gebaut werden könnten, und erst dann würde ich nach der richtigen Sprache suchen, die für dieses eine bestimmte Projekt verwendet werden kann. Wählen Sie zuerst das Problem aus, dann das Werkzeug, nicht umgekehrt.

ivanhoe
quelle
1

Für alle, die seit Mitte der 80er Jahre nicht mehr da waren, würde ich empfehlen, 8-Bit-BASIC zu lernen. Es ist sehr niedrig, sehr primitiv und es ist eine interessante Übung, um seine Löcher zu programmieren.

In der gleichen Zeile würde ich einen Taschenrechner der HP-41C-Serie (oder einen Emulator, obwohl nichts besser ist als echte Hardware) auswählen. Es ist schwer, dein Gehirn darum zu wickeln, aber es lohnt sich. Ein TI-57 reicht aus, wird aber eine ganz andere Erfahrung sein. Wenn Sie es schaffen, Gleichungen zweiten Grades auf einem TI-55 zu lösen, werden Sie als Master betrachtet (es gab keine Bedingungen und keine Verzweigungen außer einem RST, der das Programm auf Schritt 0 zurücksprang).

Und zuletzt würde ich FORTH wählen (es wurde bereits erwähnt). Es hat eine nette "Build your language" Lisp-artige Sache, ist aber viel mehr Bare Metal. Hier erfahren Sie, warum Rails interessant ist und wann DSLs sinnvoll sind, und Sie erhalten einen Einblick in die Gedanken Ihres Nicht-RPN-Rechners während der Eingabe.

rbanffy
quelle
1

PostScript. Es ist eine ziemlich interessante Sprache, da sie stapelbasiert ist, und es ist ziemlich praktisch, wenn Sie Dinge auf Papier bringen und sie entweder erledigen oder Fehler beheben möchten, warum sie nicht erledigt werden.

Erlang. Die intrinsische Parallelität gibt ihm ein eher ungewöhnliches Gefühl und Sie können daraus wieder nützliche Dinge lernen. Ich bin mir hinsichtlich der Praktikabilität nicht so sicher, aber es kann für einige schnelle Prototyping-Aufgaben und hochredundante Systeme nützlich sein.

Versuchen Sie, GPUs zu programmieren - entweder CUDA oder OpenCL. Es sind nur C / C ++ - Erweiterungen, aber das mentale Modell der Architektur unterscheidet sich wieder völlig vom klassischen Ansatz, und es wird definitiv praktisch, sobald Sie eine echte Zahlenkalkulation durchführen müssen.

pasky
quelle
1

Erlang, Forth und einige Embedded arbeiten mit Assemblersprache. Ja wirklich; Kaufen Sie ein Arduino-Kit oder ähnliches und erzeugen Sie beim Zusammenbau einen polyphonen Piepton. Du wirst wirklich etwas lernen.

Bart van Deenen
quelle
1

Es gibt auch anic :

https://code.google.com/p/anic/

Von seiner Website:

Schneller als C, sicherer als Java, einfacher als * sh

anic ist der Referenzimplementierungs-Compiler für die experimentelle, leistungsstarke, implizit parallele, Deadlock-freie Allzweck-Datenfluss-Programmiersprache ANI.

Es scheint sich nicht mehr in der aktiven Entwicklung zu befinden, aber es scheint einige interessante Konzepte zu haben (und das ist schließlich das, wonach Sie zu suchen scheinen).

es ist heute
quelle
1

Obwohl ich Ihre Anforderung von "anders" nicht erfülle, würde ich dieses Fantom wetten eine Sprache ist, die ein professioneller Programmierer betrachten sollte. Die Autoren von Fantasom nennen es nach eigenen Angaben eine langweilige Sprache. Es unterstützt lediglich die häufigsten Anwendungsfälle von Java und C # mit einer geliehenen Abschlusssyntax von Ruby und ähnlichen neueren Sprachen.

Und doch schafft es es, einen eigenen Bootstrap-Compiler zu haben, eine Plattform bereitzustellen, die eine Drop-in-Installation ohne externe Abhängigkeiten aufweist, Pakete richtig macht - und auf Java, C # und jetzt im Web (über js) funktioniert.

Es erweitert möglicherweise nicht Ihren Horizont in Bezug auf neue Programmiermethoden, zeigt Ihnen jedoch sicherlich bessere Programmiermethoden.

vkd
quelle
1

Eine Sache, die mir in den anderen Antworten fehlt: Sprachen, die auf dem Umschreiben von Begriffen basieren.

Sie können einen Blick auf Pure werfen - http://code.google.com/p/pure-lang/ .

Mathematica basiert auch auf dem Umschreiben, obwohl es nicht so einfach ist, herauszufinden, was los ist, da es eher geschlossen ist.

JonyEpsilon
quelle
0

APL, Forth und Versammlung.

Viel Spaß Holen Sie sich ein Lego Mindstorm-Roboterkit und CMUs RobotC und schreiben Sie einen Robotikcode. Dinge passieren, wenn Sie Code schreiben, der "schmutzig" werden und mit der realen Welt interagieren muss, die Sie unmöglich auf andere Weise lernen können. Ja, dieselbe Sprache, aber eine ganz andere Perspektive.

Martins
quelle