Programmiersprachenfeatures - Was gibts?
-
Datentypen:
Ganzzahlen, Fließkommazahlen, Strings, Zeichen, Pointer, Referenzen, StrukturenOperationen:
Bitoperationen (Shift, Verknüpfungen), Addition, Subtraktion, Multiplikation, Division, Modulo, VergleichAblaufsteuerung:
if Bedingung, Schleifen (for, while, do), Switch, FunktionenObjektorientierung:
Klassen, Abstrakte Klassen, Interfaces, (Mehrfach)Vererbung, OperatorüberlaungFehlerbehandlung:
ExceptionsMetaprogrammierung:
Templateklassen, Templatefunktionen,Reflection
Makros
Was gibt es noch?
PS: Keine zusammengesetzen Sachen die auf Grunddaten aufbauen, wie list, vector, sqrt.
-
featuring schrieb:
PS: Keine zusammengesetzen Sachen die auf Grunddaten aufbauen, wie list, vector, sqrt.
Und was sind dann deiner Meinung nach strings?
-
Es gibt Sprachen bei denen Strings eingebaute Datentypen sind und nicht nur Klassen.
-
currying
-
Erstmal: Unter welchem Gesichtspunkt schreibst du denn diese Liste? (Features existierender Sprachen? Wunschfeatures? ...?)
Zweitens: Operator-Überladung hat imho nicht unbedingt mit Objektorientierung zu tun.
Und es gibt auch Sprachen, in denen Listen eingebaute Datentypen sind
(z.B. Prolog oder Haskell)
-
Ja, existierende Sprachen.
Ob Operatorüberladung was mit Objektorientierung war ich mir auch nicht sicher. Gibts Sprachen, bei denen man auch bei primitiven Typen Operatorüberladung anwenden kann?
Ach ja, Arrays hab ich vergessen.
-
featuring schrieb:
Gibts Sprachen, bei denen man auch bei primitiven Typen Operatorüberladung anwenden kann?
Klar, bei Smalltalk kannst du die Implementierungen aller Konstrukte anschauen und verändern. Die Addition von Integern gehört genauso dazu wie eine for-Schleife und eine if-Abfrage.
Mir ist nicht ganz klar worauf du hinaus willst; deine Feature-Liste scheint sehr auf C++ zugeschnitten zu sein. Die Unterscheidung Value/Pointer/Reference weist darauf hin. Dass Ablaufsteuerungen wie if, for, while, do von der Sprache bereitgestellt werden müssen, ist auch C++-spezifisch (schau dir nur Lisp, Haskell oder Smalltalk an).
Ich nenne als schönes Feature mal: Lazy Evaluation.
-
OOP
---
Metaklassen (Python, Smalltalk)
Objektmethoden (z.B. ECMA, Perl), Instanzmethoden, Klassenmethoden
Objektvariablen (z.B. ECMA, Perl), Instanzvariablen, Klassenvariablen---
Modulkonzept
Persistenz, Nebenläufigkeit
Zeiger od. Referenzen auf Funktionen, Instanzmethoden und Klassenmethoden
Btw. Container sind bei einigen Sprachen übrigens durchaus Sprachmerkmale z.B. in Perl und Python.
-
Christoph schrieb:
featuring schrieb:
Gibts Sprachen, bei denen man auch bei primitiven Typen Operatorüberladung anwenden kann?
Klar, bei Smalltalk kannst du die Implementierungen aller Konstrukte anschauen und verändern. Die Addition von Integern gehört genauso dazu wie eine for-Schleife und eine if-Abfrage.
Und wie sieht die Implementierung der Konstrukte aus? Basiert die wieder auf den oben genannten Features?
Christoph schrieb:
Mir ist nicht ganz klar worauf du hinaus willst; deine Feature-Liste scheint sehr auf C++ zugeschnitten zu sein. Die Unterscheidung Value/Pointer/Reference weist darauf hin. Dass Ablaufsteuerungen wie if, for, while, do von der Sprache bereitgestellt werden müssen, ist auch C++-spezifisch (schau dir nur Lisp, Haskell oder Smalltalk an).
Ich will einfach wissen, was es alles gibt. Das mit if, for, do, while gilt ja auch für Java, Basic, Pascal,... Haben z.B. diese "KI Sprachen" spezielle Features für Fuzzy Logik oder so?
-
Bei Datentypen könnte man noch sowas, wie discriminated Unions aufnehmen.
Hauptsächlich aus der FP:
Closures, Currying, Pattern Matching, List-Comprehensions, ...Join Calculus:
Accords, ...Bei der Objektorientierung könnte man auch klassenbasierte und prototyp-Basierte OOP aufführen.
Vielleicht auch sowas, wie schachteln/entschachteln wie z.B. in C# der Fall?Was ist mit Dingen, wie eager evaluation (by value, by reference, by copy-restore), lazy evaluation (by name, by need).
Futures
Die DbC-Sachen, wie preconditions, postconditions invariants
...
-
featuring schrieb:
Christoph schrieb:
featuring schrieb:
Gibts Sprachen, bei denen man auch bei primitiven Typen Operatorüberladung anwenden kann?
Klar, bei Smalltalk kannst du die Implementierungen aller Konstrukte anschauen und verändern. Die Addition von Integern gehört genauso dazu wie eine for-Schleife und eine if-Abfrage.
Und wie sieht die Implementierung der Konstrukte aus? Basiert die wieder auf den oben genannten Features?
Naja, du musst wissen, in Smalltalk ist alles ein Objekt. Alles! Also auch Codeblöcke, ...
Ein Vergleich liefert entweder ein Objekt des Typs True oder ein Objekt des Typs False. Beide implementieren eine Methode "ifTrue:" Dieser kannst du einen Codeblock übergeben. die Implementierung von False sieht so aus, dass sie einfach nichts macht, die von True so, dass sie den Übergebenen Block ausführt.(1 < 2) ifTrue: [ "mach irgendwas" ].Allgemein sind Methoden in Smalltalk recht cool. z.B. hat die Klasse Dictionary die Methode "at:put:"
map := Dictionary new. map at: 'foo' put: 'bar'. map at: 'baz' put: 'qux'.Selbst methoden mit vielen Argumenten bleiben so übersichtlich.
-
featuring schrieb:
Christoph schrieb:
featuring schrieb:
Gibts Sprachen, bei denen man auch bei primitiven Typen Operatorüberladung anwenden kann?
Klar, bei Smalltalk kannst du die Implementierungen aller Konstrukte anschauen und verändern. Die Addition von Integern gehört genauso dazu wie eine for-Schleife und eine if-Abfrage.
Und wie sieht die Implementierung der Konstrukte aus? Basiert die wieder auf den oben genannten Features?
An der Stelle wird bei Smalltalk etwas gemogelt. Die Standard-Implementierungen der Integer-Rechenoperationen sind zumindest bei Squeak sowas wie "<primitive #1234>", die verweisen also auf nicht näher beschriebene Funktionen der VM. Man könnte sicher manches ohne diese Primitiven implementieren, aber diese Implementierung hat natürlich auch Geschwindigkeitsgründe.
Dennoch hat man vollen Zugriff auf den Code. Wenn man möchte, kann man also die Semantik von if verändern. Das macht man natürlich nicht, aber was sinnvoll ist, ist die Möglichkeit neue Schleifen-Typen zu erfinden, die syntaktisch vollkommen gleichwertig zu den vordefinierten while und for-Schleifen sind.featuring schrieb:
Christoph schrieb:
Mir ist nicht ganz klar worauf du hinaus willst; deine Feature-Liste scheint sehr auf C++ zugeschnitten zu sein. Die Unterscheidung Value/Pointer/Reference weist darauf hin. Dass Ablaufsteuerungen wie if, for, while, do von der Sprache bereitgestellt werden müssen, ist auch C++-spezifisch (schau dir nur Lisp, Haskell oder Smalltalk an).
Ich will einfach wissen, was es alles gibt. Das mit if, for, do, while gilt ja auch für Java, Basic, Pascal,... Haben z.B. diese "KI Sprachen" spezielle Features für Fuzzy Logik oder so?
Mit fuzzy logic kenn ich mich nicht gut aus, aber in Lisp und Haskell ist es recht einfach domain specific languages einzubauen. Daher kann es in diesen Sprachen einfacher sein fuzzy logic zu implementieren als in C++. Ich würde diese Sprachen aber nicht als KI-Sprachen, sondern als funktionale Sprachen bezeichnen. Abgesehen natürlich von Smalltalk, dessen Konzepte objekt-orientiert sind.
-
Das liest sich so als hättest Du einen guten Überblick über Sprachmerkmale und insbesondere Smalltalk!

