Η MultiLisp είναι συναρτησιακή γλώσσα προγραμματισμού και διάλεκτος της διαλέκτου Scheme της Lisp, με κάποιες επιπλέον εντολές και εκφράσεις για παράλληλη εκτέλεση και κοινή (μοιραζόμενη) μνήμη. Η MultiLisp υλοποιείται σε Interlisp. Αυτές οι επεκτάσεις περιλαμβάνουν παρενέργειες, με συνέπεια η MultiLisp να είναι μη-ντετερμινιστική. Εκτός των επεκτάσεων για παράλληλο προγραμματισμό, η MultiLisp έχει επίσης κάποιους ασυνήθιστους αλγόριθμους για συλλογή απορριμμάτων και χρονοπρογραμματισμό εργασιών. Η MultiLisp, όπως και η Scheme, είναι προσανατολισμένη σε συμβολικούς υπολογισμούς. Σε αντίθεση με κάποιες άλλες γλώσσες παράλληλου προγραμματισμού, η MultiLisp ενσωματώνει εντολές που προκαλούν παρενέργειες και για τη ρητή δήλωση του παραλληλισμού. Σχεδιάστηκε από τον Robert H. Halstead στις αρχές της δεκαετίας του 1980 για χρήση στον υπολογιστή Concert που είχε 32 επεξεργαστές και αναπτυσσόταν στο Τεχνολογικό Ινστιτούτο της Μασαχουσέτης (MIT). Επέδρασε στην ανάπτυξη της διαλέκτου Gambit της Scheme [1] και της Interlisp-VAX.

PCALL και FUTURE Επεξεργασία

Η MultiLisp επιτυγχάνει τον παραλληλισμό με τη μακροεντολή PCALL, με τον κώδικα:

(PCALL Fun A B C ...)

να είναι ισοδύναμος με τον:

(Fun A B C ...)

με τη διαφορά ότι τα ορίσματα A, B, C, κλπ. μπορούν να αποτιμηθούν παράλληλα, κάτι που έρχεται σε αντίθεση με τη συνηθισμένη σειρά εκτέλεσης, που είναι σειριακή από τα αριστερά προς τα δεξιά. Χρησιμοποιεί επίσης μια έκφραση του παράλληλου προγραμματισμού, το μέλλον (future), το οποίο μοιάζει με την εντολή fork σε συνδυασμό με οκνηρή αποτίμηση. Με αυτόν τον τρόπο, μπορεί να γραφεί μια έκφραση όπως η

(cons (FUTURE A) (FUTURE B))

η οποία θα επικαλύψει την αποτίμηση όχι μόνο των εκφράσεων A και B μεταξύ τους, αλλά και αυτών με το αποτέλεσμα της κλήσης cons, μέχρι να εκτελεστεί μια λειτουργία που να απαιτεί πραγματική πληροφορία για την τιμή του A ή του B.

Δείτε επίσης Επεξεργασία

Πηγές Επεξεργασία

  • R. H. Halstead, "MultiLisp: A Language for Concurrent Symbolic Computation", TOPLAS, October 1985
  • Koomen, J.A.G.M., "The Interlisp Virtual Machine: A Study of its Design and its Implementation as Multilisp", Master's thesis, University of British Columbia, 1980
  • Raymond L. Bates, David Dyer, Johannes A. G. M. Koomen "Implementation of Interlisp on the VAX" pp81–87 in ACM Proceedings of the 1982 ACM Conference on LISP and Functional Programming, Pittsburgh, Pennsylvania, United States
  • Halstead, R.H.jr. The MULTILISP Language: LISP for a Multiprocessor. Conf. on 5th Generation Computers, Tokyo, 1984
  • Halstead, Robert H. Jr., "MULTILISP: a language for concurrent symbolic computation" in TOPLAS 7(4) October 1985
  • W.S. Martins "Parallel Implementations of Functional Languages" In Proceedings of the 4th Int. Workshop on the Parallel Implementation of Functional Languages, 92
  • Skillicorn, David B. and Talia, Domenico "Models and languages for parallel computation" pp123–169 in ACM Computing Surveys 30(2) June 1998