Курс › Лекція 0
▶ Слайди⌨️ команди 19 · 19 нових
Конспект · Лекція 0

ВСТУП ДО ДИСЦИПЛІНИ: ПРОГРАМА, ОРГАНІЗАЦІЯ РОБОТИ, ОЦІНЮВАННЯ

Про що курс, як побудований семестр і що від тебе очікується

Ключова ідея. Системне програмування — це три межі між програмою й машиною (контейнер, пам'ять, набір інструкцій); семестр побудований так, щоб кожну межу перетнути на лекції, у лабораторній і в самостійній роботі.
Демо. Відкрити сайт курсу: показати структуру (лекції → ЛР → СРС), сторінку робочої програми, Лабораторну 0 і як виглядає робоче середовище (термінал у контейнері, docker version).
📚 ТЕОРЕТИЧНІ ВІДОМОСТІ

Предмет і мета дисципліни

Системне програмування вивчає програмне забезпечення, яке працює з ресурсами обчислювальної машини безпосередньо: процесами й потоками, пам'яттю, файлами, мережевими сокетами, набором інструкцій процесора. На відміну від прикладного програмування, де інтерпретатор, збирач сміття або браузер приховують ці деталі, системний програміст має розуміти, що відбувається на кожній межі між його кодом і машиною — і вміти це перевірити.

Слово «перевірити» тут головне. Курс не просить вірити на слово ні лекції, ні документації: майже кожне твердження в ньому супроводжується командою, яка це твердження або підтверджує, або зруйнує. Якщо лекція каже, що контейнер — це звичайний процес, у лабораторній ти побачиш його номер у списку процесів хоста. Якщо каже, що компілятор не дасть зіпсувати пам'ять, ти напишеш код, який він відмовиться збирати, і прочитаєш причину відмови.

Курс побудований навколо трьох таких меж:

  1. Межа середовища виконання (модуль 1). Контейнер — це процес, якому ядро Linux підмінило видимість системи через простори імен (namespaces) і обмежило ресурси через групи керування (cgroups). Інструмент — Docker; предмет — механізми ядра.
  2. Межа безпеки пам'яті (модуль 2). Мова Rust доводить на етапі компіляції, що програма не має помилок керування пам'яттю: моделі володіння (ownership) і запозичення (borrowing) замінюють збирач сміття статичною перевіркою.
  3. Межа набору інструкцій (модуль 3). Від машинного коду x86-64 і асемблера до WebAssembly — переносного низькорівневого формату коду, що виконується в пісочниці браузера й поза ним.

Три межі — це три модулі, три модульні контролі і три різні відповіді на одне питання: що насправді відбувається, коли моя програма запускається.

Якщо ти ніколи не працював у терміналі

Ця дисципліна не вимагає попереднього досвіду з Linux, Docker чи Rust. Вона вимагає готовності набирати команди й читати те, що машина відповідає. Якщо термінал для тебе новий — цей розділ і є твій нульовий кілометр; далі повертайся до нього, коли щось видається незрозумілим.

Термінал — це вікно, у якому програма-оболонка (bash) чекає від тебе рядок, запускає названу в ньому програму й друкує те, що та вивела. Усе. Ніякої магії: те саме, що клік по іконці, тільки іменем замість картинки — і тому це можна записати, повторити й перевірити.

Рядок команди складається з трьох частин, і їх варто розрізняти з першого дня:

docker run --rm -it ubuntu:24.04 bash
│          │        │            └── аргумент: що запустити всередині
│          │        └── аргумент: з якого образу
│          └── прапорці: як саме запускати
└── програма й підкоманда: що робити
  • Програма — перше слово. Це те, що запускається.
  • Прапорці (flags) починаються з - або -- і змінюють поведінку. Коротка форма -i і довга --interactive — часто те саме. Прапорці можна склеювати: -it = -i -t.
  • Аргументи — усе інше: над чим працювати.

Три речі, які треба знати про те, «де ти зараз»:

  • pwd друкує шлях до поточного каталогу — того, у якому команда шукатиме файли, якщо не сказано інакше;
  • ls показує, що в цьому каталозі лежить (ls -la — з правами й розмірами, разом із прихованими файлами, чиї імена починаються з точки);
  • cd переходить в інший каталог, cd .. — на рівень вище.

Половина помилок першого тижня — це не помилки, а робота в іншому каталозі. Коли команда каже «немає такого файлу», перше, що варто набрати, — pwd і ls.

Довідка є в самій машині, і в цьому курсі вона несуча. Не «якщо не знайдеш у пошуку», а перше джерело:

cat README.md          # інструкція до роботи — прямо в терміналі
man ls                 # повний посібник; вихід — клавіша q
ls --help              # коротко, найчастіше вистачає саме цього
docker run --help      # довідка з підкоманди

man і less відкриваються на весь екран і виходять клавішею q — це найчастіше «залипання» новачка в терміналі.

Як читати помилку. Машина майже ніколи не пише «щось не так». Вона пише, де саме й що саме, і читати це треба знизу вгору або зверху вниз залежно від інструмента, але завжди — цілком. Компілятор Rust, наприклад, у більшості випадків одразу пропонує виправлення. Три звички, які економлять години:

  1. Читай перший рядок — він каже, що сталося, і саме там код помилки. Далі часто йдуть наслідки першої помилки, а не нові причини. Але дочитуй до кінця: у Rust і багатьох сучасних інструментів останні рядки (help:, note:) кажуть, як це виправити. Перший рядок — діагноз, останній — рецепт.
  2. Скопіюй код помилки (E0382, exit code 125, permission denied) — це стабільний ключ, за яким її знаходять і в довіднику курсу, і в документації.
  3. Порівняй свій вивід з очікуваним виводом у кроці лабораторної. Кожен крок рівня 1 у цьому курсі має записаний очікуваний вивід саме для цього.

На сайті курсу є розділ «Коли щось пішло не так» — довідник, зібраний з усіх лабораторних: помилка, чому вона виникає, що зробити. Там працює пошук: вставляєш код помилки — отримуєш свій випадок.

Про копіювання команд. Команди в матеріалах можна і треба копіювати — це не списування, а нормальна робота. Але два рядки копіювати не варто: ті, що починаються з sudo, і ті, що містять rm -rf. Перші діють від адміністратора, другі видаляють без запитань і без відміни. Обидва в курсі трапляються — і в обох випадках у тексті сказано, що саме вони роблять.

Організація семестру

Обсяг — 3 кредити ЄКТС (90 годин): 20 годин лекцій, 20 годин лабораторних робіт, 50 годин самостійної роботи. Форма контролю — залік, накопичувальний: підсумок формують рівні, досягнуті в десяти лабораторних роботах, і результати трьох модульних контролів.

Заняття — щоп'ятниці, одна пара на тиждень. 4 вересня — вступне заняття (ця лекція): дисципліна, порядок роботи, середовище. З 11 вересня лекції й лабораторні чергуються тижнями: Лекція 1 — 11 вересня, Лабораторна 1 — 18 вересня, Лекція 2 — 25 вересня, Лабораторна 2 — 2 жовтня і так далі. Матеріали лабораторної відкриваються у п'ятницю її лекції, сама пара — наступної п'ятниці, а здати роботу можна ще два тижні після пари.

Що змінилося після 4 вересня. На цьому занятті було сказано, що курс закінчується в грудні: десята лабораторна й залік — 4 грудня. Це вже не так, і чесніше сказати прямо, ніж тихо замінити числа. Тарифікація дає 20 годин лекцій і 20 годин лабораторних — це двадцять пар, а не десять; при одній парі на тиждень десять тем займають двадцять п'ятниць, і курс переходить у наступний семестр. Тому Лабораторна 10 — 5 лютого 2027, а залік — 12 лютого 2027. Точні дати відкриття й дедлайнів — у розкладі на сторінці курсу: він рахується з ланцюжка занять і сам переставляється, коли посеред семестру трапляється свято.

Лекційне заняття триває дві години й складається з презентації теми (з живим демо в терміналі) та самостійної роботи над двома темами СРС, що відповідають цій лекції. Матеріали СРС публікуються в Google Classroom разом із лекцією. СРС окремо не оцінюється: перша тема готує до захисту рівня 2, друга — до розширення рівня 3 відповідної лабораторної роботи. Тобто самостійна робота — не паралельна колія, а підготовка до оцінки, яку ти хочеш отримати.

Модульні контроли — 30 хвилин, на першій парі після завершення модуля: 23 жовтня 2026 (модуль 1, на парі Лекції 4), 18 грудня 2026 (модуль 2, на парі Лекції 8) і 12 лютого 2027 (модуль 3, того самого дня, що й залік). Відкриваються о 08:30 за київським часом; пише кожна група на своїй парі.

Як влаштована одна лабораторна робота

Лабораторна робота має три рівні, і рівень — це оцінка. Ти обираєш його сам, вищий включає виконання попередніх.

Рівень Оцінка Що робиш Хто перевіряє
1 «3» базове завдання за покроковою інструкцією з очікуваним виводом автотести за тегом здачі
2 «4» те саме + пояснюєш механізм і показуєш наживо викладач, усний захист
3 «5» розширення за контрактом: автоматизація, оптимізація, власне рішення викладач, усний захист

Три речі, які варто зрозуміти одразу, бо вони визначають стратегію на семестр:

  • Рівень 1 — це вже робоча лабораторна, перевірена машиною, а не «заради галочки». Він розрахований так, щоб його закрив студент, який прийшов на заняття вперше й нічого до цього не робив.
  • Рівень 1 ніколи не залежить від попередніх робіт. Автотести дивляться тільки на поточну роботу. Пропустив три заняття — приходиш і здаєш рівень 1 без перешкод.
  • Рівень можна підвищити до закриття модуля. Здав «3» у першу п'ятницю, розібрався за тиждень, захистив «4» — у журналі буде «4». Оцінка не остаточна, поки модуль відкритий.

Варіант завдання залежить від твого номера в списку групи (N % 4 або N % 3, у кожній роботі сказано, як саме). Варіант обов'язково вказується на початку REPORT.md — без нього робота не приймається, бо неможливо перевірити, чи те, що ти зробив, відповідало умові.

Два репозиторії: робота і ядро

Кожна лабораторна живе у власному репозиторії на GitHub, який курс створює тобі на прийняття завдання:

sp-<група>-labNN-<логін>/     11 таких за семестр, по одному на роботу
  <проєкт>/                   код рівня 1
  REPORT.md                   звіт: варіант, вивід кроків, відповіді на питання

Рівні 2 і 3 дають опцію працювати не з нуля, а на ядрі, яке росте з першої роботи — це другий репозиторій, vtfk-sid. Його ти створюєш один раз, на першій лабораторній, зі шаблону, і він живий до десятої:

vtfk-sid/                     один репозиторій на семестр, твій власний
  core/capsule/               контейнер: Dockerfile, deploy.sh      (ЛР1–3)
  core/sidkit/                 crate на Rust, який росте помодульно  (ЛР4–7)
  core/wasm/                   переносне ядро                        (ЛР8–10)

Чому два, а не один: ім'я репозиторію лабораторної — це первинний ключ, за яким конвеєр перевірки розуміє, хто і яку роботу здав. Один репозиторій на семестр цю відповідь зробив би неможливою. Тому машинна частина (рівень 1) живе в репозиторії роботи, а наскрізна (рівні 2–3) — у твоєму, і здається розмовою, а не тестами. Це не послаблення: рівні 2–3 і раніше ніколи не перевірялися машиною.

Хто не веде ядра — не втрачає нічого: кожна умова рівнів 2–3 має другу версію, «на референсі». Готовий знімок попередньої ночі лежить у відкритому репозиторії курсу, і оцінка за обидві версії однакова.

Робоче середовище

Усі роботи виконуються в підготовленому контейнері розробника з попередньо встановленими інструментами відповідного модуля (Ubuntu 24.04 + Docker Engine; Rust 1.79 + Cargo; WABT, Node.js, clang, wasm-pack). Опис середовища кожної роботи зафіксований у конфігурації курсу і використовується для ініціалізації робочого простору — у кабінеті курсу або в GitHub Codespaces.

Практично це означає: ти не встановлюєш нічого. Відкриваєш роботу — середовище піднімається з уже потрібними інструментами саме цієї роботи. Однакове вдома, в коледжі й з будь-якого пристрою, де є браузер. Контейнер можна прибрати в будь-який момент — код лежить у репозиторії, а не в контейнері.

Перша перевірка, з якої варто починати кожне заняття, — дві команди й один файл:

cat /etc/os-release | head -2    # яка це система
docker version                   # чи є інструмент цього модуля
cat README.md                    # що саме треба зробити

Якщо це працює — середовище готове, і далі все за інструкцією лабораторної. Якщо не працює — це нормальна ситуація першого тижня, і вона розібрана в Лабораторній 0.

Здача: що відбувається, коли ти ставиш тег

Здача рівня 1 — тегом submit/labNN у репозиторії лабораторної. Послідовність завжди та сама:

git status                                    # подивитися, що змінилося
git add . && git commit -m "lab01: рівень 1"  # записати зміни в історію
git tag submit/lab01 && git push --tags       # здати

Що робить кожен рядок:

  • git status показує, які файли ти змінив і чи git їх бачить. Найчастіша причина «я здав, а тестів немає» — файл не був доданий.
  • git add . позначає всі зміни в поточному каталозі, git commit записує їх в історію під повідомленням.
  • git tag submit/lab01 вішає на цей коміт іменну позначку. Тег — це і є «я здаю». Формат саме submit/lab01, з префіксом; просто lab01 конвеєр не побачить.
  • git push --tags відправляє коміти й теги на GitHub.

Далі за тег береться автоматика: запускаються автотести рівня 1, і результат публікується релізом у тому ж репозиторії. Побачити його можна там само, на GitHub, — окремо питати нікого не треба.

Повторна здача — наступним вільним тегом:

git tag submit/lab01-2 && git push origin submit/lab01-2

Це нормальний, передбачений шлях: перший тег означав «здаю», наступний номер — «здаю кращу версію». Старий тег не переставляється; яка це робота, перевірка визначає за іменем репозиторію, а не тега. Кількість спроб не обмежена, доки відкритий модуль.

REPORT.md — обов'язкова частина рівня 1, а не формальність. У ньому: варіант, вивід команд кожного кроку (саме твій вивід, не з методички) і відповіді на контрольні питання. Звіт — це те, з чим ти приходиш на захист рівнів 2–3, тому писати його краще під час роботи, а не після.

Порядок здачі, перевірка середовища й робота з довідкою (man, --help, cat README.md) описані в Лабораторній 0, яка відкрита протягом усього семестру й не оцінюється. Практичних кроків там немає навмисно: ЛР0 — це читання, а не робота.

Оцінювання і залік

Залік накопичувальний: окремого «складання» в кінці немає, є сума того, що зроблено за семестр. Підсумок формують два джерела: рівні, досягнуті в десяти лабораторних роботах, і три модульні контролі. Тому головна стратегічна порада на семестр звучить нудно, але вона правдива: закривати рівень 1 у тиждень своєї роботи, а не в останній тиждень семестру. Десять робіт за останні два тижні семестру не закриваються.

Залік — 12 лютого 2027, 45 хвилин, чотири варіанти по 25 питань; того самого дня пишеться модульний контроль 3. Десята лабораторна на той час уже відпрацьована на парі 5 лютого, а здати її можна до 19 лютого 2027 — тобто на тиждень пізніше за сам залік.

Сертифікати з профільних курсів (Docker, Rust) можуть зараховуватись як рівень 2 відповідної лабораторної — за процедурою, описаною в силабусі.

Доброчесність: оцінку дає розмова

Репозиторій твоєї лабораторної приватний — його бачиш ти й викладач, і більше ніхто. Це не «щоб ніхто не списав», а технічна необхідність: автотести курсу викликають спільний воркфлоу, що живе в закритому репозиторії викладача, а GitHub не дозволяє робити це з публічного репозиторію. 4 вересня на цьому занятті було сказано протилежне — «репозиторії публічні, роботи одні одних видно». Так планувалося заради безкоштовних хвилин автотестів; 17 вересня, на першій живій здачі, з'ясувалося, що з публічним репозиторієм автогрейдер просто не запускається, і рішення змінили.

Для рівня 1 це нічого не змінює. Рівень 1 — покрокова інструкція з очікуваним виводом; він однаковий у всіх за побудовою, і списувати там нічого.

Для рівнів 2 і 3 не змінюється теж — і це головне, що варто забрати з цього розділу. Оцінку «4» і «5» дає розмова, а не наявність коду. Це правило ніколи не трималося на тому, видно роботу сусідові чи ні: рівні 2 і 3 живуть у твоєму власному vtfk-sid, якого автотести не бачать узагалі, і єдиний спосіб їх зарахувати — пояснити механізм і показати роботу наживо. Код, який ти не можеш пояснити, не приносить оцінки — незалежно від того, звідки він узявся.

ШІ-інструменти дозволені як помічник: пояснити, підказати, перевірити, знайти помилку. Використання зазначається у звіті. Не дозволені як автор роботи, яку ти не можеш пояснити, — і це та сама межа, що й у попередньому абзаці, а не окреме правило.

Матеріали курсу і як ними користуватися

Кожна лабораторна робота має дві версії з ідентичними вимогами: сюжетну (наскрізна історія, у яку вплетені технічні відомості — основна для студента) та академічну (методична форма: мета, теорія, порядок виконання, критерії). Перемикач — угорі кожної сторінки. Лекції та конспекти — академічні.

Що ще є на кожній сторінці й навіщо:

  • «Команди на цій сторінці» — блок унизу: кожна команда терміналу, що трапилася в тексті, з одним реченням пояснення. Команда, яка в курсі вперше, позначена як нова. Це не додаток до тексту, а спосіб читати сторінку, не відкриваючи п'ять вкладок.
  • «Освіжити перед роботою» — короткий блок на початку лабораторної: що саме з лекції потрібно саме тут.
  • Джерела — під кожним розділом конспекту: українське першим, англійське з позначкою «EN» і оцінкою часу на читання.
  • «Коли щось пішло не так» — окремий довідник з пошуком, зібраний з усіх лабораторних.

Матеріали відкриваються за розкладом: лабораторна — у п'ятницю своєї лекції. Лекція 0 і Лабораторна 0 відкриті завжди — з них можна починати сьогодні.

Перший тиждень: що зробити до 11 вересня

Конкретний список, у порядку виконання:

  1. Відкрити сайт курсу й Лабораторну 0 — вона не оцінюється, працює весь семестр і саме для цього й існує.
  2. Пройти перевірку середовища трьома командами з розділу вище. Якщо щось не запускається — це і є твоє питання на наступному занятті, і воно доречне.
  3. Прочитати в Лабораторній 0 розділ про здачу — щоб у п'ятницю, коли зʼявиться перший репозиторій роботи, послідовність add → commit → tag → push не була новиною. Ставити пробний тег поки нема де: репозиторій створюється в момент, коли ти приймаєш завдання ЛР1.
  4. Подивитися теми СРС свого першого модуля: перша готує до «4», друга — до «5». Обидві публікуються разом із лекцією.
  5. Знайти свій номер у списку групи — з нього обчислюється варіант завдання.

Якщо після цього списку залишилося питання «а з чого мені почати вчити Linux» — правильна відповідь: ні з чого окремо. Курс уводить кожен інструмент у момент, коли він уперше потрібен, і кожна лекція модуля 1 починається з того, що вважає нульовим досвідом. Досить приходити й набирати команди.

Розбір за слайдами

План заняття

Показати сайт наживо паралельно зі слайдами

Що таке системне програмування

Одна ідея на весь семестр: межа. Усі три модулі — про те, де вона проходить і хто її охороняє

Три модулі — три межі

Показати на сайті три «стрічки» модулів

Курс у цифрах

90
годин · 3 кредити ЄКТС
20 лекцій · 20 лабораторних · 50 СРС
3
модулі — три межі
ізоляція · пам'ять · інструкції
10+1
лабораторних (місій)
+ Лабораторна 0 — вступ, завжди відкрита
20
тем СРС
по 2 на кожну лекцію та ЛР

Цифри — за тарифікацією 2026/27; Лекція 0 і Лабораторна 0 — поза сіткою годин, додаткові матеріали

Як влаштований кожен тиждень

Лекціяпрезентація + демо · 1 год
→
СРС2 теми в аудиторії · 1 год
→
Лабораторнаконтейнер · 2 год
→
Здачатег submit/labNN
→
Захистрівні 2–3 · до кінця модуля

СРС має подвійний зв'язок: подається з лекцією, готує до захисту і розширення лабораторної

Лекції семестру

№ТемаМодуль
Л1Три межі курсу: процес, адресний простір, системні викликиМ1
Л2Образ як шари, Dockerfile, кеш, багатоетапна збіркаМ1
Л3Простори імен, групи керування (cgroups), привілеїМ1
Л4Чому програми псують пам'ятьМ2
Л5Володіння і запозиченняМ2
Л6Зрізи, часи життя і типи без nullМ2
Л7Result, ? і власні типи помилокМ2
Л8WebAssembly як переносний асемблерМ3
Л9Асемблер x86-64М3
Л10Rust у WASM, межа з host-середовищемМ3

Кожна лекція — одна ідея й одне живе демо; слайди й конспект — на сайті

Лабораторні роботи — 10 місій

№Академічна назваСюжетна назваМ
ЛР1Контейнер розробника й огляд просторів імен«Ізоляційна Капсула»М1
ЛР2Dockerfile з багатоетапною збіркою і порівнянням розмірів«Кібер-Дієта»М1
ЛР3Два контейнери разом і ізольована мережа«Сліпий Канал»М1
ЛР4Перший проєкт на Cargo з юніт-тестом«Кування Відмички»М2
ЛР5Набір програм, що не компілюються (borrow checker)«Мертвий Лог»М2
ЛР6Структури і перелічення без null«Архітектура Ворога»М2
ЛР7Читання файлу з обробкою помилок«Мінне Поле»М2
ЛР8Модуль на WAT вручну«Пряма Ін'єкція»М3
ЛР9Той самий алгоритм у двох асемблерах«Розтин Системи»М3
ЛР10Ядро на Rust у WASM на сторінці з відтворюваною збіркою«Звільнення»М3

Кожна ЛР має сюжетну й академічну версію з однаковими вимогами; три рівні → «3» / «4» / «5»

Теми СРС — модуль 1

№ТемаДо якої ЛР і рівня готує
СРС 01Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що ізолює коженЛР1 · рівень 2 → «4»
СРС 02Групи керування cgroups v2: обмеження CPU та пам'яті контейнераЛР1 · рівень 3 → «5»
СРС 03OverlayFS і шари образу: як влаштовано об'єднану файлову системуЛР2 · рівень 2 → «4»
СРС 04Відтворюваність збірки і довіра до образу (digest, pin версій)ЛР2 · рівень 3 → «5»
СРС 05Мережі Docker (bridge/none/host) і службове DNS між контейнерамиЛР3 · рівень 2 → «4»
СРС 06Керування секретами: env проти файлів проти docker secretsЛР3 · рівень 3 → «5»

Виконуються на 2-й годині відповідної лекції; окремо не оцінюються

Теми СРС — модуль 2

№ТемаДо якої ЛР і рівня готує
СРС 07Модель володіння Rust проти збирача сміття і ручного керування пам'яттюЛР4 · рівень 2 → «4»
СРС 08Екосистема crates.io, Cargo.toml/Cargo.lock і семантичне версіонування залежностейЛР4 · рівень 3 → «5»
СРС 09Часи життя (lifetimes) у сигнатурах функцій: що саме перевіряє компіляторЛР5 · рівень 2 → «4»
СРС 10Rc і RefCell: спільне володіння та внутрішня мутабельність без гонокЛР5 · рівень 3 → «5»
СРС 11Алгебраїчні типи даних (enum) і вичерпне зіставлення зі зразком (match)ЛР6 · рівень 2 → «4»
СРС 12Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable)ЛР6 · рівень 3 → «5»
СРС 13Result<T, E> проти panic!: коли доречна відновна відмова, а коли зупинка програмиЛР7 · рівень 2 → «4»
СРС 14Власні типи помилок і трейт std::error::Error: Display, Debug, BoxЛР7 · рівень 3 → «5»