Welche Smalltalk-Implementierung würdest Du unter Windows einsetzen?
Und welche einem C++ Programmierer für den Einstieg empfehlen?
Hab nichts konkretes damit vor; will lediglich mitreden können.Meine letzte Berührung damit verlief wenig erfreulich; ich versuchte "Hello World" zu schreiben und stellte fest dass zwar "Hello World" ausgegeben wurde aber irgendwelche Compiler-Messages den Inhalt meines Editor-Fensters überschrieben...
Welche Implementierung das war weiss ich nicht mehr aber der Effekt könnte bekannt sein.Btw kennst Du noch andere Sprachen die Metaklassen anbieten ausser Smalltalk und Python (mit Perl geht's auch, wie wohl alles, aber das meine ich nicht
)?Grüsse
*this
-
Gast++ schrieb:
Welche Smalltalk-Implementierung würdest Du unter Windows einsetzen?
Und welche einem C++ Programmierer für den Einstieg empfehlen?
Hab nichts konkretes damit vor; will lediglich mitreden können.Ich hatte mal ein bisschen mit Squeak gespielt: http://www.squeak.org
Diese Implementierung läuft gut unter Windows, aber auch auf anderen Betriebssystemen. Außerdem wird Squeak soweit ich weiß noch weiterentwickelt.Gast++ schrieb:
]Meine letzte Berührung damit verlief wenig erfreulich; ich versuchte "Hello World" zu schreiben und stellte fest dass zwar "Hello World" ausgegeben wurde aber irgendwelche Compiler-Messages den Inhalt meines Editor-Fensters überschrieben...
Welche Implementierung das war weiss ich nicht mehr aber der Effekt könnte bekannt sein.Btw kennst Du noch andere Sprachen die Metaklassen anbieten ausser Smalltalk und Python (mit Perl geht's auch, wie wohl alles, aber das meine ich nicht
)?Ich meine dass Common Lisp mit CLOS etwas in der Richtung kann. Aber mit CLOS habe ich fast nichts gemacht, deswegen unter Vorbehalt.
-
Christoph schrieb:
Ich hatte mal ein bisschen mit Squeak gespielt: http://www.squeak.org
Diese Implementierung läuft gut unter Windows, aber auch auf anderen Betriebssystemen.Erstmal danke für den Link!
Aber ich bin zu dumm dafür; ich habe jetzt hier gefunden wie ich 'Hello World' http://wiki.squeak.org/squeak/2230 schrieben können soll.
Das habe ich auch getan und schon wieder seh ich dass 'Hello World' in meinen Source reingeworfen wird!
Christoph schrieb:
Ich meine dass Common Lisp mit CLOS etwas in der Richtung kann. Aber mit CLOS habe ich fast nichts gemacht, deswegen unter Vorbehalt.
Ja, klar. Danke! CLOS - Irgendwie hab Lisp-Dialekte systematisch verdrängt. Hab mich immer so "umklammert" gefühlt

