Page 1 of 2
Posted: Mon May 17, 2004 11:27 pm
by jimmyD
Αγνοούσα παντελώς την ύπαρξη της κλάσης FileWriter. Μακάρι να δουλεύει έτσι γιατί σήμερα είπα πολύ κακά λόγια για τη java που συμπαθώ ιδιαίτερα και (ντρέπομαι ) μου πέρασε από το μυαλό να χρησιμοποιήσω C++.
Ντροπή και όνυδος
Posted: Mon May 17, 2004 11:37 pm
by silegav
jimmyD wrote:και (ντρέπομαι ) μου πέρασε από το μυαλό να χρησιμοποιήσω C++.
Αίσχος!!!!Και μόνο που σου πέρασε από το μυαλό επιφέρει τιμωρία!!!!
Κάθε μέρα για 30 μέρες 1000 system.out.println που θα λένε "Δεν θα ξαναγράψω σε C++" , θα τα στέλνεις στον Einherjar και θα δημοσιεύσει σε 30 μέρες αν εκπλήρωσες την τιμωρία για να ξεπλύνει την ντροπή.
Σημείωση: το for απαγορεύεται

Posted: Tue May 18, 2004 12:01 am
by alexo
Φαντάσου εγώ που τόλμησα να γράψω σε C++ ...

Posted: Tue May 18, 2004 12:26 am
by HdkiLLeR
Εγώ παντος σε C++ θα έγραφα(μην σου πώ σε C)...τώρα μην κοιτάς που τα post που κάνω σχετίζονται με Java(την αγαπάω και αυτή δεν λέω πολύ καλή είναι).
Posted: Tue May 18, 2004 12:39 am
by theo_
ελα ρε HdKiller αν ενδιαφέρεσαι σου θυμίζω και την Fortran77( η 9Χ είναι πολύ σύγχρονη!)
ας χαλαρώσουμε λίγο , η κάθε μία στον τομέα της..
C++ για servers και αν θες ταχύτητα(δεν έχει JVM)
Java για Web Services (+ λόγω portability)
Posted: Tue May 18, 2004 12:50 am
by HdkiLLeR
C για κάθε περίπτωση...είναι μέσα στην ζωή σου μιας και τα πάντα είναι γραμμένα σε αυτή,λειτουργικά,βάσεις,οδηγοί,...

- Πλάκα
Η java έχει portability αλλά υστερεί σε δύο βασικά
1)Ταχύτητα(μεγάλο μειονέκτημα εδώ,αλλά είναι το tradeoff για το VM/portablility)
2)Μηχανισμό κληρονομικότητας(το λύνει μερικώς με τις διεπαφές, αλλά πολλαπλή κληρονομικότητα όπως η C++ δεν παρέχει).
Υπάρχει και το πρόβλημα με το low level programming το οποιο δεν είναι και οτι καλύτερο με java.
Βεβαια σε άλλες εφαρμογές τα πάει πολύ καλύτερα αλλα ας μην τα ισοπεδώνουμε όλα το μεγαλύτερο ποσοστό εφαρμογών μπορεί(έχει την δυνατότητα) να το καλύψει η C++(και μάλιστα αποδωτικά/γρήγορα).
Posted: Tue May 18, 2004 11:02 am
by silegav
Εντάξει, πλάκα έκανα.Είναι σωστό το "κάθε γλώσσα στον τομέα της" αλλά πως να το κάνουμε,
εγω σε C++ δεν ξαναπρογραμματίζω μετά την εμπειρία που είχα με τα Β+ δέντρα!!!! 
Posted: Tue May 18, 2004 1:10 pm
by Einherjar
silegav wrote:εγω σε C++ δεν ξαναπρογραμματίζω μετά την εμπειρία που είχα με τα Β+ δέντρα!!!! 
Δεν φταίει η c++ που τα Β+ δέντρα είναι τεράστιες @@ριές! αν δηλαδή η υλοποίηση που μας έβαλαν να κάνουμε γινόταν σε java θα έλεγες τα ίδια για την java?
Τέλοσπάντων προσωπικά πιστεύω ότι ένα από τα πιο σημαντικά μειονεκτήματα της Java όπως είπε και ο HdkiLLer είναι η έλειψη δυνατότητας πολλαπλής κληρονομικότητας. μου έχει σπάσει αρκετές φορές τα νεύρα αυτό το πράγμα!
Posted: Tue May 18, 2004 1:24 pm
by HdkiLLeR
Πάντος εάν έκανες αυτό που ήθελε κανονικά η εργασία binary read/write σε file και όχι text θα ήταν πιο εύκολο και πολύ πιο γρήγορο απο Java. Οχι οτι έχει μεγάλες διαφορές απλά θέλει stream και 10 objects κλπ,ενώ εκεί πέταξες μια ύπερφόρτωση του << και έγραφες κατευθείαν. Πάντος ένα είναι το μέλλον ..D! Ε vagalati ;

