Π Π΅Π»ΠΈΠ· Tokio 1.13.0, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для создания асинхронных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Rust

Π’Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° вСрсия 1.13.0 ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Tokio, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для создания Π½Π° языкС Rust Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° основС событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ (Event-driven), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сСтСвых запросов Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ написан Π½Π° языкС Rust ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии отмСчаСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ряд исправлСний Π² сСтСвой подсистСмС ΠΈ систСмС синхронизации.

Tokio Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сводится ΠΊ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ рСсурсов Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ (Π² контСкстС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ исполнСния), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ условиям, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ состояния Π³ΠΎΠ½ΠΊΠΈ, часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° языках Π±Π΅Π· бСзопасного управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ рСсурсами;
  • БэкСнд для обСспСчСния совмСстимости с прСдоставляСмыми Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ соСдинСний, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ epoll, kqueue ΠΈ IOCP;
  • Π’ΠΈΠΏΡ‹ ΠΈ привязки c Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ асинхронных TCP- ΠΈ UDP-сокСтов.
  • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для выполнСния Π·Π°Π΄Π°Ρ‡ Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ синхронизации, ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹.
  • API для выполнСния асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ TCP/UDP-сокСты, Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, срСдства управлСния сигналами ΠΈ процСссами.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ особСнности своСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΊΠ°ΠΊ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡΡ€Π°Π²Π½ΠΈΠΌΡƒΡŽ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° «Π³ΠΎΠ»ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅», ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ систСмой Ρ‚ΠΈΠΏΠΎΠ² ΠΈ модСлью ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° языка Rust.

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ насчитываСт Π±ΠΎΠ»Π΅Π΅ 500 участников, Π² числС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставитСли AWS, Azure, Comcast, Dropbox ΠΈ Facebook. Π’ качСствС зависимости Tokio ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹, ΠΊΠ°ΠΊ:

  • hyper: быстрая ΠΈ бСзопасная рСализация HTTP/1 ΠΈ HTTP/2 для Rust;
  • warp: лСгковСсный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Π²Π΅Π±-сСрвСра, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹;
  • tracing: Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для трассировки Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ диагностики с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ асинхронности;
  • rdbc: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… MySQL, Postgres ΠΈ SQLite ΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ Π½Π° языкС программирования Rust;
  • bytes: Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ эффСктивныС Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΡƒΡ„Π΅Ρ€Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru