Редактор + компилятор Си? Мне бы ваши сложности

Начнём с того, что в вечерней математической школе при ВМК я уже долгое время преподаю «информатику» (программирование) в одном из факультативных классов. Последние несколько лет это были занятия для «продолжающих» по ЯП Python. Но теперь один из бывших учеников ВМШ (ныне студент) взялся за очень интересный проект «Python для математиков», так что я вернулся к преподаванию Си для начинающих.

«Вначале мне показалось это заманчивым», как сказал парень, который нагишом прыгнул в кактусы.

В самом деле, что нужно для начального изучения программирования (а хоть бы и на базе Си)?

Довольно принципиально, чтобы на первых порах, когда понимание важнее общей скорости работы, ученик представлял себе процесс разработки-отладки по классической схеме:

  1. редактор → текст программы

  2. компилятор → исполняемая программа

    • в случае ошибок компиляции переходим к п. 1
  3. сама программа на каком-то тесте

    • в случае ошибок выполнения переходим к п. 1
  4. сама программа на тестовом покрытии

    • в случае ошибок алгоритма переходим к п. 1

Если вы имеете дело с UNIX-подобной системой (например, GNU/Linux дистрибутивом), то чего уж проще! Если даже в ваш дистрибутив не установлены все эти инструменты уже (скажем, в Альт Образование «из коробки» входят все компоненты, причём иногда в нескольких вариантах), то достаточно выбрать нужные пакеты в пакетном диспетчере и установить из соответствующего хранилища, и всё. Ядро Linux написано на Си. Базовая система написана Си. Что ещё важнее, сами разработчики пользуются именно и только тем, что предлагают пользователям.

Так что в случае UNIX-подобной системы возникнет скорее проблема выбора:

Коротко говоря, при организации такого окружения под Linux главное — не переусложнить, не напичкать его удобными в работе программиста, но необязательными «вкусностями».

И вот теперь у меня ваши сложности

С этими светлыми мыслями я и собрался запустить курс «Си для начинающих», да призадумался.

Мне-то хорошо. В компьютерном классе факультета для занятий ВМШ загружается как раз GNU/Linux-дистрибутив (на сегодняшний день — ALT Starterkit/mate с установкой всех нужных пакетов). Точнее, загружается виртуальная машина с этим дистрибутивом, но про это потом.

А каково будет ученикам (8-9 класс, в основном), когда они попытаются кое-что из узнанного в классах воспроизвести на своём, не побоюсь этого слова, Windows 10? Что они увидят там?

Ладно «воспроизвести»… как вообще по-быстрому написать и запустить программу «Hello, World!» на Си под Windows?

Из пушки по воробьям

Очевидное (некоторые настаивают, что единственное) решение — Visual Studio — не подходит сразу по нескольким статьям:

Из виртуальной пушки по виртуальным воробьям и другие упражнения

VirtualBox

Альтернативная идея — запустить виртуальную машину, в которой просто повторить рабочее Linux-окружение (дистрибутив, приложения, настройки) из класса — не лишена известной прелести.

К сожалению, процедура установки VirtualBox и экспорта образа виртуальной машины (а в особенности — обновления) — всё-таки вещь не совсем тривиальная. Некоторые просто боятся что-то такое устанавливать (особенно если для этого требуются права администратора).

Кроме того, такое решение не универсально, т. к. «привязано» на этот раз к Linux-окружению, и, стало быть, требует для поддержки достаточно квалифицированного Linux-разработчика.

Наконец, образ машины всё таки занимает гигабайта 2, и если его время от времени обновлять, становится тяжеловато.

WWW

Ещё одна идея — попробовать завязаться на сетевые online-сервисы, предоставляющие услугу «редактор и отладчик программ на Си». По большей части такие сервисы — это просто web-интерфейс к такому же Linux-окружению, запускаемому где-то «у дяди на сервере». К сожалению, большинство из таких сервисов — либо вообще не свободные, то есть не воспроизводимые по определению, либо весьма сложные конгломераты WWW-движков, систем управления виртуализацией и ещё чего-то, требующие дополнительной доделки и сопровождения. А стало быть — времени, которого и так мало. Что же касается «дядиного сервера», то совершенного непонятно, когда он из бесплатного станет платным, или вообще прекратит существование. Список подобных сервисов можно найти в сети быстро, а вот найти подходящий мне не удалось. Довольно простым смотрится C++ shell — только исходников от него нет.

