×
🏆 Пройди Квест на ДСА 2018
Фото Вступление в наСИлие

Вступление в наСИлие

19 дней назад

When I find my code in tons of trouble
Friends and colleagues come to me,
Speaking words of wisdom...
Write in C!

– schoedav, кавер на "Let it be"

Знание языка Си не является обязательным ни для программиста, ни для любого нормального человека. Однако, если хочется чуть больше понимать в том, как устроен компьютер и сбросить вуаль сахара высокоуровневых языков, Вам стоит ознакомиться с этой книгой.

Сама книга написана по мотивам курса по языку Си для студентов второго года обучения компьютерно-ориентированной специальности.

О курсе

Ранее C рассматривался в курсе "Языков и Технологий Программирования", но его заменили на C#. Казалось бы, один символ, но вся системшина ушла.

Ну и хорошо! Хорошо же?

Как только мы переходим к реальности: ассемблер, аппаратные средства вычислительной техники... Мы оказываемся в абсолютной тьме. Потому что важно перед тем, как копнуть совсем в железо, надо понимать компьютер хоть на уровне околосистемного программиста.

Именно так и вернулся Си в программу. Опять же, не в виде всеобъемлющей многотомной книги, а в рамках ЛикБеза-развлечения.

Ориентируемся на стандарт С11, компилятор clang, ОС GNU/Linux. Предполагается, что слушатель уже имеет представление о каком-либо высокоуровневом языке. В частности, многие аналогии из Python.

Продолжительность

Курс длится 1 семестр, 1 пара в неделю (около 13 занятий). Лекции и практика совмещены - чем дальше, тем больше код будет превалировать над текстом, а домашняя работа над работой в аудитории.

Если вы изучаете Си самостоятельно, то можно оценить время как:

  • Тема "весит" 1 час;
  • ДЗ "весит" от 15 минут до 3-х часов ближе к концу.

Отчётность

"Допуск от 60 баллов, зачёт" - предполагалось, но удалось этого избежать благодаря попустительству университета. Поэтому работаем в своё удовольствие.

История

Язык Си разработан Деннисом Ритчи (помните, он ещё и Unix сделал) в соавторстве с Брайаном Керниганом. Всё это было в лабораториях Белла (AT&T). А всё из-за отсутствия вменяемого инструмента разработки системных программ – по сути только один ассемблер был... Хотелось чего-то более высокоуровневого.

Где используется Си, мотивация изучать Си

Unix написан на Си, Linux написан на Си... Драйверы на Си. Даже Windows на Си. Всё это – реальное положение дел в компьютере.

Благодаря тому, что абстракции языка близки к реальной архитектуре компьютера, получается писать эффективный код + управлять устройствами.

То есть по большей части Си используется для:

  • Разработки Операционных Систем (системное/сетевое программирование)
  • Программирования микроконтроллеров (носимая электронника, машины, кофеварки и т.д.)
  • ПО реального времени (стримминг/перекодировка видео/аудио)
  • Если нужно хоть как-то взаимодействовать с железом - придётся написать биндинг для вашего любимого языка на... Си. Такие дела.

Что есть в языке Си?

Мало ключевых слов – легко выучить ;-)

Вместо классов (описатетелей сложных сущностей) – структуры данных (+ юнионы). Аналог namedtuple/dataclass в Python.

Мощный инструмент указателей (на память) – помните принцип адресуемости памяти дядюшки Неймана?

Компилируется в нативный код – читай в язык процессора.

Макросы (препроцессор) – надстройка, позволяющая "именовать" частоповторяющиеся операции.

Чего нет в языке Си?

Проверки границ массивов/структур и вообще данных. Легко можно всё испортить. Например, мы можем создать массив из 10 элементов и записать в 11-ый... Само собой, это повлияет на другие данные, сломает вашу программу.

Строгая типизация. Типы есть, но они довольно неплохо преобразуются друг к другу. Да и вцелом – мы работаем с памятью, все типы данных – просто условность! И хоть и есть ошибки компиляции, связанные с проверкой типов данных, далеко не всё проверяется.

Автоматической сборки мусора. Всё, что динамически создаёте – сами и удаляете. Не забывайте прибираться – иначе утечки памяти.

Нет исключений (exceptions) – ошибки не райзятся, а обрабатываются на уровне возвращаемых значений / специальной переменной errno.

ООП. На самом деле, были попытки, но Си не про ООП, а про данные и устройства.

Итак, дальше нужно понимать, что если где-то "всё есть объект", где-то "всё есть функция", то в Си - "всё есть байт".

Список тем

  1. Вступительная пара

Комментарии

Фото
18 дней назад ildar nizamov

Что есть в языке Си? UB =)

Чего нет в языке Си? Нормальных строк и полноценной стандартной библиотеки.

Само собой, это повлияет на другие данные, сломает вашу программу. Нельзя полагаться на это. Не факт, что вы вообще заметите эту ошибку, пока звёзды не встанут в ряд.

Фото
18 дней назад Гоша

Всё зависит от точки зрения. У меня нет задачи обратить всех в Сишников, но поглядеть на этот мир с точки зрения Си - интересно и даже полезно.

Фото Как в Ubuntu отключить уведомления об ошибках
Предыдущая запись:
Как в Ubuntu отключить уведомления об ошибках
Фото Первая реальная утилита
Следующая запись:
Первая реальная утилита