Warum werden Programmiersprachen von 1-2 Personen entwickelt? So einfach?

Zeboo

Lt. Commander
Registriert
Juli 2008
Beiträge
1.562
Hallo.

Mir ist so aufgefallen, dass einige der besten Sprachen von nur 1 oder max. 2 Menschen entwickelt worden sind. Ist das so einfach? Oder kann man Sprachen nicht in Teams entwickeln?

Nehmen wir zum Beispiel C, steht weiterhin auf Platz 1, von Dennis Ritchie entwickelt. Ruby, was Perl und Python weit hinter sich im Schatten stehen lässt, von Matsumoto entwickelt. Dann gibt es noch Scala... da brauche ich glaube ich nichts weiteres zu sagen, Java, C# dürften nur träumen so schön und effektiv zu sein wie Scala.

Geniale Sprachen von 1 Person gemacht. Vielleicht wurde das später in Teams weiterentwickelt, aber 1 Person hat sie erfunden und die größten Feinheiten gemacht. Warum ist das so? Wären diese oben aufgezählten Sprachen denn nicht besser wenn man die in Teams erfunden hätte? Oder geht sowas echt nur mit Einzelpersonen bzw. nur mit wenigen Leuten? Verstehe ich nicht...

Danke und Gruß
 
Die meisten Programmiersprachen sind durch kleine Projekten entstanden.
PHP wurde auch von einer Person geschrieben, weil er seine Webseiten dynamisch generieren wollte.
Java sollte ursprünglich eine minimalistische Programmiersprache für leistungsschwache Geräte sein. (Der Mythos besagt, für eine Kaffeemaschine)

Wer Ahnung von der Materie hat, kann sehr wohl auf die Schnelle eine kleine Programmiersprache basteln.
Man muss halt nur wissen, wie ein Parser effektiv funktioniert (Ein Begriff wäre dafür z.B. ein "Endlicher Automat"). Dann ist das nur noch eine Sache, welche Funktionen man haben möchte und wie man diese Funktionieren implementiert. Ob man dafür schon eine bestehende Programmiersprache verwendet und dann dies weiter kompiliert oder gleich in Assembler schreibt.

Ein ehemaliger Schüler auf meiner Schule (ist jetzt ca. 10 Jahre her) hat für ein Seminarprojekt seinen eigenen BASIC-Dialekt, mit Parser und Interpreter, geschrieben. Für dieses Projekt hatte er 3 Monate Zeit gehabt.
 
C# bspw. wurde auch von Heiljberg "alleine" entwickelt.

Ich würde sagen das die Entwicklung der Sprache alleine bzw. ihrer spezifischen Merkmalen alleine am effektivsten ist.
Alles was danach kommt wie Compiler, Bibliothek und Extensions kann man auch prima im Team entwickeln.

PS:
da brauche ich glaube ich nichts weiteres zu sagen, Java, C# dürften nur träumen so schön und effektiv zu sein wie Scala.
Deswegen ist Scala auch auf Platz 1 der meistgenutzten Sprachen :P
 
"Scala runs on the Java platform (Java Virtual Machine) and is compatible with existing Java programs"

Soviel zu Scala *lach*
 
Whiz-zarD schrieb:
"Scala runs on the Java platform (Java Virtual Machine) and is compatible with existing Java programs"

Soviel zu Scala *lach*

Stimmt, Scala rennt also auf allen System und ist Plattformunabhängig, das ist echt lächerlich. Da nehmen wir doch alle lieber C#

Und spätestens jetzt: Herr lass es Hirne regnen

Gruß

Edit:

Whiz-zarD schrieb:
Die Effektivität einer Programmiersprache wird nach ihrer Performance ermittelt. Wie kann denn Scala effektiver sein, als Java, wenn Scala auf das gleiche System, wie Java beruht?

Spätestens jetzt sieht man, dass du nichts aber rein garnichts verstanden hast. Schon traurig dass wir hier von so Leute wie dich Sachen "erklärt" bekommen. Könnte jetzt natürlich weiter meine Meinung dazu sagen, aber kurz: ließ dir die unteren Beiträge weiter durch und komm aus deine kleine Welt endlich mal raus
 
Zuletzt bearbeitet:
ReVo schrieb:
Stimmt, Scala rennt also auf allen System und ist Plattformunabhängig, das ist echt lächerlich. Da nehmen wir doch alle lieber C#

