Вступ
ЧасописМавки

Мавка 0.121.0

Не пройшло і... Ех, час летить. Але й Мавка не стоїть на місці.

Основним нововведенням Мавки 0.121.0 є так званий "цикл подій". Якщо коротко, то це штука, яка дозволяє втілити так звану "асинхронність" використовуючи лише один "потік". Якщо простіше, то ця річ дозволяє відкладати виконання дій.

До прикладу, ви хочете відкласти виконання якоїсь дії на декілька секунд, але не хочете блокувати виконання поточної дії. Хто знайомий з JavaScript, зробити це можна через setTimeout. Тепер можна і в Мавці:

взяти біб планувальник [відкласти] дія привітатись() друк("Привіт! :)") кінець відкласти(привітатись, 2000) ;; 2 сек друк("Я перший ;)")

Як це працює:

  1. Виконавши відкласти, Мавка зберегла дію привітатись та попросила операційну систему повідомити, коли пройде 2000 мс.
  2. Після виконання останньої інструкції (друк("Я перший ;)")) Мавка запускає так званий "цикл подій", який блокує поточний "потік" допоки операційна система не скаже, що пройшло 2000 мс.
  3. Як тільки операційна система сповістила, Мавка передає в Машину дію привітатись, яка її й виконує.
  4. Після виконання привітатись Мавка знову запускає цей цикл, але, так як більше немає запланованих завдань, то цикл зупиняться і відбувається вихід з програми.

Завдяки "циклу подій" в Мавці тепер також можна запускати "асинхронні" "tcp-сервер" та "tcp-клієнт". А також повторювати виконання певної дії з певним інтервалом.

tcp-сервер
взяти біб інтернет дія обробити_зупинку_обслуговувача(обслуговувач, помилка) якщо помилка друк("зупинено з помилкою", помилка) інакше друк("зупинено") кінець кінець дія обробити_дані_звʼязку(звʼязок, дані) вивести("отримано", юнікод(дані)) інтернет.надіслати(дані, звʼязок) вивести("надіслано", юнікод(дані)) кінець дія обробити_закінчення_звʼязку(звʼязок, помилка) друк("клієнт закінчив повідомлення") кінець дія обробити_відключення_звʼязку(звʼязок, помилка) якщо помилка друк("відключено з помилкою", помилка) інакше друк("відключено") кінець кінець дія обробити_підключення_звʼязку_обслуговувача(обслуговувач, звʼязок, помилка) якщо помилка друк("помилка підключення", помилка) інакше друк("підключено", звʼязок) звʼязок.обробник_даних = обробити_дані_звʼязку звʼязок.обробник_закінчення = обробити_закінчення_звʼязку звʼязок.обробник_відключення = обробити_відключення_звʼязку кінець кінець дія обробити_запуск_обслуговувача(обслуговувач, помилка) якщо помилка друк("помилка запуску", помилка) інакше обслуговувач.обробник_зупинки = обробити_зупинку_обслуговувача обслуговувач.обробник_підключення_звʼязку = обробити_підключення_звʼязку_обслуговувача друк("запущено") кінець кінець інтернет.обслуговувати( "0.0.0.0", 8080, обробити_запуск_обслуговувача )
tcp-клієнт
взяти біб інтернет дія обробити_дані_звʼязку(звʼязок, дані) вивести("отримано", юнікод(дані)) кінець дія обробити_закінчення_звʼязку(звʼязок, помилка) друк("обслуговувач закінчив повідомлення") кінець дія обробити_відключення_звʼязку(звʼязок, помилка) якщо помилка друк("відключено з помилкою", помилка) інакше друк("відключено") кінець кінець дія обробити_підключення_звʼязку(звʼязок, помилка) якщо помилка друк("помилка підключення", помилка) інакше друк("підключено", звʼязок) звʼязок.обробник_даних = обробити_дані_звʼязку звʼязок.обробник_закінчення = обробити_закінчення_звʼязку звʼязок.обробник_відключення = обробити_відключення_звʼязку інтернет.надіслати"привіт\n", звʼязок) вивести("надіслано", ю"привіт\n") кінець кінець інтернет.звʼязатись( "127.0.0.1", 8080, обробити_підключення_звʼязку )
періодичне виконання
взяти біб планувальник к = 0 п = планувальник.періодично(дія() к := к + 1 друк("кількість", к) якщо к == 10 планувальник.скасувати_періодичне(п) кінець кінець, 1000)

"цикл подій" в Мавці використовує io_uring, який не підтримується на Linux нижче 5.1 версії

Також інші зміни:

ЧаПи:

Коли буде бета Мавки?

Синтаксично мова дозріла. З того, що я зараз бачу, то є ще різні речі в Машині, над якими необхідно попрацювати. Також в бета Мавці має бути стабільний РМв1. Після цього ще провести загальний аналіз, "рефакторинг" тощо.

Але не обовʼязково чекати бету чи випуск, щоб пробувати щось втілювати Мавкою. Якщо вам чогось не вистачає, завжди можна додати це власноруч ;)

Коли буде випуск Мавки 1.0.0?

Не раніше бета Цілі.


Спробувати Мавку 0.121.0:


Написав Давид. Опубліковано 27.05.2025.