Erlang, OTP და Elixir
- Bekar Bartaia
- Jul 20, 2019
- 2 min read
ამ პოსტში მინდა დავწერო ერთ-ერთ ყველაზე უნიკალურ პროგრამირების ენაზე, რომლის მსგავსი სხვა არც ერთი ენა არ არსებობს როცა საქმე ეხება პარალელურ პროგრამირებას.
Erlang (Ericsson Language) შეიქმნა Ericsson-ის მიერ 1986 წელს, და Ericsson-მა გახადა Erlang-ის კოდი საჯარო 1998 წელს. Erlang-ის პირველადი დანიშნულება იყო რომ გამოყენებულიყო როგორც სისტემური ენა Ericsson-ის სატელეფონო კომუტატორების მიერ. კომუტატორების მთავარი დანიშნულებაა ბევრი სატელეფონო საუბრის პარალელურად გადაცემა, და ამანვე განაპირობა მის დიზაინში ჩადებული პარალელიზმის მძლავრი მხარდაჭერა.
Erlang გამოირჩევა თითქმის ყველა სხვა პროგრამირების ენისგან რამოდენიმე დამახასიათებელი ნიშნით:
Erlang დაფუძნებულია აქტორების მოდელზე (actor model). ის არის ფუნქციონალური პროგრამირების ენა. მას აქვს საკუთარი ვორტუალური მანქანა (BEAM VM). BEAM-ს აქვს ერთი პრინციპული განსხვავება სხვა ვირტუალური მანქანებისგან, კონკრეტულად კი Java VM-ისგან: BEAM იძლევა საშუალებას პარალელურად გაუშვათ ასობით ათასი (რამოდენიმე მილიონამდე) პარალელური მსუბუქი, ანუ მწვანე პროცესი (lightweight, or green process). თითოეულ ამ პროცესს გააჩნია იზოლირებული მეხსიერება, და ეს პროცესები უკავშირდებიან სხვა პროცესებს შეტყობინებების გაცვლით (message passing). თითოეულ ამ პროცესს შეუძლია გაუგზავნოს შეტყობინება ნებისმიერ სხვა პროცესს თუ იცის ამ პროცესის აიდი (PID, Process ID), და თითოეულ ამ პროცესს აქვს საფოსტო ყუთი (message box), რომლისგანაც შეუძლია მისთვის გაგზავნილი შეტყობინებების წაკითხვა. ამ პროცესებს არაფერი საერთო არ აქვთ ოპერაციული სისტემის პროცესებთან, ეს პროცესები არიან BEAM-ის საკუთარი პროცესები, რომლებიც პრეემპტიურად იმართებიან ამ ვირტუალური მანქანის გამრიგეს (scheduler) მიერ, და ამ პროცესების სიკვდილი არ იწვევს მთელი ოპერაციული სისტემის პროცესის სიკვდილს, რომელშიც BEAM-ია გაშვებული, რაც თავის მხრივ საშუალებას იძლევა რომ შეიქმნას ძალიან საიმედო სისტემები.
Erlang-ის პროგრამების მაგალითები
აქ მოვიყვან Erlang-ზე დაწერილ რამოდენიმე საკმაოდ მარტივი პროგრამის მაგალითს. ვინც იცის მაგალითად Haskell, OCaml, ან სხვა ფუნქციონალური პროგრამირების ენა, არ გაუჭირდება ამ მაგალითებში გარკვევა.
ეს მაგალითები არ მოიცავს დამატებითი პროცესების გაშვებას, და პროცესებს შორის კომუნიკაციას, რაც წარმოადგენს Erlang-ის რეალურ სიძლიერეს. შემდეგ პოსტებში შევეცდები განვიხილო ამ ენის ეგ მხარე უფრო დეტალურად.
ფაქტორიალი:
ფიბონაჩი:
Quicksort:
OTP (Open Telecom Platform)
Erlang-ის ნამდვილი ძალა არის OTP (Open Telecom Platform), Ericsson-ის მიერ შექმნილი ბიბლიოთეკა, რომელიც იძლევა უფრო მაღალი დონის აბსტრაქციებს სხვადასხვა ტიპის სერვისების შესაქმნელად, და სხვადასხვა უტილიტებს Erlang-ზე დაწერილი პროგრამებისთვის, მაგალითად ხარისხის ასამაღლებლად, მაგალითდ Dialyzer-ს, რომელიც არის სტატიკური ანალიზის უტილიტა Erlang-ის პროგრამებისთვის.
Elixir
Elixir არის შედარებით ახალი ენა, რომელიც შეიქმნა 2011 წელს როგორც Erlang-ის სინტაქსის ალტერნატივა, მაგრამ ისიც მუშაობს იგივე ვირტუალურ მანქანაზე რომელზეც Erlang, და ურთიერთთავსებადია Erlang-ის კოდთან, ანუ Erlang-ს და Elixir-ს შეუძლიათ ერთიმეორე ენაზე დაწერილი ფუნქციის გამოძახება რაიმე პრობლემის გარეშე. Erlang-ს და Elixir-ს შორის ისეთივე კავშირია, როგორც მაგალითად Java-ს და Scala-ს შორის. ის მომხმარებლებს სთავაზობს უფრო სტანდარტულ და თანამედროვე სინტაქსს, და ასევე სხვა სიახლეებს, რომლებიც Erlang-ში არ არის, მაგალითად მაკროსების ძლიერ მხარდაჭერას.
Elixir-ის პროგრამების მაგალითები
ფაქტორიალი:
ფიბონაჩი:
Quicksort:
სად გამოიყენება Erlang და Elixir?
რამოდენიმე ძალიან ცნობილი კომპანიის და პროდუქტის ბექენდი დაწერილია Erlang-ზე და Elixir-ზე, მაგალითად: WhatsApp, Huffington Post, ejabberd, RabbitMQ, Klarna, CoachDB, Bet365, Pinterest, Lonely Planet და კიდევ ბევრი სხვა.
რეფერენსები:
Comments