Не пройшло і... Ех, час летить. Але й Мавка не стоїть на місці.
Основним нововведенням Мавки 0.121.0 є так званий "цикл подій". Якщо коротко, то це штука, яка дозволяє втілити так звану "асинхронність" використовуючи лише один "потік". Якщо простіше, то ця річ дозволяє відкладати виконання дій.
До прикладу, ви хочете відкласти виконання якоїсь дії на декілька секунд, але не хочете блокувати виконання поточної дії. Хто знайомий з JavaScript, зробити це можна через setTimeout. Тепер можна і в Мавці:
взяти біб планувальник [відкласти]
дія привітатись()
друк("Привіт! :)")
кінець
відкласти(привітатись, 2000) ;; 2 сек
друк("Я перший ;)")
Як це працює:
відкласти
, Мавка зберегла дію привітатись
та попросила операційну систему повідомити, коли пройде 2000
мс.друк("Я перший ;)")
) Мавка запускає так званий "цикл подій",
який блокує поточний "потік" допоки операційна система не скаже, що пройшло 2000 мс.привітатись
, яка її й виконує.привітатись
Мавка знову запускає цей цикл, але, так як більше немає запланованих завдань,
то цикл зупиняться і відбувається вихід з програми.Завдяки "циклу подій" в Мавці тепер також можна запускати "асинхронні" "tcp-сервер" та "tcp-клієнт". А також повторювати виконання певної дії з певним інтервалом.
взяти біб інтернет
дія обробити_зупинку_обслуговувача(обслуговувач, помилка)
якщо помилка
друк("зупинено з помилкою", помилка)
інакше
друк("зупинено")
кінець
кінець
дія обробити_дані_звʼязку(звʼязок, дані)
вивести("отримано", юнікод(дані))
інтернет.надіслати(дані, звʼязок)
вивести("надіслано", юнікод(дані))
кінець
дія обробити_закінчення_звʼязку(звʼязок, помилка)
друк("клієнт закінчив повідомлення")
кінець
дія обробити_відключення_звʼязку(звʼязок, помилка)
якщо помилка
друк("відключено з помилкою", помилка)
інакше
друк("відключено")
кінець
кінець
дія обробити_підключення_звʼязку_обслуговувача(обслуговувач, звʼязок, помилка)
якщо помилка
друк("помилка підключення", помилка)
інакше
друк("підключено", звʼязок)
звʼязок.обробник_даних = обробити_дані_звʼязку
звʼязок.обробник_закінчення = обробити_закінчення_звʼязку
звʼязок.обробник_відключення = обробити_відключення_звʼязку
кінець
кінець
дія обробити_запуск_обслуговувача(обслуговувач, помилка)
якщо помилка
друк("помилка запуску", помилка)
інакше
обслуговувач.обробник_зупинки = обробити_зупинку_обслуговувача
обслуговувач.обробник_підключення_звʼязку = обробити_підключення_звʼязку_обслуговувача
друк("запущено")
кінець
кінець
інтернет.обслуговувати(
"0.0.0.0",
8080,
обробити_запуск_обслуговувача
)
взяти біб інтернет
дія обробити_дані_звʼязку(звʼязок, дані)
вивести("отримано", юнікод(дані))
кінець
дія обробити_закінчення_звʼязку(звʼязок, помилка)
друк("обслуговувач закінчив повідомлення")
кінець
дія обробити_відключення_звʼязку(звʼязок, помилка)
якщо помилка
друк("відключено з помилкою", помилка)
інакше
друк("відключено")
кінець
кінець
дія обробити_підключення_звʼязку(звʼязок, помилка)
якщо помилка
друк("помилка підключення", помилка)
інакше
друк("підключено", звʼязок)
звʼязок.обробник_даних = обробити_дані_звʼязку
звʼязок.обробник_закінчення = обробити_закінчення_звʼязку
звʼязок.обробник_відключення = обробити_відключення_звʼязку
інтернет.надіслати(ю"привіт\n", звʼязок)
вивести("надіслано", ю"привіт\n")
кінець
кінець
інтернет.звʼязатись(
"127.0.0.1",
8080,
обробити_підключення_звʼязку
)
взяти біб планувальник
к = 0
п = планувальник.періодично(дія()
к := к + 1
друк("кількість", к)
якщо к == 10
планувальник.скасувати_періодичне(п)
кінець
кінець, 1000)
"цикл подій" в Мавці використовує io_uring, який не підтримується на Linux нижче 5.1 версії
Також інші зміни:
Буфер
(аналог структури байти
, тільки дані всередині можна змінювати)ЧаПи:
Синтаксично мова дозріла. З того, що я зараз бачу, то є ще різні речі в Машині, над якими необхідно попрацювати. Також в бета Мавці має бути стабільний РМв1. Після цього ще провести загальний аналіз, "рефакторинг" тощо.
Але не обовʼязково чекати бету чи випуск, щоб пробувати щось втілювати Мавкою. Якщо вам чогось не вистачає, завжди можна додати це власноруч ;)
Не раніше бета Цілі.
Спробувати Мавку 0.121.0:
Написав Давид. Опубліковано 27.05.2025.