Topic CrossConnect

Panos panos at linuxuk.com
Thu Oct 3 15:13:01 EEST 2002


03/10/02 11:45:57, "Dimitrios Kamenopoulos" <el97146 at mail.ntua.gr> wrote:

>Κοίτα, για να ξεκαθαρίσω τη θέση μου: Έχω κάνει μεγάλο (10.000 γραμμές) 
>project σε Java και ειλικρινά τη θεωρώ αρκετά καλή γλώσσα. Δεν είναι σοβαρή 
>όμως, με την έννοια ότι υποστηρίζεται από μια τεράστια επιχείρηση Marketing 
>(που την πουλάει σαν την επανάσταση του cross-platform όταν η Perl και η 
>Python προϋπάρχουν και είναι τουλάχιστον το ίδιο διαδεδομένες), hype, groups 
>ειδικευμένα για flames όπως το comp.lang.java.advocacy και βέβαια από ένα 
>κόμπλεξ ανωτερότητας έναντι της C++. Η οποία από την άλλη δεν έχει ανάγκη για 
>advocacy group. Είναι μια χαρά με τα χιλιάδες επαγγελματικά projects που τη 
>χρησιμοποιούν. Το ίδιο και η C. Και βέβαια όλοι οι τζαβένιοι επικριτές της 
>C++ αγνοούν πλήρως ότι η ευελιξία της γλώσσας επιτρέπει να γράψεις τεράστια 
>προγράμματα χωρίς καθόλου δείκτες (κι εγώ το αγνοούσα μέχρι πρόπερυσι), οι 
>οποίοι μάλιστα αποφεύγονται στην πρότυπη C++. Ότι δηλαδή άλλο C και άλλο C++.
>

  Να ξεκαθαρίσω και εγώ τη θέση μου. Ποτέ δεν εναντιώθηκα στη C++, άλλωστε άρχισα προγραμματισμό με C++ (καλά εδώ που τα λέμε 
άρχισα με GWBASIC αλλά αυτό είναι άλλη ιστορία) και πιστεύω ότι μπορώ να προγραμματίσω σε ικανοποιητικό επίπεδο, απλώς δεν 
μου αρέσει να μιλάνε χωρίς *επιχειρήματα*. Το ότι η Java πωλείται ως επανάσταση *λόγω cross-platform* αυτό πρώτη φορά το 
ακούω. Όπως είπες και εσύ το θέμα του cross-platform υπήρχε πολύ πριν βγει η Java, οπότε αυτό το επιχείρημα καταρίπτεται. 
Κανένας δεν έχει σύμπλεγμα ανωτερότηας/κατωτερότηας κατά της C++, ίσα ίσα το αντίθετο θα έλεγα συμβαίνει, κλεισμένοι στις 
πατροπαράδοτες γλώσσες εθελοτυφλούνε μπροστά σε κάτι που *μπορεί* να είναι πιο απλό και πιο εύχρηστο. Στο κάτω κάτω η κάθε 
γλώσσα έρχεται να δώσει λύσεις σε *διαφορετικά* προβλήματα. Αν θέλεις να προγραμματίσεις μία βάση μπορείς άνετα να το κάνεις 
με SQL. Μπορείς βέβαια να το κάνεις και με C++ αλλά ενώ εγώ θα έχω τελειώσει και θα πίνω μπύρες έξω εσύ θα είσαι ακόμα μέσα 
μπροστά από τον υπολογιστή και θα ιδρώνεις ψάχνωντας να βρεις γιατί το πρόγραμμά σου δε δουλεύει.

>Όχι. Αν θέλω ταχύτητα, κατ' αρχήν θα χρησιμοποιήσω C/C++ και ήδη θα έχω μια 
>βελτίωση στην απόκριση της τάξης του 90%. Αν θέλω να πάω στο 99%, μπορεί να 
>χρησιμοποιήσω assembly, αλλά νομίζω ότι το γάιδαρο τον τρώω με τη C/C++.
>

  Σε σχέση με Java ναι θα έχεις βελτίωση στο χρόνο (αν και δεν είναι της τάξης του 90% και στο κάτω κάτω οι υπολογιστές είναι 
τόσο γρήγοροι σήμερα που μερικά ms - ναι για τόσα μιλάμε- δεν κάνουνε μεγάλη διαφορά) αλλά σε σχέση C++ - assembly το 
πρόγραμμά σου θα είναι πολύ γρηγορότερο σε assembly παρά σε C++ οπότε μάγκες αρχίστε να γράφετε όλοι σε assembly αν φωνάζετε 
για το πόσο αργή είναι η Java.

