Zur Boardunity Forenstartseite
  #1  
Alt 07.02.2007, 23:27
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811

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.
  #2  
Alt 08.02.2007, 19:20
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
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.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #3  
Alt 08.02.2007, 19:49
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
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.

  #4  
Alt 08.02.2007, 20:05
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
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

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #5  
Alt 09.02.2007, 17:25
Benutzerbild von Karsten Achterrath
Mitglied
 
Registriert seit: 02.2006
Beiträge: 192
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.

__________________
Karsten Achterrath
Die Signatur befindet sich im Offlinemodus, bitte versuchen Sie es später wieder.
  #6  
Alt 09.02.2007, 17:45
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
@Patrick: Jaja.

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?


@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.

  #7  
Alt 09.02.2007, 18:04
Benutzerbild von LonelyPixel
UNB-Entwickler
 
Registriert seit: 01.2004
Ort: Erlangen
Beiträge: 974
codethief, kennst du C#? Soll's wohl auch schon für Linux geben. (Nein, nicht ASP.NET… Nur die Sprache und das dahinterliegende Klassenframework.)

__________________
Yves Goergen
Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit)
  #8  
Alt 09.02.2007, 18:08
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Ich kenn es vom Namen und auch einigermaßen von der Syntax her, ist Java und C++ sehr ähnlich, wieso?

  #9  
Alt 09.02.2007, 18:15
Benutzerbild von LonelyPixel
UNB-Entwickler
 
Registriert seit: 01.2004
Ort: Erlangen
Beiträge: 974
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…

__________________
Yves Goergen
Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit)
  #10  
Alt 09.02.2007, 18:23
Benutzerbild von Karsten Achterrath
Mitglied
 
Registriert seit: 02.2006
Beiträge: 192
Zitat:
Zitat von codethief Beitrag anzeigen
@Patrick: Jaja.

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?


@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.

__________________
Karsten Achterrath
Die Signatur befindet sich im Offlinemodus, bitte versuchen Sie es später wieder.
  #11  
Alt 09.02.2007, 19:18
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Zitat:
Zitat von LonelyPixel Beitrag anzeigen
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.

  #12  
Alt 09.02.2007, 23:30
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
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.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #13  
Alt 09.02.2007, 23:51
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Hast du bzgl. 5) einen Link für mich?

@all:

Zitat:
Zitat von codethief Beitrag anzeigen
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.

Antwort


Stichworte
-

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ideen sammeln für eine andere Art Forum LonelyPixel Entwicklung und Konzeption sozialer Software 34 26.10.2007 13:04
Ideen rund um Nullposter TRS Community Management, Administration und Moderation 32 22.05.2005 11:10
Ideen und Anregungen für Forenscout und Boardunity itst Informationen, Anregungen und Kritik 16 17.07.2004 18:48
Suche einen Schwerpunkt für eine neue Community.. Schneidwui Community Management, Administration und Moderation 6 12.08.2002 16:13






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