Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Ideen für eine neue Scriptsprache :) (https://boardunity.de/ideen-f-r-neue-scriptsprache-t4680.html)

codethief 07.02.2007 23:27

Ideen für eine neue Scriptsprache :)
 
Guten Abend. :)

Ende letzten Jahres habe ich mit der Entwicklung meines Content Management Systems angehalten, weil ich realisierte, dass PHP - kurz gesagt - Müll war (s. auch Benutzertitel ;)): Es erlaubt weder die Deklaration von Packages oder Namespaces, die Überladung von Funktionen und Methoden, es besitzt eine schlechte Typisierung und viele Erweiterungen sind stets optional enthalten, was uns natürlich oftmals an deren Einsatz hindert.
Diese und weitere Probleme veranlassten mich, verstärkt über die Entwicklung einer neuen interpretierten Programmiersprache und deren Design nachzudenken. Ich habe begonnen, einen kleinen Interpreter in C++ zu basteln, möchte jedoch betonen, dass dieser bisher nur als Experiment zu betrachten ist. Ich habe im Moment weder vor PHP, Ruby und Konsorten Konkurrenz zu machen, noch ihn sonst irgendwie zu verbreiten.
Fertig sind jedenfalls bisher der Lexer / Scanner, der bestimmte Zeichenfolgen als Tokens erkennt und um beliebige Tokens erweitert werden kann, und der Parser für arithmetische Ausdrücke.
Ich bin jetzt an dem Punkt angelangt, dass ich nun die Sprachkonstrukte usw. implementieren muss, wo ihr jetzt ins Spiel kommt.
Ich muss gestehen, dass ich nicht sonderlich kreativ bin, was das Design der Sprache angeht. Sie sollte möglichst klar und einfach (und vor allen Dingen logisch) strukturiert sein, sodass sie sich als Scriptsprache fürs Web, aber auch zur Erweiterung von Software eignen würde. Ich habe eigentlich vor, mich grob an C++ und Java zu orientieren.
Ich möchte nun gerne von euch erfahren, was ihr an bestimmten Programmiersprachen schätzt, und was weniger. Mich würde auch vor allen Dingen eure Meinung bzgl. allgemeinen Programmierparadigmen (Aspekt- und Objektorientierte Programmierung, ...), Reflection, Typisierung und generischer Programmierung (inkl. Templates und Überladung von Funktionen (Polymorphie) und Operatoren) interessieren. Vielleicht fallen euch auch Möglichkeiten ein, wie man bereits existierende Konzepte aus anderern Sprachen verbesseren könnte.


Schönen Abend noch / Gute Nacht,

codethief.

Patrick Gotthardt 08.02.2007 19:20

1) lambda/closures/functional programming (vgl. Common Lisp, Ruby, etc.)
2) Offene Klassen (vgl. Ruby/Common Lisps CLOS)/Categories (vgl Groovy/meinen Vorschlag für Java)
3) Macros/AST-Rewriting (vgl. Common Lisp)
4) Type inference (Typen fest, aber nicht explizit angegeben) - vgl. Haskell

Das ist erstmal so das wichtigste, was mir so einfällt.

Wie schonmal erwähnt fände ich es sinnvoll, das Ding in Java zu schreiben: Die Möglichkeiten der Bibliotheken, die du da geschenkt bekommst, sind einfach genial.

codethief 08.02.2007 19:49

Zu spät: C++ ist 1. geiler (:P), 2. will ich C++ lernen und 3. ist das Ding schon in C++ geschrieben und 4. ist es schneller (hab darüber mit mehreren Leuten gesprochen, die sowohl C++ als auch Java konnten). :)

1) und 2) muss ich mir mal genauer anschauen
3) Meinst du damit, dass man den Code bzw. Klassen / Methoden zur Laufzeit verändern kann?
4)
Code:

foo = new MeineKlasse();
wobei foo dann automatisch vom Typ MeineKlasse ist, ohne dass man es vorher deklariert? Hatte ich auch schon dran gedacht. :)

Patrick Gotthardt 08.02.2007 20:05

Ich lass mich da jetzt nicht auf ne Diskussion ein, aber eine Sache _muss_ ich einfach reinwerfen: Darum ist JRuby auch doppelt so schnell wie Ruby, ne? ;)
Du kannst in beiden Sprachen Müll machen und generell ist Java wirklich schnell genug - denk nur mal an den integrierten GC, der nicht umsonst der Beste der Welt ist - und den bekommst geschenkt.
Spielt aber keine Rolle, weil 2. ein guter Grund ist. Alles andere ist natürlich subjektiv oder falsch. ;)

Zu 3) Damit meine ich, dass man eine Klasse an Stelle A definieren kann und an Stelle B ne Methode, Eigenschaft, etc. hinzufügen kann.

Zu 4) Das und auch sowas:
Code:

getFoobarList := {
    return new ArrayList<Foobar>();
} // ist vom Typ Function
foo := getFoobarList(); // ist vom Typ ArrayList<Foobar>

(Hmm... die Syntax gefällt mir sogar...)

Was ich übrigens vergessen hatte:
5) Metadata/Annotations

Karsten Achterrath 09.02.2007 17:25

Hmmm... neue Scriptsprache für einen Webauftritt.

Also das erste wäre, das die Variabeln wie in c++ oder java nicht mehr automatisch eine Typezuweisung bekommen.
1. wird es dann sicherer
2. wäre ein sauberer Codestil gegeben.

Was vermisse ich an c++ und java, das sind sowas wie Konstanten, die mag ich eigentlich sehr gerne an PHP.

Dann wäre sowas wie zuweisung, hier hat schon jemand ein Beispiel gegeben:

Code:

int foo := 1;
Somit kann man in if auch schreiben:
Code:

int a := 2;
int b := 4;
if(a = b)
{
    a++;
}

Natürlich müsste man, wenn man auch Konstanten erlaubt, zwischen Konstanten und Variabeln unterscheiden, da finde ich die Lösung von PHP ganz gut.
Variabeln mit $ einleiten und Konstanten so wie sie sind.
Code:

int $a := 2;
constant int a := 4;
if($a < a)
{
$a++;
}

So das wären meine Ideen.

codethief 09.02.2007 17:45

@Patrick: Jaja. :D

zu 3) Meiner Meinung nach dürfte das nur zu unübersichtlichem Code führen.
zu 4) Genau das hatte ich vor (exakt diese Syntax mit Ausnahme des ":="). :)
zu 5) Erm, was? :D


@Karsten: Ich will mich jetzt bzgl. Java nicht allzu weit aus dem Fenster lehnen, weshalb ich vorsichtshalber mal nur für C++ spreche: C++ kennt symbolische Konstanten (#define x 1), konstante Variablen und Enum-Typen, die ich auch zu Konstanten zähle.
PHP finde ich diesbzgl. recht inkonsequent. Einerseits kann symbolische Konstanten mit define() definieren, in Klassen sind jedoch auch const-Konstanten erlaubt. In C++ sieht das zwar auf den ersten Blick ähnlich aus, jedoch dort hat alles einen bestimmten Zweck: symbolische Konstanten (die mittels #define deklariert wurden), werden vor dem Kompilieren im Code durch den Präprozessor ersetzt und konstante Variablen dürfen ihren Wert ganz einfach nicht ändern, verhalten sich aber ansonsten ganz genauso (es können also auch Objekte sein).
Konstanten werden in PHP hauptsächlich dazu verwendet, bestimmte konstante Werte, beispielsweise den Fehlertyp o.ä., an Funktionen / Methoden zu übergeben (man schaue sich da nur mal PEAR und ähnliche Softwarepakete an). Allerdings könnte man genauso völlig unpassende Konstanten, die den gleichen Wert repräsentieren, übergeben, da PHP diesbzgl. nicht typisiert ist.
In C++ kann eine Methode einen Wert eines enum-Typs, also quasi nur bestimmte symbolische Konstanten, die in dem enum definiert wurden, erwarten.

Und mit deiner Methode der Wertzuweisung und des Vergleichs mittels := und = kann ich mich überhaupt nicht anfreunden. Ich gehöre wohl zu den größten Pascal- und Delphi-Hassern auf diesem Planeten. ;)

LonelyPixel 09.02.2007 18:04

codethief, kennst du C#? Soll's wohl auch schon für Linux geben. :D (Nein, nicht ASP.NET… Nur die Sprache und das dahinterliegende Klassenframework.)

codethief 09.02.2007 18:08

Ich kenn es vom Namen und auch einigermaßen von der Syntax her, ist Java und C++ sehr ähnlich, wieso?

LonelyPixel 09.02.2007 18:15

Naja, du hast nach „schönen“ Programmiersprachen gefragt und gemeint, dass du irgendwas wie C++ und Java haben willst. Da ich mich mittlerweile (für Windows-UI-Programme) sehr an C# gewöhnt habe und damit eigentlich sehr gut zurecht komme, dachte ich, das könnte sowas sein, was du suchst.

Die Vorlesung Compilerbau Teil 1 hab ich nach wenigen Wochen in favour of einer anderen Vorlesung wieder abgesetzt. Es mag wohl sehr interessant sein, zu wissen, wie man eine Programmiersprache übersetzt, allerdings bin ich bereits zuvor an den in Java zu schreibenden Parsern gescheitert, da muss jetzt nicht auch noch das volle Programm sein. Will meinen: Wenn du nicht unbedingt yet another language erfinden musst, ist es schon etwas viel Arbeit, meinst du nicht? Allein wie lange so viele Menschen gebraucht haben, um PHP oder Python zu dem zu machen, was es heute ist…

Karsten Achterrath 09.02.2007 18:23

Zitat:

Zitat von codethief (Beitrag 38917)
@Patrick: Jaja. :D

zu 3) Meiner Meinung nach dürfte das nur zu unübersichtlichem Code führen.
zu 4) Genau das hatte ich vor (exakt diese Syntax mit Ausnahme des ":="). :)
zu 5) Erm, was? :D


@Karsten: Ich will mich jetzt bzgl. Java nicht allzu weit aus dem Fenster lehnen, weshalb ich vorsichtshalber mal nur für C++ spreche: C++ kennt symbolische Konstanten (#define x 1), konstante Variablen und Enum-Typen, die ich auch zu Konstanten zähle.
PHP finde ich diesbzgl. recht inkonsequent. Einerseits kann symbolische Konstanten mit define() definieren, in Klassen sind jedoch auch const-Konstanten erlaubt. In C++ sieht das zwar auf den ersten Blick ähnlich aus, jedoch dort hat alles einen bestimmten Zweck: symbolische Konstanten (die mittels #define deklariert wurden), werden vor dem Kompilieren im Code durch den Präprozessor ersetzt und konstante Variablen dürfen ihren Wert ganz einfach nicht ändern, verhalten sich aber ansonsten ganz genauso (es können also auch Objekte sein).
Konstanten werden in PHP hauptsächlich dazu verwendet, bestimmte konstante Werte, beispielsweise den Fehlertyp o.ä., an Funktionen / Methoden zu übergeben (man schaue sich da nur mal PEAR und ähnliche Softwarepakete an). Allerdings könnte man genauso völlig unpassende Konstanten, die den gleichen Wert repräsentieren, übergeben, da PHP diesbzgl. nicht typisiert ist.
In C++ kann eine Methode einen Wert eines enum-Typs, also quasi nur bestimmte symbolische Konstanten, die in dem enum definiert wurden, erwarten.

Und mit deiner Methode der Wertzuweisung und des Vergleichs mittels := und = kann ich mich überhaupt nicht anfreunden. Ich gehöre wohl zu den größten Pascal- und Delphi-Hassern auf diesem Planeten. ;)

Naja c++ hab ich nie ne konstante gefunden damals in den bücher, aber danke für den hinweiß, ich bin nur für die stirktere unterscheidung.

codethief 09.02.2007 19:18

Zitat:

Zitat von LonelyPixel (Beitrag 38921)
Will meinen: Wenn du nicht unbedingt yet another language erfinden musst, ist es schon etwas viel Arbeit, meinst du nicht? Allein wie lange so viele Menschen gebraucht haben, um PHP oder Python zu dem zu machen, was es heute ist…

Der Mensch wächst an seinen Herausforderungen. ;)

Trotzdem hast du mir meine Fragen nicht beantwortet - Parserbau usw. überlass mal mir. Es geht mir nur um die Sprache an sich. Vielleicht können wir uns dazu ja auch mal über Jabber kurzschließen. :)

Patrick Gotthardt 09.02.2007 23:30

3) Lässt sich drüber diskutieren. Generell richtig, aber zumindest bei Javascript find ich das verdammt nützlich. Zur Not gehts halt so, wie ich das bei mir im Blog beschrieben habe. Bleibt einfach, ist lokal und daher deutlich.

4) Das ":=" hab ich aus dem Proposal von Gosling für Java. Würd ich nur bei type inference nehmen. Weil: Normal mag ich das auch nicht. ;)

5) Du packst Infos über den Code in den Code. Finde ich in Java und .NET extrem nützlich. z.B. wird das gern für ORM eingesetzt.

codethief 09.02.2007 23:51

Hast du bzgl. 5) einen Link für mich? :)

@all:

Zitat:

Zitat von codethief (Beitrag 38900)
Mich würde auch vor allen Dingen eure Meinung bzgl. allgemeinen Programmierparadigmen (Aspekt- und Objektorientierte Programmierung, ...), Reflection, Typisierung und generischer Programmierung (inkl. Templates und Überladung von Funktionen (Polymorphie) und Operatoren) interessieren. Vielleicht fallen euch auch Möglichkeiten ein, wie man bereits existierende Konzepte aus anderern Sprachen verbesseren könnte.

Würd mich freuen, wenn euch in diesem Zusammenhang vielleicht noch etwas einfällt. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25