Виконуються на 2-й годині відповідної лекції; окремо не оцінюються

Теми СРС — модуль 3

№ТемаДо якої ЛР і рівня готує
СРС 15Стекова машина WebAssembly і структура текстового формату .watЛР8 · рівень 2 → «4»
СРС 16Лінійна пам'ять WASM і межі безпеки пісочниціЛР8 · рівень 3 → «5»
СРС 17Угоди виклику (calling conventions) x86-64: System V AMD64 ABIЛР9 · рівень 2 → «4»
СРС 18Інструменти дизасемблювання: objdump та wasm-objdump, синтаксис AT&T проти IntelЛР9 · рівень 3 → «5»
СРС 19Межа Rust↔JS через wasm-bindgen: маршалінг типів і виклик з JavaScriptЛР10 · рівень 2 → «4»
СРС 20Відтворювані збірки Rust→WASM і цілісність ланцюга постачання (supply chain)ЛР10 · рівень 3 → «5»

Виконуються на 2-й годині відповідної лекції; окремо не оцінюються

Шлях однієї лабораторної

  1. 1
    Відкрити місіюсайт → сюжет або академічна версія; контейнер піднімається сам
  2. 2
    Виконати рівень 1за кроками з очікуваним виводом; REPORT.md
  3. 3
    Здати тегомgit tag submit/labNN && git push --tags → автотести
  4. 4
    Захистити 2 / 3пояснити механізм наживо; розширення за контрактом
  5. 5
    Підвищити до кінця модуляоцінка не остаточна, поки модуль відкритий

