Программирование: введение в профессию. Том IV: парадигмы

image of the cover

Аннотация

Четвёртый том книги «Программирование: введение в профессию» составляют части IX–XII.

Часть IX посвящена парадигмам программирования как общему явлению; примеры рассматриваются на языках, уже известных читателю, в основном это язык Си. Здесь стоит особенно выделить параграф, посвящённый концептуальным различиям между Паскалем и Си (см. 9.3.2, стр. 69).

В части X рассматривается язык Си++ и поддержанные в нём парадигмы объектно-ориентированного программирования и абстрактных типов данных. В основном эта часть сформирована из текста, ранее публиковавшегося отдельной книжкой (Введение в язык Си++), но содержит несколько глав, в той книжке отсутствовавших; в том числе здесь имеется глава, посвящённая графическим пользовательским интерфейсам и их созданию с помощью библиотеки FLTK.

Часть XI отдана экзотическим языкам программирования; здесь рассмотрены Лисп, Scheme, Пролог, а для демонстрации ленивых вычислений привлечён Хоуп (Hope).

Основной целью последней, XII части была демонстрация интерпретации и компиляции как самостоятельных парадигм программирования. Часть начинается с рассмотрения языка Tcl, интерпретируемая сущность которого вряд ли может хоть у кого-нибудь вызвать сомнения. Для полноты картины рассмотрена также библиотека Tcl/Tk, позволяющая очень быстро создавать оконные приложения с GUI. Остаток части содержит обзор концептуальных особенностей интерпретации и компиляции; в самом конце делается попытка сформулировать требования к гипотетическому «чистому компилятору», полностью лишённому каких-либо элементов интерпретации.

Публикация в бумажном варианте

Опубликовано издательством МАКС Пресс (Москва) в 2020 году. ISBN 978-5-317-06379-5.

Электронная версия

Электронная версия, идентичная печатному изданию, доступна здесь: http://www.stolyarov.info/books/pdf/progintro_vol4.pdf

Статус бумажной версии

Имеется в свободной продаже.

Архив примеров программ

Архив, содержащий примеры программ из всех четырёх томов, можно скачать здесь: http://www.stolyarov.info/books/extra/progintro_examples.tgz

Напоминаем, что раскрыть этот архив можно командой

   tar -xzf progintro_examples.tgz

Отложенная обработка событий

На страницах 88-89 при обсуждении событийно-ориентированного программирования утверждается, что автомат не должен каким бы то ни было образом пытаться управлять потоком внешних событий, в ответ на которые происходят шаги. На практике это правило иногда нарушается, например, при разработке GUI есть очень распространённый приём, когда при обработке события вместо выполнения действия "здесь и сейчас", в конец очереди добавляется новое событие, и действия выполняются только когда это до этого нового события дойдёт очередь. Речь идёт о функциях наподобие postEvent в библиотеке Qt.

Вы путаете две

Вы путаете две парадигмы, которые, хотя и обсуждаются в одном параграфе, и даже друг на дружку довольно похожи, всё-таки совершенно не одно и то же. В событийно-ориентированном программировании порождение нового события изнутри обработчика события — явление хотя и сомнительное, но действительно довольно часто встречающееся, но это не есть программирование в терминах явных состояний (fsm-based, если угодно).

Андрей

Андрей Викторович, а чем мотивировано отсутствие в части о С++, ООП и АТД упоминания о "пороге входа" в ООП (количество написанного кода и т.п.)?
спасибо.

В предисловии к

В предисловии к четвёртому тому написано, что для постижения его материала нужно сначала осилить первые два (третий не столь обязательно). Подозреваю, что человек, который первые два тома осилил, к четвёртому уже готов. Ну или как минимум готов к тому, чтобы, если "не пойдёт", бросить чтение до лучших времён.

§ 12.1Добавим,

§ 12.1

Добавим, что возможности скриптового программирования на Bourne Shell мы рассмотрели далеко не полностью. В этом языке помимо простых переменных присутствуют ещё массивы;

В Bourne Shell нет массивов. Массивы притащили в bash (Bourne-Again Shell).

