Δομή unix

lucinos | Παρ, 02/15/2013 - 13:03 | 8' | 7

Έγραψα ένα κειμενάκι και θα ήθελα καμμιά δεύτερη γνώμη

Ένα από τα πιο ενδιαφέροντα στοιχεία τού unix και τών unix-οειδών είναι η μαθηματική απλότητα τής δομής του. Υπάρχει μια ρήση που λέει: «όποιος δεν καταλαβαίνει το unix είναι καταδικασμένος να το επανεφεύρει... ανεπαρκώς».

Κατ αρχήν τον έλεγχο τού υλικού τον αναλαμβάνει ένα πρόγραμμα, ο πυρήνας (ο Linux στην ειδική περίπτωση μιας διανομής λίνουξ). Πέρα από τον πυρήνα φαίνεται να υπάρχουν μονάχα τρεις κατηγορίες οντοτήτων.

Η πρώτη κατηγορία είναι τα αρχεία. Γενικότερα το αρχείο νομίζω μπορεί να θεωρηθεί σαν «ροή πληροφορίας». Μια ροή που μπορούμε να γράφουμε ή να διαβάζουμε. Έτσι εκτός από τα συνήθη αρχεία, ως αρχεία μπορούμε να δούμε και πολλά άλλα πράγματα, όπως τις συσκευές μας. Έτσι το πληκτρολόγιο είναι ένα αρχείο η ανάγνωση τού οποίου είναι αυτά που πληκτρολογούμε και ο εκτυπωτής είναι ένα αρχείο στο οποίο στέλνουμε αυτά που θέλουμε να εκτυπωθούν, ομοίως για το μεγάφωνο, την οθόνη, το μικρόφωνο, τον σαρωτή κοκ. Στο περιεχόμενο τού αρχείο δεν συμπεριλαμβάνεται το όνομά του. Τα ονόματα τών αρχείων περιέχονται σε άλλα αρχεία που τα λέμε φακέλους, τα οποία με την σειρά τους περιέχονται σε άλλους φακέλους σχηματίζοντας έτσι το γνωστό δέντρο.

Φυσικά τα αρχεία όντας απλώς ροές πληροφορίας μπορεί να είναι ο δομικός λίθος τών πάντων αλλά δεν κάνουν κάτι. Έτσι ερχόμαστε στην δεύτερη κατηγορία που είναι οι διεργασίες. Αυτές είναι ουσιαστικά τα προγράμματα που τρέχουν στον υπολογιστή κάνοντας δουλειές όπως να γράφουν και να διαβάζουν αρχεία ή να ξεκινάνε νέες διεργασίες. Για να κάνουν όμως οττιδήποτε πρέπει να βασιστούν στον πυρήνα. Αυτό γίνεται μέσω τών κλήσεων συστήματος. Ας το δούμε αυτό με την βασική γλώσσα προγραμματισμού τού unix, την C.


#include

int main() {
printf("Hello World!\n");
}

Το #include είναι για να έχουμε την δυνατότητα να χρησιμοποιήσουμε τις κλήσεις συστήματος που αφορούν την στάνταρ είσοδο-έξοδο. Το άλλο ενδιαφέρον στοιχείο είναι ότι ορίζουμε την «συνάρτηση» main να επιστρέφει ακέραιο (int). Ο λόγος που υπάρχει αυτό είναι επειδή στο unix κάθε διεργασία όταν τερματίζει επιστρέφει μια ακέραια τιμή. Η σύμβαση είναι να επιστρέφει μηδέν αν τερματίζει χωρίς σφάλμα και κάποια άλλη τιμή αν τερματίζει με σφάλμα. Τι μπορεί να σημαίνει η κάθε τιμή αφήνεται να το ορίσει το κάθε συγκεκριμένο πρόγραμμα. Στο παραπάνω «χαίρε, κόσμε» αμελήσαμε αυτήν την λεπτομέρεια. Το πρόγραμμά μας από αυτήν την άποψη δεν είναι «σωστό». Από τον φλοιό μπορούμε πάντα να δούμε την τιμή τής τελευταίας επιστροφής με:
echo $?
Στον δικό μου υπολογιστή αν το συμπιλίσω και το τρέξω με:

gcc hello.c -o hello
./hello

επιστρέφει την μυστήρια τιμή 13 που δεν είναι 0.
αυτό σημαίνει ότι αν δώσω:
./hello && echo good
το δεύτερο σκέλος δεν θα τρέξει!