Posted: Tue May 18, 2004 5:51 pm
by silegav
Ειλικρινά δεν ξέρω γιατί, αλλά δεν μπορώ να ξαναδώ C++ μπροστά μου και ίσως φταίει το γεγονος ότι παιδεύτηκα αρκετά σε αυτήν και στην συνέχεια έμαθα java έχοντας ήδη γνώσεις αντικειμενοστραφούς προγραμματισμού, οπότε η Java μου φάνηκε ευκολότερη.
Πάντως ας μην μου απαντήσει κάποιος γιατί έχουμε βγεί εκτός θέματος στο topic. Αν θέλετε να ανταλλάξουμε απόψεις, ανοίξτε ένα topic στον προγραμματισμό.
Posted: Wed May 19, 2004 2:41 am
by HdkiLLeR
Μιάς και τώρα είμαστε off-topic περιμένω απάντηση

.
Σίγουρα η java είναι πολύ καλύτερη για να ξεκινήσει κανείς σε σχέση με την C++ αλλά δεν ξέρω γιατί την έχεις πάρει έτσι στραβά και είναι τόσο καλή

. Επίσης ένα ακόμη μειονέκτημα κατά την γνώμη μου πάντα με την java είναι ότι προκειμένου να φτιάξει πρότυπα(συναρτήσεων,κλάσεων κλπ) φτιάχνει generic μεθόδους στις οποίες περνάει αντικείμενα Object(που είναι υπερτάξη ολωνών). Στην C++ ο μηχανισμός των templates είναι πολύ πιο γρήγορος μιας και δεν χρειάζεται να ενεργοποιηθεί καν η κληρονομικότητα(με ότι συνεπάγεται αυτό..έλεγχος τύπων πέρασμα παραμέτρων κλπ) απλά αντικαθίσταται το εκάστοτε type(T) με τον κατάλληλο τύπο.
Posted: Wed May 19, 2004 10:26 am
by Einherjar
Θυμάσαι όμως τι περάσαμε για να βγάλουμε άκρη με τα templates

Ενώ στη Java περνάς ένα object και τελείωσες!!!

Posted: Wed May 19, 2004 12:03 pm
by vagalati
HdkiLLeR wrote:Πάντος εάν έκανες αυτό που ήθελε κανονικά η εργασία binary read/write σε file και όχι text θα ήταν πιο εύκολο και πολύ πιο γρήγορο απο Java. Οχι οτι έχει μεγάλες διαφορές απλά θέλει stream και 10 objects κλπ,ενώ εκεί πέταξες μια ύπερφόρτωση του << και έγραφες κατευθίαν. Πάντος ένα είναι το μέλλον ..D! Ε vagalati ;