(und(Dank)(Gruesse(von-an(Gast++)(Christoph))))
-
Regulären Ausdrücken?
großes Feature z.B. von Perl (jaja Ruby kanns auch teilweise, aber bestimmt noch mehr)
-
Policies, Prä- und Postkonditionen (Eiffel, letztere z.Zt. unter C++ mit Sentries nachzubilden)
Btw Vielfach hört man dass Smalltalk die meistunterschäzte Sprache ist und in diversen Hypes zu Unrecht links liegen gelassen wurde. Da ich wie gesagt zu dumm für St bin (was mir allerdings auch etwas über die Sprache sagt) trifft für mich dies viel eher auf Eiffel zu - man betrachte ggf. mal die Features
http://de.wikipedia.org/wiki/Eiffel_(Programmiersprache)#Aufbau_eines_Eiffel-ProgrammsUnd das hier
http://www.eiffel.com/developers/faqs/eiffel-language.html#classic-compilestoc
(oben) ist vielleicht nice to know.Grüsse
*this
-
Continuations wurden glaube ich noch nicht genannt.
Damit kann man auch ganz tolle Sachen machen.
-
featuring schrieb:
Es gibt Sprachen bei denen Strings eingebaute Datentypen sind und nicht nur Klassen.
Es gibt auch Sprachen, bei denen sind Arrays eingebaute Datentypen.
Inwieweit sind "eingebaute Datentypen" ein besonderes Qualitätskriterium (und nicht viel eher eine Begrenzung von Generizität) ?Gruß,
Simon2.
-
Simon2 schrieb:
Inwieweit sind "eingebaute Datentypen" ein besonderes Qualitätskriterium (und nicht viel eher eine Begrenzung von Generizität) ?
Inwiefern schränken eingebaute Typen die "Generizität" ein?
-
Simon2 schrieb:
featuring schrieb:
Es gibt Sprachen bei denen Strings eingebaute Datentypen sind und nicht nur Klassen.
Es gibt auch Sprachen, bei denen sind Arrays eingebaute Datentypen.
Inwieweit sind "eingebaute Datentypen" ein besonderes Qualitätskriterium (und nicht viel eher eine Begrenzung von Generizität) ?In manchen Sprachen ist auch gar nicht so klar, wo die Grenze zwischen "eingebaut" und "nicht eingebaut" zu ziehen ist. In manchen Sprachen sind sogar Basis-Typen wie Int und Char in der Standard-Bibliothek definiert. Wenn man diese Datentypen als eingebaut ansieht, sind aber auch Arrays, Listen, Maps, Sets und vieles mehr eingebaut.
Array, Listen und Maps gehören zum Sprachstandard von C++. In einem gewissen Sinn sind diese Typen also eingebaut.