Und spätestens jetzt: Herr lass es Hirne regnen
Die Java-VM ist auch nur eine weitere Plattform. Ein Programm , was auf so einer Java-VM läuft, läuft noch lange nicht auf allen Systemen. Die Java-Spinner reden gern von "runs anywhere", vergessen dabei allerdings zu erwähnen, dass sie "anywhere" völlig weltfremd als "da, wo eine Java-VM läuft" interpretieren.

Jeder kann alles überall - er muß nur seien Blick auf die Welt stark genug einschränken, damit alle nicht zutreffenden Fälle rausfallen. Das ist kein Kunststück.

Zur Frage des Threads:
Weil Programmiersprachen (im Gegensatz zu natürlichen Sprachen) oft so klein und übersichtlich sind, dass ein Mensch sie komplett definieren kann. Eine gute Programmiersprache zeichnet sich geradezu dadurch aus, klein zu sein. Kompliziertere Sachen müssen sich auf Basis dieser kleinen Sprache elegant formulieren lassen. So ensteht oft Version 1 einer neuen Sprache. An der Weiterentwicklung werkeln meisten viele mit. Das aktuelle C ist z.B. alles andere als das Werk eines einzelnen.

Zu vielen Sprachen gehört neben der Sprache im engeren Sinn eine Standardbibliothek. Diese Bibliothek ist es oft, die die ganze Sache groß macht.
 
Zuletzt bearbeitet:
ReVo schrieb:
Stimmt, Scala rennt also auf allen System und ist Plattformunabhängig, das ist echt lächerlich. Da nehmen wir doch alle lieber C#

Und spätestens jetzt: Herr lass es Hirne regnen

Gruß

Weißt du, Java ist nicht wirklich Plattformunabhängig.
"Plattformunabhängigkeit" ist auch so ein PR-Begriff, wie OOP.
z.B. bei Threads habe ich schon, auf unterschiedlichen Systemen, böse Überraschungen erlebt.

Die Effektivität einer Programmiersprache wird nach ihrer Performance ermittelt. Wie kann denn Scala effektiver sein, als Java, wenn Scala auf das gleiche System, wie Java beruht?
 
mensch183 schrieb:
Die Java-VM ist auch nur eine weitere Plattform. Ein Programm , was auf so einer Java-VM läuft, läuft noch lange nicht auf allen Systemen. Die Java-Spinner reden gern von "runs anywhere", vergessen dabei allerdings zu erwähnen, dass sie "anywhere" völlig weltfremd als "da, wo eine Java-VM läuft" interpretieren.

Bitte!! "Java-Spinner" muss echt nicht sein.

Es ist natürlich wahr, das JavaVM-Programme nur dort laufen, wo es auch eine JavaVM gibt. Allerdings gibt es JavaVMs für quasi jedes populäre Comsumer und Server-Betriebssystem, von daher ist die Aussage "Runs everywhere" durchaus berechtigt.

VM-Sprachen sind eine natürliche Evolution. Früher hat man z.B. in Assember programmiert und war damit auf eine Hardware festgelegt. Mit höheren Programmiersprachen, z.B. ANSI-C war es immerhin möglich den Quelltext für sein eigenes Betriebssystem zu kompilieren.

VM-Sprachen gehen nun einen Schritt weiter und machen das Kompilat hardwareunabhängig, das ist aus meiner Sicht ein Fortschritt.

Zum Thread:
Eine "neue" Programmiersprache zu erfinden ist nicht so schwer. Man erfindet das Rad ja nicht wirklich neu, sondern bedient sich an Konzepten schon vorhandener Programmiersprachen - selten kommt etwas wirklich neues dazu.
Ist die Sprache einmal definiert ist das Schreiben eines Interpreters oder gar Compilers auch kein Geheimnis, dazu gibt es mehr als genügeng Literatur nach dessen Lektüre man selber soetwas schreiben kann.
Damit eine neue Sprache erfolgreich sein kann MUSS sie eine umfangreiche Standardbibliothek mitbringen und das ist schon etwas zeitintensiver. Aus diesem Grund werden viele neue Sprachen auch auf .Net bzw. JavaVM-Basis definiert - auf diese Weise hat man gleich die mitgelieferte Klassenbibliothek im Sack.
 