D Rulezzz! Η (αυτοαποκαλούμενη) διάδοχος της C++ σε χαιρετά:
http://www.digitalmars.com/d
Μην αρχίσω τώρα για την Java (ο Νεκτάριος ξέρει τι θα πώ

). Ο theo_ τα έβαλε τα πράγματα στη θέση τους.
Einherjar wrote:Θυμάσαι όμως τι περάσαμε για να βγάλουμε άκρη με τα templates
Τι περάσαμε δηλαδή; Στη Java πρέπει να κάνεις type-casting κάθε λίγο και λιγάκι και προσωπικά το βρίσκω πολύ σπαστικό!
Με τα templates απλά ο προγραμματιστής της generic τάξης/συνάρτησης στην αρχή δηλώνει τους γενικούς τύπους και μετά ορίζει την τάξη/συνάρτηση όπως όλες τις άλλες. Στον χρήστη της τάξης δεν είναι καν εμφανές!
Στην java κάνεις κάτι τέτοιο (Ilikia)hashmapname.get("Νεκτάριος") ενώ στην C++ mapname["Νεκτάριος"] (σαν οποιονδήποτε άλλο πίνακα δηλ.).
Εσένα ποιό σου φαίνεται πιο ωραίο;
Posted: Wed May 19, 2004 6:21 pm
by Einherjar
vagalati wrote:Στην java κάνεις κάτι τέτοιο (Ilikia)hashmapname.get("Νεκτάριος") ενώ στην C++ mapname["Νεκτάριος"] (σαν οποιονδήποτε άλλο πίνακα δηλ.).
Με τον τρόπο της java όμως μπορείς να βάλεις ό,τι object γουστάρεις μέσα χωρίς να χρειάζεται να δηλώσεις πρώτα τι θα είναι αυτό, όπως στα templates
Posted: Wed May 19, 2004 7:33 pm
by silegav
ότι και να λες HdKiLLer εγώ θα επιμείνω ότι γι'αυτό που θέλω να κάνω εγώ η java είναι πολύ πιο βολική από την C++.
Εγώ σαν άτομο έχω την πεποίθηση ότι πλέον ο μόνος τομέας όπου ο πργραμματισμός δεν είναι υπερβολικά κορεσμένος είναι ο τομέας του web Programming...ε ρε φίλε στο web η C++ έχει ένα σωρό μ@@ες ενώ η java είναι πανεύκολη και έχει interoperability.
Αν ασχοληθώ με προγραμματισμό από μόνος μου, θα στραφώ εκεί, επομένως δεν χρειάζομαι την C++.
Εσύ είσαι ελεύθερος να προγραμματίζεις κάθε bit που περνά από το πρόγραμμα σου και να έχεις (ομολογουμένως) καλύτερο έλεγχο.(Δεν απευθύνομαι προσωπικά σε σένα, αλλά σε όσους προγραμματίζουν σε C++.Δικαίωμα σας....)
Όσο για το type casting, προτιμώ να βλέπω κάθε φορά τι τύπου είναι μια μεταβλητή και ας την ορίζω εγώ παρά να ανατρέχω συνέχεια στο αρχείο που κάποια φορά είχα φτιάξει ένα template και να ψάχνω τι έχω δηλώσει εκεί.
Posted: Wed May 19, 2004 9:56 pm
by mikem4600
Βασικά μεταξύ Java και C++ δεν τίθεται πραγματικά ερώτημα, αν μιλάμε για general-purpose προγραμματισμό... Μιας και αναφέρθηκαν τα B+, ας δώσω μόνο ένα λόγο: είναι απλώς χαζό να χρειάζεται να θυμάσαι να κάνεις delete και να φτιαχνεις destructors όταν μπορεί να γίνει αυτόματα. Η επιστήμη προοδεύει. Ας το εκμεταλευτούμε. ;-)
Το πραγματικό ερώτημα είναι Java vs C#...

(και για την ακρίβεια, J2SE 1.5+ και C# 2.0+ γιατί είναι εξίσου χαζό να χρειάζεται να κάνεις casting όταν βγάζεις πράγματα από data structures

)
Posted: Thu May 20, 2004 11:45 am
by HdkiLLeR
Γούστα είναι αυτά...εσύ C#,εγώ C(οχι πως με τρελαίνει απλά την φέρνω σαν παράδειγμα). Σχετικά με αυτό που λες όσον αφορά την C# σίγουρα είναι κάτι παραπάνω αλλά δεν έφερε και την επανάσταση γλιτώνοντας το type casting