Это замечание очень существенно потому, что не знающие этого программисты начинают использовать массивы (и прочие башизмы) в коде, озаглавленном #!/bin/sh. И у них это работает, поскольку /bin/sh у них всего лишь линк на /bin/bash. Но потом они отдают этот код кому-то ещё и этот кто-то вынужден, матерясь, исправлять #!/bin/sh на #!/usr/local/bin/bash и устанавливать себе bash в систему. Ну или вынужден, опять же, матерясь, вычищать башизмы из кода.

А код, озаглавленный #!/bin/sh, просто обязан выполняться на любом POSIX-совместимом шелле.

Да, похоже на

Да, похоже на правду. Пора мне переползать на *BSD, а то что-то разбаловался я на попсовых линуксообразных системах.

Досадно, блин

И кто бы мог подумать лет нцать назад, что слова "линукс" и "попсовый" окажется возможным употреблять в одном предложении...

Да нет, тут как

Да нет, тут как раз ничего удивительного. Линукс всегда был самой попсовой из юниксо-подобных систем, что сейчас, что 20 лет назад. Есть даже известная сентенция по этому поводу:
BSD is what you get when a bunch of Unix hackers sit down to try to port a Unix system to the PC.
Linux is what you get when a bunch of PC hackers sit down and try to write a Unix system for the PC.

И действительно, в сложившейся вокруг линукса культуре чувствовался привкус PC-культуры времён DOS'а, каковая культура от UNIX-культуры довольно сильно отличается. Ну да, впрочем, это всё дела минувших дней.

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

А сейчас в линукс пришли корпорации с большими деньгами. У них цели совсем другие. И задачи, которые они ставят разработчикам ядра, находящимся у них на зарплате, соответствуют именно этим новым целям.

опечатка?

Стр.69, внизу:
ясное и изящное решение, написанное на Си, явно проигрывает паскалевскому
Должно быть "выигрывает у"?

Ой как досадно

Конечно, выигрывает. Вот что значит замыленный взгляд.

Спасибо за выявление этого косяка, я его в своём экземпляре пометил -- в следующее издание он не пройдёт.

Нельзя ли и на

Нельзя ли и на сайте pdf-ку поправить? :-)

Я не исправляю

Я не исправляю электронные версии книг, выкладываемых на сайт. Они всегда точно соответствуют бумажным версиям.

errata?

А если просто актуальный список опечаток на страничке рядом с самой книгой держать?

Идея давно

Идея давно известная и очень хорошая, ещё бы времени найти на эту errata. Уже три с лишним года собираюсь.

Стр. 433, внизу:

Стр. 433, внизу: "списов кодов".

Спасибо

Да, корректоры не всемогущи

-lstdc++

здравствуйте. на стр. 261 компиляция командой gcc -Wall -g hello.cpp -lfltk -o hello выдает:
"/usr/bin/ld: /tmp/cchw9A7e.o: undefined reference to symbol '__gxx_personality_v0@@CXXABI_1.3'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status".

решается это, по всей видимости, подключением стандартной библиотеки c++ (-lstdc++).
спасибо.

Я думаю, есть

Я думаю, есть более, как бы это сказать, общепринятый вариант решения: вызывать компилятор по имени, корректному для Си++, т.е. g++, а не gcc :-) Библиотеку libstdc++ он тогда подхватит сам.

UPD: Да, на стр. 261 косяк — должно быть g++, а не gcc.

CVS в архиве

В архив примеров попали директории CVS:

$ find progintro_examples -name CVS
progintro_examples/no_libc/CVS
progintro_examples/fltk/CVS
progintro_examples/gettext/CVS
progintro_examples/cpp_chat/CVS
progintro_examples/asmgreet/CVS
progintro_examples/asmcopy/CVS

Ничего критичного, конечно. Просто даю знать.

Спасибо,

Спасибо, поправил

Андрей

Андрей Викторович, позвольте небольшое уточнение (с. 623):
для Windows это .NET, для Android - Java Virtual Machine
Android не использует JVM (как имя собственное - часть исполняющей системы Java). Ранее там использовался Dalvik, сейчас ART. Формально, конечно, они не перестают быть Java Virtual Machine в смысле виртуальной машины, исполняющей байт-код, полученный из Java, но бинарно и архитектурно с с "традиционной" JVM они несовместимы.

Спасибо

Спасибо, учту это при переиздании, если до него дело дойдёт.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <ins> <del> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Проверка на бота
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.