Autor Thema: Experimentele Programmiersprache  (Gelesen 3915 mal)

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« am: 29. July 2006, 16:00 »
Ich bastel gerade eine Programmiersrache. Deshalb bin ich auf der suche nach Informationen über die Schwächen und Stärken von anderen Sprachen. Zu C / C++ kann ich da auch recht viel finden (besonders was Schwächen angeht) aber andere Sprachen sind leider weniger in der Kritik (Negativ wie Positiv).

Meine Frage:
Hat hier eventuell jemand Quellen/eigene Erfahrungen was andere Programmiersprachen angeht.


Meine Ideen gehen auch mehr in richtung einer "sauberen" Programmiersprache, wobei die Ausführungsgeschwindigkeit erstmals keine Rolle spielt.

Bsp.: Variablen die mit einem beliebigen Wertbereich definiert werden (1..100) und bei denen festgesetzt wird was bei einer Überschreitung dieses Wertes passiert z.B. Überlauf, Sätigung, Fehler, ...
Das soll alles gelöst von den Einheiten des jeweiligen Systems geschehen.

Viele Fragen/Probleme konnte ich aber noch nicht lösen. Etwa die Größe von Zwischenergebnissen bei Formelrechnungen.

Was ich auch suche sind Neue Programmiersprachen mit anderen Konzepten, so dass ich ein bisschen abgucken kann. ;)

Es wird übrigens ein eigenes Binärformat (sowas java).
db 0x55AA

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 29. July 2006, 16:11 »
Was die strenge Typisierung betrifft, willst du dich vermutlich ein bißchen an Ada anlehnen, oder? Ansonsten nenn einfach mal ein Sprachen, dann kommen sicher auch ein paar persönliche Meinungen - mehr als einen Programmiersprachen-Flamewar lostreten mußt du ja nicht machen, um die nötigen Informationen zu bekommen. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #2 am: 29. July 2006, 16:20 »
Java - sauberer bei Speicherverwaltung als C/C++

Haskell - Funktionale Programmiersprache
Prolog - Ich glaub logische Programmiersprache, daher auch wieder vollkommen anders
usw.
*post*

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 29. July 2006, 16:50 »
Du könntest dir auch evtl D anschaun. Ist als weiterentwicklung von C++ gedacht.

Aber du solltest evtl. sagen, für was du deine Programmiersprache brauchst. Wenn wir so ganz ohne irgendeinen Zweck den die Programmiersprache erfüllen soll diskutieren, dann gibts wirklich nur nen flamewar a la C++ <-> Java, garbage collector <-> new/delete usw. und das ist sinnlos ehrlich gesagt. Jede Sprache hat ihre Stärken und garbage collector muss nicht immer ein wünschenswertes Feature sein.

Prinzipiell würde ich es toll finden, wenn es Datentypen mit eindeutigem Wertebereich, a la int8, int16, ... uint8, .... geben würde. Desweiteren wäre Unicode unterstützung toll. Ich fänd auch einen eingebauten string typ (-> D) toller als die halbherzige C++ std::string Lösung.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 29. July 2006, 17:05 »
Zitat
Ich fänd auch einen eingebauten string typ (-> D) toller als die halbherzige C++ std::string Lösung.

Ich kenne D jetzt zugegebenermaßen nicht, an dieser Stelle hätte ich einen Blick auf Pascal mit seinen AnsiStrings geworfen. Die scheinen mir eine recht sinnvolle Lösung zu sein (siehe z.B. hier oder hier)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 29. July 2006, 19:37 »
Ich kannte Ada zwar vom Namen her, aber jetzt wo du es erwähnst werde ich mir diese Sprache mal ein wenig näher anschauen. Die stränge Typisierung ist auch ein aushebeln der "alten" Standardtypen wie byte und Co. Über Datentypen soll man sich in meiner Programmiersprache keine Gedanken machen. Es soll auch ermöglicht werden ohne Probleme mit 256 Bit Werten im realmodus eines x86 zu Arbeiten, ist dann nur etwas langsam.

Die Art wie Java mit den Pointern umgeht werde ich auch übernehmen. Es soll ja ein eignes Binärformat werden was dann in einer Virtuellen Umgebung läuft.

Zur Sprachart habe ich bis jetzt eine prozedurale eventuell auch pbjektorientierte Richtung angepeilt, mich jedoch nicht festgelegt. Um eins vorab zu sagen: diese Sprache will ich später für ein OS verwenden.
Die funktionalen Sprachen sehen aber auch lecker aus. :d

Direkte Unterstüzung für Zeichenverarbeitung wird es erstmal nicht geben, eventuell als funktionen einer unit/lib und dann Unicode. Aber darüber denke ich später nach. AnsiString ist mir schon aus FreePascal / Delphi bekannt und ist meiner Meinung nach das Vernünftigste.


Ich befürchte das ich jetzt ein par Programmiersprachen dazu lernen muss. :/
db 0x55AA

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 29. July 2006, 19:57 »
Zitat von: Osbios
Ich kannte Ada zwar vom Namen her, aber jetzt wo du es erwähnst werde ich mir diese Sprache mal ein wenig näher anschauen. Die stränge Typisierung ist auch ein aushebeln der "alten" Standardtypen wie byte und Co. Über Datentypen soll man sich in meiner Programmiersprache keine Gedanken machen. Es soll auch ermöglicht werden ohne Probleme mit 256 Bit Werten im realmodus eines x86 zu Arbeiten, ist dann nur etwas langsam.

Naja, strenge Typisierung führt schon dazu, daß man sich Gedanken darüber machen muß. Aber dafür weiß man auch, was man tut. Andererseits ist es auch nervig, wenn man jeden Furz manuell casten muß... Aber zumindest die Datentypen dürften interessant für dich sein, denn da hat Ada schon einiges. Auch Fixkommazahlen und solche Sachen, die man nicht überall findet.

Zitat
Die Art wie Java mit den Pointern umgeht werde ich auch übernehmen. Es soll ja ein eignes Binärformat werden was dann in einer Virtuellen Umgebung läuft.

Also keine Pointer? ;) In Java benutzt man Pointer ja nur indirekt dadurch, daß jedes Objekt grundsätzlich nur referenziert wird. Wenn du eine Sprache machen willst, die kein OO erzwingt, geht das schlecht. Auch da vielleicht mal ein Blick auf Ada, das Pointer zwar erlaubt (access), aber die Implementierung doch ziemlich versteckt.

Zitat
Die funktionalen Sprachen sehen aber auch lecker aus. :d

Sind aber relativ langsam, soweit ich weiß.

Zitat
Ich befürchte das ich jetzt ein par Programmiersprachen dazu lernen muss. :/

Wenn du von allen das beste willst, wird sich das nicht vermeiden lassen. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #7 am: 29. July 2006, 22:31 »
Zitat von: taljeth
Zitat
Die funktionalen Sprachen sehen aber auch lecker aus. :d

Sind aber relativ langsam, soweit ich weiß.


Meinste du nicht prozedurale Sprachen damit? ^^
*post*

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 30. July 2006, 04:32 »
Ich finde Ruby hat einige *sehr* interessante Features, kann ich zur Betrachtung mal empfehlen.

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 30. July 2006, 11:42 »
Moin

bei Wert überläufen könnte ich mir ein exeption handling vorstellen, so wie es in java implementiert ist. c++ gibt es das gleiche, nur nicht ganz so effeizent implementiert und deswegen auch nicht so offt eingesetzt. In java läuft eigentlich die ganze fehlerbehandlung drüber. try {... } catch ( IndexOutOfBoundExeption ex ) { Fehlerbehandlung }

Das andere ist die frage der Werteübergabe. entweder per Refferenc oder per Value. Wobei auch hier java beides hat, je nach variablen typ. Basistypen und objekte aus dem java.lang. Packet werden per value übergeben, der rest per refferenc. In c/c++ hab ich als entwickler die wahl wie ich das machen will.


Der GC von Java ist zwar ne feine sache, nur hat er auch ein paar kleine gemeinheiten zu bieten. Es wird nicht sichergestellt, wann und ob überhaupt das Objekt aus dem speicher entfernt wird, und somit der Destruktor aufgerufen wird ( deswegen sollte man ihn auch in java nicht mehr verwenden, gemein, wenn man exklusieve rescourcen verwendet und diese nicht freigegeben werden / sauber geschlossen ) Das weitere ist, das der GC unter umständen kommplizierte verkettete Datenstruckturen nicht als löschbar erkennt, da zuviele querverweise in der Strucktur existieren.

