Explorar el Código

Merge branch 'master' of u23urda/ISRPO into master

ypv hace 1 mes
padre
commit
ae9f2c59d2

BIN
Лекции/Lua/lua1urda.jpg


BIN
Лекции/Lua/lua2urda.jpg


BIN
Лекции/Lua/lua3urda.png


+ 109 - 0
Лекции/Lua/lua_urda.md

@@ -0,0 +1,109 @@
+# Язык программирования Lua
+Сегодня мы поговорим о популярном языке программирования Lua, используемом преимущественно в разработке игр и встраиваемых системах. Мы подробно разберем основы языка, познакомимся с основными структурами данных и концепциями, необходимыми для успешного старта в мире Lua-разработки.
+
+**Основные концепции Lua**
+
+
+Lua — это легкий, мощный и универсальный язык программирования, широко применяемый в игровых проектах и различных сферах IT-индустрии. Особенность Lua состоит в том, что он разрабатывался как встраиваемый язык, предназначенный для дополнения существующих приложений новыми возможностями.
+![]( lua1urda.jpg)
+
+## **Преимущества Lua:**
+
+1. Компактность и высокая производительность.
+2. Гибкая система типизации.
+3. Удобство интеграции с C/C++.
+4. Динамическая природа языка, допускающая лёгкую модификацию поведения.
+
+**Недостатки Lua:**
+
+1. Плохое взаимодействие с крупными объемами данных.
+2. Низкий уровень безопасности при работе с низкоуровневыми ресурсами.
+3. Использование Lua в игровой индустрии
+
+**Популярность Lua обусловлена несколькими факторами:**
+
+* Легкостью: малое потребление ресурсов, отсутствие значительной нагрузки на процессор и память.
+* Производительностью: превосходная реализация механизма интерпретации делает Lua быстрым и эффективным решением.
+* Универсальностью: Lua используется как расширение API для крупных игровых движков (например, Unity и Unreal Engine).
+
+## **Структуры данных и принципы работы с ними**
+
+**Понятие таблиц в Lua**
+Центральным типом данных в Lua являются таблицы, представляющие собой ассоциированные массивы. Таблицы поддерживают любую структуру элементов и могут использоваться как обычные списки, карты или объекты.
+![]( lua2urda.jpg)
+
+**Пример структуры таблицы:**
+
+lua
+
+-- Пример таблицы игрока
+player = {
+    name = "Герой",
+    health = 100,
+    level = 1,
+    skills = {"меч", "щит"}
+}
+Оператор доступа к данным в таблицах производится посредством квадратных скобок [ключ] или через точку .key. Например:
+
+lua
+
+print(player.name)      --> Герой
+print(player["health"]) --> 100
+
+## Продвинутые механизмы Lua
+
+Одним из важнейших механизмов Lua являются корутины, позволяющие реализовать параллельную обработку задач. Этот подход позволяет упростить организацию сложной логики, сохраняя производительность и удобство сопровождения кода.
+
+**Корутины работают следующим образом:**
+
+Создание корутины: coroutine.create(func)
+Возобновление выполнения: coroutine.resume(coroutine_handle, args...)
+Пауза выполнения: coroutine.yield(...)
+Пример использования корутин:
+
+lua
+
+local function task()
+    print("Выполняется первая часть...")
+    coroutine.yield()
+    print("Продолжаем выполнение!")
+end
+
+local coro = coroutine.create(task)
+coroutine.resume(coro) --> "Выполняется первая часть..."
+coroutine.resume(coro) --> "Продолжаем выполнение!"
+Работа с метатаблицами
+Важнейшим механизмом Lua является концепция метатаблиц, предоставляющих разработчику возможность изменять поведение стандартных операций языка. Метатаблицы позволяют определить специфические обработчики для базовых операций, таких как сложение, сравнение и индексирование.
+
+Вот список ключевых методов метатаблиц:
+
+__index: обработка чтения элемента таблицы.
+__newindex: присвоение нового элемента.
+__add, __sub, __mul, etc.: переопределение арифметических операций.
+Пример метатаблицы:
+
+lua
+
+NegativesOnlyTable = {}
+setmetatable(NegativesOnlyTable, NegativesOnlyTable)
+
+function NegativesOnlyTable.__index(t, key)
+    if type(key) == 'number' and key < 0 then
+        return t[-key]
+    else
+        error("Ошибка! Можно обращаться только к отрицательным индексам.")
+    end
+end
+
+table_with_neg_indices = setmetatable({}, NegativesOnlyTable)
+table_with_neg_indices[-1] = "Элемент"
+print(table_with_neg_indices[-1]) ---> Элемент
+
+### Итоги и выводы
+Итак, мы рассмотрели основные аспекты языка Lua: начиная от истории его появления и заканчивая продвинутыми методами работы с данными и параллелизацией вычислений. Благодаря своим характеристикам Lua идеально подходит для быстрой разработки простых приложений, прототипов и масштабируемых игр.
+
+Мы изучили такие важные моменты, как:
+
+* Универсальность и популярность Lua в игровой индустрии.
+* Принцип работы с таблицами и метатаблицами.
+* Применение корутин для решения задач асинхронного выполнения.

+ 15 - 0
Лекции/Lua/ВОПРОСЫ lua urda.txt

@@ -0,0 +1,15 @@
+Вопрос №1: Что представляет собой язык Lua и почему он стал популярным среди разработчиков игр?
+
+Ответ: Lua — легкий, быстрый и удобный скриптовый язык программирования, созданный для встраивания в приложения. Его популярность обусловлена минимализмом, производительностью, гибкостью и простотой изучения, что сделало его востребованным инструментом для игрового программирования.
+
+Вопрос №2: Концепция таблиц в Lua и пример их практического использования?
+
+Ответ: Таблицы в Lua служат универсальной структурой данных, представляя собой ассоциативный массив. Пример использования: создание игрового персонажа с атрибутами (health, level и др.) путем объединения полей в одну таблицу.
+
+Вопрос №3: Функции корутин в Lua и зачем они нужны?
+
+Ответ: Корутины в Lua позволяют организовать кооперативную многозадачность, временно останавливая исполнение одной части программы и продолжая её позднее. Это полезно для управления асинхронными операциями и предотвращения блокировки главного потока.
+
+Вопрос №4: Принцип работы мета-текстов (метатаблиц) в Lua и как их можно применять на практике?
+
+Ответ: Метатаблицы в Lua позволяют изменять поведение базовых операций, таких как доступ к данным, вычисления и сравнение. Практическое применение включает реализацию собственных классов, поддержку специальных алгоритмов и создание удобных абстракций, улучшающих работу с данными в приложении.

BIN
Лекции/Rust/rust3urda.png


BIN
Лекции/Rust/rusturda1.png


BIN
Лекции/Rust/rusturda2.jpeg


+ 62 - 0
Лекции/Rust/urda47gr_rust.md

