Login
Immer anmelden
SSL Login

 
Newsletter

Thema: Was ist Ihre bevorzugte Skriptsprache?

8 Kommentar(e) || Alle anzeigen ||  RSS || Kommentieren
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
Score: 3 Von gfhdhnjmjkhf am Sa, 31. Juli 2010 um 13:36 #

>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? ;)

  • Score: 3 Von pvb am Sa, 31. Juli 2010 um 14:56 #

    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.

    • Score: 3 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.

      • Score: 3 Von pvb am Sa, 31. Juli 2010 um 15:53 #

        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.

        • Score: 3 Von pvb am Sa, 31. Juli 2010 um 16:05 #

          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.

        Score: 3 Von Python am Sa, 31. Juli 2010 um 17:51 #

        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

        • Score: 3 Von hefti am So, 1. August 2010 um 17:00 #

          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. ;-)

Pro-Linux
Newsletter
Neue Nachrichten