gruss

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #10 am: 30. July 2006, 12:11 »
Zitat von: Termite
Der GC von Java ist zwar ne feine sache, nur hat er auch ein paar kleine gemeinheiten zu bieten. Es wird nicht sichergestellt, wann und ob überhaupt das Objekt aus dem speicher entfernt wird, und somit der Destruktor aufgerufen wird ( deswegen sollte man ihn auch in java nicht mehr verwenden, gemein, wenn man exklusieve rescourcen verwendet und diese nicht freigegeben werden / sauber geschlossen ) Das weitere ist, das der GC unter umständen kommplizierte verkettete Datenstruckturen nicht als löschbar erkennt, da zuviele querverweise in der Strucktur existieren.


Wie das? Solche Fehler hatte ein Smartpointer, da können sich gegenseitig referenzierende Objekte nicht entfernt werden.
*post*

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 30. July 2006, 12:43 »
Hi

der GC hat meines wissens nur eine bestimmte suchtiefe. die sogar von ausen als parameter einstellbar ist. Bei komplizierten verkettungen, kann es vorkommen, das er einen ganzen verkettungsblock nicht freigibt, da er nicht feststellen kann, das dieser in sich verkettete block von ausen gar nicht mehr ereichbar ist.

Einfaches beispiel eine doppelt verkettete liste aus den Objekten A B und C

A kennt B und C
B kennt A und C
C kennt A und B

Von ausen ist nur A als anker bekannt. gibtst du nun den Anker auf, hat A immer noch 2 referenzen und zwar die von B und C. Der GC muss nun prüfen, ob B und C auch gelöscht werden können ( somit muss A auch wissen, wer ihn Refferenziert). Die RefferencCounter von B und C sind leider auch nicht 0 somit muss er noch mal prüfen. In dem obigen beispiel reicht eine suchtiefe von 1. je tiefer der gc suchen muss desto mehr zeit braucht er dazu.

Ich will damit eigentlich nur sagen, das ein GC nicht ganz so einfach zu implementieren ist, das es fälle geben kann, auch wenn sie sehr sellten sind, in denen der gc sie nicht freigeben kann bzw er eine weile dafür braucht bis er es erkennt.

gruss

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 30. July 2006, 12:49 »
Bist du dir sicher, daß der GC von Java Reference Counting benutzt? Ich habe da nämlich in Erinnerung, daß dem nicht so ist.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 30. July 2006, 12:58 »
Ist prinzipiell ja egal ob er die referencen mit zählt ober ob er sie erst anfängt zu suchen. Der gc muss auf alle fälle mitbekommen, ob das Element noch referenziert wird, vorallem von wem, und ob er es freigeben darf oder nicht.

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 30. July 2006, 15:30 »
Also meines Wissens benutzen JavaVMs einen Mark&Compact Garbage Collector, der nix mit Reference-Counting zu tun hat. Der Algorithmus startet einfach eine Suche, die bei den Variablen beginnt und dann alle Pointer nachverfolgt. An jedem Objekt wo die Suche vorbeigekommen ist, wird ein Flag gesetzt, dass das Objekt noch erreichbar ist. Die die am Ende dieses Flag nicht haben werden aus dem Speicher gehauen und die anderen Speicherbereiche werden zusammengeschoben, um die Speicherfragmentierung gering zu halten. Mit x-Fach-Verketteten Listen kommt das Ding sehr gut zurecht. Wie schon gesagt tritt dein Problem nur bei ReferenceCounting-GarbageCollectoren auf, die aber nicht wirklich oft eingesetzt werden.
Agieren statt Konsumieren!

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 30. July 2006, 16:17 »
@n3Ro: stimmt hab da was verwechselt. Hab grad nen netten artikel gefunden über die verschiedenen verfahren. so wie ich das verstanden hab setzt java verschiedene ein.
http://www.ssw.uni-linz.ac.at/Teaching/Lectures/Sem/2003/reports/Kusel/Kusel.pdf

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 30. July 2006, 21:01 »
Mich interressieren sehr die funktionalen Programmiersprachen. Sie haben einen klaren Vorteil den ich auch gerne in meiner Sprache sehen würde: Man kann die Sprache sehr frei definieren (für Menschen verständlicher Syntax, nich so wie in C ;) ) und der Programmierer hat sich so gut wie keinerlei gedanken über Optimierungen zu machen. Wie ich es jeoch als halbe Basis für ein OS benutzen kann, da fehl mir noch ne brücke. Mal sehen, werde mich aber erstmal auf die funktionalen Sprachen und ihre Möglichkeiten konzentrieren.
db 0x55AA

 

Einloggen