Вступ. Організація роботи в курсі, робоче середовище та порядок здачі робіт
Мета
Ознайомитися зі структурою дисципліни, форматом лабораторних робіт і самостійної роботи, підготованим робочим середовищем (контейнер розробника) та порядком здачі й оцінювання робіт. Вступ не оцінюється і доступний упродовж усього семестру.
Структура дисципліни
Дисципліна складається з трьох модулів, кожен присвячений одній «межі» між програмою та машиною:
| Модуль | Тема | Лекції | Лабораторні | Інструменти |
|---|---|---|---|---|
| 1 | Ізоляція процесів: межа середовища виконання | 1–3 | ЛР1–ЛР3 | Docker, простори імен та cgroups Linux |
| 2 | Керування пам'яттю: межа безпеки | 4–7 | ЛР4–ЛР7 | Rust, Cargo, перевірка запозичень |
| 3 | WebAssembly і асемблер: межа набору інструкцій | 8–10 | ЛР8–ЛР10 | WABT, NASM/gcc/objdump, wasm-pack |
До кожної лабораторної роботи передбачено дві теми самостійної роботи (СРС): перша готує до захисту рівня 2, друга — до розширення рівня 3. СРС окремо не оцінюється; оцінюється рівень, досягнутий у лабораторній роботі.
Кожна лабораторна робота доступна у двох еквівалентних за змістом версіях: сюжетній (основна; технічні відомості вплетені в наскрізну історію) та академічній (стисла методична форма). Перемикач між версіями розташований угорі сторінки.
Рівні виконання та оцінювання
| Рівень | Оцінка | Зміст | Форма перевірки |
|---|---|---|---|
| 1 | 3 | базове завдання за покроковою інструкцією з очікуваними результатами | автотести |
| 2 | 4 | пояснення механізму та жива демонстрація | захист (усно) |
| 3 | 5 | розширення: автоматизація, оптимізація або власне рішення за контрактом | автотести і/або захист |
Студент самостійно обирає рівень, на який претендує. Вищий рівень включає виконання попередніх.
Робоче середовище: контейнер розробника
Усі роботи виконуються в підготовленому контейнері розробника (devcontainer) з попередньо
встановленими інструментами для відповідної роботи. Опис середовища кожної ЛР і СРС — базовий
образ, інструменти та їхні версії, дозволені команди, порти, перевірки готовності —
зафіксований у конфігурації курсу (environment/labNN.yml, environment/srsNN.yml) і
використовується застосунком курсу при ініціалізації робочого простору студента; те саме
середовище можна отримати в GitHub Codespaces навчального репозиторію.
| Модуль | Базове середовище |
|---|---|
| 1 | Ubuntu 24.04 з Docker Engine (Docker-in-Docker), curl, procps, iproute2, util-linux |
| 2 | Rust 1.79 (rustc, cargo, rustfmt, clippy), git |
| 3 | WABT 1.0.34, Node.js 22, gcc 13 / binutils, clang 18 / lld, Rust 1.79 з ціллю wasm32-unknown-unknown, wasm-pack, binaryen |
Порядок роботи в середовищі:
- Відкрити лабораторну роботу в кабінеті курсу (або Codespaces). Контейнер створюється автоматично; у нього монтується навчальний репозиторій студента.
- Перевірити середовище:
cat /etc/os-release | head -2(очікуєтьсяUbuntu 24.04або відповідний базовий образ) та команду перевірки інструмента роботи (docker version,cargo --version,wat2wasm --version). - Виконувати роботу в терміналі контейнера; результати комітити в репозиторій. Зміни у файловій системі контейнера поза репозиторієм не зберігаються між сеансами.
Довідка з команд: man <команда> — повний посібник (вихід — q); <команда> --help
(для підкоманд — docker run --help, cargo build --help) — стисла довідка. Файл README
у каталозі роботи переглядається командою cat README.md або less README.md.
На кожній сторінці ЛР, СРС і конспекту наведено блок «Команди на цій сторінці» з однореченнєвим описом кожної команди терміналу, що трапляється в тексті; команди, які зустрічаються в курсі вперше, позначені.
Порядок здачі робіт
Два репозиторії. Рівень 1 кожної роботи виконується в репозиторії завдання: його створює Classroom 50 у момент прийняття завдання, окремо на кожну ЛР, і саме там працюють автотести. Рівні 2 і 3 виконуються в наскрізному репозиторії
vtfk-sid, який студент створює один раз у ЛР1 і веде до кінця семестру. Склад кожного визначають розділ «Здача» відповідної ЛР іstarter/README.md(контракт стартового коду).Звіт
REPORT.md(у репозиторії завдання) містить: варіант і його розрахунок, вивід команд кожного кроку порядку виконання, відповіді на контрольні питання.Здача рівня 1 — тегом
submit/labNNу репозиторії завдання. Тег ставить скрипт здачі, а не студент: у робочому просторі — Ctrl+Shift+B (менюTerminal → Run Build Task) або, те саме з терміналу:bash .devcontainer/submit.shСкрипт комітить незбережене, пушить, показує, який тег створить, і чекає підтвердження; відмова («ні» або порожній Enter) нічого не здає й не вважається помилкою.
Запасний шлях — поза Codespaces, де скрипта немає, — ті самі команди руками:
git add . && git commit -m "lab01: рівень 1" git tag submit/lab01 && git push origin submit/lab01Повторна здача — наступний вільний тег (
submit/lab01-2,submit/lab01-3): належність роботи визначає ім'я репозиторію, а не ім'я тега, тож нумерований тег ні на що не впливає. Скрипт робить це сам; руками — так само наступний номер, старий тег не переставляється.Автотести запускаються за тегом і перевіряють лише рівень 1. Рівні 2 і 3 захищаються усно з живою демонстрацією вмісту
vtfk-sid; автоматично вони не перевіряються.Репозиторії завдань приватні (ADR 029): автогрейдинг Classroom 50 кличе багаторазовий воркфлоу з приватного конфігураційного репозиторію курсу, а GitHub не дозволяє робити це з публічного репозиторію. Робота студента видима йому самому й викладачеві. Запобіжником від списування на рівнях 2–3 це не робить приватність: ним лишається усний захист.
Варіант. У більшості робіт параметри завдання (порт, ім'я контейнера, тестові дані)
залежать від номера студента в списку групи N (зазвичай N % 4 або N % 3). Варіант і
його розрахунок обов'язково зазначаються на початку REPORT.md.
Контрольні питання
- З яких модулів складається дисципліна і яка «межа» є предметом кожного?
- Чим відрізняються рівні 1, 2 і 3 виконання лабораторної роботи та форми їх перевірки?
- Яку роль відіграє СРС і як вона пов'язана з рівнями лабораторної роботи?
- Що таке контейнер розробника і чому середовище виконання робіт фіксується у конфігурації курсу?
- Якими командами перевірити базовий образ середовища та готовність основного інструмента роботи?
- Як отримати довідку з команди терміналу та як переглянути README у терміналі?
- Яким чином здається лабораторна робота і як виконати повторну здачу?