V γλώσσα προγραμματισμού ανοιχτού κώδικα

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

Η σύνταξη του V είναι πολύ παρόμοια με το Go, δανειζόμενη κάποιες δομές από το Oberon, το Rust και το Swift. Η γλώσσα είναι όσο το δυνατόν απλοποιημένη και, σύμφωνα με τον προγραμματιστή, 30 λεπτά μελέτης είναι αρκετά για να μάθουν τα βασικά τεκμηρίωση. Ταυτόχρονα, η γλώσσα παραμένει αρκετά ισχυρή και μπορεί να χρησιμοποιηθεί για την εκτέλεση των ίδιων εργασιών όπως όταν χρησιμοποιείτε άλλες γλώσσες προγραμματισμού (για παράδειγμα, οι βιβλιοθήκες είναι διαθέσιμες για γραφικά 2D/3D, δημιουργώντας GUI και εφαρμογές Ιστού).

Η δημιουργία μιας νέας γλώσσας προκλήθηκε από την επιθυμία να επιτευχθεί ένας συνδυασμός της απλότητας της σύνταξης της γλώσσας Go, της ταχύτητας μεταγλώττισης, της ευκολίας παραλληλισμού των λειτουργιών, της φορητότητας και της δυνατότητας συντήρησης του κώδικα με την απόδοση του C/C++, την ασφάλεια του Rust και τη δημιουργία κώδικα μηχανής στο στάδιο της μεταγλώττισης Zig. Ήθελα επίσης να πάρω έναν συμπαγή και γρήγορο μεταγλωττιστή που θα μπορούσε να λειτουργήσει χωρίς εξωτερικές εξαρτήσεις, να απαλλαγεί από το καθολικό εύρος (καθολικές μεταβλητές) και να παρέχει τη δυνατότητα "καυτής" επαναφόρτωσης του κώδικα.

Σε σύγκριση με τη C++, η νέα γλώσσα είναι σημαντικά απλούστερη, παρέχει μεγαλύτερη ταχύτητα μεταγλώττισης (έως 400 φορές), εφαρμόζει ασφαλείς τεχνικές προγραμματισμού, είναι απαλλαγμένη από προβλήματα απροσδιόριστης συμπεριφοράς και παρέχει ενσωματωμένα εργαλεία για παραλληλισμό λειτουργιών. Σε σύγκριση με την Python, το V είναι πιο γρήγορο, απλούστερο, ασφαλέστερο και πιο διατηρήσιμο. Σε σύγκριση με το Go, το V δεν έχει καθολικές μεταβλητές, κανένα null, όλες οι τιμές μεταβλητών πρέπει πάντα να ορίζονται, όλα τα αντικείμενα είναι αμετάβλητα από προεπιλογή, υποστηρίζεται μόνο ένας τύπος ανάθεσης ("a := 0"), πολύ πιο συμπαγής ο χρόνος εκτέλεσης και το μέγεθος των εκτελέσιμων αρχείων που προκύπτουν, η παρουσία άμεσης φορητότητας από το C, η απουσία απορριμμάτων συλλογής, η ταχύτερη σειριοποίηση, η δυνατότητα παρεμβολής συμβολοσειρών ("println('$foo: $bar.baz')").

fn main() {
περιοχές := ['παιχνίδι', 'ιστός', 'εργαλεία', 'επιστήμη', 'συστήματα', 'GUI', 'κινητά'] a := 10
Εαν αληθεύει {
α := 20
}
για περιοχή σε περιοχές {
println('Γεια σας, προγραμματιστές $area!')
}
}

