scriptinglanguagescomparison
Hits : 4,226
Comparison of Scripting Languages
Overview
Στην δουλειά μας χρειάζεται αρκετές φορές να αναπτύξουμε ένα νέο πρόγραμμα ή να
τροποποιήσουμε κάποιο ήδη υπάρχον. Η επιλογή της γλώσσας προγραμματισμού σχεδόν πάντα
έχει μοναδικό κριτήριο το πόσο καλά εξοικειωμένοι είμαστε με αυτήν. Όμως μερικά κριτήρια
που θα πρέπει να έχουμε στο μυαλό μας είναι τα εξής:
- Εξοικείωση
- Ταχύτητα Εκτέλεσης
- Δυνατότητα βελτιστοποίησης
- Δυνατότητα Επαναχρησιμοποίησης
- Δυνατότητα Διεπαφής
Στην προσπάθειά μου να βρω ποια scripting language θα ήταν «καλύτερη» για την ανάπτυξη ενός
προβλήματος που είχα, αφιέρωσα λίγο χρόνο ώστε να γράψω ένα πρόγραμμα σε διάφορες scripting
languages και να παράγω μερικές χρήσιμες μετρήσεις.
top
Αλγόριθμος
To project που είχα στο μυαλό μου ήταν η παραγωγή dns records για ένα class b.
Θα έπρεπε δλδ να βρω έναν τρόπο ώστε να παραχθούν το μέγιστο 65536 dns records.
Φυσικά επειδή έπρεπε το script να μπορεί να τροποποιηθεί ώστε να καλύπτει όλα τα class b & c
ή ακόμα και μέρος αυτών (sub-classes) κατέληξα στον παρακάτω αλγόριθμο :
ορισμός του class b
ορισμός του αρχικού class c
ορισμός του πλήθος των class c
ορισμός του πλήθος των διευθύνσεων ip
ορισμός της αρχικής διεύθυνσης ip
ορισμός του dns ονόματος του κάθε A dns record
ορισμός της αρχικής αριθμητικής τιμής ενός dns ονόματος
Επαναληπτική διαδικασία για το πλήθος των class c
Επαναληπτική διαδικασία για το πλήθος των ip διευθύνσεων
Εμφάνισε 'το dns όνομα κάθε A dns record'
Αν η αριθμητική τιμή ενός dns ονόματος είναι κάτω του 1000 τότε
τύπωσε το γράμμα 0
Τέλος Αν
Αν η αριθμητική τιμή ενός dns ονόματος είναι κάτω του 100 τότε
τύπωσε το γράμμα 0
Τέλος Αν
Αν η αριθμητική τιμή ενός dns ονόματος είναι κάτω του 10 τότε
τύπωσε το γράμμα 0
Τέλος Αν
Εμφάνισε 'την αριθμητική τιμή ενός dns record'
Εμφάνισε ' IN A '
Εμφάνισε 'το class b'
Εμφάνισε 'το class c'
Εμφάνισε 'την ip'
Αύξησε κατά 1 'την αριθμητική τιμή ενός dns record'
Τέλος της επαναληπτικής διαδικασίας για το πλήθος των ip διευθύνσεων
Αύξησε κατά 1 'το class c'
Τέλος επαναληπτικής διαδικασίας για το πλήθος των class c
top
Implementation
Ο παραπάνω αλγόριθμος (κάθε φορά με τις απαραίτητες διορθώσεις) γράφτηκε στις παρακάτω scripting languages:
- perl
- python
- php
- tcl
- ruby
- bash
- sh
Και η υλοποίηση βρίσκεται στα εξής links:
- dslperl[link1]
- dslpython[link2]
- dslphp[link3]
- dsltcl[link4]
- dslruby[link5]
- dslbash[link6]
- http://pastebin.ca/851086
Μερικές παρατηρήσεις:
Ο αλγόριθμος και η συγγραφή αυτού στις παραπάνω γλώσσες ΔΕΝ είναι ο τέλειος ή ο βέλτιστος.
Έγινε προσπάθεια η υλοποίηση να είναι παρόμοια για τις ανάγκες της σύγκρισης.
Πρώτη φορά γράφω σε : Perl, Python, Ruby & Tcl, έχω όμως την δυνατότητα να διαβάσω
από τα references manuals της κάθε γλώσσας, οπότε και πιστεύω ότι έγινε καλή δουλεια :p
Η τελευταία υλοποίηση είναι του Fuzz από τον σύλλογο Ioannina Linux User Group[link7] και είναι
το dslbash τροποποιημένο ώστε να είναι POSIX compliant. -Thanks Fuzz
Επίσης έχω κάνει τροποποιήσεις πάνω στις παρατηρήσεις του Κεραμιδά από το παρακάτω link από το forum του hellug. -Τhanks Γιώργο.
top
Results
Μετρήσεις μπορείτε να βρείτε εδώ:
http://forum.hellug.gr/index.php?topic=623.0
Οι δικές μου μετρήσεις έγιναν σε ένα μηχάνημα με τα εξής χαρακτηριστικά:
Results
Όπως βλέπετε παρακάτω η perl είναι η ταχύτερη.
top
- [link1] https://wiki.ebal.gr/dslperl
- [link2] https://wiki.ebal.gr/dslpython
- [link3] https://wiki.ebal.gr/dslphp
- [link4] https://wiki.ebal.gr/dsltcl
- [link5] https://wiki.ebal.gr/dslruby
- [link6] https://wiki.ebal.gr/dslbash
- [link7] http://www.ilug.gr/