Native Client: η επανάσταση του Internet, από την Google

Αρχικά η είδηση μοιάζει να ενδιαφέρει μονάχα τους προγραμματιστές ανάμεσα μας – μα όταν κανείς καταλάβει “για τι μιλάμε” γίνεται κατανοητό πως πρόκειται για μια νέα προσέγγιση, από την Google, που “αν πιάσει” θα φέρει τα πάνω-κάτω στο πώς χρησιμοποιούμε τους υπολογιστές μας αλλά και στο πώς αποκτούμε εφαρμογές για αυτούς.

Εν συντομία, η ίδια η είδηση έχει ως εξής: η Google στις 12 Μαίου παρουσίασε το Native Client SDK, το οποίο μας “θύμισε” χθες το Gizmodo – το οποίο, όμως, δεν εμβάθυνε στο “τι ακριβώς σημαίνει αυτό για το μέλλον των υπολογιστών” όσον αφορά εμάς, ως χρήστες. Ούτε εξήγησε “τι ακριβώς είναι αυτό” με τρόπο που να είναι ευρέως αντιληπτός. Εδώ, λοιπόν… ερχόμαστε εμείς.

Εν αρχή, ο κώδικας

Κάθε πρόγραμμα που τρέχει σε έναν υπολογιστή έχει, όπως φαντάζεστε, αρχικά “προγραμματιστεί” από κάποιον. Αυτό συνήθως γίνεται σε μια (ή περισσότερες) γλώσσα προγραμματισμού, και υπάρχουν αρκετές. Εδώ θα κάνουμε μια μικρή παρένθεση.

Φαντασθείτε πως ο κεντρικός επεξεργαστής του υπολογιστή είναι ένας εξωγήινος, ένα… ρομπότ από άλλο πλανήτη, που “μιλάει τη δική του γλώσσα”. ΟΚ; Τέλος παρένθεσης.

Ο λόγος για τον οποίο αναφέραμε το παραπάνω είναι για να γίνει κατανοητή η σημαντικότερη διαφορά ανάμεσα στις γλώσσες προγραμματισμού: υπάρχουν, λοιπόν, πολλές γλώσσες προγραμματισμού. Πώς λέμε πως κάποιες σύγχρονες γλώσσες “κατάγονται από τα Λατινικά” και μοιάζουν, άλλες περισσότερο, άλλες λιγότερο, με αυτά; Το ίδιο περίπου συμβαίνει και με τις γλώσσες προγραμματισμού: κάποιες είναι “πιο κοντινές” στη γλώσσα του επεξεργαστή, στη γλώσσα “του εξωγήινου ρομπότ” που προαναφέραμε, άλλες είναι “πιο κοντινές” στη “δική μας”, την “ανθρώπινη” γλώσσα (και, συγκεκριμένα, “στην Αγγλική”).

Σκεφθείτε, τώρα, πως κάποιος θέλει να “επικοινωνήσει” με το ρομπότ. Θα πρέπει ή να μάθει τη δική του γλώσσα, κάτι που είναι σχεδόν αδύνατο λόγω της πολυπλοκότητας της, ή να… μάθει το ρομπότ τη δική του, “ανθρώπινη” γλώσσα. Ε, οι “ανθρώπινες” γλώσσες στο παράδειγμα μας είναι οι διαφορετικές γλώσσες προγραμματισμού.

Κάποιες από αυτές είναι πιο “μηχανικές” και “κοντινότερες” στη γλώσσα που αρχικά μιλούσε το ρομπότ. Έτσι, του είναι ευκολότερο να τις καταλάβει και να “τις μιλήσει” ευκολότερα και πιο αποδοτικά. Είναι δυσκολότερο, όμως, για τον άνθρωπο να “τις μιλήσει”. Αντίστροφα, οι πιο “εύκολες για αυτόν” γλώσσες είναι “δυσκολότερες” για το ρομπότ, που πρέπει να προσπαθεί περισσότερο για να “τις καταλάβει” και “να τις μιλήσει”.

Και, με το παραπάνω, μόλις εξηγήσαμε τη βασική διαφορά των περισσότερων γλωσσών προγραμματισμού: κάποιες είναι “πιο ανθρώπινες”, άλλες είναι “πιο κομπιουτεράδικες”. Οι πρώτες είναι “ευκολότερες” για τον άνθρωπο, άλλες είναι πολύ δυσκολότερες να τις μάθει. Η πιο διαδεδομένη από όλες, πάντως, είναι η C/C++.

