Topic CrossConnect

Dimitrios Kamenopoulos el97146 at mail.ntua.gr
Thu Oct 3 13:41:02 EEST 2002


On Thursday 03 October 2002 12:56, you wrote:
> >Η αιώνια παρεξήγηση όσων φοβήθηκαν υπερβολικά να ασχοληθούν με κάτι
> > σοβαρότερο 
 από Java. Άλλο C, άλλο C++.
>
> 
>   Και με ποια κριτήρια παρακαλώ κάτι άλλο είναι σοβαρότερο από τη Java;
> Εκτός βέβαια και αν μιλάμε μ΄νοο για να μιλάμε, 
 ασχέτως αν έχουμε κάτι
> εποικοδομητικό να πούμε.

Κοίτα, για να ξεκαθαρίσω τη θέση μου: Έχω κάνει μεγάλο (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++.

> >Δύο γραμμές για άνοιγμα αρχείου, χωρίς δέσμευση μνήμης με new, χωρίς 
> >εξαιρέσεις, χωρίς όλα αυτά τα χαζά που κάνουν τη Java 2 φορές πιο αργή.
>
> 
>   Αν δε σου αρέσει μη χρησιμοποιείς Java. Δεν μπορείς όμως να καταφεύγεις
> εναντίων της μόνο και μόνο για λόγους ταχύτητας. 
 Στο κάτω κάτω αν θέλεις
> ταχύτητα γράψε αποκλειστικά και μόνο σε assembly. 

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

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

> >Πώς; Δεν έχετε overloading του τελεστή ! για εξαγωγή ενός απλού bool από
> > από 
 ένα file; Δεν έχετε overloading τελεστών γενικότερα;
>
> 
>   Αν με τη λέξη τελεστής εννοείς operator, τότε έχουμε υπερφώρτωση
> (overloading) τελεστών. Αν όχι τότε για δώσε μου την 
 αγγλική μετάφραση
> του τελεστή για να καταλάβω τι ακριβώς εννοείς. 

Εννοώ να μπορείς να ορίσεις μια κλάση 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;

> >Επίσης αυτός ο τρόπος δεν είναι και πολύ χρήσιμος γιατί στη Java δεν 
> >ισχύει το αυτόματο 1==true, 0==false της C/C++. 
>
> 
>   Μα φυσικά αφού ο τύπος είναι boolean και όχι int. Γι' αυτό και δεν
> μπορείς να κάνεις cast ένα boolean σε int (και το 
 αντίστροφο). Αυτό γιατί
> να μην είναι και πολύ χρήσιμο; Επειδή κάνει τη γλώσσα καθαρότερη; 

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




More information about the Linux-greek-users mailing list