Правильным решением была бы «in-browser» реализация консоли, компилятора и редактора (в идеале — и отладчика, больше ничего и не надо) в стиле Skulpt] или [[https://brython.info/Brython (для Python), но таких, по-моему, нет вообще.

Можно поискать что-то вокруг прекрасного проекта Tiny C Compiler + Emscripten, но на сегодня дальше экспериментов дело не заходит.

Старая школа, очень старая

Чтобы больше не возвращаться к этой теме: на самом деле никто не мешает использовать неизвестно кому сегодня принадлежащий (и, видимо, никому уже не нужный) старый добрый DOS-овский Borland C++ или даже Turbo C!

Дело в том, что с запуском любых программ для DOS с успехом справляется проект DOSBox, бинарники которого существуют под все мыслимые системы, включая мобильные телефоны.

Разумеется, всевозможные средства разработки работают под DOSBox отлично.

Возникнут (преодолимые) трудности с копированием файлов из и в DOSBox. Но главное не в этом. Даже те из нас, кто с удовольствием программировал в свое время в BC++, будут неприятно удивлены убогостью и неудобством интерфейса, который казался таим прекрасным, как сказала бы Ч. Тортила, триста лет тому назад.

Ощущение сугубой архаики, ненастоящести и ненужности происходящего очень скоро пересилит интерес к необычной коробочке.

And finally…

Остановимся на (очевидно, разрешимой) задаче: сконструировать (1) лёгкое (2) кросплатформенное окружение для редактирования, отладки и запуска небольших программ на Си. Поскольку для двух из трёх популярных ОС-платформ эта задача решается в силу их UNIX-природы (GNU/Linux и MacOS X), осталось решить её для ОС семейства Windows.

Для этого нам потребуется:

Текстовых редакторов и IDE для Windows существует несколько, я остановится на Geany:

Может быть,стоило выбрать Code::Blocks, не знаю… Мне он кажется более «загадочным»,более ide-шным, чем Geany.

Среди средств компиляции я выбрал проект MinGW (точнее, один из его производных — Mingw-w64).

В принципе, инструкции по установке и настройке того и другого было бы достаточно. Но так вышло, что инструкции не потребовалось.

Дело в том, что MinGW не устанавливает ничего в системные каталоги Windows. То есть «установка» — это просто распаковка в каталог и создание сценария, в котором в PATH добавляется нужный путь, после чего компиляция уже работает.

Более того, в проекте PortableApps.com имеется версия Geany, которая также не требует установки и работает оттуда, откуда запустили.

Пару слов о PortableApps (не реклама, но):

Короче, горячо рекомендую ознакомиться, вы ничем не рискуете!

Ну так вот. В предлагаемом комплекте

Под конец пришлось применить ещё и белую магию. Настройку путей для работы компилятора, по-хорошему, надо делать перед запуском Geany. Был бы это Linux, я бы просто написал командный сценарий. Пытаться изобразить что-то на языке CMD.EXE я не стал, так что получился у меня типичный — и по стилю написания, и по решаемым задачам — шелл-скрипт, только на Си. Компилируется тем же самым MinGW, с ключом -liberty, поэтому считаю данную магию белой!

Полученный каталог помещён в самораспаковывающийса архив, содержимое которого надо распаковать на диск C:, и запустить тот самый скрипт на Си (Geany.exe). Всё.

Ой, нет, ещё не finally

Нерешённые задачи:

Так что если у кого-то есть желание до/переработать описанный выше комплект, я был бы очень рад увидеть результаты.

FrBrGeorge


CategoryArticle

FrBrGeorge/MingwGCC (last edited 2016-11-02 14:30:41 by FrBrGeorge)