Η C/C++ δεν είναι η ευκολότερη γλώσσα, αλλά δεν είναι και “η γλώσσα του ρομπότ”, και με αρκετό κόπο μπορεί κανείς να τη μάθει. Το βασικότερο πλεονέκτημα της είναι πως, λόγω του ότι είναι αρκετά “κοντινή στη λόγική της δικής του γλώσσας”, το ρομπότ, ο επεξεργαστής του υπολογιστή μας, μπορεί να “την καταλάβει ευκολότερα” και, άρα, “να την μιλήσει καλύτερα”. Αυτό μεταφράζεται ως “τα προγράμματα που είναι γραμμένα σε C/C++ συνήθως `τρέχουν` πολύ γρηγορότερα από ό,τι όσα έχουν γραφτεί σε μια άλλη γλώσσα, π.χ. στη JAVA”.

Page 1 of 41234
...γνωστός και ως Οδυσσέας Κουράφαλος, αρχικός υπεύθυνος για το unregistered. Συντάκτης, γραφίστας, "μαλτιμηντιάς", φανατικός της science fiction και των αστείων γατιών στου ιντερνέτ. "Δηλώνω graphics whore" (παίζω Ms. Pac-Man στο MAME με 2xSAL και το πρώτο Max Payne με FXAA antialiasing). Load "unreg*",8,1.
  • Pingback: Native Client: η επανάσταση του Internet, από την Google | Netview Blog()

  • Σπύρος

    Άκυρα τα περί εγγύτητας της γλώσσας γιατί κάθε πρόγραμμα πριν εκτελεστεί μεταγλωττίζεται σε κώδικα μηχανής (το γνωστό εκτελέσιμο binary αρχείο).
    Είναι προφανώς άλλοι οι παράγοντες που διακρίνουν τις γλώσσες προγραμματισμού…. ψάξτο λίγο καλύτερα.
    Η java είναι πιο αργή γιατί ως interpreted γλώσσα δεν παράγει εκτελέσιμο, η εκτέλεση γίνεται από το virtual machine της java, αλλά τι συγκρίνουμε τώρα, μια διαδικτυακή γλώσσα χωρίς δυνατότητα επέμβασης στην μνήμη με το ακριβώς αντίθετο?

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

  • Σπύρος

    Άκυρα τα περί εγγύτητας της γλώσσας γιατί κάθε πρόγραμμα πριν εκτελεστεί μεταγλωττίζεται σε κώδικα μηχανής (το γνωστό εκτελέσιμο binary αρχείο).
    Είναι προφανώς άλλοι οι παράγοντες που διακρίνουν τις γλώσσες προγραμματισμού…. ψάξτο λίγο καλύτερα.
    Η java είναι πιο αργή γιατί ως interpreted γλώσσα δεν παράγει εκτελέσιμο, η εκτέλεση γίνεται από το virtual machine της java, αλλά τι συγκρίνουμε τώρα, μια διαδικτυακή γλώσσα χωρίς δυνατότητα επέμβασης στην μνήμη με το ακριβώς αντίθετο?

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

  • ducklord

    Ξεκαθαρίζω πως “δεν είμαι προγραμματιστής” και πως όσα έγραψα είναι “όσα γνωρίζω `θεωρητικά` σχετικά με προγραμματισμό”. Ξεκαθαρίζω, επίσης, πως το άρθρο γράφτηκε για να είναι κατανοητό από την πλειοψηφία των χρηστών, και σίγουρα όχι από προγραμματιστές.

    Κατόπιν αυτού, εξήγησε μου: η C/C++ “βγάζει binaries” αν την περάσεις από GCC. Το… AutoHotKey “βγάζει binaries” αν “κάνεις compile” τον κώδικα του μέσω Scite. Γιατί η C/C++ έχει “καλύτερες επιδόσεις” από ό,τι το… AutoHotKey (που, εντάξει, δεν είναι “γλώσσα προγραμματισμού” μα “scripting”.

    Από τα -ομολογώ, λίγα- που γνωρίζω, γενικά, όσο “απομακρύνεσαι από την assembly” κατά τον προγραμματισμό, τόσο “μειώνεις τις επιδόσεις”. Θεωρητικά, το καλύτερο για να έχεις τις υψηλότερες επιδόσεις είναι να “γράφεις” απευθείας σε κώδικα μηχανής. Μετά, π.χ., έρχεται η C/C++, μετά η Delphi κ.λπ.

    Γενικά, όσο “πιο μακριά” είναι η γλώσσα προγραμματισμού από τον κώδικα μηχανής, τόσο “περισσότερη -και δυσκολότερη- μετάφραση” πρέπει να κάνει ο compiler για να την μετατρέψει σε “κώδικα μηχανής-εκτελέσιμο αρχείο”. Και τόσο μειώνονται οι δυνατότητες optimization και αυξάνονται οι πιθανότητες για σφάλματα. Αυτό, τουλάχιστον, γνώριζα, ως… πτωχός μη-προγραμματιστής.

    Η άποψη μου -νομίζω- πως επιβεβαιώνεται με μια απλή αναζήτηση για “low-level vs high-level programming”, με μια επισκεψούλα στο pouet.net (όπου υπάρχουν “διαμάντια” σε low-level κώδικα που σου βγάζουν μέσα από 16KBs ό,τι θα περίμενες να δεις από προγράμματα αρκετών MBytes), από το ότι “δεν υπάρχει λειτουργικό σύστημα γραμμένο σε… Basic” κ.λπ.

    Κάνω λάθος; Αν ναι, θα ήθελα πραγματικά να μου το εξηγήσεις – και δεν με πειράζει “αν θα ακυρώσεις το post”, αρκεί όπως είπες να… μην γράφουμε μπαρούφες!

  • ducklord

    Ξεκαθαρίζω πως “δεν είμαι προγραμματιστής” και πως όσα έγραψα είναι “όσα γνωρίζω `θεωρητικά` σχετικά με προγραμματισμό”. Ξεκαθαρίζω, επίσης, πως το άρθρο γράφτηκε για να είναι κατανοητό από την πλειοψηφία των χρηστών, και σίγουρα όχι από προγραμματιστές.

    Κατόπιν αυτού, εξήγησε μου: η C/C++ “βγάζει binaries” αν την περάσεις από GCC. Το… AutoHotKey “βγάζει binaries” αν “κάνεις compile” τον κώδικα του μέσω Scite. Γιατί η C/C++ έχει “καλύτερες επιδόσεις” από ό,τι το… AutoHotKey (που, εντάξει, δεν είναι “γλώσσα προγραμματισμού” μα “scripting”.

    Από τα -ομολογώ, λίγα- που γνωρίζω, γενικά, όσο “απομακρύνεσαι από την assembly” κατά τον προγραμματισμό, τόσο “μειώνεις τις επιδόσεις”. Θεωρητικά, το καλύτερο για να έχεις τις υψηλότερες επιδόσεις είναι να “γράφεις” απευθείας σε κώδικα μηχανής. Μετά, π.χ., έρχεται η C/C++, μετά η Delphi κ.λπ.

    Γενικά, όσο “πιο μακριά” είναι η γλώσσα προγραμματισμού από τον κώδικα μηχανής, τόσο “περισσότερη -και δυσκολότερη- μετάφραση” πρέπει να κάνει ο compiler για να την μετατρέψει σε “κώδικα μηχανής-εκτελέσιμο αρχείο”. Και τόσο μειώνονται οι δυνατότητες optimization και αυξάνονται οι πιθανότητες για σφάλματα. Αυτό, τουλάχιστον, γνώριζα, ως… πτωχός μη-προγραμματιστής.

    Η άποψη μου -νομίζω- πως επιβεβαιώνεται με μια απλή αναζήτηση για “low-level vs high-level programming”, με μια επισκεψούλα στο pouet.net (όπου υπάρχουν “διαμάντια” σε low-level κώδικα που σου βγάζουν μέσα από 16KBs ό,τι θα περίμενες να δεις από προγράμματα αρκετών MBytes), από το ότι “δεν υπάρχει λειτουργικό σύστημα γραμμένο σε… Basic” κ.λπ.

    Κάνω λάθος; Αν ναι, θα ήθελα πραγματικά να μου το εξηγήσεις – και δεν με πειράζει “αν θα ακυρώσεις το post”, αρκεί όπως είπες να… μην γράφουμε μπαρούφες!