@@ -0,0 +1,62 @@
+# Язык программирования RUST
+Аннотация лекции:
+Rust — инновационный язык программирования, разработанный командой Mozilla Research. Его ключевой особенностью является уникальный подход к управлению памятью, отсутствию сборщика мусора и строгому контролю параллелизма. Эта комбинация делает Rust идеальным кандидатом для системного программирования, разработки критичных к производительности приложений и встраиваемых систем.
+![]( rusturda1.png)
+
+## Часть I: История и философия Rust
+Rust начал свою жизнь как экспериментальный проект внутри Mozilla в середине 2000-х годов. Основной целью было создать новый язык, объединяющий преимущества высокого уровня абстракции с производительностью, близкой к языкам низкого уровня вроде C/C++. Ключевыми особенностями стали:
+
+* Безопасность памяти (без сбора мусора).
+* Строгий контроль владения ресурсами.
+* Поддержка многопоточности без гонки данных.
+* Эти особенности делают Rust привлекательным для разработчиков системного программного обеспечения, фреймворков и инфраструктуры облачных сервисов.
+
+![]( rust3urda.png)
+
+## Часть II: Основные концепции Rust
+1. Управление памятью
+Основой подхода Rust является концепция «владения» (Ownership) — каждая переменная владеет своей областью памяти, и при выходе из области видимости эта память автоматически освобождается. Этот подход радикально отличается от привычной парадигмы, используемой в языках с автоматической сборкой мусора, и позволяет избежать ошибок и повысить производительность.
+
+Важнейшие понятия:
+1. Borrowing: временная передача прав на чтение или модификацию.
+2. Lifetimes: продолжительность существования объектов в программе.
+3. References: механизмы безопасной передачи значений без перемещения права собственности.
+2. Типы данных
+Rust предлагает два основных вида типов данных:
+
+1. Скалярные типы: целочисленные (например, i32, u8), вещественные (f32, f64), символ (char), булевый (bool).
+2. Составные типы: кортежи, массивы, структуры, перечисления (enums), коллекции (Vec, HashMap).
+3. Выбор правильного типа важен для повышения производительности, ведь каждый тип занимает разное количество памяти и обладает разной скоростью обработки.
+
+3. Система типов (traits)
+Traits в Rust выполняют роль интерфейса или протокола, позволяющего унифицировать общие элементы поведения. Примером могут служить базовые черты, предоставляемые стандартной библиотекой:
+
+* Display: печать объекта в удобочитаемой форме.
+* PartialEq: проверка равенства двух объектов.
+* Iterator: реализация итерационных механизмов.
+Это помогает разработчикам легко писать обобщенные функции и сократить дублирование кода.
+
+## Часть III: Особенности программирования на Rust
+
+![]( rusturda2.jpeg)
+1. Параллельность и конкуренция
+Одним из главных преимуществ Rust является простота и безопасность работы с параллельными потоками. Программирование в Rust защищает от большинства классических проблем параллельного программирования:
+
+Race conditions: невозможно одновременное чтение и запись без специальной защиты.
+Deadlocks: исключены при правильной структуре взаимодействия потоков.
+Основные инструменты для работы с потоками включают стандартную библиотеку, основанную на примерах из Go и Erlang, а также стороннюю библиотеку Crossbeam.
+
+2. Обработка ошибок
+Система обработки ошибок в Rust основана на комбинации Result и Option. Вместо исключения Rust предпочитает возвращать специальный тип результата, отражающий успешность или неудачу операции. Такая система лучше интегрирована с механизмом владения и безопасна с точки зрения потоков.
+
+3. Экосистема инструментов
+Одной из сильных сторон Rust является богатая инфраструктура поддержки разработчиков:
+
+* Cargo: мощный менеджер пакетов и сборщик проектов.
+* rustfmt: средство для автоматического форматирования кода.
+* Clap.rs: удобная библиотека для обработки аргументов командной строки.
+* Rustdoc: документация генерируется непосредственно из комментариев в коде.
+Эти инструменты формируют комфортную среду разработки, сокращающую временные затраты и повышающие продуктивность команды.
+
+### Заключение
+Rust стремительно набирает популярность благодаря своему сочетанию мощи, производительности и безопасности. Уникальная модель владения памятью и удобные средства параллельной обработки превращают его в идеальный выбор для современных инфраструктурных проектов и системного программирования. Если ваша задача требует высокой производительности и отказоустойчивости, изучение Rust станет ценным вложением вашего времени и усилий.

+ 27 - 0
Лекции/Rust/ВОПРОСЫ rust урда.txt

@@ -0,0 +1,27 @@
+Вопрос 1: Чем уникален язык программирования Rust и почему его выбирают разработчики?
+
+Ответ: Rust отличается безопасностью памяти, отсутствием сборщика мусора и эффективностью многопоточного программирования. Его выбирает сообщество за высокий уровень надежности и производительности.
+
+Вопрос 2: Как устроено владение (ownership) в Rust и зачем оно нужно?
+
+Ответ: Владение контролирует жизненный цикл ресурсов, предотвращая утечку памяти и небезопасные манипуляции. Каждая переменная владеет своим ресурсом и ответственность за удаление лежит именно на владельце.
+
+Вопрос 3: Какие типы данных существуют в Rust и как они влияют на производительность?
+
+Ответ: Скалярные типы (целые, float, bool, char) эффективны, занимают фиксированную память. Составные типы (кортежи, массивы, String, Vec) обладают большей гибкостью, но требуют больше памяти и вычислений.
+
+Вопрос 4: Что такое trait и как он влияет на реализацию общих алгоритмов?
+
+Ответ: Traits определяют интерфейс, обязательный для типов. Они упрощают реализацию общих функций и алгоритмов, устраняя дублирование кода и увеличивая модульность проектов.
+
+Вопрос 5: Почему Rust считается одним из лучших языков для системного программирования?
+
+Ответ: Благодаря контролю памяти, эффективной работе с потоками и низким накладным расходам, Rust идеально подходит для низкоуровневых задач, где важна производительность и безопасность.
+
+Вопрос 6: Какие инструменты предоставляются для тестирования и профилирования в экосистеме Rust?
+
+Ответ: Cargo test, rustfmt, clap.rs, crossbeam, flamegraph помогают автоматизировать тестирование, улучшение структуры кода и оптимизацию производительности.
+
+Вопрос 7: Приведите пример использования макросов в Rust и объясните их назначение.
+
+Ответ: Макросы облегчают написание повторяющихся конструкций, сокращая объем ручного труда и повышая читаемость кода. Пример: создание макроса для отправки GET-запросов с минимальной избыточностью.