Η Mash είναι μια γλώσσα προγραμματισμού που μεταγλωττίζεται.

Η Mash είναι μια γλώσσα προγραμματισμού που μεταγλωττίζεται.

Χαιρετισμούς σε όλους το νέο έτος 2020.

Από τη δημοσίευση του πρώτου Θέση για το Mash έχει περάσει σχεδόν ακριβώς 1 χρόνος.

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

Όλα αυτά με χαρά μοιράζομαι με την κοινότητα.

Αποποίηση ευθυνών

Αυτό το έργο αναπτύσσεται αποκλειστικά με ενθουσιασμό και δεν προσποιείται την παγκόσμια κυριαρχία στον τομέα των δυναμικών γλωσσών προγραμματισμού!

Δεν πρέπει να θεωρείτε αυτή την εξέλιξη ως πρότυπο για το οποίο πρέπει να επιδιώξετε, το έργο δεν είναι ιδανικό, αλλά παρόλα αυτά εξελίσσεται.

GitHub
Τοποθεσία
forum

Νέος μεταγλωττιστής

Στον κλάδο /mashc του αποθετηρίου έργου, μπορείτε να δείτε τη νέα έκδοση του μεταγλωττιστή, η οποία είναι γραμμένη σε Mash (η πρώτη έκδοση της γλώσσας).

Ο μεταγλωττιστής έχει μια γεννήτρια κώδικα στη λίστα asm (για assembler κάτω από τη στοίβα VM).
Αυτή τη στιγμή αναπτύσσω μια έκδοση της γεννήτριας για Java (JDK 1.8).

Η νέα έκδοση του μεταγλωττιστή υποστηρίζει πλήρως τη λειτουργικότητα της πρώτης έκδοσης της γλώσσας και τη συμπληρώνει.

Νέο OOP

Στη νέα έκδοση της γλώσσας, η εργασία με τάξεις έχει κάπως επανασχεδιαστεί.
Οι μέθοδοι κλάσης μπορούν να δηλωθούν τόσο στο σώμα της κλάσης όσο και εκτός αυτής.
Η κλάση έχει τώρα έναν ρητό κατασκευαστή: init.

Παράδειγμα κώδικα:

...
class MyClass:
  private:
    var a, b

  public:
    init(a, b):
      $a ?= a
      $b ?= b
    end

    func Foo():
      return $a + $b   
    end
end

func MyClass::Bar(c):
  return $a + $b + c
end
...

Αν προκύψει κληρονομικότητα, τότε έχουμε τη δυνατότητα να πραγματοποιούμε εύκολα κληρονομικές κλήσεις (super).

Παράδειγμα κώδικα:

...
class MySecondClass(MyClass):
  public:
    var c

    init(a, b, c):
      super(a, b)
      $c ?= c
    end

    func Bar():
      super($c)  
    end
end
...

x ?= new MySecondClass(10, 20, 30)
println( x -> Bar() )     // 60

Δυναμική παράκαμψη μεθόδων για περιπτώσεις κλάσεων:

...
func Polymorph::NewFoo(c):
  return $a + $b + c  
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30)    // 60

Πακέτα / Χώροι ονομάτων

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

Παράδειγμα:

...
class MyPackage:
  func MyFunc(a, b):
    return a + b  
  end
end
...
println( MyPackage -> MyFunc(10, 20) )    // 30

Παρεμπιπτόντως, ο σούπερ χειριστής θα λειτουργήσει σωστά με μια τέτοια κλήση.

Εξαιρέσεις

Στη νέα έκδοση της γλώσσας, αντιμετωπίζονται σαν τάξεις:

...
try:
  raise new Exception(
    "My raised exception!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Unknown exception class!")
  end
end
...

Νέος αριθμός

Τώρα στα στοιχεία της απαρίθμησης μπορούν να εκχωρηθούν σταθερές τιμές:

enum MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

Ενσωματωμένο PL

Δυνητικά - η Mash μπορεί να βρει τη θέση της ως ενσωματωμένη γλώσσα προγραμματισμού, όπως η Lua.

Για να αρχίσετε να χρησιμοποιείτε το Mash για αυτούς τους σκοπούς, δεν χρειάζεται καν να δημιουργήσετε το έργο μόνοι σας.

Το Mash διαθέτει Runtime Environment - μια VM στοίβας που έχει δημιουργηθεί ως δυναμική βιβλιοθήκη με πλήρες API.

Απλώς πρέπει να το προσθέσετε στις εξαρτήσεις του έργου και να πραγματοποιήσετε μερικές κλήσεις.

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

Mash + JVM

Ξεκίνησε να αναπτύσσει μια έκδοση του μεταφραστή για το JVM.
Ίσως, μετά το Ν-ο χρονικό διάστημα, μια ανάρτηση για αυτό το θέμα θα εμφανιστεί στο Habré.

Αποτελέσματα της

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

Πηγή: www.habr.com

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