Παρουσιάζοντας το ABS, μια γλώσσα προγραμματισμού για scripting shell

Τις τελευταίες μέρες πήρα λίγο χρόνο για να δουλέψω σε ένα έργο που είχα στο μυαλό μου εδώ και αιώνες, μια εναλλακτική δέσμη ενεργειών για το Bash: επιτρέψτε μου να σας παρουσιάσω τη γλώσσα προγραμματισμού ABS.

Γιατί

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

Πιθανότατα να συμφωνήσουμε ότι ο προγραμματισμός κελύφους είναι επίσης είδος καρύδας όσον αφορά τη σύνταξη:

if [ -z $STRING ]; then ...fi

Λοιπόν, τι στο διάολο; fi; -ζ; αγκύλες;

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

if (this == that) { parts = this.split("/").filter(...).map(...)}

θα φέρει δάκρυα στα μάτια σας εάν χρησιμοποιείτε το κέλυφος.

Τώρα, μπορείτε να κάνετε παρόμοια πράγματα με οποιεσδήποτε mainstream γλώσσες προγραμματισμού (το παραπάνω παράδειγμα είναι έγκυρο JavasScript): αυτό που δεν είναι εξαιρετικό σε αυτές τις γλώσσες είναι η ενσωμάτωσή τους με το υποκείμενο σύστημα - ένα κέλυφος είναι απλά πολύ πιο σύμπτωμα / ισχυρό από αυτή την προοπτική.

Φανταστείτε ότι θα μπορούσατε να εκτελέσετε κώδικα όπως:

host = $(hostname)
if (host == "johns_computer") { ...}

Λοιπόν, δεν χρειάζεται πλέον να "φαντάζεστε": Το ABS είναι μια γλώσσα που συνδυάζει γρήγορες και απλές εντολές συστήματος με μια πιο κομψή σύνταξη.

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

Δεν με πιστεύεις; Συνέχισε να διαβάζεις!

Παραδείγματα

Πιστεύω ακράδαντα στο « δείξε μου τον κωδικό! "Μάντρα, οπότε ας φτάσουμε γρήγορα σε αυτό. Η εκτέλεση εντολών κελύφους είναι εξαιρετικά εύκολη στο ABS:

# Get the content of your hostfile$(cat /etc/hosts)

και οι σωλήνες λειτουργούν επίσης:

# Check if a domain is in your hostfile$(cat /etc/hosts | grep domain.com | wc -l)

Σε αυτό το σημείο μπορούμε απλά να καταγράψουμε την έξοδο της εντολής και του σεναρίου μας πάνω από αυτό:

# Check if a domain is in your hostfilematches = $(cat /etc/hosts | grep domain.com | wc -l)
# If so, print an awesome stringif matches.int() > 0 { echo("We got ya!")}

Δεν θα συμβεί, αλλά ας πούμε ότι συμβαίνει ένα σφάλμα :

# Check if a domain is in your hostfilematches = $(cat /etc/hosts | grep domain.com | wc -l)
if !matches.ok { echo("How do you even...")}
# If so, print an awesome stringif matches.int() > 0 { echo("We got ya!")}

Θα μπορούσαμε να το κάνουμε λίγο πιο γενικό:

$ cat script.abs# Usage $ abs script.abs domain.com# Check if a domain is in your hostfiledomain = arg(2)matches = $(cat /etc/hosts | grep $domain | wc -l)
if !matches.ok { echo("How do you even...")}
# If so, print an awesome stringif matches.int() > 0 { echo("We got %s!", domain)}

Τώρα, οι χορδές είναι αρκετά βαρετές, οπότε μπορούμε να δοκιμάσουμε κάτι πιο διασκεδαστικό:

# Say we're getting some JSON from a commandx = $(echo '{"some": {"dope": "json"}}')x.json().some.dope # "json"
# Arrays, you say?tz = $(cat /etc/timezone) # "Asia/Dubai"parts = tz.split("/") # ["Asia", "Dubai"]
# You better destructure the hell out of that![continent, city] = tz.split("/")

…και ούτω καθεξής. Υπάρχουν πολλά "κανονικά" πράγματα που μπορείτε να κάνετε με το ABS, οπότε δεν θα επικεντρωθώ πολύ σε αυτά - επιτρέψτε μου να σας δείξω τα πιο περίεργα μέρη:

# Avoiding the bug that happened because# we forgot to compare strings case-insensitively"HELLO" ~ "hello" # true
# Just range1..3 # [1, 2, 3]
# Combined comparison operator (thanks Ruby!)5  5 # 05  6 # -16  5 # 1
# Classic short-circuiting1 && 2 # 21 || 2 # 1

Μπορείτε να περιηγηθείτε σε ολόκληρη την τεκμηρίωση εντός 15 λεπτών: Ο στόχος του ABS δεν είναι να είναι μια γλώσσα γενικής χρήσης, με χαρακτηριστικά, επομένως η επιφάνεια δεν είναι τόσο μεγάλη. Επιπλέον, εάν έχετε εργαστεί με γλώσσες όπως το JavaScript, το Python ή το Ruby, δεν θα έχετε προβλήματα με το ABS.

Τι θα συμβεί τώρα;

Μπορείτε να μεταβείτε στον ιστότοπο του ABS και να μάθετε περισσότερα για τη γλώσσα. Οι γενναίοι θα κάνουν ένα ταξίδι στο github repo της ABS και θα κατεβάσουν μια έκδοση για να την εγκαταστήσουν τοπικά.

Οι πιο γενναίοι θα:

bash <(curl //www.abs-lang.org/installer.sh)

(ίσως χρειαστεί να κάνετε sudo ακριβώς πριν από αυτό)

Ποιο θα είσαι;

Αρχικά δημοσιεύθηκε στο odino.org (25 Δεκεμβρίου 2018).

Μπορείτε να με ακολουθήσετε στο Twitter - τα σχόλια είναι ευπρόσδεκτα! ;