Η απλούστερη ιδέα είναι να τού πούμε να επιστρέψει 0. Έτσι θα μπορούσαμε να γράψουμε:

#include

int main() {
printf("Hello World!\n");
return 0;
}

Τώρα επιστρέφει 0 όπως αναμένουμε. Όμως ούτε αυτό είναι ακριβώς σωστό! Ο λόγος είναι ότι δεν εξετάσαμε αν υπήρξε σφάλμα. Το πρόγραμμά μας θα επιστρέψει 0 είτε εκτελεστεί σωστά είτε όχι! Εγώ δεν ξέρω αρκετά καλά C για να γράψω το πρόγραμμα σωστά αλλά μπορούμε να πάρουμε μια πρόταση για το σωστό από http://boredzo.org/helloworld/

#include
#include
#include
#include

int main(void) {
int success = fputs("Hello World!\n", stdout);
if(success != EOF) {
success = fflush(stdout);
if(success != EOF)
return EXIT_SUCCESS;
}

fprintf(stderr, "ERROR: fputs did not succeed in writing our message string (error returned: %s)!\n", strerror(errno));
return EXIT_FAILURE;
}

Προσωπικά έχω μια καλύτερη πρόταση. Αποφύγετε την C ;)
Ξέχασα επίσης να αναφέρω ότι υπάρχει αντιστοιχία διεργασιών με αρχεία/φακέλους στον φάκελο /proc

Οι «κλήσεις συστήματος» είναι η πραγματική διεπαφή τού πυρήνα (και όχι ο «φλοιός» που είναι ένα πρόγραμμα όπως τα άλλα). Και δεν είναι ακριβές να πούμε τις πούμε «εντολές». Ο πυρήνας έχει τον έλεγχο τού υλικού και δεν δέχεται «εντολές»! Τον «καλούμε» να κάνει μια δουλειά. Ο πυρήνας μπορεί να την κάνει ή μπορεί να μην την κάνει ή μπορεί να κάνει κάτι άλλο. (κάτι σαν τον δεντροπύραυλο στο Saga) Οι λόγοι μπορούν να ποικίλουν αλλά ο πιο σημαντικός έχει να κάνει με τις άδειες.

Και ερχόμαστε έτσι στην τρίτη κατηγορία, τούς χρήστες. Τούς χρήστες συχνά τούς συνδέουμε με τούς ανθρώπους αλλά στο unix είναι μια πολύ πιο αφηρημένη έννοια που αφορά τις άδειες και ο «χρήστης» δεν είναι ακριβώς αναγκαίο να αντιστοιχεί σε άνθρωπο . Κάθε διεργασία έχει έναν «ιδιοκτήτη» και κάθε αρχείο έχει άδειες που αφορούν τον ιδιοκτήτη, την ομάδα και τούς άλλους σε σχέση με την ανάγνωση, την εγγραφή και την εκτέλεση. Ο πυρήνας θα αρνηθεί να εκτελέσει κλήσεις από διεργασίες τών οποίων ο ιδιοκτήτης δεν έχει την απαιτούμενη άδεια.

Έκανα μια πρώτη προσπάθεια να εξηγήσω το unix με απλά λόγια. Όποιος κατέχει το θέμα καλύτερα από μένα ευχαρίστως να βοηθήσει.

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Υπάρχει ένα bug στο φόρουμ. Όταν πατώ δοκιμή εμφάνισης εμφανίζει το κείμενο κανονικά αλλά κάνει αλλαγές στο κείμενο που πρόκειται να υποβληθεί. Όταν μετά πατώ αποθήκευση χωρίς να προσέξω ότι υπάρχει αλλοίωση, αποθηκεύεται αλλοιωμένο. Οι αντμιν να το δούνε το bug γιατί μπορεί να είναι πολύ ενοχλητικό.

Έχω κάποιες παρατηρήσεις στα παραπάνω, αλλά θα τις παραθέσω μόλις γυρίσω σε κανα 2 ώρες από τη δουλειά !!!

Σε όσα λες για το UNIX είναι κατά τα όσα ξέρω σωστά !
Συγκεκριμένα:

[color=#0000ff]Για τις κλίσεις συστήματος[/color]
Όταν ένα πρόγραμμα που τρέχει ο χρήστης ζητήσει για παράδειγμα εγγραφή στο δίσκο, η συνάρτηση που χρησιμοποιεί (στη C πχ), κάνει κλίση συστήματος, και το σύστημα, ο πυρήνας του λειτουργικού συστήματος δηλαδή, κάνει τη βαριά δουλειά...
Για την ακρίβεια, ούτε ο πυρήνας κάνει κάτι τέτοιο, αλλά ο οδηγός (driver) της συσκευής δίσκου (ο οποίος αναλαμβάνει να διατάξει τα ηλεκτρονικά κυκλώματα του ελεγκτή δίσκου, για να μετακινήσουν βραχίονα κεφαλών και άλλες τέτοιες κινήσεις χαμηλού επιπέδου - επίπεδο υλικού...)
Το ίδιο συμβαίνει και με τις εντολές (cd, ls, chmod, ....), οι οποιες ΔΕΝ είναι εντολές στο UNIX-LINUX, αλλά (υπο)προγράμματα (δηλ συναρτήσεις γραμμένες σε C) !!
Οπότε ερχόμαστε στην προηγούμενη περίπτωση που ανέφερα (όταν μίλησα για τις συναρτήσεις)

[color=#0000ff]OMΩΣ φίλε μου...[/color]
Ο τίτλος προδιαθέτει ότι πρόκειται να γραφούν όμορφα πράγματα για το UNIX, το οποίο θεωρώ ότι είναι επανάσταση νοητικής σύλληψης...
Δεν το θεωρώ μόνο εγώ, αλλά και οι περισσότεροι επιστήμονες πληροφορικής !

[color=#0000ff]OMΩΣ φίλε μου...[/color]
Στα ενδιάμεσα των λεγόμενών σου, αναφέρεις θέματα που δεν έχουν σχέση με το UNIX (και το πνεύμα του τίτλου), και "κατακρίνουν" τη C (εκτός αν καταλαβαίνω λάθος...).
Σε αυτό κάνω ένσταση !

Αν δεν έχει κάποιος ασχοληθεί με "κάτι" (όχι απλά με C) δεν μπορεί να το κρίνει αυτό το και .....
Συγκεκριμένα, είναι μέρος της "πίστης" μου ότι "δεν έχει το δικαίωμα", κάποιος να κρίνει κάτι αν δεν το ξέρει από πρώτο χέρι ....
Ιδίως αν δανίζεται γνώμες από άλλους.
Για παράδειγμα, πιστεύω ότι πρέπει να μου κοπεί η γλώσσα, αν μιλήσω κατακριτικά για ... π.χ. την PYTHON (για παραδειγμα ...), από τη στιγμή που δεν ξέρω τίποτε (σχεδόν) γι'αυτή ...
Προφανώς δεν μπορώ να την κρίνω....

Συγκεκριμένα, το ότι έγραψε κάποιος ένα κώδικα πιο πολύπλοκο, αυτό δε σημαίνει ότι η γλώσσα είναι χάλια !!
Κι εγώ που βλέπω τον πολύπλοκο κώδικα που ανέφερες, αυτό θαν ήταν ένας λόγος κάποιος να μην την αρχίσει καν τη γλώσσα C ποτέ !

Ο σωστός κώδικας που λειτουργεί τέλεια είναι ο

#include

int main() {
printf("Hello World!\n");
return 0;
}

Ο έλεγχος για σφάλματα, γίνεται αυτομάτως από το μεταγλωττισμένο πρόγραμμα, το οποίο κάνει τον έλεγχο και επιστρέφει μια τιμή σφάλματος, την οποία τη διαχειρίζεται ο πυρήνας του λειτουργικού συστήματος, με τον τρόπο που αυτός ξέρει ...

Απλά ο πολύπλοκος κώδικας που ανέφερες, δείχνει πως θα διαχειριζόταν ο πυρήνας το σφάλμα, αφού οι πυρήνες UNIX-LINUX EINAI ΓΡΑΜΜΕΝΟΙ ΣΕ C ....
Δυστυχώς ή ευτυχώς η C δίνει αυτή τη δυνατότητα.... το φρόντισε ο ιδρυτής της C και του UNIX ... Ο Dennis Ritchie !

Θα σου πω εγώ φίλε μου, για ποιους λόγους η C είναι η top γλώσσα προγραμματισμού...

1. ΔΕ θα είχε επιτυχία το UNIX, αν ήταν γραμμένο σε γλώσσα άλλη πέρα από τη C
2. ΔΕ θα είχε επιτυχία o πυρήνας του LINUX, αν ήταν γραμμένος σε γλώσσα άλλη πέρα από τη C
3. Συγκεκριμένα ίσως και να μην τρέχανε καθόλου ... !!!
4. Η ιδέα ότι στο UNIX οι συσκευές (που ανέφερες) και ότιδήποτε άλλο, είναι αρχεία, είναι ιδέα της C !!
5. Oι εντολές της C είναι (υπο)προγράμματα-συναρτήσεις (όπως και οι "εντολές" του UΝΙΧ-LINUX, που ανέφερα παραπάνω) αυτό είναι ιδέα-καινοτομία της C.
Συγκεκριμένα οι ειδικοί αναφέρουν ότι η C δεν έχει εντολές ... π.χ. η prinf(), είναι συνάρτηση και όχι εντολή ....
6. Σε όλα τα πανεπιστήμια, 1ο εξάμηνο-1ο έτος, γνώση της C ....
Xωρίς αυτή δε μαθαίνεις πληροφορική ....
7. Είναι η γλώσσα με την οποία κάνεις τα πάντα.
8. Χωρίς αυτή δε θα είχε ποτέ φτάσει η πληροφορική σεαυτό το επίπεδο που βίσκεται τώρα...
9. Το ότι έχεις ανοικτό τον υπολογιστή σου και διαβάζεις αυτά που γράφω, σημαίνει ότι η C είναι ΖΩΝΤΑΝΗ και μας ακούει ...

[color=#0000ff]ΜΕΙΟΝΕΚΤΗΜΑ ΤΗΣ C...[/color]
Αν δεν την ξέρεις σε βάθος, το αποτέλεσμα θα είναι πρόγραμμα-τερατούργημα...
Είναι πανίσχυρη γλώσσα αλλά λίγοι μπορούν να πουν ότι την ξέρουν καλά ...
(Δεν είμαι ένας από αυτούς ...)

[color=#0000ff]Συμπέρασμα[/color]
1. [Βλέπε spiderman ...]
H δύναμη και η ευελιξία, συμβαδίζουν με την τεράστια ευθύνη !!
2. Αν καποιος αρχάριος θέλει να μάθει απλά να προγραμματίζει, μπορεί να το κάνει με μια άλλη πιο εύκολη γλώσσα !
3. Αν κάποιος θέλει πραγματικά να καταλάβει τι γίνεται κάτω από τα γραφικά του, η C είναι η καλύτερη αρχή, με συνέχεια η C++ (ή η JAVA)

Θα σου πω το παράπονό μου που με πύκρανε....[img]/smileys/smiley-cry.gif[/img]
"[color=#0000ff]Προσωπικά έχω μια καλύτερη πρόταση. Αποφύγετε την C ;)[/color]"
Είναι γνώμη σου η οποία προκύπτει από τις ποιες γνώσεις για τη C ???
Είναι άσχημο να υποστηρίζεις κάτι, μειώνοντας κάτι άλλο ....
Υποστήριξε αυτό που αγαπάς.
Όπως ανέφερα παραπάνω, είναι ντροπή για μένα να κρίνω ένα θέμα χωρίς να έχω καμία σχέση με το θέμα αυτό .....

Τα παραπάνω είναι με καλή διάθεση, καλοπροαίρετα!
Δε θέλω με τα παραπάνω να γίνει παρεξήγηση μεταξύ μας, διότι οι συμβουλές σου στο linux mint forum, θα είναι παν-χρήσιμες !![img]/smileys/smiley-smile.gif[/img]
Με εκτίμηση ο tom του 1972 (προ Χριστού δηλαδή...)

Ανέφερα "[color=#0000ff]Είναι άσχημο να υποστηρίζεις κάτι, μειώνοντας κάτι άλλο ....[/color]", και είπα ότι είναι για μένα θέμα πίστης διότι έχω σαν σήμαντρό μου την παρακάτω ιστορία ....

Mια φορά κι έναν καιρό, στην Άπω ανατολή, ο σοφός δάσκαλος του kung fu, έβαλε ένα πρόβλημα στους μαθητές του ...

Έγραψε στο πάτωμα 2 γραμμές. Μια μικρή και μια μεγάλη... Είπε:
- Η μικρή είναι η δική σου γραμμή, ενώ η μεγάλη είναι του φίλου σου ....
- Πως θα τις κάνεις ίσες ?

Ο μαθητής πήρε το σφουγγάρι και έσβησε τη γραμμή του φίλου του ώστε να γίνει ίση με τη δική του ! Απάντησε λοιπόν
- Τις έκανα ίσες δάσκαλε !

Και ο δάσκαλος του απάντησε:
- Θα ήταν καλύτερο αντί να κόψεις τη γραμμή του συμμαθητή σου, να προσπαθήσεις να προεκτίνεις τη δική σου ώστε να την κάνεις ίση με τη δική του !!

Προσωπικά χωρίς να έχω την φοβερή εμπειρία, γνωρίζω αρκετά ώστε να έχω σχηματίσει κάποιες γνώμες και να μην βασίζομαι αποκλειστικά στις γνώμες τών άλλων.
Το «αποφύγετε την C» είναι ελαφρώς περιπαικτικό και στην πραγματικότητα σημαίνει: Αυτός που ξέρει τι θέλει και αυτό που θέλει είναι η C έτσι και αλλιώς θα με αγνοήσει, για τον υπόλοιπο κόσμο η C είναι ένα πολύ ιδιαίτερο εργαλείο που πιθανότατα δεν είναι αυτό που θα ήθελαν.

Στην πραγματικότητα η γνώμη μου για την C είναι ιδιαιτέρως θετική. Καμμία άλλη γλώσσα δεν είναι τόσο σύμπακτη και λιτή και ταυτοχρόνως δίνει τόσο άμεση επαφή με το σύστημα. Τα ίδια τα παραδείγματά μου εξάλλου σκοπό είχαν να δείξουν πόσο άμεση επαφή έχει η C με τής κλήσεις συστήματος. Οι άλλες γλώσσες τις κρατάνε κρυμμένες καλώς οι κακώς, Η C δεν μπορεί ούτε το «χαίρε, κόσμε» να γράψει χωρίς ρητώς να επικαλεστεί την ανάγκη τους (το #include στην αρχή)

Από την άλλη δεν πρέπει να υποκρινόμαστε ότι η C είναι κάτι διαφορετικό από αυτό που είναι. Και αυτό που την χαρακτηρίζει είναι ο πρωτογονισμός της. Δεν έχει συλλογή σκουπιδιών για να πω ένα βασικό χαρακτηριστικό και επίσης σκέψου πόσο πρωτόγονη μέθοδος είναι τα διάφορα #include και λοιπά που έχουν να κάνουν με την προ-επεξεργασία. Για κοινή χρήση είναι απαράδεκτα πρωτόγονη. Από την άλλη αν κάποιος θέλει να βρεθεί όσο γίνεται κοντύτερα στο σύστημα χωρίς να κατέβει στην Assembly τότε αλλάζει το πράγμα.

Όπως και η Assembly έχει την θέση της στον 21ο αιώνα έτσι και η C έχει την θέση της. Περισσότερο κινδυνεύει η C++. H C++ έχει όλα τα βασικά προβλήματα τής C χωρίς όμως να είναι σύμπακτη όπως η C και κρύβει πράγματα που δεν θέλεις να κρύβονται όταν θέλεις να βρεθείς τόσο κοντά στο σύστημα. Αυτό δεν σημαίνει ότι δεν εκτιμώ την C++. Αν για παράδειγμα έλεγε κάποιος σε *μένα* να γράψω ένα πρόγραμμα αλλά μού έδινε μονάχα δύο επιλογές γλώσσας, την C και την C++, τότε χωρίς δεύτερη σκέψη θα διάλεγα την C++. Αλλά είμαστε στον 21ο αιώνα και νέες επιλογές υπάρχουν και πρέπει να αναπτυχθούν ακόμα περισσότερο. Δεν λέω ότι αύριο το πρωΐ θα εξαφανιστεί η C++, δεν μπορεί να γίνει γιατί εδώ και τρεις δεκαετίες είναι η Κοινή γλώσσα (αρκετά περισσότερο από την C). Προτάσεις όμως υπάρχουν, ήδη η δημοτικότητα τής C++ είναι σε καθαρά πτωτική πορεία (η C όχι τυχαία κρατάει τις δυνάμεις της) και η γνώμη μου είναι ότι η πορεία αυτή είναι μη αναστρέψιμη.

Διαφωνώ μαζί σου ότι το return 0; είναι «σωστό» (προσωπικά όμως έτσι γράφω τα προγράμματά μου γιατί η διαφορά είναι αμελητέα για το δικό μου επίπεδο)

Επίσης διαφωνώ ότι η επιτυχία τού unix βασίστηκε στην C. Η επιτυχία τού unix ήταν ότι υπήρξε (και συνεχίζει να είναι στούς διαδόχους του όπως το λίνουξ) ανοικτό πεδίο ανάπτυξης ιδεών, στο πλαίσιο μιας κοινότητας και όχι κάποιου σχεδιασμού μιας εταιρείας. Η εταιρεία βρέθηκε να το κατέχει αλλά ποτέ δεν το σχεδίασε. Η C είναι αναπόσπαστο κομμάτι αυτής τής επιτυχίας.

Για να τελειώνω,
πρόθεσή μου ήταν να δείξω την άμεση σχέση τής C με τις κλήσεις συστήματος
πρόθεσή μου ήταν να πειράξω τούς θερμούς οπαδούς τής C
δεν έχω ούτε την πρόθεση ούτε την δύναμη να σβήσω την C

Μετά από κανά 2 ώρες αφ'ότου έγραψα αυτά που σου έγραψα, κοιτώντας τα, είχα κάποιες τύψεις....
Λές να μην είχε το παιδί σκοπό να προκαλέσει ??
Είναι στενάχωρο που επαληθεύεται το θέμα από το λεγόμενό σου:
"[color=#0000ff]πρόθεσή μου ήταν να πειράξω τούς θερμούς οπαδούς τής C[/color]"

Ήταν και ο λόγος που πειράχτηκα.... Σκέψου σε αυτή τη "μικρή" (προς το παρόν) κοινότητα να αρχίσει να πειράζει ο καθένας τον άλλο !!!

Η διανομή μου είναι η καλύτερη από τη δική σου....
Η γλώσσα μου είναι η καλύτερη...
Ο κώδικάς μου είναιο καλύτερος...

Για το λεγόμενο:
"[color=#0000ff]Διαφωνώ μαζί σου ότι το return 0; είναι «σωστό»[/color]"
Όταν θα γίνω επαγγελματίας θα ξέρω καλύτερα....
Για απλούς χομπίστες προγραμματιστές, δεν είναι χρήσιμη τέτοια λεπτομέρεια...
Αυτό που σημείωσα και στα προηγούμενα, είναι ότι η C έχει τέτοια δύναμη, η οποία σου επιτρέπει να ελέγξεις ΤΑ 'ΑΠΑΝΤΑ !!

[color=#0000ff]C vs C++[/color]
Κατά πρώτον, η C είναι για άλλους λόγους και η C++ είναι για άλλους λόγους....
Η C είναι μη αντικειμενοστραφής γλώσσα, και "κατάλληλα" λιτή, ώστε με απλούς αλγόριθμους να προγραμματίζεις ακόμη και πυρήνες λειτουργικών συστημάτων...
Πράγμα που είναι πανχρήσιμο όποτε θέλουμε το σύστημα να έχει τέτοιο κώδικα που να μην κολλάει ....
Επειδή έτυχε πρόσφατα να έρθω σε επαφή με το βιβλίο "Σύχγρονα Λειτουργικά Συστήματα" του Andrew Tanenbaum, είδα το τι ΠΟΛΥΠΛΟΚΟΤΗΤΑ παίζει πίσω από τα γραφικά .... [Τώρα κατάλαβα γιατί δεν καταλάβαινα γρι από τα γραφόμενα κάποιου Τσιομπίκα που έγραφε ΣΤΟ περιοδικό - τρομερό μυαλό ο παίχτης !!].
Σκέψου τι θα γινόταν αν στην πολυπλοκότητα αυτή έμπενε και η ιδιορυθμία-πολυπλοκότητα μιας "κάποιας" γλώσσας.
Γι'αυτό και η επιλογή της C ήταν κατά τη γνώμη μου η καλύτερη ...

Έρχομαι τώρα στη C++ ... Αυτή είναι αντικειμενοστραφής γλώσσα...
Κάπου έγραψες ότι δε σου αρέσει η αντικειμενοστρέφεια και οφείλω να γράψω κάποια στιγμή τι είναι, για πιο λόγο εφευρέθηκε και σε κάποιες φορές θα ήταν αδύνατο να αναπτυχθεί λογισμικό υψηλού επιπέδου χωρίς αυτή ....
Αυτό όμως σε άλλη στιγμή ! [ΥΠΟΣΧΕΣΗ !!]
Τότε που το έγραψες κάπου, ήθελα να σου απαντήσω αλλά είχα τόσες υποχρεώσεις που δε γινόταν εκείνη τη στιγμη ...
Κάποια επιχειρήματα βρίσκονται σε κάποια λογισμικά "τέρατα" από άποψη χώρου και μεγέθους !! (στα οποία η αντικειμενοστρέφεια κάνει θαύματα !!!)

[color=#0000ff]Για την ανάπτυξη των γλωσσών ...[/color]
Η αλήθεια είναι ότι σε σχέση με C++ και JAVA οι περισσότεροι προτιμούν JAVA γιατί:
1. Τα πιτσισίκια την έχουν συνδέσει με τα online παιχνίδια ...
Αυτό κάνει τους περισσότερους να πιστεύουν ότι είναι η πιο in γλώσσα.
2. Είναι μια πιο απλοποιημένη C++, διότι:
α. Έχει garbage collector
β. Δεν απασχολείται ο προγραμματιστής με χρήση δεικτών.... Γίνονται όλα αυτόματα από τη γλώσσα.
γ. Έχει πιο απλοποιημένη κληρονομικότητα
δ. Όλες οι μέθοδοι αναπτύσσονται εντός της κλάσης
και άλλα πολλά...
Όλα αυτά όμως έχουν το τίμημά τους .... Τρέχει 10 φορές πιο αργά από τη C++...

Έτσι ο κόσμος πιο πολύ προτιμά τη JAVA ... εκεί χάνει πόντους η C++
Άλλοι πάλι θέλουν να γράψουν ιστοσελίδες .... εδώ δεν ταιριάζει η C++.

Παρακάτω παραθέτω ένα link με τη θέση της C++ σε σχέση με άλλες γλώσσες ... Βρίσκεται στα ψηλά ....
Να λάβεις υπ'όψη σου και τους παράγοντες που ανέφερα παραπάνω, όπου χάνει στον πόντο (σχεδόν...)
[url=http://www.langpop.com/]http://www.langpop.com/[/url]
Nα και η γνώμη του Bjarne Stroustrup
[url=https://www.youtube.com/watch?v=lMmVuRNmHzQ]https://www.youtube.com/watch?v=lMmVuRNmHzQ[/url]

Στα παραπάνω να προσθέσω ότι στη μετά-πυρήνα εποχή, το 90% του λογισμικού γράφεται σε C++ !!! Βλέπε KDE, GNOME, και άλλα...
Αλλά και τα windows έχουν προγραμματιστεί σε C++, αλλά και σε παράγωγά του όπως C# !
Oπότε δεν ισχύει αυτό που έγραψες:
"[color=#0000ff]ήδη η δημοτικότητα τής C++ είναι σε καθαρά πτωτική πορεία[/color]"

Για το λεγόμενο:
"[color=#0000ff]και κρύβει πράγματα που δεν θέλεις να κρύβονται όταν θέλεις να βρεθείς τόσο κοντά στο σύστημα[/color]"
Απ'όσο ξέρω δεν κρύβει τίποτε....

[color=#0000ff]C++ vs ASSEMBLY[/color]

Οι C, C++ ΔΕΝ ΕΙΝΑΙ χαμηλού επιπέδου ... ΟΥΤΕ υψηλού επιπέδου...
Είναι μεσσαίου επιπέδου...
Η ASSEMBLY είναι εξαρτόμενη από το hardware, αλλά οι C, C++, είναι ανεξάρτητες του υλικού ...
ΔΕΝ ΕΙΝΑΙ χαμηλού επιπέδου : Επειδή δεν είσαι υποχρεωμένος να προγραμματίζεις με το υλικό αγκαλιά ! Συγκεκριμένα φίλος μου επαγγελματίας προγραμματιστής, δεν ξέρει και πολλά κάτω από τις εντολές που γράφει ...
ΔΕΝ ΕΙΝΑΙ υψηλού επιπέδου : Επειδή ΑΝ θέλεις να "βάλεις χέρι" χαμηλά στο σύστημα, σου δίνει το δικαίωμα, αλλά πρέπει να έχει κάποιος μεγάλη ευθύνη, για την οποία μίλησα πιο πριν !
Προφανώς τα κάνει ολα !!
Σίγουρα η ASSEMBLY κάνει άλλα πράγματα !!
Για όλα τα παραπάνω το λεγόμενό σου "[color=#0000ff]Και αυτό που την χαρακτηρίζει είναι ο πρωτογονισμός της[/color]", είναι εντελώς ΑΣΧΕΤΟ !!

[color=#0000ff]Ο προεπεξεργαστής[/color]

Η C++ είχε πάντα ένα όνειρο .... να απαλλαγεί από τον προεπεξεργαστή που έχει κληρονομήσει από τη C ...
Θα μου πει κανείς, και γιατί τον κρατάει ακόμη ...
Απλά για λόγους συμβατότητας με τα αντίστοιχα προγράμματα της C.
Σίγουρα υπάρχουν εναλλακτικές λύσεις οι οποίες προτίνονται αντί της χρήσης του προεπεξεργαστή ...
Βλέπεις ο Stroustrup σεβόταν τη "μητρική" γλώσσα, όπως και οι ανατολίτες σέβονται το δάσκαλό τους !!!

Λάτρεψα το λεγόμενό σου:
"[color=#0000ff]δεν έχω ούτε την πρόθεση ούτε την δύναμη να σβήσω την C[/color]"

[color=#0000ff]Για να κλείσουμε εδώ...[/color]
1. Ο αρχηγός αυτού του site έγραψε ...
"[color=#0000ff]Είμαστε λίγοι, αλλά φωνάζουμε πολύ ![/color]"
Εγώ λέω ότι δεν είναι κακό να φωνάζουμε, αλλά κακό να μαλώνουμε... Αυτό το λέω επειδή με πύκρανε αυτό που είπες, ότι το έκανες για να "πειράξεις".
Αυτό θεωρείται σίγουρα εριστικό ! Τι να περιμένω από εχθρούς του ελεύθερου λογισμικού τότε ?? Οι κοινότητες linux και ελεύθερου λογισμικού, υπάρχουν για να συνεργαζόμαστε και να αλληλοβοηθιόμαστε, αντί να πετάει ο ένας πέτρες σε άλλους !

2. Πόσο μαλλον όταν γράφεις για το UNIX, το ενωτικό στοιχείων όλων των UNIX-οειδών...
Μέσα σε αυτο το ενωτικό, αναφέρεις πράγματα που πικραίνουν αν όχι το μεγαλύτερο ποσοστό (για να μη σε πικράνω ...), τουλάχιστον τους μισούς !!!

3. Όλες οι γλώσσες έχουν γίνει για υπηρετήσουν συγκεκριμένους σκοπούς, και η καθεμία είναι ικάνη στον τομέα της !
Έτσι, σύμφωνα με το κινέζικο γνωμικό που ανέφερα παραπάνω :
ΔΕ ΘΑ συμβουλέψω τον κόσμο, να ΜΗΝ ασχοληθεί με μια συγκεκριμένη γλώσσα (δηλαδή δε θα κόψω τη γραμμή του άλλου), αλλά θα συμβουλέψω τα εξής (δηλαδή θα προσπαθήσω να επιμηκύνω τη δική μου γραμμή):

Διαλέξτε τη γλώσσα προγραμματισμού που ταιριάζει καλύτερα σε αυτό που θέλετε να κάνετε !! Όπως υπάρχουν διανομές για όλα τα γούστα και όλες τις δουλειές, υπάρχουν και γλώσσες για κάθε δουλειά !!

4. Όσο για Σ-Ε-Ν-Α ... σε συμβουλεύω να συνεχίσεις την παρουσίαση στο UNIX που άρχισες, με πιο πολλά στοιχεία, αλλά μην μπερδεύεις (και μάλιστα ενδιάμεσα στο θέμα ...), πράγματα που χωράνε μόνα τους σε ειδικό και ξεχωριστό topic (ώστε να γνωρίζουν και άλλοι για τη συζήτηση και να ακουστούν και άλλες γνώμες ! Βασικά ζορίζομαι να υπερασπίζομαι μόνος μου "ιδανικά").

5. Ευχαριστώ τον αρχηγό του site, που με παρέλαβε Μαθηματικό (ανορθόγραφο - ασύνταχτο - και άλλα), και με παρέδωσε Φιλόλογο !!!

Καταρχάς μπράβο για την προσπάθεια. Διαβάζοντας πάντως αρχικά τον τίτλο και τη λέξη δομή το μυαλό μου πήγε στο σύστημα αρχείων, τους καταλόγους κλπ.