Posted: Thu May 20, 2004 12:22 pm
by P3
Λοιπόν παιδιά η γνώμη μου είναι πως όλοι έχουμε μάθει να χρησιμοποιούμε μια γλώσσα μέσα από κάποιο εργαλείο (Sun One Studio,Visual Studio,Jbuilder,κ.λ.π. )και ώς επί το πλήστον κρίνουμε την ευκολία ή τη δυσκολία χρήσης της εκάστοτε γλώσσας από το εργαλέιο που χρησιμοποιεί ο καθένας!
Posted: Thu May 20, 2004 8:55 pm
by vagalati
Einherjar wrote:vagalati wrote:Στην java κάνεις κάτι τέτοιο (Ilikia)hashmapname.get("Νεκτάριος") ενώ στην C++ mapname["Νεκτάριος"] (σαν οποιονδήποτε άλλο πίνακα δηλ.).
Με τον τρόπο της java όμως μπορείς να βάλεις ό,τι object γουστάρεις μέσα χωρίς να χρειάζεται να δηλώσεις πρώτα τι θα είναι αυτό, όπως στα templates
Aυτό το κάνεις σε οποιαδήποτε γλώσσα έχει κληρονομικότητα. Ορίζεις μια abstract τάξη και όλες οι άλλες να έχουν πρόγονο αυτήν. Έτσι χώνεις ότι θες στη δομή που δέχεται instances της τάξης αυτής.
silegav wrote:Αν ασχοληθώ με προγραμματισμό από μόνος μου, θα στραφώ εκεί, επομένως δεν χρειάζομαι την C++.
Εσύ είσαι ελεύθερος να προγραμματίζεις κάθε bit που περνά από το πρόγραμμα σου και να έχεις (ομολογουμένως) καλύτερο έλεγχο.(Δεν απευθύνομαι προσωπικά σε σένα, αλλά σε όσους προγραμματίζουν σε C++.Δικαίωμα σας....)
Όπως είπε και ο theo_ παραπάνω η java είναι η καλύτερη επιλογή για web programming. Αυτό που μου τη δίνει, είναι όταν πασάρουν την java σαν γλώσσα γενικού σκοπού.
Ήμαρτον! Σκεφτείτε το Photoshop ή το 3DS Max με java

! Γενικά, θεωρώ πολύ ηλίθια την ιδέα να τρέχω προγράμματα σε VM (εξαιρούνται κάποιες περιπτώσεις όπως αυτό που ενέφερε ο theo_). Γιατί αγοράζω δηλ. τον υπολογιστή; Για να εξομοιώσω ένα άλλο μηχάνημα και να τρέξω τα προγράμματα στο εξομοιωμένο μηχάνημα;
Επίσης το ότι κάποιος προγραμματίζει με C++ δεν σημαίνει ότι κάνει low level πράγματα. Ίσα ίσα, που π.χ. με την υπερφόρτωση τελεστών ο κώδικας είναι πολύ ευανάγνωστος και κατανοητός.
Απλά η C++ σου δίνει και τη δυνατότητα να προγραμματίσεις μέχρι σε assembly επίπεδο.
silegav wrote: Όσο για το type casting, προτιμώ να βλέπω κάθε φορά τι τύπου είναι μια μεταβλητή και ας την ορίζω εγώ παρά να ανατρέχω συνέχεια στο αρχείο που κάποια φορά είχα φτιάξει ένα template και να ψάχνω τι έχω δηλώσει εκεί.
Βλέπεις; Με το type-casting
δεν βλέπεις κάθε φορά τι τύπου είναι μια μεταβλητή αλλά πρέπει να
θυμάσαι για να κάνεις το ανάλογο type-casting (grrr), αλλιώς...κλάψ!
mikem4600 wrote: Είναι απλώς χαζό να χρειάζεται να θυμάσαι να κάνεις delete και να φτιαχνεις destructors όταν μπορεί να γίνει αυτόματα. Η επιστήμη προοδεύει. Ας το εκμεταλευτούμε.
Συμφωνώ! Αλλά ξεχνάς κάτι: την ταχύτητα! Το Garbage Collection (GC) καθυστερεί την εκτέλεση και μερικές φορές προτιμάται το χειροκίνητο παρά το αυτόματο. Ως προς το ότι η C++ δεν έχει GC είναι ομολογουμένως μειονέκτημα. Πάντως η D υποστηρίζει GC και έχεις την επιλογή να το βάζεις on/off το GC όπου θέλεις εσύ ;-)!
p3 wrote: Λοιπόν παιδιά η γνώμη μου είναι πως όλοι έχουμε μάθει να χρησιμοποιούμε μια γλώσσα μέσα από κάποιο εργαλείο (Sun One Studio,Visual Studio,Jbuilder,κ.λ.π. )και ώς επί το πλήστον κρίνουμε την ευκολία ή τη δυσκολία χρήσης της εκάστοτε γλώσσας από το εργαλέιο που χρησιμοποιεί ο καθένας!
Yeap!!