Дві версії однієї лабораторної

Сюжетна (основна для студента)
  • Наскрізна історія про С.І.Д.
  • Теорія вплетена в сцени
  • Рівні як місії, пасхалки, арт
↔
Академічна
  • Мета · теорія · порядок виконання
  • Ті самі кроки й критерії
  • Зручна для звіту й захисту

Перемикач — угорі кожної сторінки; вимоги ідентичні

Як побудоване лекційне заняття (2 год)

СРС має подвійний зв'язок: до лекції (коли робимо) і до лабораторної (навіщо робимо)

Лабораторні: три рівні — три оцінки

Підкреслити: «3» — це вже робоча, перевірена автотестами лабораторна, а не «заради галочки»

Робоче середовище: Docker-контейнер розробника

Демо: відкрити середовище ЛР1, набрати cat /etc/os-release і docker version

Перша перевірка середовища

bash
cat /etc/os-release | head -2
docker version
cat README.md        # інструкція до роботи — прямо в терміналі
docker run --help    # довідка з будь-якої команди

Якщо це працює — середовище готове; далі все за інструкцією лабораторної

Здача робіт

Показати на сайті Лабораторну 0 — там покроково, з командами git; ядро — наступний слайд

Два репозиторії на семестр

Репо лабораторної — 11 штук
  • Створює курс на кожну ЛР; відкрита від лекції до дедлайну — три тижні
  • Рівень 1 + REPORT.md, перевіряють автотести
  • Здача тегом submit/labNN
+
vtfk-sid — один на семестр
  • Створюєш сам із шаблону на ЛР1
  • Ядро, що росте: capsule → sidkit → wasm
  • Рівні 2–3, здаються захистом, не тестами

Рівень 1 ніколи не залежить від попередніх робіт; ядро — це опція для «4» і «5»

Здача тегом

bash
git add . && git commit -m "lab01: рівень 1"
git tag submit/lab01 && git push origin submit/lab01
# повторна здача після покращень — наступний вільний номер:
git tag submit/lab01-2 && git push origin submit/lab01-2

Тег — це «я здаю». Наступний номер — «я здаю кращу версію»

Сайт курсу: дві версії кожної лабораторної

Показати ЛР1 у двох версіях і блок команд; QR — сайт відкриваємо просто зараз

docs.sp.ordynski.com

Політики курсу

РН17/ЗК9: обґрунтований вибір цифрових інструментів і ШІ з дотриманням доброчесності

Інструменти й джерела на семестр

Повний список — розділ «Джерела» робочої програми

Що зробити до наступного заняття

docs.sp.ordynski.com/lab0 → Лабораторна 0

Джерела

🔗 ДЖЕРЕЛА
🥚 ПАСХАЛКА
Тег здачі — це submit/lab01, а на дні голопроєктора в Лабораторній 0 вигравіювано C1D — шістнадцяткове число, яке дорівнює 3101. Запам'ятай його: воно трапиться в курсі не раз.
⌨️ КОМАНДИ НА ЦІЙ СТОРІНЦІ 19 · 19 нових▾

Кожна команда терміналу з цієї сторінки — одним реченням. Позначка нове — команда зустрічається в курсі вперше; далі вважаємо її знайомою.

catнове
Виводить вміст файлу в термінал повністю (від concatenate); зручно для коротких файлів і /proc/....
headнове
Показує перші рядки файлу або потоку (head -5 — перші п'ять).
docker versionнове
Показує версії клієнта й демона — перевірка, що Docker встановлений і працює.
dockerнове
Клієнт Docker: усі дії з образами й контейнерами — через його підкоманди (docker <підкоманда> --help — довідка).
docker runнове
Створює й запускає контейнер з образу (docker run -it ubuntu:24.04 bash — інтерактивно з терміналом; -d — у фоні; --rm — видалити після виходу; -p 8080:80 — прокинути порт).
git addнове
Позначає файли, які увійдуть у наступний коміт (git add . — усе, що змінилося в каталозі).
gitнове
Система керування версіями: історія змін, гілки, теги; здача робіт у курсі — через теги submit/labNN.
git commitнове
Записує позначені зміни в історію під повідомленням (git commit -m "lab01: рівень 1").
git tagнове
Позначає поточний коміт іменем (git tag submit/lab01) — так ти «здаєш» лабораторну.
git pushнове
Відправляє коміти й теги у віддалений репозиторій (git push --tags).
manнове
Відкриває посібник (manual) до команди: man ps; вихід — q.
lsнове
Показує список файлів у каталозі; ls -la — з правами, власником, розміром і прихованими файлами.
git statusнове
Показує, які файли змінені, які додані до наступного коміту, а які git ще не бачить.
bashнове
Командна оболонка (shell) Linux: читає команди, які ти набираєш, і запускає програми.
pwdнове
Друкує шлях до поточного каталогу (print working directory).
cdнове
Переходить в інший каталог (change directory); cd .. — на рівень вище.
lessнове
Показує файл посторінково з прокруткою; вихід — клавіша q.
sudoнове
Виконує команду від імені адміністратора (root); потрібно для змін у ядрі — просторів імен, мережевих інтерфейсів.
rmнове
Видаляє файли; rm -rf dir — каталог рекурсивно і без запитань (обережно: відміни немає).

💡 Прочитати README прямо в терміналі: cat README.md (виведе весь файл) або less README.md (посторінково; вихід — клавіша q).
Довідка з будь-якої команди: man curl (повний посібник, вихід — q) або коротко curl --help; для підкоманд — docker run --help, cargo build --help.