Artyom / πŸ“ž Erlang: Π―Π·Ρ‹ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡ‘Π» ΠΌΠ½ΠΎΠ³

Created Wed, 28 Aug 2024 00:00:00 +0000 Modified Wed, 21 May 2025 11:23:38 +0000

ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°

πŸ“ž Erlang: Π―Π·Ρ‹ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡ‘Π» ΠΌΠ½ΠΎΠ³ΠΎΠ΅, Π½ΠΎ остаётся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ языка

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Erlang начинаСтся Π² 1980-Ρ… Π³ΠΎΠ΄Π°Ρ… Π² стСнах швСдской ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ericsson. Π―Π·Ρ‹ΠΊ Π±Ρ‹Π» создан для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ спСцифичСских Π·Π°Π΄Π°Ρ‡ Π² области Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Π³Π΄Π΅ Π±Ρ‹Π»ΠΈ высокиС трСбования ΠΊ отказоустойчивости ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. Erlang стал настоящим ΠΏΡ€ΠΎΡ€Ρ‹Π²ΠΎΠΌ, прСдлагая Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ язык программирования, Π½ΠΎ ΠΈ Ρ†Π΅Π»ΡƒΡŽ экосистСму Π² Π²ΠΈΠ΄Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° OTP (Open Telecom Platform), Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ повСдСния). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Erlang ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ исполняСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… распрСдСлённой систСмы. Одной ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… особСнностСй являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° горячСй Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ систСму Π±Π΅Π· остановки Ρ€Π°Π±ΠΎΡ‚Ρ‹. На протяТСнии ΠΌΠ½ΠΎΠ³ΠΈΡ… Π»Π΅Ρ‚ Erlang использовался для создания ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΈ Π΄Π°ΠΆΠ΅ сСгодня остаётся вострСбованным Π² этой сфСрС.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности Erlang

  • ВысокоуровнСвыС конструкции: Π’ Erlang Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса, Π° списковыС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ являСтся Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹.
  • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния: Erlang ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ модСль Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сотни тысяч ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ лСгковСсных процСссов. Π­Ρ‚ΠΈ процСссы Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ нСзависимы, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ состояния ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ посрСдством ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с ΠΎΠ±Ρ‰ΠΈΠΌ состояниСм ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ систСму Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΉ.
  • РаспрСдСлённыС вычислСния: Erlang-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠ·Π»Π°Ρ… β€” процСссорах, ядрах ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСссора ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² кластСрС машин. Π£Π·Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ построСниС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… распрСдСлённых систСм. БистСма Erlang ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ спроСктирована для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² распрСдСлённой срСдС, Ρ‡Ρ‚ΠΎ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅Ρ‘ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… особСнностСй.
  • МягкоС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя: АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ сборка мусора Π² Erlang происходят Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ систСмы с быстрым ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠΌ, измСряСмым Π² миллисСкундах. Π­Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ Π²Π°ΠΆΠ½Π° минимальная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ финансовых систСмах.
  • Горячая Π·Π°ΠΌΠ΅Π½Π° ΠΊΠΎΠ΄Π°: Π’ систСмах, Π³Π΄Π΅ нСдопустимы простои, Erlang ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ горячСй Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ систСму Π½Π° Π»Π΅Ρ‚Ρƒ, Π±Π΅Π· остановки Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π–ΠΈΠ·Π½ΡŒ языка сСгодня

Π₯отя Π·Π½Π°Π½ΠΈΠ΅ Erlang сСгодня частично замСщаСтся ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ Elixir, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой надстройку Π½Π°Π΄ Erlang, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рядом Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ понимания слоТных ошибок ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ основы Erlang. Elixir Π΄Π°Π» Erlang Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ² Π΅Π³ΠΎ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ сдСлав Π΅Π³ΠΎ доступным Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΡƒ ΠΊΡ€ΡƒΠ³Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². БСгодня Elixir ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, занимая 2,1% ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ StackOverflow Π½Π° 2024 Π³ΠΎΠ΄, Π° Π΅Π³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Phoenix стал Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Π² Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π΅ самых интСрСсных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ примСнСния

Помимо Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Erlang сСгодня ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… отраслях, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ„ΠΈΠ½Ρ‚Π΅Ρ…, ΠΎΠ½Π»Π°ΠΉΠ½-ΠΈΠ³Ρ€Ρ‹ ΠΈ IoT. НапримСр, систСмы ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ систСмы управлСния “ΡƒΠΌΠ½Ρ‹ΠΌ” Π΄ΠΎΠΌΠΎΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ возмоТности Erlang для обСспСчСния надёТности ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ.

Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅

Для мСня знакомство с Erlang ΠΈ Elixir стало настоящим ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ. Π Π°Π½Π΅Π΅ я Ρ€Π°Π±ΠΎΡ‚Π°Π» с Ρ‚Π°ΠΊΠΈΠΌΠΈ языками, ΠΊΠ°ΠΊ Java, C++, Go ΠΈ Ruby, ΠΈ Π±Ρ‹Π» ΡƒΠ΄ΠΈΠ²Π»Ρ‘Π½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Elixir ΠΈ Erlang, обладая ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ инструмСнтами ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ характСристиками, Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π² Ρ‚Π΅Π½ΠΈ. БСгодня ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Elixir ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ растёт, привлСкая Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° Ruby, ΠΈΡ‰ΡƒΡ‰ΠΈΡ… Π½ΠΎΠ²Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π½ΠΎ ΠΈ энтузиастов, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅. Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Elixir β€” это язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ стоит ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ. А Π·Π°ΠΎΠ΄Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° основы Erlang β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π² Π½Ρ‘ΠΌ найдётся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ понравится.