Posted: Thu May 20, 2004 10:26 pm
by HdkiLLeR
Πές τα Χρυσόστομε!!...
Πάντος η εργασία στους μεταγλωτιστές με Java μου έχει βγάλει την παναγία κάθε φορά που καλώ την parent() θέλει casting και εάν χρειαστεί να καλέσεις δύο φορές την parent()(parent().parent()) δύο casts και εάν μετά καλέσεις και την getType() πάλι cast επειδή επιστρέφει PType...(grrr).Δεν είναι υποθετικά όλα αυτά έχεις μια μεταβλήτή τοπική σε μία μέθοδο και θέλεις να δείς σε ποιά κλάση ανήκει...node=μεταβλητή, άρα node.parent()=μέθοδος,node.parent().parent()=κλάση...o κώδικας μου έχει καταλήξει κάπως έτσι ((AClassDeclaration)((AMethodDeclaration)node.parent()).parent())...εάν το έβλεπα σε αλλουνού τον κώδικα θα το έλεγα σταντέ καγκουριά
ΥΓ:Βέβαια στο παραπάνω παράδειγμα για να είμαστε απολύτως δίκαιοι έχει βάλει και το χεράκι του το SableCC το οποίο ότι φτιάχνει σε List είναι Object...
Posted: Thu May 20, 2004 10:50 pm
by crontab
"Μιας και αναφέρθηκαν τα B+, ας δώσω μόνο ένα λόγο: είναι απλώς χαζό να χρειάζεται να θυμάσαι να κάνεις delete και να φτιαχνεις destructors όταν μπορεί να γίνει αυτόματα. Η επιστήμη προοδεύει. Ας το εκμεταλευτούμε"
Συμφωνώ με αυτό που λες αλλά ο άλλος μπορεί να μη γουστάρει να περιμένει τη Java να κάνει αυτόματη αποκομιδή απορριμάτων αλλά να
απελευθερώνει μνήμη τη στιγμή που θέλει εκείνος.
Posted: Fri May 21, 2004 12:13 am
by HdkiLLeR
Σωστά και μάλιστα το garbage collection είναι κάτι το οποίο γίνεται εξ'ολοκλήρου απο την java αυτόματα χωρίς της δυνατότητα επέμβασης(πχ σβήσε αυτό και όχι εκείνο τώρα, ή απελευθέρωσε ένα κομμάτι του χώρου που έχει δεσμευτεί κλπ). Αυτό έχει σαν αποτέλεσμα να έχεις variable χρόνο απόκρισης...συνεπώς κάτι τέτοιο θα ήταν καταστροφή σε εφαρμογές που πρέπει να έχεις fixed worst case computation time(όπως σε εφαρμογές πραγματικού χρόνου).
Μιας και αναφέρθηκε το θέμα της αυτόματης αποκομιδής γνώμη μου είναι πως το βέλτιστο είναι κάπου ανάμεσα σε C++/Java. Να υπάρχει ενεργοποιημένος δηλαδή ο μηχανισμός αυτός ώστε να μην υπάρχει memory leek όταν κάποιος βαριέται/αδνατεί/δεν μπορεί να απελευθερώσει manualy όλες τις περιστάσεις που έχει δημιουργήσει αλλά ταυτόχρονα να υπάρχει και η δυνατότητα χειροκίνητης επεξεργασίας των παραπάνω.
Και επειδή έχω ακούσει τόσα πολλά γι'αυτό το garbage collection(το κοκορεύεται ο καθένας) ας μην είμαστε και απόλυτοι. Ειδικά στην java εάν χρησιμοποιήσεις κάποια native method call τι γίνεται; πχ κάποια malloc της C; Το garbage collection θα αποδεσμεύσει μόνο τις περιοχές μνήμης που έχεουν δεσμευτεί με την οδηγία new και τα υπόλοιπα θα παραμείνουν για allocated(εντάξει το λύνεις με ένα finalize() block αλλά δεν γίνεται και πάλι αυτόματα...τι finalize(), τι deconstructor() το όνομα αλλάζει).