Различия между версиями 2 и 3
Версия 2 от 2016-10-26 17:57:40
Размер: 14688
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2016-10-26 19:04:36
Размер: 22574
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 57: Строка 57:
==== VirtualBox ====
Строка 63: Строка 64:
К сожалению, процедура установки !VirtualBox и экспорта образа виртуальной машины — всё-таки вещь не совсем тривиальная. Некоторые просто боятся что-то такое устанавливать (особенно если для этого требуются права администратора). К сожалению, процедура установки !VirtualBox и экспорта образа виртуальной машины (а в особенности — обновления) — всё-таки вещь не совсем тривиальная. Некоторые просто боятся что-то такое устанавливать (особенно если для этого требуются права администратора).
Строка 67: Строка 68:
Наконец, образ машины всё таки занимает гигабайта 2, и если его время от времени обновлять, становится тяжеловато.
Строка 68: Строка 70:
Ещё одна идея — попробовать завязаться на сетевые online-сервисы, предоставляющие услугу «редактор и отладчик программ на Си». По большей части такие сервисы — это просто web-интерфейс к такому же Linux-окружению, запускаемому где-то «у дяди на сервере». К сожалению, большинство из таких сервисов — несвободные, то есть не только ограниченные по возможностям, ==== WWW ====
Ещё одна идея — попробовать завязаться на сетевые online-сервисы, предоставляющие услугу «редактор и отладчик программ на Си». По большей части такие сервисы — это просто web-интерфейс к такому же Linux-окружению, запускаемому где-то «у дяди на сервере». К сожалению, большинство из таких сервисов — либо вообще не свободные, то есть не воспроизводимые по определению, либо весьма сложные конгломераты WWW-движков, систем управления виртуализацией и ещё чего-то, требующие дополнительной доделки и сопровождения. А стало быть — времени, которого и так мало. Что же касается «дядиного сервера», то совершенного непонятно, когда он из бесплатного станет платным, или вообще прекратит существование. Список подобных сервисов можно найти в сети быстро, а вот найти подходящий мне не удалось. Довольно простым смотрится [[http://cpp.sh/|C++ shell]] — только исходников от него нет.
Строка 70: Строка 73:
Правильным решением была бы «in-browser» реализация консоли, компилятора и редактора (в идеале — и отладчика, больше ничего и не надо) в стиле [[http://www.skulpt.org/|Skulpt] или [[https://brython.info/Brython]] (для Python), но таких, по-моему, нет вообще.

Можно поискать что-то вокруг прекрасного проекта [[http://repo.or.cz/tinycc.git|Tiny C Compiler]] + [[http://kripken.github.io/emscripten-site/|Emscripten]], но на сегодня дальше экспериментов дело не заходит.

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

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

Дело в том, что с запуском ''любых'' программ для DOS с успехом справляется проект [[http://www.dosbox.com/|DOSBox]], бинарники которого существуют под все мыслимые системы, включая мобильные телефоны.

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

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

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

=== And finally… ===

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

Для этого нам потребуется:
 * Кроссплатформенный компилятор
  * Возможно, и отладчик
 * Кроссплатформенный редактор
  * Возможно, с интерфейсом к отлачику

Текстовых редакторов и IDE для Windows существует несколько, я остановится на [[http://geany.org/|Geany]]:
 * свободный, кроссплатформенный
 * можно работать как в просто удобном редакторе, а можно воспользоваться свойствами IDE
 * имеет дополнение для отладки (при помощи gdb)
  * [[https://plugins.geany.org/|Дополнения]] ставятся отдельно
 * имеет сравнительно небольшой объём (~70 МБ после установки)

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

Среди средств компиляции я выбрал проект MinGW (точнее, один из его производных — [[http://mingw-w64.org/doku.php|Mingw-w64]].
 * Поддержка довольно современных версий gcc
 * Binutils там же
 * Gdb там же
 * Возможность писать программы на Windows API (мы пользоваться этим не будем)
 * это живой, развивающийся проект
 * средний объём (порядка 300 мегабайтов в полной установке)

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

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

Более того, в проекте [[http://portableapps.com/|PortableApps.com]] имееется версия Geany, которая также не требует установки и работает оттуда, откуда запустили.

Пару слов о !PortableApps (не реклама, но):
 * Это ''дистрибутив'' свободных и бесплатных программ для Windows
  * На всякий случай повторю: Дистрибутив. Свободных программ. Для Windows. Да-да, обновления, лицензионная чистота, выбрал из сотен программ, ткнул, установил, не понравилось — удалил, вот это всё.
 * Все приложения !PortableApps устроены так, чтобы их можно было записать на флешку, принести на другой компьютер, и оттуда запустить, без опять-таки установки
Короче, горячо рекомендую ознакомиться, вы ничем не рискуете!

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

Кроссплатформенное рабочее окружение для обучения Си

Среда для начального программирования на Си для любой ОС на базе Geany/GCC/binutils/GDB.

В GNU/Linux системах достаточно просто развернуть «лёгкое» окружение для базового программирования на языке Си: любой приличный редактор исходного кода, GCC, GDB (возможно, с визуальным интерфейсом или дополнением к редактору), остальное — часть системы. Такое окружение, с одной стороны, поддерживает «быстрый старт» (написал программу, нажал кнопку «выполнить»), а с другой — не скрывает выполняемые при этом действия (запуск редактора, запуск компилятора, запуск получившейся программы). Однако для ОС семейства Windows готовых «лёгких» комплектов, оказывается, нет. Теперь есть ☺.

Мне бы ваши сложности

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

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

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

  • компилятор
  • текстовый редактор
  • возможность запускать компилятор, текстовый редактор и скомпилированную программу ☺

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

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

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

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

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

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

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

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

  • Любой приличный программистский редактор годится в качестве редактора кода (даже приличных в хранилище десятки)

    • Некоторые спорят, исключать ли из этого списка vim и emacs, или, наоборот, исключать все остальные редакторы… Пусть их спорят. Лично я пользуюсь почти исключительно vim, но рекомендовать его для факультативных занятий по расписанию «одна пара в неделю» не могу.
    • Я бы исключил из списка «промышленные» IDE типа Eclipse или NetBeans и им подобные в стиле «всё-в-одной-кнопке, а кнопок мильён». Использование таких инструментов требует много времени на изучение и освоение самих инструментов, они много «весят» и как правило, сильно отдаляют пользователя от понимания действительного процесса превращения исходного кода в запущенную программу. Строгий критерий: если IDE ориентирован на работу с «проектами», особенно в своём каком-то внутреннем формате, и в нём нельзя «просто так» открыть и скомпилировать файл на Си, не используйте его.

  • В GNU/Liunx-системах всегда есть компилятор GCC, в некоторых других лучше ориентироваться на CLang
  • Запуск произвольной программы с организацией ввода-ввода — глубоко естественная операция для командного интерпретатора UNIX-системы
  • Что касается «тестового покрытия», то применительно к курсу «Си для начинающих» это звучит, конечно, громковато. Тем не менее должна быть возможность не только запускать программу, но и делать это много раз, на различных входных данных (в том числе на одних и тех же), а ещё сравнивать вывод программы с «правильным». Всё это естественным путём получается опять-таки с помощью командного интерпретатора и его перенаправления ввода-вывода

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

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

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

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

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

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

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

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

  • Для начала, оно не кроссплатформенное. То есть дома у себя дети увидят одно, а на занятиях совсем другое.
  • Во-вторых, Visual Studio относится как раз к классу «Монстров промышленного размера», которые хотелось бы не использовать, потому что более 95% их начинки лучше не просто не использовать, а научиться не замечать. К тому же версия 2015 года занимает 7 гигабайтов на диске, это ж ещё скачать и установить надо.
  • В-третьих, при всей своей бесплатности, и сам продукт, и, что важнее, любая порождаемая им программа обложены довольно строгими лицензионными ограничениями. Даже написанную вами (в Educational версии) программу нельзя запускать иначе как с учебными целями. Казалось бы, нам это не должно мешать, а всё-таки нехорошо. Чревато принуждением к покупке, vendor lock in и прочими прелестями проприетарного мира.

  • И, наконец, самое главное. В сети тут и там идут непрекращающиеся споры о том, работает ли вообще примитивный «Hello, world!» в VS из коробки. Вот вроде бы работающий вариант… а может, и нет.

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

VirtualBox

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

  • Установка и использование какого-нибудь VirtualBox — в меру несложное дело, к тому же одноразовое — поставил и всё.

  • Несколько сложнее с экспортом самой виртуалки, потому что экспортируемый образ должен работать почти на любой конфигурации хост-системы, поэтому из него надо поубирать различные ненужные устройства, свойства и пр. Впрочем, занимается этим не ученик. Такой подход неплохо зарекомендовал себя, например, в факультетском спецкурсе по сетевым протоколам.

  • Самое привлекательное: в классе и дома можно запускать одну и ту же виртуалку, то есть сложности и неудачи дома можно более-менее гарантировано решать в классе при преподавателе.

К сожалению, процедура установки 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), осталось решить её для ОС семейства Widows.

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

  • Кроссплатформенный компилятор
    • Возможно, и отладчик
  • Кроссплатформенный редактор
    • Возможно, с интерфейсом к отлачику

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

  • свободный, кроссплатформенный
  • можно работать как в просто удобном редакторе, а можно воспользоваться свойствами IDE
  • имеет дополнение для отладки (при помощи gdb)
  • имеет сравнительно небольшой объём (~70 МБ после установки)

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

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

  • Поддержка довольно современных версий gcc
  • Binutils там же
  • Gdb там же
  • Возможность писать программы на Windows API (мы пользоваться этим не будем)
  • это живой, развивающийся проект
  • средний объём (порядка 300 мегабайтов в полной установке)

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

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

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

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

  • Это дистрибутив свободных и бесплатных программ для Windows

    • На всякий случай повторю: Дистрибутив. Свободных программ. Для Windows. Да-да, обновления, лицензионная чистота, выбрал из сотен программ, ткнул, установил, не понравилось — удалил, вот это всё.
  • Все приложения PortableApps устроены так, чтобы их можно было записать на флешку, принести на другой компьютер, и оттуда запустить, без опять-таки установки

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

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

TODO

кодировки?

Не забывать:

  • ссылки на упоминаемые и аналогичный ресурсы
  • ожилвяж


CategoryArticle

FrBrGeorge/MingwGCC (последним исправлял пользователь FrBrGeorge 2016-11-02 17:30:41)