>Από την άλλη δεν καταλαβαίνω γιατί πρέπει να φορτώσω ένα runtime των 100 ΜΒ 
>στο πρόγραμμά μου προκειμένου να έχω τη δυνατότητα να κάνω new χωρίς delete 
>(και όλο τη λέτε στη C++ για το delete, αλλά εκεί σπανιότατα είναι 
>υποχρεωτικό να κάνεις new, σε αντίθεση με τη Java, και άμα θες τόσο πολύ να 
>κάνεις new χωρίς delete, χρησιμοποιείς έναν boost::shared_ptr και 
>τελειώνεις). Άμα θέλω να γράψω κάτι cross-platform ή κάτι όπου κολλάει η 
>έννοια του serialization *μπορεί* να χρησιμοποιήσω Java, αλλά σε κάθε 
>περίπτωση θα σκεφτώ τι καλύπτει καλύτερα το πρόβλημα και όχι τι είναι του 
>γούστου μου ή τι με βολεύει.
>

  Δεν πρέπει να φορτώσεις ένα runtime (που παρεπιπτόντως δεν είναι 100ΜΒ - εν τάξει είπαμε να υπερβάλουμε αλλά εσύ το 
ξεφτίλισες), *αν θέλεις* το φορτώνεις. Δε σε πίεσε κανείς μα κανείς να χρησιμοποιήσεις Java. Αν θέλεις βέβαια να 
χρησιμοποιήσεις Java θα πρέπει να χρησιμοποιήσεις και new, αλλά είναι καλύτερα να *τρέχει* ένα πρόγραμμα χωρίς να κολλάει 
παρά να μου καταρρεύσει (crash) όταν βγει στην παραγωγή λόγω δείκτη και μνήμης που ξέχασα να ελευθερώσω. Η επιλογή είναι δική 
σου. Όπως λες και εσύ σε κάθε περίπτωση θα σκεφτείς αυτό που σε βολεύει περισσότερο.

>Εννοώ να μπορείς να ορίσεις μια κλάση Complex και στη συνέχεια τον τελεστή + 
>ώστε να γράφεις κάτι σαν 
>Complex a,b;
>Complex c = a + b;
>Ή να ορίσεις μια κλάση fstream για ανάγνωση από αρχεία και να υπερφορτώσεις 
>τον τελεστή ! ώστε αν έχεις ένα fstream str το !str να σου λέει αν το str 
>άνοιξε με επιτυχία. Το *μόνο* που έχετε στη Java είναι μια built-in 
>υπερφόρτωση του τελεστή + για Strings. Αν διαφωνείς, έχεις 100 μέρες διορία 
>να μου παρουσιάσεις μια κλάση Matrix που υποστηρίζει πρόσθεση μόνο με το +. 
>Δηλαδή
>Matrix a= new Matrix();
>Matrix b = new Matrix();
>Matrix c = a + b;
>

  Δίκαιο έχεις υπάρχει μόνο ο τελεστής "+" που είναι υπερφορτωμένος (overloaded). Αλλά γιατί θα πρέπει η υπερφόρτωση τελεστή 
να αποτελεί πλεονέκτημα; Δεν είναι καλύτερα να έχεις περισσότερες επιλογές παρά λιγότερες;

>Δε με κατάλαβες. Εννοούσα ότι ο *τρόπος* σου δεν είναι χρήσιμος, γιατί η 
>OpenFileForInput επιστρέφει int αντί για boolean, και άρα δε μπορείς να 
>κάνεις κάτι σαν 
>if (OpenFileForInput(myfile))
>αλλά πρέπει να γράψεις 
>if (OpenFileForInput(myfile)!=0) 
>που ξεφεύγει εντελώς από τη λογική της Java (δε χρησιμοποιούμε error codes, 
>αλλά exceptions).

  Ο τρόπος μου δεν είναι χρήσιμος για ποιον; Για εσένα, για εμένα, για τον πελάτη μου ίσως; Από ότι είδες έλεγχα για null και 
όχι για ακέραιο. Δηλαδή ένα πρόγραμμα θα τρέχει πιο αποδοτικά αν κάνεις if (OpenFileForInput(myfile)!=0) ή αν γράψεις if 
(OpenFileForInput(myfile)). Όχι βέβαια. Εντάξει γράφεις τρεις (τέσσερις αν αφήσεις κενό) xαρακτήρες περισσότερο και τι έγινε 
δηλαδή. Και ούτε θέμα χρόνου τρέχει για μεταβλητές πρωτογενή τύπου οπότε είναι το ίδιο.





More information about the Linux-greek-users mailing list