Χαρακτηριστικά έργου:

  • Συμπαγής και γρήγορος μεταγλωττιστής, ο οποίος μαζί με την τυπική βιβλιοθήκη καταλαμβάνει περίπου 400 KB. Η υψηλή ταχύτητα μεταγλώττισης επιτυγχάνεται μέσω της άμεσης δημιουργίας κώδικα μηχανής και της αρθρωτής δομής. Η ταχύτητα μεταγλώττισης είναι περίπου 1.2 εκατομμύρια γραμμές κώδικα ανά δευτερόλεπτο σε έναν πυρήνα CPU (σημειώνεται ότι κατά τη λειτουργία ο V μπορεί να χρησιμοποιήσει το C, τότε η ταχύτητα πέφτει στις 100 χιλιάδες γραμμές ανά δευτερόλεπτο). Η αυτοσυναρμολόγηση του μεταγλωττιστή, ο οποίος είναι επίσης γραμμένος στη γλώσσα V (υπάρχει επίσης μια έκδοση αναφοράς στο Go), διαρκεί περίπου 0.4 δευτερόλεπτα. Μέχρι το τέλος του έτους, αναμένεται να ολοκληρωθούν οι εργασίες για πρόσθετες βελτιστοποιήσεις, οι οποίες θα μειώσουν τον χρόνο κατασκευής του μεταγλωττιστή στα 0.15 δευτερόλεπτα. Κρίνοντας από τις δοκιμές που διεξήγαγε ο προγραμματιστής, η αυτοσυναρμολόγηση του Go απαιτεί 512 MB χώρο στο δίσκο και εκτελείται σε ενάμιση λεπτό, το Rust απαιτεί 30 GB και 45 λεπτά, το GCC - 8 GB και 50 λεπτά, το Clang - 90 GB και 25 λεπτά,
    Swift - 70 GB και 90 λεπτά.

  • Τα προγράμματα μεταγλωττίζονται σε εκτελέσιμα αρχεία χωρίς εξωτερικές εξαρτήσεις. Το μέγεθος εκτελέσιμου αρχείου ενός απλού διακομιστή http μετά τη συναρμολόγηση είναι μόνο 65 KB.
  • Η απόδοση των μεταγλωττισμένων εφαρμογών είναι σε επίπεδο συναρμολογήσεων προγραμμάτων C.
  • Δυνατότητα απρόσκοπτης αλληλεπίδρασης με τον κώδικα C, χωρίς επιπλέον έξοδα. Οι συναρτήσεις στη γλώσσα C μπορούν να καλούνται από κώδικα στη γλώσσα V και αντίστροφα, ο κώδικας στη γλώσσα V μπορεί να κληθεί σε οποιαδήποτε γλώσσα συμβατή με τη C.
  • Υποστήριξη για τη μετάφραση έργων C/C++ σε αναπαράσταση στη γλώσσα V. Χρησιμοποιείται αναλυτής από το Clang για μετάφραση. Δεν υποστηρίζονται ακόμη όλες οι δυνατότητες του προτύπου C, αλλά οι τρέχουσες δυνατότητες του μεταφραστή είναι ήδη επαρκείς για μετάφραση στη γλώσσα του V παιχνιδιού DOOM. Ο μεταφραστής C++ βρίσκεται ακόμα σε πρώιμο στάδιο ανάπτυξης.
  • Ενσωματωμένη υποστήριξη σειριοποίησης, χωρίς να συνδέεται με το χρόνο εκτέλεσης.
  • Ελαχιστοποίηση λειτουργιών εκχώρησης μνήμης.
  • Διασφάλιση ασφάλειας: χωρίς NULL, καθολικές μεταβλητές, απροσδιόριστες τιμές και επαναπροσδιορισμός μεταβλητών. Έλεγχος υπέρβασης ενσωματωμένου buffer. Υποστήριξη για γενικές λειτουργίες (Generic). Αντικείμενα και δομές που δεν μπορούν να αλλάξουν από προεπιλογή.
  • Δυνατότητα επαναφόρτωσης «καυτού» κώδικα (αντανακλώντας αλλαγές στον κώδικα εν κινήσει χωρίς επαναμεταγλώττιση).
  • Εργαλεία για τη διασφάλιση πολλαπλών νημάτων. Ακριβώς όπως στη γλώσσα Go, μια κατασκευή όπως το "run foo()" χρησιμοποιείται για να ξεκινήσει ένα νέο νήμα εκτέλεσης (παρόμοιο με το "go foo()"). Στο μέλλον, σχεδιάζεται υποστήριξη για γορουτίνες και προγραμματιστή νημάτων.
  • Υποστήριξη λειτουργικών συστημάτων Windows, macOS, Linux, *BSD. Σχεδιάζεται να προστεθεί υποστήριξη για Android και iOS έως το τέλος του έτους.
  • Διαχείριση μνήμης κατά το χρόνο μεταγλώττισης (όπως στο Rust), χωρίς τη χρήση απορριμματοσυλλέκτη.
  • Διαθεσιμότητα εργαλειοθήκης πολλαπλών πλατφορμών για έξοδο γραφικών, με χρήση GDI+/Κακάο και OpenGL για απόδοση (προβλέπεται υποστήριξη για DirectX, Vulkan και Metal API). Υπάρχουν εργαλεία για εργασία με τρισδιάστατα αντικείμενα, σκελετικά κινούμενα σχέδια και έλεγχο κάμερας.
  • Διαθεσιμότητα μιας βιβλιοθήκης για τη δημιουργία γραφικών διεπαφών με στοιχεία σχεδίασης εγγενή σε κάθε λειτουργικό σύστημα. Τα Windows χρησιμοποιούν WinAPI/GDI+, το macOS χρησιμοποιεί κακάο και το Linux χρησιμοποιεί το δικό του σύνολο γραφικών στοιχείων. Η βιβλιοθήκη χρησιμοποιείται ήδη στην ανάπτυξη Βόλτ — πελάτης για Slack, Skype, Gmail, Twitter και Facebook.

    Το σχέδιο είναι να δημιουργηθεί μια εφαρμογή σχεδιασμού διεπαφής τύπου Delphi, να παρέχεται ένα δηλωτικό API παρόμοιο με το SwiftUI και το React Native και να παρέχεται υποστήριξη για τη δημιουργία εφαρμογών για κινητές συσκευές για iOS και Android.

    V γλώσσα προγραμματισμού ανοιχτού κώδικα

  • Διαθεσιμότητα ενός ενσωματωμένου πλαισίου ιστού, το οποίο χρησιμοποιείται για τη δημιουργία ιστότοπου, φόρουμ και ιστολογίου για τους προγραμματιστές του έργου. Υποστηρίζεται η προμεταγλώττιση προτύπων HTML, χωρίς την επεξεργασία τους σε κάθε αίτημα.
  • Υποστήριξη cross compilation. Για να δημιουργήσετε το εκτελέσιμο αρχείο για Windows, απλώς εκτελέστε το "v -os windows" και για το Linux - "v -os linux" (αναμένεται αργότερα υποστήριξη πολλαπλής μεταγλώττισης για macOS). Η cross-compilation λειτουργεί επίσης για γραφικές εφαρμογές.
  • Ενσωματωμένος διαχειριστής εξαρτήσεων, διαχειριστής πακέτων και εργαλεία κατασκευής. Για να δημιουργήσετε το πρόγραμμα, απλώς εκτελέστε το «v.», χωρίς να χρησιμοποιήσετε τη μάρκα ή εξωτερικά βοηθητικά προγράμματα. Για να εγκαταστήσετε πρόσθετες βιβλιοθήκες, απλώς εκτελέστε, για παράδειγμα, "v get sqlite".
  • Διαθεσιμότητα πρόσθετων για ανάπτυξη σε γλώσσα V σε editors Κωδικός VS и ζωτικότητα.

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

Εν τω μεταξύ, το πρόγραμμα παρακολούθησης σφαλμάτων του Project V έχει αφαιρέσει περίπου 10 αναρτήσεις από επίδειξη Ο κώδικας χαμηλής ποιότητας, για παράδειγμα, υποδεικνύει τη χρήση C-inserts και τη χρήση στη βιβλιοθήκη συναρτήσεων για τη διαγραφή του καταλόγου της εντολής rm μέσω της κλήσης os.system("rm -rf $path"). Συγγραφέας του έργου είπεότι διέγραψε μόνο τα μηνύματα, που δημοσιεύθηκε γίγας (με αλλαγές που επιβεβαιώνουν την εγκυρότητα της κριτικής, έμεινε в ιστορία επεξεργασίας).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο