Zitat von ich
Die "Java Language" ist derzeit die am weitesten verbreitete und am besten
unterstuetzte Programmiersprache fuer die Java Platform.
Zitat von hal
Oh mein Gott, ist das typisches Marketing-Speak
Das waehre es ganz sicher gewesen gewesen, wenn es sich nicht auf diesen Absatz bezogen haette:
Zitat von ich
Der Erfolg haengt nicht nur mit der Qualitaet einer Sprache zusammen, sondern
vor allem auch mit den Parteien, die dahinterstehen, und der Software, auf und
mit der die Sprache laueft.
Wenn es 1995 schon Sprachen wie Groovy/Nice/Jython/Ruby/Javascript fuer die Java VM gegeben haette, haette sich Java (die Sprache) kaum durchgesetzt. Damals hat man Java ja noch hauptsaechlich fuer kleine Applets verwendet, und dafuer waehren dynamische Sprachen ja viel besser geeignet gewesen.
Die Java Platform war fuer Java das, was Unix fuer C war: Das Sprungbrett in die
Popularitaet.
Zitat von hal
Nona ist das die am weitesten verbreitete Sprache, is ja auch die
einzige, die offiziell vom VM-Hersteller beworben wird.
Ganz meine Rede
Zitat von Maxii
Perl ist mMn ein guter Wurf aus folgendem Grund:
Wenn man mal kapiert hat wie es läuft, ist man irre schnell im implementieren
Das stimmt, aber das gilt auch fuer viele andere Sprachen, wie zum Beispiel Python, Ruby, Haskell oder Lisp. Im Gegensatz zu diesen Sprachen ist Perl aber sehr unkonsistent und wird ganz schnell schwer zu lesen. Bei einem 100 Zeilen Skript mag das noch ueberschaubar bleiben, aber solche Skripte wachsten ganz schnell, und dann skalieren andere Sprachen viel besser.
Zitat von Maxii
Außerdem wurden RegEx brauchbar umgesetzt(in C# zB eine Katastrophe)
RegEx werden in Ruby ca. gleich verwendet wie in Perl (Ruby hat sich das von Perl abgeschaut). In Perl ist so ein Ausdruck allerdings wieder ein eigenes Konstrukt. In Ruby hingegen ist eine Regular Expression einfach nur die Instanz von einer Klasse, genau wie alles andere auch in dieser Sprache:
irb(main):005:0> pattern = /[^a-zA-Z0-9]/ #same as 'Pattern.new("[^a-zA-Z0-9]") '...
=> /[^a-zA-Z0-9]/
irb(main):007:0> pattern.class
=> Regexp
irb(main):008:0> pattern.public_methods
=> ['source', 'send', 'object_id', 'singleton_methods', '__send__', 'equal?', 'taint', 'frozen?', 'instance_variable_get', 'kind_of?', 'to_a', 'instance_eval', 'require', 'typ
e', 'protected_methods', 'extend', 'eql?', 'casefold?', 'instance_variable_set', '~', 'hash', 'is_a?', 'to_s', 'options', 'match', 'class', 'tainted?', 'private_methods', 'req
uire_gem_with_options', 'untaint', 'id', 'inspect', 'kcode', '==', '===', 'clone', 'public_methods', 'respond_to?', 'display', 'freeze', '__id__', '=~', 'methods', 'require_ge
m', 'method', 'nil?', 'dup', 'instance_variables', 'instance_of?']
irb(main):009:0>
Das gleiche gilt auch fuer Zahlen, Listen, module oder die datei in die du schreibst. Sogar Klassen sind nur instanzen von anderen Klassen:
irb(main):010:0> t = Time.new
=> Fri Oct 28 13:32:55 Westeuropõische Normalzeit 2005
irb(main):011:0> t.class
=> Time
irb(main):012:0> Time.class
=> Class
irb(main):013:0> Time.public_methods
=> ['send', 'name', 'class_eval', 'object_id', 'new', 'singleton_methods', 'utc', '__send__', 'private_method_defined?', 'equal?', 'taint', 'frozen?', 'instance_variable_get',
'constants', 'kind_of?', 'to_a', 'instance_eval', 'require', 'ancestors', 'const_missing', 'type', 'gm', 'instance_methods', 'protected_methods', 'extend', 'protected_method_
defined?', 'eql?', 'public_class_method', 'const_get', 'instance_variable_set', 'hash', 'is_a?', 'autoload', 'to_s', 'class_variables', 'class', 'tainted?', 'private_methods',
'local', 'at', 'public_instance_methods', 'instance_method', 'require_gem_with_options', 'untaint', 'included_modules', '_load', 'private_class_method', 'const_set', 'id', 't
imes', '<', 'inspect', '<=>', '==', 'method_defined?', '>', '===', 'clone', 'public_methods', 'mktime', 'protected_instance_methods', '>=', 'respond_to?', 'display', 'freeze',
'<=', 'module_eval', 'autoload?', 'allocate', '__id__', '=~', 'methods', 'now', 'require_gem', 'method', 'public_method_defined?', 'superclass', 'nil?', 'dup', 'private_insta
nce_methods', 'instance_variables', 'include?', 'const_defined?', 'instance_of?']
irb(main):014:0> Class.class
=> Class
irb(main):015:0> Class.public_methods
=> ['send', 'name', 'class_eval', 'object_id', 'new', 'singleton_methods', '__send__', 'private_method_defined?', 'nesting', 'equal?', 'taint', 'frozen?', 'instance_variable_g
et', 'constants', 'kind_of?', 'to_a', 'instance_eval', 'require', 'ancestors', 'const_missing', 'type', 'instance_methods', 'protected_methods', 'extend', 'protected_method_de
fined?', 'eql?', 'public_class_method', 'const_get', 'instance_variable_set', 'hash', 'is_a?', 'autoload', 'to_s', 'class_variables', 'class', 'tainted?', 'private_methods', '
public_instance_methods', 'instance_method', 'require_gem_with_options', 'untaint', 'included_modules', 'private_class_method', 'const_set', 'id', '<', 'inspect', '<=>', '==',
'method_defined?', '>', '===', 'clone', 'public_methods', 'protected_instance_methods', '>=', 'respond_to?', 'display', 'freeze', '<=', 'module_eval', 'autoload?', 'allocate'
, '__id__', '=~', 'methods', 'require_gem', 'method', 'public_method_defined?', 'superclass', 'nil?', 'dup', 'private_instance_methods', 'instance_variables', 'include?', 'con
st_defined?', 'instance_of?']
irb(main):016:0>
Alles anzeigen
Sogar nil ( null in java/C#) ist in Ruby ein Objekt.
Das (unter anderem) macht die Sprache um ein vielfaches einfacher und logischer. Es gibt keine 1000 Ausnahmen, die man sich merken muss. Es gibt nur Objekte mit Zustaenden, an die ich nachrichten schicken kann, um diesen Zustand zu manipulieren und abzufragen.
Zitat von Maxii
Dennoch bin ich der Ansicht, dass C++ eine der besten Sprachen ist, die es zur Zeit gibt:
- irre schnell
- leicht zu erlernen
- man kann echt alles damit machen(man wird nicht so schnell bevormundet)
- eigentlich Plattformunabhängig
- bekannt
Das Problem mit C++ ist, das es auf verschiedenen Hochzeiten tanzen will. Wenn ich eine Software schreibe, will ich mich ganz auf die Funktionalitaet und Lesbarkeit konzentrieren, das heisst die Programmiersprache soll mich moeglichst nicht vom Programmieren abhalten :). Also suche ich ein moeglichst abstraktes Tool.
Ich bin ein Freund von der OptimizeLater technik, aber mit C++ muss ich mich mit Dingen wie Memorymanagement und Pointern befassen, obwohl ich mich eigentlich um Algorithmen und Design kuemmern will. Und wenn es dann tatsaechlich um Performance geht, bremsen die Objektorientierten Eigenschaften von C++ wiederum stark die Geschwindigkeit und blaehen den Code unnoetig auf. Dafuer ist dann C sicherlich besser geeignet.
Maschinennaehe und Abstraktion sind zwei gegensaetzliche Ansaetze. Eine Sprache, die beides zu implementieren versucht, kann meiner Meinung nach keines davon richtig.