Ich kann doch C/C++ Und dafür habe ich auch eigene und fremde Bibliotheken Also mache ich auch kleine Progrämmchen in C/C++ Was sollen Scriptsprachen da für Vorteile bringen ?
Ok, ich nutze PHP für Web Sachen und lege mir ab und zu ein paar shell Scripte an.
Für größere Sachen machen Programme Sinn aber wenn du bestimmte Dateien z.b. suchst und dies häufiger, dann ist ein Shellskript sinnvoller als ein eigenes Programm :/
>Ich kann doch C/C++ >Und dafür habe ich auch eigene und fremde Bibliotheken >Also mache ich auch kleine Progrämmchen in C/C++ >Was sollen Scriptsprachen da für Vorteile bringen ?
Die kleinen Progrämmchen werden viel schneller fertig, da weniger Code nötig ist. Außerdem sind sie viel leichter zu debuggen, da die Speicherverwaltung komplett vom Interpreter übernommen wird. Auch kann man ohne externe Libraries Stacktraces selber produzieren. Eigene alte C/C++-Bibliotheken kannst du mit praktisch allen modernen Skriptsprachen weiterhin ansprechen, wobei eine Portierung auch kein großer Aufwand sein sollte.
>Ok, ich nutze PHP für Web Sachen und lege mir ab und zu ein paar shell Scripte an. Lern Ruby, da hast du die Einfachheit von Shellskripten und die Mächtigkeit von C++...
> Die kleinen Progrämmchen werden viel schneller fertig, da weniger Code > nötig ist. Außerdem sind sie viel leichter zu debuggen, da die > Speicherverwaltung komplett vom Interpreter übernommen wird.
Das halte ich für ein Gerücht. Neben der Beherrschung der Sprache, kommt es im wesentlichen darauf an, die verwendeten Bibliotheken (in und auswendig) zu kennen. Bei mir ist das hauptsächlich Qt und meine eigene Bibliothek.
Und da habe ich mit C/C++ nun mal mehr Routine. Wenn ich jetzt extra für kleine Progrämmchen was anderes nehmen sollte, als bei meiner normalen Entwicklertätigkeit, wäre ich bestimmt langsamer.
ich habe Qt fast immer nur mit Python benutzt, habe ich da was verpasst?
Ausserdem kennst Du bestimmt das Konzept des Prototypen? Der wird nach ganz anderen Regeln entwickelt. Ich schreibe Programme in Ada, die ich vorher in Python als Prototyp hatte. Das geht dann natürlich viel langsamer, aber insgesamt viel schneller, weil ich am Anfang vorallem Agilität brauchte.
Qt ist in C++ geschrieben und daher ist es meiner Meinung nach am sinnvollsten auch in C++ zu programmieren, wenn man Qt verwenden will.
Die eigenen Bibliotheken kann ich zwar mit http://swig.org auch für Scriptsprachen nutzbar machen aber ich sehe da noch nicht den Vorteil. Eher in Gegenteil sehe ich Nachteile. So zum Beispiel bei mehreren Threads, was zwar in Python unterstützt wird aber von den meisten Scriptsprachen nicht.
in Python kannst Du doch auch einfach Prozesse benutzen, die sich ihre Daten teilen. Das ist eh geschickter als Threads, wo Du nicht sauber genug trennst. Guckst Du http://docs.python.org/library/multiprocessing.html das ist neu und sieht eigentlich recht einfach aus, quasi Pythonic.
Ich habe z.B. Python in einem Projekt XMLRPC ausprobiert, das ist total einfach so z.B. die Engine von der GUI zu trennen. Ratz fatz hast Du den Mehrwert, dass das Starten der GUI überall geht, mehrere gehen, und dass es ausfallen kann.
Mit Threads in C++ rumzuhünern, ist dagegen kein Spaß und ziemlich zeitaufwendig, wenn Du einen Bug hast.
Also ich bin davon abgerückt Anwendungen noch in C zu schreiben. Zum Teil wegen miesen Design/Syntax(bspw. Zeichenketten und ncurses Geraffel) zum anderen wegen den Entwicklungsprozess(Testen & Wartung). Natürlich gibts auch häßliche Seiten bei Python, aber derzeit bin ich mit Python zufriedener.
>Das halte ich für ein Gerücht. >Neben der Beherrschung der Sprache, kommt es im wesentlichen darauf an, die >verwendeten Bibliotheken (in und auswendig) zu kennen. Bei mir ist das >hauptsächlich Qt und meine eigene Bibliothek.
Das wiederum halte ich für ein Gerücht. Eine Sprache lebt doch gerade davon eine große Menge an Libraries zu haben, damit man nicht bei *jedem* Programm erstmal 20-mal das Rad neu-erfinden muss. Klar hast du deine eigene Bibliothek, aber ich nehme an, dass du auch die andauernd erweitern musst. (Und sowas läuft ja auch nicht immer ohne Fehler ab...)
Und glaub mir, die Bibliotheken unter C/C++ sind die Schlimmsten. Die meisten kann man intuitiv überhaupt nicht benutzen, da heißt es erstmal Anleitung lesen, Frustration, Anleitung lesen, Googlen, usw..... Unter Ruby dagegen sind Libraries kinderleicht zu installieren ("sudo apt-get install mechanize", im Code: "require 'mechanize'"). Dann kann man die interaktive Rubykonsole starten, und ein bisschen rumspielen. Ob du es glaubst oder nicht, aber viele Libraries kann man ohne Anleitung benutzen. Ich benutze zB die appengine-jruby Libs und die sind nahezu null dokumentiert, trotzdem funktionieren sie perfekt. Einmal in den Code reingeschaut, Funktionsnamen genommen, fertig. Unter C++ muss man gerade bei komplexen Libs wie Qt erst einmal alles mögliche Zeug initialisieren, Pointer weiterreichen usw usf. Oft sind diese Libraries vom Codestyle so invasiv, dass sie ihren Codestyle dem eigenen Code aufzwingen, es sei denn man betreibt gewissen Aufwand und schreibt einen Wrapper drumrum.
Als früher fast nur C++ benutzt hatte, hatte ich deswegen auch kaum Libraries benutzt. Jetzt kann ich mit Ruby allemöglichen erdenklichen Mini-Projekte in 2-3 Stunden programmieren.
Wie lange würdest du brauchen um einen Bot zu schreiben, der Freundesnetzwerke bei Facebook ausliest und in eine Datenbank schreibt? Dank Mechanize, Regular Expressions und Datamapper schreib ich dir so ein Teil in 1-2 Stunden!!! (Natürlich auf der Datenbank deiner Wahl!!) Ich wette mit dir, dass du so ein Progg auch ohne Plan von Ruby an einem Tag hinkriegen würdest... Oder letztens musste ich für meinen Chef (unter Zeitdruck) ein Progg schreiben, dass eine Datei Datensätzen in eine Geodatenbank schreibt. Komplett von Scratch hat es ca. 5 Minuten gedauert das Progg zu schreiben, weitere 5 Minuten und es war debugged und lief.
>Und da habe ich mit C/C++ nun mal mehr Routine. >Wenn ich jetzt extra für kleine Progrämmchen was anderes nehmen sollte, als bei >meiner normalen Entwicklertätigkeit, >wäre ich bestimmt langsamer. Schon klar dass du in C/C++ mehr Routine hast, wenn du sonst keine anderen Sprachen benutzt. (PHP zähle ich mal nicht mit, weil man es nur für Webapps benutzen kann.) Aber es ist auch so, dass zB Ruby extrem leicht zu erlernen ist. Guckst du dir einmal ein Tutorial an, schon kannst du loslegen, weil die Befehle ähnlich wie in anderen Sprachen sind. Ruby, Python und Perl sind nicht wie C++. C++ muss mühsam erlernt werden, bis man erstmals in der Lage ist größere sinnvolle Programme zu schreiben. Ruby macht Spaß, immer, man kann direkt loslegen.
Ich erinnere mich noch an die qualvolle Zeit damals, als ich nichtmal geschafft hatte ein Hello World kompiliert zu kriegen.
Wenn ich Ruby programmiere oder debugge habe ich das Gefühl die ganze Zeit vorwärts zu kommen und super produktiv zu sein. Kein Rumärgern mit Pointern, Templates & Co. Es gibt nur noch Referenzen, die schlimmstenfalls Null sind, alles ist per default generisch... Wenn du schnell etwas ausprobieren willst, kannst du es schnell in die Ruby-Konsole reinpasten. (Z.B. eine Regular Expression oder um rauszufinden, welche Methoden ein Objekt anbietet...)
Und nur mal um einen Eindruck der Fähigkeiten von Ruby zu kriegen, hier mal ein kleines TicTacToe-Progg: http://pastebin.org/435841 halbe Stunde, 45 Zeilen, 1kB... Wie siehts mit der C++-Lösung aus?
Hier mal unser Projekt: http://pvbrowser.org Die Server kann man da übrigens auch in Python programmieren.
Hier die eigene Bibliothek, von der ich gesprochen habe: http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/classes.html Damit und zusätzlich noch Qt, kann ich auch viele kleinere Progrämmchen schnell erstellen.
Von arwerk,irdegrt am Sa, 31. Juli 2010 um 15:35 #
Sicher, aber die Ruby-Lösung ist immer schneller erstellt und weniger Lines Of Codes. Hier mal ein Beispiel aus deiner Lib (http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/rltime_8cpp_source.html):
00263 t.year = year + time.year; 00264 t.month = month + time.month; 00265 t.day = day + time.day; 00266 t.hour = hour + time.hour; 00267 t.minute = minute + time.minute; 00268 t.second = second + time.second; 00269 t.millisecond = millisecond + time.millisecond; 00270 00271 y = t.year; 00272 if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) y++; 00273 m = t.month; 00274 if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) m = 1; 00275 00276 switch(m) 00277 { 00278 case 1: // january 00279 maxmonth = 31; 00280 break; 00281 case 2: // february 00282 maxmonth = 28; 00283 if(y%4==0) maxmonth = 29; 00284 break; 00285 case 3: // march 00286 maxmonth = 31; 00287 break; 00288 case 4: // april 00289 maxmonth = 30; 00290 break; 00291 case 5: // may 00292 maxmonth = 31; 00293 break; 00294 case 6: // june 00295 maxmonth = 30; 00296 break; 00297 case 7: // july 00298 maxmonth = 31; 00299 break; 00300 case 8: // august 00301 maxmonth = 31; 00302 break; 00303 case 9: // semptember 00304 maxmonth = 30; 00305 break; 00306 case 10: // october 00307 maxmonth = 31; 00308 break; 00309 case 11: // november 00310 maxmonth = 30; 00311 break; 00312 case 12: // december 00313 maxmonth = 31; 00314 break; 00315 default: 00316 maxmonth = 0; 00317 break; 00318 }
In Ruby wärs: ["year","month","day","hour","minute","secound","millisecond"].each{|z| eval "t.#{z} = #{z} + time.#{z}"} y = t.year if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) y+=1 m = t.month if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) m = 1 maxmonth = if [1,3,5,7,8,10,12].include?(m) 31 # januar, march, may, july, august, october, december elsif m == 2 (y % 4 == 0) ? 29 : 28 # february else 30 end #Wenn keiner der Monate zutrifft, wird maxmonth nil, womit man sich Abfrage wie "if #(maxmonth == 0) /* Fehler... */" spart, da arithmetische Operationen auf maxmonth #sofort eine Nilexception hevorrufen.
Das sind 56 Zeilen vs. 12 Zeilen!!!
Und wäre die Library in Ruby oder Python, könntest du auch von C/C++ aus zugreifen....
Also wenn du mich fragst, hat C/C++ außerhalb der Systemprogrammierung und speziellen Nischenanwendungen keinen Nutzen mehr.
Ja, man braucht lange um eine A4 Seite voll mit Metaprogrammierung zu verstehen, nur kann die eben auch so viel wie 10 Seiten ohne (immer unter Bedingung, dass es sinnvoll eingesetzt wird). 10 Seiten lesen, dauert auch länger als eine zu lesen.
Das Problem bei Metaprogrammierung wie bei allen "cleveren" Sachen ist, dass es womöglich jemand überhaupt nicht oder falsch versteht. Ich würde daher instance_eval, class_eval oder eval nie ohne Kommentar benutzen, womit es dann natürlich wieder länger wird.
Ich kann doch C/C++
Und dafür habe ich auch eigene und fremde Bibliotheken
Also mache ich auch kleine Progrämmchen in C/C++
Was sollen Scriptsprachen da für Vorteile bringen ?
Ok, ich nutze PHP für Web Sachen und lege mir ab und zu ein paar shell Scripte an.
Für größere Sachen machen Programme Sinn aber wenn du bestimmte Dateien z.b. suchst und dies häufiger, dann ist ein Shellskript sinnvoller als ein eigenes Programm :/
Ich sage ja garnichts gegen kurze shell scripte.
Darin rufe ich auch häufig kleine selbst geschriebene C/C++ Progrämmchen auf.
Definiere größere Sachen...
Denn unter größere Sachen versteh ich z.B. auch Red Hats Anaconda (GUI Installer) der komplett in PyGTK geschrieben wurde.
Also ich schreib Programme lieber in Python als in C++ wenn es nicht gerade auf Performance ankommt.
Ganz einfach weil viel Arbeit weg fällt z.B. dank dynamischer Typenverwaltung oder der riesen Lib.
>Ich kann doch C/C++
>Und dafür habe ich auch eigene und fremde Bibliotheken
>Also mache ich auch kleine Progrämmchen in C/C++
>Was sollen Scriptsprachen da für Vorteile bringen ?
Die kleinen Progrämmchen werden viel schneller fertig, da weniger Code nötig ist. Außerdem sind sie viel leichter zu debuggen, da die Speicherverwaltung komplett vom Interpreter übernommen wird. Auch kann man ohne externe Libraries Stacktraces selber produzieren. Eigene alte C/C++-Bibliotheken kannst du mit praktisch allen modernen Skriptsprachen weiterhin ansprechen, wobei eine Portierung auch kein großer Aufwand sein sollte.
>Ok, ich nutze PHP für Web Sachen und lege mir ab und zu ein paar shell Scripte an.
Lern Ruby, da hast du die Einfachheit von Shellskripten und die Mächtigkeit von C++...
> Die kleinen Progrämmchen werden viel schneller fertig, da weniger Code
> nötig ist. Außerdem sind sie viel leichter zu debuggen, da die
> Speicherverwaltung komplett vom Interpreter übernommen wird.
Das halte ich für ein Gerücht.
Neben der Beherrschung der Sprache, kommt es im wesentlichen darauf an, die verwendeten Bibliotheken (in und auswendig) zu kennen. Bei mir ist das hauptsächlich Qt und meine eigene Bibliothek.
Und da habe ich mit C/C++ nun mal mehr Routine.
Wenn ich jetzt extra für kleine Progrämmchen was anderes nehmen sollte, als bei meiner normalen Entwicklertätigkeit,
wäre ich bestimmt langsamer.
Hallo Du,
ich habe Qt fast immer nur mit Python benutzt, habe ich da was verpasst?
Ausserdem kennst Du bestimmt das Konzept des Prototypen? Der wird nach ganz anderen Regeln entwickelt. Ich schreibe Programme in Ada, die ich vorher in Python als Prototyp hatte. Das geht dann natürlich viel langsamer, aber insgesamt viel schneller, weil ich am Anfang vorallem Agilität brauchte.
Gruss,
Kay
Vorallem entfällt auch hier wieder mit PyQt sehr viel...
z.B. entfallen komplett die Header Dateien
Vieles ist eben Geschmackssache.
Qt ist in C++ geschrieben und daher ist es meiner Meinung nach am sinnvollsten auch in C++ zu programmieren, wenn man Qt verwenden will.
Die eigenen Bibliotheken kann ich zwar mit http://swig.org auch für Scriptsprachen nutzbar machen aber ich sehe da noch nicht den Vorteil.
Eher in Gegenteil sehe ich Nachteile. So zum Beispiel bei mehreren Threads, was zwar in Python unterstützt wird aber von den meisten Scriptsprachen nicht.
Hallo Du,
in Python kannst Du doch auch einfach Prozesse benutzen, die sich ihre Daten teilen. Das ist eh geschickter als Threads, wo Du nicht sauber genug trennst. Guckst Du http://docs.python.org/library/multiprocessing.html das ist neu und sieht eigentlich recht einfach aus, quasi Pythonic.
Ich habe z.B. Python in einem Projekt XMLRPC ausprobiert, das ist total einfach so z.B. die Engine von der GUI zu trennen. Ratz fatz hast Du den Mehrwert, dass das Starten der GUI überall geht, mehrere gehen, und dass es ausfallen kann.
Mit Threads in C++ rumzuhünern, ist dagegen kein Spaß und ziemlich zeitaufwendig, wenn Du einen Bug hast.
Gruss,
Kay
Wenn dem so wäre, dürften alle Programme unter Linux nur in C geschrieben werden...
ergo: Ziemlicher Unsinn diese obige Aussage!
Also ich bin davon abgerückt Anwendungen noch in C zu schreiben. Zum Teil wegen miesen Design/Syntax(bspw. Zeichenketten und ncurses Geraffel) zum anderen wegen den Entwicklungsprozess(Testen & Wartung). Natürlich gibts auch häßliche Seiten bei Python, aber derzeit bin ich mit Python zufriedener.
>Das halte ich für ein Gerücht.
>Neben der Beherrschung der Sprache, kommt es im wesentlichen darauf an, die
>verwendeten Bibliotheken (in und auswendig) zu kennen. Bei mir ist das
>hauptsächlich Qt und meine eigene Bibliothek.
Das wiederum halte ich für ein Gerücht. Eine Sprache lebt doch gerade davon eine große Menge an Libraries zu haben, damit man nicht bei *jedem* Programm erstmal 20-mal das Rad neu-erfinden muss. Klar hast du deine eigene Bibliothek, aber ich nehme an, dass du auch die andauernd erweitern musst. (Und sowas läuft ja auch nicht immer ohne Fehler ab...)
Und glaub mir, die Bibliotheken unter C/C++ sind die Schlimmsten. Die meisten kann man intuitiv überhaupt nicht benutzen, da heißt es erstmal Anleitung lesen, Frustration, Anleitung lesen, Googlen, usw..... Unter Ruby dagegen sind Libraries kinderleicht zu installieren ("sudo apt-get install mechanize", im Code: "require 'mechanize'"). Dann kann man die interaktive Rubykonsole starten, und ein bisschen rumspielen. Ob du es glaubst oder nicht, aber viele Libraries kann man ohne Anleitung benutzen. Ich benutze zB die appengine-jruby Libs und die sind nahezu null dokumentiert, trotzdem funktionieren sie perfekt. Einmal in den Code reingeschaut, Funktionsnamen genommen, fertig. Unter C++ muss man gerade bei komplexen Libs wie Qt erst einmal alles mögliche Zeug initialisieren, Pointer weiterreichen usw usf. Oft sind diese Libraries vom Codestyle so invasiv, dass sie ihren Codestyle dem eigenen Code aufzwingen, es sei denn man betreibt gewissen Aufwand und schreibt einen Wrapper drumrum.
Als früher fast nur C++ benutzt hatte, hatte ich deswegen auch kaum Libraries benutzt. Jetzt kann ich mit Ruby allemöglichen erdenklichen Mini-Projekte in 2-3 Stunden programmieren.
Wie lange würdest du brauchen um einen Bot zu schreiben, der Freundesnetzwerke bei Facebook ausliest und in eine Datenbank schreibt? Dank Mechanize, Regular Expressions und Datamapper schreib ich dir so ein Teil in 1-2 Stunden!!! (Natürlich auf der Datenbank deiner Wahl!!) Ich wette mit dir, dass du so ein Progg auch ohne Plan von Ruby an einem Tag hinkriegen würdest... Oder letztens musste ich für meinen Chef (unter Zeitdruck) ein Progg schreiben, dass eine Datei Datensätzen in eine Geodatenbank schreibt. Komplett von Scratch hat es ca. 5 Minuten gedauert das Progg zu schreiben, weitere 5 Minuten und es war debugged und lief.
>Und da habe ich mit C/C++ nun mal mehr Routine.
>Wenn ich jetzt extra für kleine Progrämmchen was anderes nehmen sollte, als bei
>meiner normalen Entwicklertätigkeit,
>wäre ich bestimmt langsamer.
Schon klar dass du in C/C++ mehr Routine hast, wenn du sonst keine anderen Sprachen benutzt. (PHP zähle ich mal nicht mit, weil man es nur für Webapps benutzen kann.) Aber es ist auch so, dass zB Ruby extrem leicht zu erlernen ist. Guckst du dir einmal ein Tutorial an, schon kannst du loslegen, weil die Befehle ähnlich wie in anderen Sprachen sind. Ruby, Python und Perl sind nicht wie C++. C++ muss mühsam erlernt werden, bis man erstmals in der Lage ist größere sinnvolle Programme zu schreiben. Ruby macht Spaß, immer, man kann direkt loslegen.
Ich erinnere mich noch an die qualvolle Zeit damals, als ich nichtmal geschafft hatte ein Hello World kompiliert zu kriegen.
Wenn ich Ruby programmiere oder debugge habe ich das Gefühl die ganze Zeit vorwärts zu kommen und super produktiv zu sein. Kein Rumärgern mit Pointern, Templates & Co. Es gibt nur noch Referenzen, die schlimmstenfalls Null sind, alles ist per default generisch... Wenn du schnell etwas ausprobieren willst, kannst du es schnell in die Ruby-Konsole reinpasten. (Z.B. eine Regular Expression oder um rauszufinden, welche Methoden ein Objekt anbietet...)
Und nur mal um einen Eindruck der Fähigkeiten von Ruby zu kriegen, hier mal ein kleines TicTacToe-Progg: http://pastebin.org/435841
halbe Stunde, 45 Zeilen, 1kB... Wie siehts mit der C++-Lösung aus?
Hier mal unser Projekt:
http://pvbrowser.org
Die Server kann man da übrigens auch in Python programmieren.
Hier die eigene Bibliothek, von der ich gesprochen habe:
http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/classes.html
Damit und zusätzlich noch Qt,
kann ich auch viele kleinere Progrämmchen schnell erstellen.
Sicher, aber die Ruby-Lösung ist immer schneller erstellt und weniger Lines Of Codes. Hier mal ein Beispiel aus deiner Lib (http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/rltime_8cpp_source.html):
00263 t.year = year + time.year;
00264 t.month = month + time.month;
00265 t.day = day + time.day;
00266 t.hour = hour + time.hour;
00267 t.minute = minute + time.minute;
00268 t.second = second + time.second;
00269 t.millisecond = millisecond + time.millisecond;
00270
00271 y = t.year;
00272 if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) y++;
00273 m = t.month;
00274 if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) m = 1;
00275
00276 switch(m)
00277 {
00278 case 1: // january
00279 maxmonth = 31;
00280 break;
00281 case 2: // february
00282 maxmonth = 28;
00283 if(y%4==0) maxmonth = 29;
00284 break;
00285 case 3: // march
00286 maxmonth = 31;
00287 break;
00288 case 4: // april
00289 maxmonth = 30;
00290 break;
00291 case 5: // may
00292 maxmonth = 31;
00293 break;
00294 case 6: // june
00295 maxmonth = 30;
00296 break;
00297 case 7: // july
00298 maxmonth = 31;
00299 break;
00300 case 8: // august
00301 maxmonth = 31;
00302 break;
00303 case 9: // semptember
00304 maxmonth = 30;
00305 break;
00306 case 10: // october
00307 maxmonth = 31;
00308 break;
00309 case 11: // november
00310 maxmonth = 30;
00311 break;
00312 case 12: // december
00313 maxmonth = 31;
00314 break;
00315 default:
00316 maxmonth = 0;
00317 break;
00318 }
In Ruby wärs:
["year","month","day","hour","minute","secound","millisecond"].each{|z| eval "t.#{z} = #{z} + time.#{z}"}
y = t.year
if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) y+=1
m = t.month
if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) m = 1
maxmonth = if [1,3,5,7,8,10,12].include?(m)
31 # januar, march, may, july, august, october, december
elsif m == 2
(y % 4 == 0) ? 29 : 28 # february
else
30
end
#Wenn keiner der Monate zutrifft, wird maxmonth nil, womit man sich Abfrage wie "if #(maxmonth == 0) /* Fehler... */" spart, da arithmetische Operationen auf maxmonth #sofort eine Nilexception hevorrufen.
Das sind 56 Zeilen vs. 12 Zeilen!!!
Und wäre die Library in Ruby oder Python, könntest du auch von C/C++ aus zugreifen....
Also wenn du mich fragst, hat C/C++ außerhalb der Systemprogrammierung und speziellen Nischenanwendungen keinen Nutzen mehr.
Das Innere der Library ist vielleicht länger,
aber nicht deren Benutzung.
Außerdem wirst Du an der Library sehen, dass das was mit Automatisierungstechnik zu tun hat. Bei Ruby ist da wahrscheinlich Schluß.
PS:
Die Library läuft übrigens nicht nur unter Unixoiden und Windows, sondern sogar unter OpenVMS.
Eine Anmerkung zur Kürze von Code
Man kann in fast allen Sprachen Dinge sehr kurz formulieren.
Besonders bekannt dafür ist Perl.
Die Lesbarkeit eines Programmes steht aber dann wieder auf einem anderen Blatt.
Bei ähnlichem Codingstil werden die Programme in fast allen Sprachen ähnlich viele Zeichen verbrauchen.
Jetzt will ich mal ne A4 mit Code in dem Stil von dir:
"["year","month","day","hour","minute","secound","millisecond"].each{|z| eval "t.#{z} = #{z} + time.#{z}"}
y = t.year
if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) y+=1
m = t.month
if(t.month > 12 || (t.month==12 && t.day==31 && t.hour>=24)) m = 1
maxmonth = if [1,3,5,7,8,10,12].include?(m)
31 # januar, march, may, july, august, october, december
elsif m == 2
(y % 4 == 0) ? 29 : 28 # february
else
30
end"
Mal sehen wieviele Ruby Geeks dann diese A4 Seite problemlos checken ohne 10x zu lesen XD
Ja, man braucht lange um eine A4 Seite voll mit Metaprogrammierung zu verstehen, nur kann die eben auch so viel wie 10 Seiten ohne (immer unter Bedingung, dass es sinnvoll eingesetzt wird). 10 Seiten lesen, dauert auch länger als eine zu lesen.
Das Problem bei Metaprogrammierung wie bei allen "cleveren" Sachen ist, dass es womöglich jemand überhaupt nicht oder falsch versteht. Ich würde daher instance_eval, class_eval oder eval nie ohne Kommentar benutzen, womit es dann natürlich wieder länger wird.
Und das hat jetzt mit dem Thema Scriptsprachen genau was zu tun?