Zeboo schrieb:
Mir ist so aufgefallen, dass einige der besten Sprachen von nur 1 oder max. 2 Menschen entwickelt worden sind. Ist das so einfach? Oder kann man Sprachen nicht in Teams entwickeln?
die erste Version wird meist von nur 1-2 Personen entwickelt, vergleich das aber nicht mit dem was du an Sprachen aufzählst, die 1. Version ist meist nicht zu mehr zu gebrauchen als ein Prototyp.
Richtig effektiv werden die Sprachen dann erst, wenn mehrere daran arbeiten, denn Parser, Compiler oder Runtimes schreiben ist nicht wenig Arbeit und auch sicherlich nicht einfach.

Zeboo schrieb:
Geniale Sprachen von 1 Person gemacht. Vielleicht wurde das später in Teams weiterentwickelt, aber 1 Person hat sie erfunden und die größten Feinheiten gemacht. Warum ist das so?
Wenn du den Language-Entwurf machst, also die Spezifikation ist eben deutlich einfacher, dass mit wenigen Personen zu machen, da bei mehr Personen deutliche Unterschiede in der Vorstellung der Syntax und Konzepte auftreten.

Whiz-zarD schrieb:
Weißt du, Java ist nicht wirklich Plattformunabhängig.
"Plattformunabhängigkeit" ist auch so ein PR-Begriff, wie OOP.
z.B. bei Threads habe ich schon, auf unterschiedlichen Systemen, böse Überraschungen erlebt.
ich weiß nicht worauf du dich beziehst, aber mitlerweile ist die JVM wirklich sehr plattformunabhängig, mit der Überarbeitung des Memory Modells in Version 5 sind nun auch Sichtbarkeiten von Variablen in Threads in allen Implementierungen und auf jeglicher Hardware gleich (Stichwort: Prozessorcaches bei echten Multi-Prozessor-Maschinen).

Whiz-zarD schrieb:
Die Effektivität einer Programmiersprache wird nach ihrer Performance ermittelt. Wie kann denn Scala effektiver sein, als Java, wenn Scala auf das gleiche System, wie Java beruht?
Die Effektivität nur nach der Performance ermitteln? :lol:
Was ist mit der Effektivität beim Entwickeln? Wenn ich da schneller bin ist die Sprache in dieser Hinsicht garantiert effektiver. Und das wird viel zu oft vergessen.
Scala basiert zwar auf der JVM aber es macht eben nicht mehr als Scala-Code in den JVM-Bytecode zu kompilieren, somit lassen sich eben auch Konzepte umsetzen, die Java gar nicht kennt (Closures usw).
Der JVM-Bytecode ist entfernt mit Assembler vergleichbar, es ist eine Abstraktion über Assembler der eben komplett plattformunabhängig arbeiten soll, wenn eine JVM implementiert wird die den Bytecode für die Zielplattform und dessen Hardware übersetzt.
 
Whiz-zarD schrieb:
Weißt du, Java ist nicht wirklich Plattformunabhängig.
"Plattformunabhängigkeit" ist auch so ein PR-Begriff, wie OOP.
z.B. bei Threads habe ich schon, auf unterschiedlichen Systemen, böse Überraschungen erlebt.

Für mich ist die platformunabhängigkeit kein PR-Begriff, sondern Realität. In meiner Firma entwickeln wir Javasoftware unter 32-BitWinXP, testen es auf 32-BitLinux-Servern und beim Kunden läuft es dann in Rechenzentren ohne Änderungen unter 64-Bit Solaris, AIX bzw HP-UX.

Threads sind allerdings wirklich tricky, wenn man nicht genau weiß, worauf man sich einläßt.

Ich kenne jede Menge (nicht nur Java)-Entwickler, welche denken sie kennen sich mit Threads und vor allem Thread-Synchronisation aus, in Wirklichkeit aber keinen blassen Schimmer haben.

So gibt es einige Fehlerklassen, welche auf einem Multitasking-BS mit nur einem CPU-Kern mangels ECHTER Parallelität nicht auftreten können. Läßt man das gleiche vermeintlich korrekte Programm auf einer Maschine mit mehreren physischen Prozessoren mit jeweils mehrere Kernen laufen, so springt das Programm in die Tonne.

Diese Fehlerklassen sind allerdings NICHT spezifisch für Java, sondern treten in jeder Programmiersprache auf.

