Всем доброго времени суток! Решил ознакомится со столь удивительной вещью, как Pascal! Но проблема в том, что я не знаю с чего начать! По этому, я обращаюсь к великим гуру и прошу наставить на путь истинный. Все, что касается этой темы приветствуется.
P.S: Все, что надо для начало работы я скачал, мне нужен только учебный материал.
Есть хорошая книга "Песни о Паскале" - там рассказывается от первых шагов со средой программирования.
http://oleg.derevenets.com/
Далее - решение домашних заданий. А также некоторые практикуют помощь двоечникам на форумах. За качество решений, обычно, некоторое время их критикуют, порой даже грубо. Но где-то же нужно учиться. Главное понимать для себя - зачем сам пришёл на форум, и что на форуме люди разной квалификации.
Пока вы начинаете, подскажу ещё некоторые инструменты. Есть готовые бесплатные программы для форматирования исходных кодов. Я очень настоятельно рекомендую ими пользоваться. Из того, что доступно, можно взять JCF. Ссылки на пояснения http://forum.sources.ru/index.php?showtopic=373648, http://forum.pascal.net.ru/index.php?showtopic=24653. И ещё, статья, почему это нужно http://www.gunsmoker.ru/2011/01/blog-post.html. И ещё, мне очень понравилась идея статьи http://www.gunsmoker.ru/2010/05/90.html.
Успехов.
Еще вопрос. А каким паскалем лучше пользоваться? Вообще, хочу написать на нем текстовый рогалик. так какой будет лучше всего для достижение моей мечты? Желательно на Windows 8.1 64x
Хороший Паскаль называется Ада. На худой конец Delphi из тех, что поновее, хотя бы XE2. Про FPC ничего положительного сказать не могу за всё время работы с ним. Сильно на любителя.
И есть ещё варианты для компиляции в Web, такие, как https://bitbucket.org/egrange/dwscript/, но он, наверное, не готов для новичков.
Лучший пистолет - который в руке. Чем можете пользоваться, на том и реализуйте.
По моему мнению, Delphi - хорошо, но он платный и дорогой. Поэтому, если выбирать паскаль на короткий и некоммерческий период, то - FreePascal. У него есть Delphi-подобная RAD - рисовалка окошек Lazarus. В Lazarus можно вести и консольные проекты. Для помощи в ответах на форуме лично я пользуюсь SciTE (настройки обсуждались на форуме и легко находятся поиском, а также в интернете), читал, что можно Notepad++, Code::Block.
Язык Ада мне незнаком. Но судя по рекламной полоске на шапке форума, какая-то помощь при изучении будет вам оказана.
Про рогалик впервые прочитал месяц назад на форуме FreeBASIC - http://free-basic.ru/g00.html. Что ещё раз подтверждает мысль из первого абзаца.
OCTAGRAM, Где найти компилятор для ады? И где вообще на ней писать?
Как правильно заметили, в шапке есть некоторая информация на эту тему. Компилятор и IDE, которыми я пользуюсь, я скачиваю http://libre.adacore.com/download/configurations.
Выбираю x86 (Windows), раскрываю GNAT Ada GPL 2015, там качаю и устанавливаю gnat-gpl-2015-x86-windows-bin.exe, затем качаю и устанавливаю Win32Ada GPL 2015. Я вообще много, чего ставлю, и через MSYS из исходников могу собрать, но ограничимся пока таким набором.
Редактирую я обычно попеременно в GPS (это IDE там такая) и в http://www.farmanager.com/download.php?l=ru, а если под Linux или Mac OS X — то в nano. Far Manager настоятельно рекомендую поставить.
Я собрал минимальную консольную программу, чтоб было, с чего начинать:
Minimal_Console.zip ( 30.63 килобайт )
Кол-во скачиваний: 611
Нужно открыть GPS, далее Edit » Preferences… » General » Character set поменять с Western/Latin-1 (ISO-8859-1) на Unicode UTF-8. После этого Project » Open … и выбрать Minimal_Console.gpr в том месте, где он распакован. Слева появится контейнер–проект под названием «Minimal_Console», в нём папка «.», если её развернуть, там несколько файлов, из них главный — это Minimal_Console.Main.adb. Если всё настроено нормально, то там будет видно русские буквы.
Собирать можно из IDE, Build Main — это выполнить, а Run Main — запустить, но запускаются они они там не в консоли Windows, а во вкладке, и обычно это удобно, но рисовать, как на консоли текстом, не получится. Поэтому либо отдельно запускать, либо через Far. Ну либо можно ещё запрограммировать принудительное создание консоли.
Что касается Far, нужно после установки сделать F9 » Options » Languages » Russian (Русский) » Russian (Русский), затем F9 » Параметры » Настройки программы просмотра » Кодовую страницу по умолчанию поменять на «65001| UTF-8» и так же для редактора: F9 » Параметры » Настройки редактора » Кодовую страницу по умолчанию поменять на «65001| UTF-8». Чтобы настройки сохранились, Shift-F9. На этом с настройкой Far более менее всё.
Компиляция из командной строки: gprbuild Minimal_Console.gpr
По изучению Ada можно посоветовать http://www.ada-ru.org/V-0.4w/index.html, либо http://www.mediascan.by/index.files/oem2010.html#_Toc267052415. http://www.ada-auth.org/standards/12rm/html/RM-TOC.html; а также http://www.ada-ru.org/arm83/index.html.
В моём архиве я сделал, чтобы работал юникодный вывод строк, но не ввод, потому что из того проекта, откуда я вырезал, ввода из консоли не было, был только веб–сервер, который мог писать в консоль отладочные сообщения. Если нужно, можно подумать над тем, чтобы подключить библиотеку WinLineEdit, но я так понимаю, управление должно быть стрелками, так что работу над вводом надо как–то по–другому делать, через события консоли.
Faust VIII, выбирайте любой язык - хуже не будет. Начнёте реализовывать рогалик, наберётесь опыта. В конце-концов, я изучал только Pascal, а когда понадобилось программировать PLC - изучил ещё LD (RLL Plus), ST, FBD, SFC, когда захотел поиграться с микроконтроллерами (для работы сделать приспособу на макетке) - изучил C (естественно, не весь, а только основные конструкции). Самостоятельно изучал Ada по книжке, но остановился на том из-за отсутствия интернета и компилятора в ту пору. Это я к тому, что все языки почти одинаковы. Разница проявляется лишь в "заточенности" на конкретные задачи.
OCTAGRAM, вы толкаете новичка на менее документированный путь - http://www.cyberforum.ru/other-lang/thread1492716.html. Ведь помимо ядра языка, в реальной жизни применяются готовые библиотеки (например, стандартный C/C++ богат этим, настолько, что старые реализации Pascal - просто голодранцы беспомощные). Это помимо не самой распространённости языка и тех, кто сможет помочь. Хотя по этой ссылке упоминается автор книги-учебника - А.Е. Гавва - Адское программирование, в которой рассмотрено почти всё, что нужно и по конструкциям и по организации работы.
Ещё, поделитесь, что подтолкнуло на переход к Ada - самостоятельный перебор инструментов, требование работодателя или что-то иное?
Использовать таски я не рекомендую без прочтения хотя бы раздела книги Танненбаума «Операционные системы» или Р. Бара, было у него что–то как раз про многозадачность в языке Ада. А Delphi — это вообще копец! Такого примитива синхронизации, как условные переменные, долго не было в стандартном наборе, зато там вот эти самозавершающиеся потоки, с которыми пришлось повозиться в PayPRO. Ну не делается так по–хорошему. Правильно, что в Аде неудобно делать то, что пытался автор того поста.
Сам я в далёком 1996м году начинал изучать QBASIC, имея только скудную документацию на английском, которого нифига не знал. Сейчас, мне кажется, возможности гораздо выше. Не надо утрировать.
У меня были сильные неудовлетворённости от Delphi, его разработчики, тогда ещё Borland, никак не хотели делать то, что мне нужно, а в Аде я нашёл язык, который сделали как положено.
Хмм, а теперь я совсем растерялся! Можно какое-нибудь сравнение, сходство, различия и прочее. Можно продемонстрировать какие-нибудь сложные программы, что-бы прям "ну ваще". Те же рогалики. Но можно так же и программы с выводом на экран. И главное, что надо:
Pascal:
1. Какие комплераторы использовать лучше и различия?
2. Какой Pascal лучше?
3. Преимущества перед Ada'й?
Ada:
1. Какие комплераторы использовать лучше и различия?
2. Какая Ada лучше?
3. Преимущества перед Pascal'ем?
Среда разработки GPS для Ады написана на Аде. И та часть компилятора, которая обрабатывает Аду, тоже написана на Аде (оптимизацией занимается GCC, написанный на C). Это достаточно сложно? По мне, так да.
Играми, к сожалению, последний раз в 90х занимался, на Турбо Паскале под EGA графику. Но сейчас, если бы понадобилось делать, взял бы https://github.com/Lucretia/sdlada, почитал доки по SDL и написал такое же, но на Ada. Нормальная практика — читать пример для одного языка программирования и писать на другом. Автор SDLAda в IRC сидит, можно у него при случае спросить, если что не понятно.
В текстовом режиме игру будет сделать проще, мне кажется.
Как общий принцип, то, как я уловил дух языков и сообществ вокруг них: Ада для инженеров, Free Pascal — для хакеров, Delphi — для базаданьщиков, что, впрочем, не мешает использовать их крест на крест. Так, я хаки на Аде тоже запросто делал, а для Delphi нашёл https://blog.gurock.com/software/win32-condition-variables-and-monitors-for-delphi/ и если не мог писать на Ada, то хотя бы на Delphi писал многопоточный код как положено, а не как у юных хакеров.
Delphi (да и Lazarus) подкупают доступностью IDE, но с другой стороны, код, который эта IDE производит, реализует https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82. Теоретически возможно на Delphi и FreePascal использовать другие графические движки, но я таких примеров знаю не много.
Ada во многих качествах близка к C++. И в положительных, и в отрицательных. Положительная сторона — это свобода в выборе графического движка, богатство библиотек, а обратная сторона — это то, что есть куча разношёрстных не стыкующихся друг с другом решений. Хотя в Delphi тоже есть переход от VCL к FireMonkey, два разных движка, но, сдаётся мне, они более близки друг к другу, чем то, что используется для создания графических программ на Ada. Лидерами тут являются GtkAda, на которой сделана среда разработки GPS, и QtAda Вадима Годунко. Они являются обёртками для Gtk+ и Qt, соответственно. Помню, было ещё что–то для интеграции с Tcl/Tk. Это из кроссплатформенных. В библиотеке OEM для графики применяется GWindows Дэвида Боттона, работать она будет только на Windows. Ещё есть чисто адская графическая библиотека Lumen, использующая OpenGL, но её готовность мне не известна. Если бы мне завтра нужно было делать графический интерфейс на Аде, я бы скрипнул зубами, но взял QtAda. Не люблю я Qt, но уж больно хорошо QtAda сделана.
Pascal сейчас, главным образом, представлен Embarcadero Delphi и FreePascal. Delphi более профессионален, но ценовая политика, конечно, удручает, и то сообщество, которое было, всё рассасывалось и рассасывалось. Очень хороший ход был раздать Turbo Delphi 2006 Explorer на шару всем желающим. Я, правда, не успел. Там нужен был ключ, который на сайте можно было получить в ограниченный период времени. И больше такого не было, зато появлялись запреты, например, в дешёвых версиях использовать базы данных. Идут по инерции и выжимают соки из того, что есть. Поддерживают Windows и Mac OS X, и делают это довольно хорошо. Есть у них ещё версии для Android и iOS, но там в чём–то уже другой язык, который, кстати, мне нравится больше. В мобильном Delphi есть долгожданный подсчёт ссылок для классов. Я его ждал–ждал, ждал–ждал, плюнул, перешёл на Аду, и лет через восемь оно таки появилось, но пока только в мобильной версии. И то появилось не потому что там откровение кому–то снизошло, а потому что Apple реализовал ARC (автоматический подсчёт ссылок) в LLVM, перенёс на LLVM свой Objective-C, а чтобы Delphi компилировать под iOS, в Embarcadero сделали переделали компилятор под LLVM и просто воспользовались тем ARC, который там уже был. Но в общем, при своей закостенелости, всё же сделали они много. Если скачать пиратский Delphi из p2p, этот продукт будет гораздо лучше, чем FreePascal, и в чём–то лучше, чем Ada. Всё более хороший компилятор Delphi для всё более узкого круга разработчиков, я бы так охарактеризовал эту ситуацию.
FreePascal — компилятор гораздо более консервативный, и разработчики у него что–то с чем–то. Ну, какие есть. Если разработчики Delphi, когда добавляют в язык новые возможности, оглядываются на Delphi, то разработчики FreePascal делают то, в чём усматривается влияние C++, и получается пакость. http://thread.gmane.org/gmane.comp.compilers.free-pascal.general/14148/focus=14169, а зря. Глядишь, что–то путное бы сделали в кой–то веки хоть кто–нибудь. Какое–то время между Delphi 7 (2001) и Delphi 2005 у Borland был кризис, да и потом их поштормило, то CodeGear, то теперь вот Embarcadero очередные владельцы. На какое–то время FreePascal перехватил инициативу инноваций, и у них и в самом деле был более крутой язык. http://habrahabr.ru/post/163241/, но у FreePascal хотя бы перегрузку операторов (плюс, умножить, больше, меньше и т. п.) сделали раньше, чем в Delphi. В Delphi это потом тоже сделали, кажется в 2006, но с другим синтаксисом, ближе к .NET, и получилось, на мой взгляд, лучше, чем в скопировавшем C++ FreePascal. Generic раньше появились во FreePascal. В Delphi они были только в 2009. И тоже, на мой взгляд, в Delphi сделаны лучше. Хотя без RAII они нормально работать не могут, на мой взгляд, но в Delphi 2009 отсутствие нормального RAII лучше скомпенсировано в контейнерах. В Delphi можно указать контейнеру http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Generics.Collections.TCollectionNotification, раз уж нельзя напрямую на сам тип навешивать RAII. Разработчики FreePascal и те, кто показывал примеры generic, делали примеры, где контейнер работает то с числами, то со строками, но вот как–то не чувствуется у них понимание, что для строк RAII навешивается магией компилятора, и работает это поэтому идеально, а для своего типа, хоть ты плачь, так же идеально сделать нельзя, а без этого какой интерес? Получаются контейнеры, которые нормально работают только с числами и строками.
Положительным качеством является то, что портирован под кучу платформ. Хотя у них тут с Адой не всё так однозначно. FreePascal портирован под мобильные платформы. У Ada я видел порт под Android на http://www.dragonlace.net/, кто–то сделал, чтоб с FreeBSD можно было под Android разрабатывать, а вот из–под Windows, наверное, тоже можно собрать, но не собирал никто. Что касается iOS, один из сотрудников AdaCore похвастался, что они у себя собрали версию под iOS, но никому не дадут. Вроде как не нужна. С другой стороны, у Ada есть компиляторы в Java VM и .NET, а у FreePascal — нет. Это может пригодиться на хостингах, на которых можно размещать только управляемый код. Вот у Google, кажется, есть Google Apps, на котором только Java VM может работать, и даже вроде бесплатно можно было что–нибудь хостить, если вписаться в ограничения по памяти, жёсткому диску, обращений из сети и т. п.
У Delphi был компилятор Delphi.Net, но от языка Delphi он сильно отличался, например, там с бухты–барахты все строки стали неизменяемыми, и поэтому не было никакого преимущества, какое есть у одного языка, по–разному компилируемого. Я, конечно, понимаю, что когда работает счётчик ссылок, можно точно знать, является ли владелец строки первым и последним, и можно сделать строку уникальной, если нет, а при сборке мусора о владельцах в общем случае ничего не известно, но всё же, я вот ещё на языке Icon писал, и, хотя там тоже сборка мусора, но когда я работаю со строками, я этого никак не чувствую, там внутри всё само заменяется как надо, как если бы я писал на Delphi или Ada. Это значит, можно было и в Delphi.Net прозрачный переход сделать. Но не сделали.
Далее, FreePascal и Delphi реализуют языки, для которых они сами и являются законодателями. Для языка Ada, в отличие от них, есть международные стандарты ISO по годам: Ada-83, Ada-95, Ada-2005, Ada-2012. Для Паскаля, вообще говоря тоже был стандарт ISO, но Delphi и FreePascal от него ушли оооочень далеко, но если вдруг захочется компилятор Паскаля по стандарту ISO, один такой называется GNU Pascal (GPC).
Стандарт на язык Ада подразумевал, что будет множество реализаций, и сам стандарт обеспечит возможность менять производителя компилятора. Последний стандарт, для которого так оно и было, был Ada-95. Ada-2005 был реализован только в GNAT, а остальные компиляторы реализовали только отдельные возможности Ada-2005. С появлением стандарта Ada-2012 GNAT остался вне конкуренции, и возможности, которые в этот стандарт вошли (программирование по контракту, например), появились раньше стандарта в GNAT. Сам GNAT при этом полностью открыт. AdaCore раз в год выпускает GNAT GPL, скомпилированный сотрудниками своей компании. Те, кто купили у них GNAT Pro (при курсе доллара в 30 рублей минимальный заказ стоил 60000руб. за команду из 5 разработчиков), получали доступ к различным комбинациям кросскомпиляторов и некоторых платформ, под которые нет версии GPL. Ну, например, Mac OS X для Intel архитектуры одно время был типа эксклюзивом для версии Pro, а в GPL была только PowerPC, которая, впрочем, в Mac OS X для Интелов замечательно эмулировалась. При этом https://gcc.gnu.org/. AdaCore отправляет свои улучшения в так называемый FSF GCC, но уже под лицензией GMGPL, не требующей открытия исходных кодов, и обычно все сторонние сборки GNAT основаны на коде из FSF GCC. Особо желающий может собирать из свежих исходников от GPL версии, их можно скачать с того же сайта, что и установщик.
Одна из таких сборок, основанная на FSF GCC — это http://tdm-gcc.tdragon.net/download, ссылка на который есть в шапке. Но есть ещё в MinGW, MinGW64, Cygwin тоже сборки GNAT. Если под Linux Debian или Ubuntu установить apt-get install gnat, это будет тоже GNAT из FSF GCC. Под Mac OS X Intel году так в 2007м востребованы были сборки GNAT от Andrew Reynolds.
Так как мне и многим, я думаю, доступ к новым фичам важнее лицензионных ограничений GPL, то я сижу на GPL версиях обычно. Но если что, есть и другие.
Из выбывших из состязания компиляторов примечателен AdaMagic от SofCheck. У них был прошедший сертификацию компилятор Ada 95 в C/C++. Они эту технологию давно не развивали и потом продали её http://www.mapusoft.com/ada-to-c-changer/'у, и кроме как у них, я сейчас не знаю, где её можно достать. Компилятор у них поддерживает Ada 95 с некоторыми возможностями Ada 2005, какими именно, не знаю. Среди интересных платформ вижу, тоже есть Android, зато нет iOS. Имея транслятор в C, наверное, компилировать в iOS было бы легче, но я не знаю наверняка. Скачал как–то, глянул, что там внутри. exe'шники никакой особой защитой не закрыты, я, наверное, мог бы их ломануть или написать кейген. Некоторые потенциально ключевые файлы типа библиотеки времени исполнения, зашифрованы, но не знаю, наколько это большое препятствие, сишные–то файлы на выходе транслятора присутствуют, можно и пересобрать. Для меня технология трансляции в C представляет интерес, так как было бы здорово транслировать в Asm.js, NaCl, FlasCC, WebAssembly, и чтобы всё это работало в браузере. Но там в любом случае надо будет что–то дорабатывать, к чему я не готов сейчас.
Впрочем, Максим Резник разработал A2JS, который может компилировать ограниченное подмножество Ada в JavaScript. http://forge.ada-ru.org/matreshka/wiki/Web/A2JS.
Сам SofCheck был куплен AdaCore, и у AdaCore эта технология тоже есть. Про AdaMagic нельзя ничего найти на сайте AdaCore, зато она упоминалась в http://parasail-programming-language.blogspot.ru/2014/06/linkers-and-types-and-built-ins-oh-my.html. Есть языки, реализующие программирование на зелёных потоках: Erlang, Limbo, Rust, Go. Такие языки, как ParaSail, Sparkel, Javallel и Parython — из той же серии, но со своими идеями. Из них Javallel похож на Java, Parython — на Python, Sparkel — на Ada, а ParaSail — помесь всех трёх. Все четверо компилируются в байто–код, который работает на общей виртуальной машине. Компилятор и виртуальная машина написаны, понятное дело, на Аде. Эксперименты с языком они там, похоже, не закончили, релиз не объявлен. Я сам пытался перенести что–нибудь с node.js, но быстро наткнулся на то, что в Sparkel из коробки нет HTTP, XML и JSON. Добавить их можно было бы, но уже по такому нюансу чувствуется, что язык пока экспериментальный.
Некий интерес могла представлять ObjectAda. Интересна она тем, что там было IDE со встроенным конструктором форм, наиболее близко к тому, что есть в Delphi. Но она тоже так и застряла на Ada 95 с небольшими дополнениями из Ada 2005. Где–то попадалась пиратская версия, но большого интереса, мне кажется, давно не представляет.
Решил помучить Паскаль. Напишу пару игр/программ, возьмусь за Аду, может, информации побольше о ней появится. А так, кидайте все, что может помочь в начале. Думаю, многим новичкам это пригодится
На pascal.net.ru разбросаны комментарии про аналоги того или иного элемента синтаксиса имеет в Аде.
Например:
http://pascal.net.ru/for
http://pascal.net.ru/while
http://pascal.net.ru/begin
http://pascal.net.ru/Exit
http://pascal.net.ru/Integer
http://pascal.net.ru/array
Всё, что пишется про Паскаль, можно в уме переделывать на Аду.
Как сделать окно вывода изображения на Паскале? Не просто вывода, а картинку, ну там типо карты и прочего. А и пока еще здесь, как создать модель/предмет/@, которой можно управлять. И как?
Для какого из Паскалей? И если графика, то нужно графический движок выбрать.
Если в текстовом режиме, то через модуль http://pascal.net.ru/Crt-Unit. Курсор по экрану перемещается процедурой http://pascal.net.ru/GotoXY, затем на экран выводятся символы самым обычным http://pascal.net.ru/Write. Графика в текстовом режиме рисуется символами псевдографики, их коды можно посмотреть в http://pascal.net.ru/866. Чтобы получить символ с каким–то номером, можно воспользоваться функцией http://pascal.net.ru/Chr, либо написать их номер после решётки. Переключать цвет можно при помощи http://pascal.net.ru/TextColor и http://pascal.net.ru/TextBackground. Перед началом игры имеет смысл переключить режим при помощи http://pascal.net.ru/TextMode+%282%29(C80 + Font8x8), чтобы знакоместо стало более квадратным, и можно было уместить больше информации на экране.
Не проверял, но что–то близко к этому должно нарисовать коробочку:
uses
Crt;
begin
GotoXY(2, 2);
Write(Chr(218) + Chr (196) + Chr (196) + Chr(191));
GotoXY(2, 3);
Write(Chr(179) + ' ' + Chr(179));
GotoXY(2, 4);
Write(Chr(179) + ' ' + Chr(179));
GotoXY(2, 5);
Write(Chr(192) + Chr (196) + Chr (196) + Chr(217));
end.
Сделаю небольшое отступление.
В своём посте я привёл ссылку на книгу "Песни о Паскале" не просто так. А ещё и с явной мыслью не знакомить ТС с таким названием, как TurboPascal. На данный момент этот компилятор закончил жизненный цикл вместе с операционкой DOS. Совсем.
Удали его и потом помой руки с мылом.
Установи Free Pascal. На том же сайте есть документация, ознакомься со всеми pdf. Справка по составу стандартных модулей в rtl.pdf.
Вместо штатного CRT используй WinCRT из пакета http://math.ubbcluj.ro/~sberinde/wingraph/main.html. Да и WinGraph оттуда же.
Если не лезть в свойства системы и не пытаться работать на низком уровне (создать свои CRT или Graph, работать со шрифтами консоли, используя прямые обращения к ОС) - то никакой разницы нет. Особенно, если в начале программы поставить {$mode TP}. Но если забыть и не поставить, то в 90% случаев будет работать.
http://www.freepascal.org/port.var
А! Есть разница. FPC родной для Windows, а Turbo работает в виртуальной машине, эмулирующей DOS.
Насчёт жизненного цикла я бы не горячился. Кофейные автоматы и торговые терминалы супермаркетов смеются над вашими представлениями о жизненном цикле. Ну хоть в бюджетных организациях от FoxPro отошли почти везде.
Добиться на Turbo Pascal того, что нужно, тем не менее, вполне возможно.
У меня стоит в подписи английская пословица, хорошего перевода которой я не нашёл, но она примерно значит «Если хочешь добраться до вершины, нужно начинать с низов». В этом смысле некоторая польза от Turbo есть. Там очень мало синтаксического сахара, нет неявных указателей, многие угловатости реального CPU чувствуются через язык, но всё же не настолько много, как в C, где даже со строками толком не поработать поначалу.
Free Pascal и GNAT — это современные 32/64хбитные компиляторы. Для программиста наиболее заметно, что на них можно выделать большие куски памяти (Turbo Pascal может максимум выделить 65536 байт одним куском, но, правда, таких кусков может быть несколько), вплоть до Гигабайтов, хотя если много выделять, работать это хорошо не будет.
Turbo Pascal и его непосредственный преемник поднялись за счёт того, что были хорошо заточены под одну OS. И модуль Crt эту заточенность воплощает. В DOS можно было выбрать только одну кодировку, в РФ это 866ая, в одной кодировке только 256 символов. Кроме того, в DOS было 16 цветов фона и цвета символа.
Насколько мне известно, все реализации Crt тащат за собой все эти ограничения. И если для Turbo Pascal это простительно, то для современных языков программирования — нет.
Пользоваться современным компилятором — это ещё значит и учитывать особенности OS. Так, например, в консоли Windows обычно 16 цветов, но зато 65536 возможных символов, в том числе там больше символов псевдографики. А в консоли POSIX обычно 8 цветов, но зато у символов могут быть эффекты подчёркивания и/или жирности. И диапазон Unicode там полный, 17*65536, в 17 раз больше. А ещё там есть какой–то свой способ рисовать псевдографику, отличающийся от вывода юникодных символов, ведь Midnight Commander мог рисовать свои рамки хоть в КОИ–8, хоть в 1251 кодировке, хотя в этих кодировках не было псевдографики. Но если работать в Юникоде, то, возможно, нет разницы.
Кроме того, есть вариации терминалов с True Color диапазоном, то есть, миллионы цветов, но, впрочем, True Color консоль я видел и для Windows. Это сделано каким–то хаком.
По–разному в разных OS сделано изменение размеров консоли. В Windows программа имеет довольно большую власть над своим окном, может произвольно менять размеры. В Windows программа может прочитать любую область своей консоли. В POSIX программа ничего не может поделать с размерами своего окна. Но ей хотя бы сигналом уведомление приходит об изменении размеров, а в Windows, судя по тому, как это сделано в far /w, только опрашивая размеры окна по таймеру, можно узнать об изменениях. И содержимое окна в POSIX читать нельзя. Такие библиотеки, как ncurses, при запуске программы инициализируют текстовый буфер в памяти, держат его копию, и когда программа изменила текстовый буфер, сравнивают старый текстовый буфер с новым, находят отличия и выводят эти отличия на экран при помощи Escape–последовательностей. И программа может читать только из этого буфера в памяти, по–настоящему доступа к консоли нет.
Кстати, в одной текстовой игре «Dwarf fortress» поддержка этих отличий кончилась тем, что игра по умолчанию работает не в настоящем текстовом режиме, а в SDL'ном окне, в котором типа текстовый режим. Но её по–прежнему можно запускать и в текстовых окнах.
Пользоваться современным компилятором — значит, быть готовым работать с отличиями OS.
Но уж если выбирать современное, то лучше Ada, чем этот исторический аппендицит Free Pascal. У вас нет миллиона строчек кода на Паскале, ради которого вам был бы важен компилятор с идентичной Паскалю семантикой со всеми его ограничениями. Если вы хотите чему–то научиться, вам хоть как придётся много писать самому.
И не заморачиваться сильно по поводу поддержки разных OS. Вот что имеет смысл — так это изолировать процедуры и функции, работающие с OS, в отдельные пакеты, которые для других OS можно потом переписать отдельно. Но я не думаю, что новичок сходу это корректно сделает, так что мой вариант — делать на Ada с использованием консольных WinAPI.
Либо оставаться в уютном мирке DOSBox.
Я все понял, но мне бы прям материал, с которым можно начать работу. Лекций я в книжках начитался, просто дайте удочку и я пойду рыбачить
По консольным WinAPI справка на русском, например, здесь: http://vsokovikov.narod.ru/New_MSDN_API/Console/fn_writeconsole.htm По модулю Crt была на сайте.
Как примерно организовать главный цикл, я написал.
На каком этапе затруднения?