Wer des englischen mächtig ist, dem kann ich nur folgendes Buch empfehlen:
http://www.amazon.de/Java-Concurren...9601/ref=sr_1_1?ie=UTF8&qid=1291571024&sr=8-1

Es ist zwar ein Java-Buch, aber das meiste was dort steht läßt siche auf alle Programmiersprachen übertragen.


Whiz-zarD schrieb:
Die Effektivität einer Programmiersprache wird nach ihrer Performance ermittelt. Wie kann denn Scala effektiver sein, als Java, wenn Scala auf das gleiche System, wie Java beruht?

Richtig, Scala kann nur so leistungsfähig sein, wie die unterliegende JavaVM es erlaubt, absolut wird jede Programmiersprache durch die Hardware des Computer beschränkt. Da könnte man sich fragen, warum es dann soviele Programmiersprachen gibt, wenn es eigentlich egal ist. Die Antwort ist, dass die Lösung eine konkreten Problems in unterschiedlichen Sprachen unterschiedliche schnell und elegant gelöst werden kann. Eine weitere wichtige Eigenschaft von Programmiersprachen ist auch, wie einfach es ist seinen Code zu organisieren, wiederzuverwenden und wartbar zu halten.
 
Banthor, dem kann ich mich nur anschließen :bussi:
Viele denken wirklich sie haben Threading verstanden, weil es ja nur einfach eine Klasse zu nutzen ist und eventuell ein synchronized-Block, das da aber deutlich mehr dahinter steckt weiß kaum einer.
Das Buch ist wirklich gut, hab das auch mal gelesen, kannte mich zwar schon sehr gut darin aus, aber die Autoren haben echt noch einige richtige gute Ideen gehabt.
 
Du kannst dir fix selbst eine ausdenken, nur du brauchst dann andere, um sie umzusetzen :D
Willst du nen Compiler bauen? In der ausgedachten Sprache?... geht irgendwie nicht, versteht der PC ja nicht.

(mal abgesehen davon, dass du dir Gedanken über die Architektur etc machen müsstest, mal abgesehen)

Java VM ist z.b. auch in C++ geschrieben. Der erste C++ Compiler wurde in C geschrieben , C in Assembler oder Lisp...
 
Zuletzt bearbeitet:
Naja, einen passender Parser zu basteln ist jetzt nicht so schwierig. Es gibt ja auch sog. Parser-Generatoren, bei denen du deine Syntax relativ high-level beschreiben kannst und der Generator erzeugt dir daraus einen funktionsfähigen Parser.

Im einfachsten Fall kannst du deine neue Sprache auf eine andere Hochsprache abbilden, z.B. C. Dann kannst du aus Code aus deiner Programmiersprache direkt ein C Programm generieren und das dann mit jedem beliebigen C-Compiler compilieren.

Es gibt ja genug unsinnige Programmiersprache. Mein persönlicher Favorit ist SPL (Shakespeare Programming Language)
 
Metzlor schrieb:
@Zeboo
dann programmiere mal das hello world programm ohne stdio.h in C

Hi. Verstehe ich nicht? Meinst du stdio.h haben anderen gemacht oder wie?
 
Whiz-zarD schrieb:
Die Effektivität einer Programmiersprache wird nach ihrer Performance ermittelt. Wie kann denn Scala effektiver sein, als Java, wenn Scala auf das gleiche System, wie Java beruht?

Danke für den Lacher des Tages.

Ansonsten sind Sprachen ansich nicht so komplex wie man vielleicht meinen könnte. Compilerbau im eigentlichen Sinne muss man garnicht mehr betreiben, sondern kann Dinge wie Scanner und Parser zum Teil automatisch generieren lassen.
 
Metzlor schrieb:
Und wie sieht jetzt dein Hello World Programm aus? =D

Puh keine Ahnung. Wie würde denn jetzt eigentlich ein Hell World Programm aussehen wenn man nur C splitternackt nimmt?
 
Code:
#include <stdio.h>

int main()
{
    printf( "C sucks .... erm I mean ... hello world!!\n" );
    return 0;
}

So? :)
 
antred schrieb:
Code:
#include <stdio.h>

int main()
{
    printf( "C sucks .... erm I mean ... hello world!!\n" );
    return 0;
}

So? :)

Ohje ^^, Thread bitte nochmal durchlesen ;> Weil das könnte sogar ich :evillol:
 
Zurück
Oben