Andrey Stolyarov

Андрей Викторович Столяров: сайт автора

ПРОГРАММИРОВАНИЕ: ВВЕДЕНИЕ В ПРОФЕССИЮ

краудфандинговый проект

Программирование: введение в профессию. Издание 2,9 (электронное)

1st volume cover 2nd volume cover 3rd volume cover

Идёт активная работа над новым изданием книги Программирование: введение в профессию. Издание авторским произволом получило номер 2,9 (два и девять десятых). Предполагается, что последующие версии, если когда-нибудь появятся, получат номера 2,99, 2,999 и т.д., т.е. номера электронных изданий будут арифметически всё ближе и ближе к тройке, но равными тройке станут лишь в случае, если книга когда-нибудь будет снова напечатана на бумаге типографским способом.

Доступны все три тома (опубликованы 14 января, 9 апреля и 30 апреля 2025 г.) Ссылки для скачивания см. ниже. На очереди задачник.

Аннотация

Учебник «Программирование: введение в профессию» ориентирован на самостоятельное изучение и предполагает использование систем семейства Unix (в т.ч. Linux) в роли сквозной среды для обучения.

Скачать книгу

Дополнительные файлы

Файл stud_io.inc, используемый в начальных примерах третьей («ассемблерной») части, можно взять здесь: http://www.stolyarov.info/books/extra/stud_io_inc. Не забудьте переименовать файл! Это делается так:

  mv stud_io_inc stud_io.inc

Errata

Том I

Стр.Положение Содержание, комментарий
2аннотацияпоследнее предложение первого абзаца аннотации дублируется в начале второго абзаца; должно быть только во втором
4заголовокнаписано «Оглавление», должно быть «Содержание»
17начало второго абзаца после заголовканаписано «Второе издание, которое вы держите в руках», что не соответствует действительности, поскольку издание уже не второе
36в сноске 1имя команды ps набрано не тем шрифтом
385 абзац снизу, 2 строканаписано VI, должно быть vi
586 абзац сверху, 4 строкаслова в скобках «его мощность обозначают...» представляют собой рудимент предыдущих версий текста, следует убрать целиком
128в тексте примера (5 строка сверху)присваивание переменной filemode перед вызовом rewrite бессмысленно
1343 абзац снизу, 3 строканаписано «попытатся», должно быть «попытаться» (пропущен мягкий знак)
13621 и 19 строки снизу (первые две строки примера)перепутаны местами ключевые слова do и then
1712 абзац снизу, 6 строканаписано «Секцию стека», но речь должна идти про сегмент
1865 абзац, 25 строканаписано «не превосходит 32», должно быть «не превосходит 31»
2023 абзац сверху, 2 строканаписано «(влево)», должно быть «(вправо)»

Том II

Стр.Положение Содержание, комментарий
87 абзац сверху, 7 строкапосле «во-вторых» стоит точка, должна быть запятая
973 абзац сверху написано «EACCESS», должно быть «EACCES»
184первая и вторая "выключные" вставки кода после заголовканеправильное положение звёздочек в типах параметров и возвращаемого значения

From Михаил (unverified) Sat Apr 26 16:18:41 2025 UTC pencil

Том 2, стр. 8

В дополнение к предыдущему комментарию (можно слить воедино). Четвертый абзац мелкого текста:

> ; во-вторых. личный авторитет отдельный лиц,

Точка вместо запятой.

parent From Andrey V. Stolyarov profile Sat Apr 26 16:26:58 2025 UTC pencil

userpic

Re: Том 2, стр. 8

Есть такое, благодарю.

From Михаил (unverified) Sat Apr 26 15:59:28 2025 UTC pencil

Том 2, стр. 8

Начало второго абзаца:

> его рождение в виде "наколенной поделки" даёт себя знать

Должно быть "даёт о себе знать"?

Третий абзац:

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

Должно быть "избежали"?

parent From Andrey V. Stolyarov profile Sat Apr 26 16:10:26 2025 UTC pencil

userpic

Re: Том 2, стр. 8

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

From ScrollLock (unverified) Mon Apr 21 22:13:19 2025 UTC pencil

Мощности множеств

Стр. 58 тома 1: "примером такой бесконечности может послужить множество всех множеств действительных чисел" (его мощность обозначают алеф-2)". Насколько я знаю, какой именно алеф там - зависит от используемой аксиоматики, в т.ч. от того, истинна, ложна или недоказуема в ней континуум-гипотеза.

parent From Andrey V. Stolyarov profile Tue Apr 22 15:50:12 2025 UTC pencil

userpic

Re: Мощности множеств

Факт, недочистил это дело. Спасибо.

From sbcf (unverified) Mon Apr 21 18:05:44 2025 UTC pencil

немного занудства касательно названий ПО (т.1, стр.38)

Андрей Викторович, всех благ вам.

Простите за "тупые" замечания, возможно в книге всё верно, то есть написание соответствует вашим авторским "традициям". А может редактор недосмотрел.

Поэтому на всякий случай перечислю:

MSWord - понятно, но как-то непривычно, что MS и Word без пробела

Unix-подобных, и в тоже время unix-системами - выглядит непоследовательно с точки зрения большой буквы в названии Unix/unix. А ещё на просторах сети часто встречается сленговое "*nix" - типа избавились от такого вопроса.

Ну и редактор vim - его название у вас совпадает с командой вызова (отличаются только шрифтом). Это не согласуется с другими редакторами в книге (Nano, Joe - который вроде JOE по официальному сайту), и с самим редактором Vim (как он назван в программе и на его сайте).

Ну и "на закуску": Таблица 1.5. Наиболее употребительные команды редактора joe

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

parent From Andrey V. Stolyarov profile Wed Apr 30 18:49:08 2025 UTC pencil

userpic

Re: немного занудства касательно названий ПО (т.1, стр.38)

Ну окей, правда, это всё уже в вышедших томах, так что придётся подождать теперь следующего релиза. А так, похоже, Vim с большой буквы, JOE всеми большими, nano — наоборот всеми маленькими. Ну и MS Word — хрен бы с ним, пусть там будет пробел.

Что до редакторов, то таковых в подготовке книги не участвовало.

Кстати, *nix — это не про большую/маленькую, это про всякие minix и xenix, а заодно и про все остальные. Но вот как раз-таки Unix-like — это "похожие на Unix" (конкретный Unix, имя собственное), а unix-системы — ну, тут словом "unix" обозначен скорее тип систем, т.е. это уже нарицательное. Так что тут, пардон, останусь при своём авторском начертании :)

From RCgoff (unverified) Mon Apr 21 09:41:52 2025 UTC pencil

Триггер

Я электронщик, и меня триггерит то, как в первом томе изображена схема лампового триггера. В издании 2.9 это схема на странице 22 (Рис.1.1). Во-первых, там, где сходятся несколько проводников и между ними есть электрический контакт, должна быть жирная точка. На даном рисунке это все пересечения, кроме центрального перекрестья. Во-вторых, чтобы триггер действительно переключался, чтобы лампы запирались, потенциал сетки должен быть ниже потенциала катода. Поэтому либо катод должен быть заземлен, а два резистора и выключатель должны быть подключены к отрицательному напряжению, либо в цепи катодов должны стоять сопротивления смещения.

См. Книгу Бонч-Бруевич М.А. "Применение электронных ламп в экспериментальной физике", 3-е изд, 1955. Рис. 4.70 и 4.72.

parent From Andrey V. Stolyarov profile Mon Apr 21 10:32:35 2025 UTC pencil

userpic

Re: Триггер

Так-с, ну допустим.

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

Это не проблема.

> Поэтому либо катод должен быть заземлен, а два резистора и выключатель должны быть подключены к отрицательному напряжению, либо в цепи катодов должны стоять сопротивления смещения.

Поскольку я не электронщик, всё это описание мне ничем не поможет.

> См. Книгу Бонч-Бруевич М.А

Где я её возьму, пардон?

В общем ситуация тут довольно простая: чтобы схему исправить, мне нужны более конструктивные рекомендации.

parent From RCgoff (unverified) Mon Apr 21 13:42:15 2025 UTC pencil

Re: Re: Триггер

>Где я её возьму, пардон?

https://publ.lib.ru/ARCHIVES/B/BONCH-BRUEVICH_Aleksey_Mihaylovich_(fizik)/_Bonch-Bruevich_A.M..html

parent From Andrey V. Stolyarov profile Mon Apr 21 14:17:16 2025 UTC pencil

userpic

Re: Re: Re: Триггер

Скачал, посмотрел. Ну, рисунок 4.72 вообще непонятен как целое, т.е., возможно, электронщикам там что-то и понятно, мне — нет, и целевой аудитории моей книги, соответственно, тоже нет. Что касается рис. 4.70, то там "земля" и "минус" представляют собой разные сущности, я, честно говоря, такого до сей поры нигде и никогда не видел. Выключателей там нет, в тексте упоминается "внешнее воздействие", но не говорится, как конкретно его осуществить.

Что со всем этим делать — не вполне понятно. Я подумаю, не убрать ли этот рисунок из книги вообще. Исправить его на основании той информации, которую вы мне предоставили, я возможности не вижу.

parent From RCgoff (unverified) Mon Apr 21 14:38:24 2025 UTC pencil

Re: Re: Re: Re: Триггер

На рис 4.70 земля - это провод с напряжением 0в, а минус - с отрицательным (к примеру, -10в). Напряжение можно отсчитывать от разных точек. В этом смысле "земля" играет роль начала отсчета. Нуля. Выключатели должны быть помещены параллельно резисторам R2, как и на Вашей схеме в книге

parent From Andrey V. Stolyarov profile Mon Apr 21 14:40:15 2025 UTC pencil

userpic

Re: Триггер

Я прекрасно понимаю, что там что значит, ваш новый комментарий не содержит никакой новой информации для меня. Помещать в книгу схему, на которой минус и земля не одно и то же, я не буду.

parent From RCgoff (unverified) Wed Apr 23 09:41:20 2025 UTC pencil

Re: Re: Re: Re: Триггер

> там "земля" и "минус" представляют собой разные сущности, я, честно говоря, такого до сей поры нигде и никогда не видел.

Если эта реплика относилась не к схеме триггера, а в целом к электронике, то, наверное, два самых близких электронщику примера - это уровни сигналов в интерфейсе RS232 и номенклатура питающих напряжений на разъеме ATX блока питания компьютера.

На разъеме блока питания среди прочих есть и земля, и минус 12 вольт, и это разные сущности.

В интерфейсе RS232 логический 1 это минус 12в, а логический 0 это плюс 12в. Но в числе линий интерфейса есть и земля с напряжением 0в. И на электрическую схему преобразования уровней сигналов в уровни RS232 от источника должно приходить три линии питания: +12, земля/общий и -12в.

parent From Andrey V. Stolyarov profile Fri Apr 25 08:51:53 2025 UTC pencil

userpic

Re: Триггер

Про rs232 я мог бы и сам вспомнить, старый становлюсь, видимо. Остальное для меня новость.

parent From RCgoff (unverified) Mon Apr 21 13:51:43 2025 UTC pencil

Re: Re: Триггер

>Это не проблема.

Это проблема, т.к. в текщем варианте у вас на схеме не различаются ситуации "пересечение проводов без электрического контакта между ними" и "пересечение проводов с контактом между ними, т.е. соединение проводов"

parent From Andrey V. Stolyarov profile Mon Apr 21 13:55:05 2025 UTC pencil

userpic

Re: Re: Re: Триггер

Это не проблема в том смысле, что точки мне в соответствующих местах поставить особого труда не составит.

From RandomName (unverified) Sat Apr 19 17:31:44 2025 UTC pencil

Рыба с обложки

Хочу похвалить обложки книг, они довольно забавны и метафоричны. Но есть вопрос, а что на них обозначает рыба? С багом, костылями и прочим всё понятно, но вот то, какое отношение крылатая рыба имеет к программированию, никак понять не могу, а она так-то на каждой книге есть...

parent From Andrey V. Stolyarov profile Sat Apr 19 17:54:38 2025 UTC pencil

userpic

Re: Рыба с обложки

Вот уж как раз рыба-то, которая мало того что с крылышками, так ещё и с лапами — к программированию имеет отношение самое прямое.

From ScrollLock (unverified) Sat Apr 19 17:18:20 2025 UTC pencil

Утверждения о качестве rand

Здравствуйте!

На стр. 80 второго тома утверждается, что "в целом псевдослучайные числа имеют распределение, достаточно близкое к равномерному". Но для реализации функции rand из glibc наблюдаются довольно грубые отклонения от равномерности, делающие её совершенно непригодной не только для паролей, но и для научных и инженерных расчётов. Её старшие биты проваливают gap test из TAOCP2 с почти вековой историей. Если отслеживать интервалы (число членов последовательности) между псевдослучайными числами, старшие 10 бит которых равны 0, то картина получается очень далёкой от теоретической. Это очень легко воспроизвести с помощью вот такой короткой программы на ANSI C. Она строит гистограмму длин интервалов, рассчитывает статистику из критерия Пирсона и переводит её в нормально распределённую величину z (mu=0, sigma=1). Она очень упрощена, совсем не блещет стилем, не совсем точно обрабатывает некоторые граничные случаи, а нужный ГПСЧ выбирается редактированием строки. И на совсем уж ужасных генераторах программа может зависнуть. Но сравнить rand() и /dev/urandom с её помощью можно. Написано для 32-битного int и 31 или 32-битного выхода rand().

#include < stdio.h >
#include < stdlib.h >
#include < time.h >
#include < math.h >

#define BUFSIZE 1024

unsigned int rand_good(FILE *fp)
{
    static unsigned int buf[BUFSIZE], pos = BUFSIZE;
    if (pos >= BUFSIZE) {
        fread(buf, sizeof(unsigned int), BUFSIZE, fp);
        pos = 0;
    }
    return buf[pos++];
}

/* 10.1073/pnas.17.12.684 */
double chi2_to_stdnorm(double x, double f)
{
    double s2 = 2.0 / (9.0 * f);
    double mu = 1.0 - s2;
    return (pow(x/f, 1.0/3.0) - mu) / sqrt(s2);
}

void process_freq(const int *o, int maxlen, int ngaps, double p)
{
    double e_i = (double) ngaps * p;
    double chi2_emp = 0.0, df = maxlen - 1.0;
    int i;
    for (i = 0; i < maxlen; i++) {
        chi2_emp += pow(o[i] - e_i, 2.0) / e_i;
        e_i *= (1.0 - p);
    }
    printf("chi2emp = %g; df = %g\n", chi2_emp, df);
    printf("z = %g\n", chi2_to_stdnorm(chi2_emp, df));
}

int main()
{
    int maxlen = 5000, ngaps = 5000000, i, gaplen = 0;
    double p = 1.0 / 1024.0;
    time_t tic, toc;
    int *o = calloc(maxlen + 1, sizeof(int));
    FILE *fp = fopen("/dev/urandom", "rb");
    if (fp == NULL) {
        printf("Cannot open /dev/urandom\n");
        return 1;
    }
    tic = time(NULL);
    srand(tic);
    for (i = 0; i < ngaps; i++) {
        if (i % 1000 == 0)
            printf("%.1f %% completed\r", 100.0 * i / ngaps);
        do {
            unsigned int x = /*rand();*/rand_good(fp);
            if (((x >> (31 - 10)) & 0x3FF) == 0) {
                o[(gaplen <= maxlen) ? gaplen : maxlen]++;
                gaplen = 0;
            } else {
                gaplen++;
            }
        } while (gaplen != 0);
    }
    toc = time(NULL);
    printf("\nTime elapsed: %u sec\n", (unsigned int) (toc - tic));
    process_freq(o, maxlen, ngaps, p);
    fclose(fp);
    free(o);
    return 0;
}

Результаты выполнения программы на Lubuntu 22.04.5 LTS:

rand():
100.0 % completed
Time elapsed: 70 sec
chi2emp = 6084.94; df = 4999
z = 10.1638

/dev/urandom:
Time elapsed: 53 sec
chi2emp = 4899.76; df = 4999
z = -0.99245

Видно, что rand() тест не проходит, а /dev/urandom - проходит. Более того, /dev/urandom оказался БЫСТРЕЕ rand(), т.к. внутри rand() есть мьютексы. Правда, в методе Монте-Карло /dev/urandom использовать нельзя, т.к. он невоспроизводим. Также очень грубые отклонения от равномерности для функции rand из glibc можно выявить тестами вроде одномерного Birthday Spacings, а также BCFN из PractRand. Первый из них вообще можно чуть ли не на IBM PC XT реализовать. В musl генератор другой и gap test проходит, но для его "разоблачения" оказывается снова достаточно IBM PC XT и другого теста.

Также ссылка [2] ведёт на второе издание книги Numerical Recipes, ГПСЧ из которого столь же ужасны, как и в функции rand(). Есть более новое третье издание, в котором один из рекомендованных генераторов оказался пригоден в качестве генератора общего назначения (и нет, это не RC4).

parent From Andrey V. Stolyarov profile Sat Apr 19 17:26:44 2025 UTC pencil

userpic

Re: Утверждения о качестве rand

Честно говоря, во всём этом мне интересным кажется только расплата за мьютексы.

parent From ScrollLock (unverified) Sat Apr 19 20:32:17 2025 UTC pencil

Re: Re: Утверждения о качестве rand

Да тут вообще всё феерично. Производительность rand с мьютексами получается около 8 cpb (тактов на байт). Аналогичный генератор без мьютексов, но сляпанный "на скорую руку" - меньше 1 cpb. Зачем они там - не ясно, потокобезопасность от rand вроде бы не требуется, а для параллельных вычислений никакие мьютексы в ГПСЧ никто в здравом уме использовать не будет.

Нормальные ГПСЧ на той же машине с поддержкой AVX2: AES128-CTR аппаратный: 2 cpb, AES128-CTR программный - 7-8 cpb. ChaCha12 - 1 cpb, LEA128-CTR - 1.4 cpb, Threefish256-CTR - 2.2 cpb. Они же прекрасно подходят для параллельных вычислений, т.к. каждому процессу/потоку дают диапазон номеров членов последовательности - и всё. "Хакерские" (от слова bithack) генераторы приемлемого качества: xoroshiro128++ - 0.20 cpb, pcg64_xsl_rr - 0.35 cpb, SFC64 - 0.15-0.20 cpb, mlfib - 0.55 cpb, Philox - 1 cpb.

Т.е. из-за мьютексов скорость работы функции rand() стала существенно медленнее некоторых блочных шифров, и это при очень низком качестве. А ведь шифры мы заменяем на всякие хакерские трюки (иногда даже времён ENIAC) именно ради скорости и простоты.

From Robert (unverified) Sat Apr 19 14:16:01 2025 UTC pencil

Предположительно ошибка

Том 1, стр. 191, конец 2-го абзаца параграфа 3.3.6. Написано:

Так, если в стек занести три четырёхбайтных параметра, а потом вызвать процедуру, то адрес возврата будет лежать в памяти по адресу [esp], ну а параметры, очевидно, окажутся доступны по адресам [esp+4], [esp+8] и [esp+12]. Если же разместить в стеке локальные четырёхбайтные переменные, то они окажутся доступны по адресам [esp-4], [esp-8] и т. д.

Имеется ли в виду во втором предложении изначальное (сразу после вызова подпрограммы) значение ESP? Если нет, то здесь ошибка, ведь если поместить в стек локальные четырёхбайтные перменные, то значение ESP изменится и эти переменные будут доступны по адресам [esp], [esp+4] и т. д.

parent From Andrey V. Stolyarov profile Sat Apr 19 17:11:37 2025 UTC pencil

userpic

Re: Предположительно ошибка

> Имеется ли в виду во втором предложении изначальное (сразу после вызова подпрограммы) значение ESP?

Естественно. Из контекста это очевидно, не?

From Egor (unverified) Mon Apr 14 08:53:20 2025 UTC pencil

Синтаксические ошибки в примере

Внизу страницы 136, пример удаления всех отрицательных значений из списка содержит ошибки в операторах:

while first <> nil then

и

if first^.data < 0 do.

А остаток примера убежал на другую страницу.

parent From Andrey V. Stolyarov profile Mon Apr 14 10:18:28 2025 UTC pencil

userpic

Re: Синтаксические ошибки в примере

Ага, ну вот и начались ошибки, внесённые при подготовке версии 2.9. Спасибо, вы совершенно правы.

> убежал на другую страницу.

В этом я как раз никакого криминала не вижу. Сверстать так, чтобы тексты программ никогда не переносились между страницами — может, и можно, но лично я не возьмусь.

From anon (unverified) Sun Apr 13 21:33:34 2025 UTC pencil

Том 2, стр. 84, п. 4.11.3, строка 12

На FreeBSD указанная команда man attr к желаемому результату не приводит, вместо неё нужная страница ищется через man curs_attr.

parent From Andrey V. Stolyarov profile Mon Apr 14 10:01:49 2025 UTC pencil

userpic

Re: Том 2, стр. 84, п. 4.11.3, строка 12

И что? Учесть все подобные нюансы невозможно.

From Robert (unverified) Mon Mar 31 08:38:55 2025 UTC pencil

Предположительно ошибка

На стр. 189 в первом предложении параграфа 3.3.1 написано:

Как мы уже знаем, под стеком в программировании подразумевают структуру данных

Ранее в книге (стр. 134, параграф 2.10.5) было объяснено, что называть стек (а также очередь) структурой данных - некорректно.

parent From Andrey V. Stolyarov profile Mon Mar 31 08:46:57 2025 UTC pencil

userpic

Re: Предположительно ошибка

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

From Иван aka technocrat (unverified) Thu Mar 6 12:28:30 2025 UTC pencil

offtop

Андрей Викторович, здравствуйте!

Несколько минут назад узнал о выходе электронного издания книги и хочу сказать, что Вы глыба!

Простите меня, если метафора Вам не понравится.

Я 74-го года рождения, программирование для меня некоторая страсть, но профессионально я не смог сделать это своим занятием, кривая жизни увела в сторону.

It doesn't matter.

Это не Ваша проблема.

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

Будьте здоровы и успехов Вам во всём!

P.S.

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

Тот комментарий Вы, скорее всего "похоронили" и это хорошо.

parent From Andrey V. Stolyarov profile Thu Mar 6 13:52:05 2025 UTC pencil

userpic

Re: offtop

Вот смотрю на это и не знаю, как реагировать. Какое "тогда", какое ещё "сегодня"? Если я только понимаю, про какой исторический период идёт речь, господствовал тогда омерзительный MSDOS, нормальные операционки на обычных компах только-только появлялись, публика про них и не знала толком. Ну, возможно, в те времена не было долбаной вебни, но было бы крайне странно думать, что сейчас кроме вебни нет вообще ничего.

parent From diesi (unverified) Sun Mar 9 02:50:08 2025 UTC pencil

Re: Re: offtop

Интересный момент: даже сама M$ не рассматривала DOS как что-то, что придёт надолго, они рассчитывали, что эта убогая хрень побудит людей покупать Unix-подобную Xenix, которую нельзя было поставить на PC с завода из-за разногласий между IBM (делавшей PC) и AT&T (которой принадлежали права на Unix). И успешно с этим продолбались, понятное дело. А всё почему? А потому что нехрен прибивать ОС к железу гвоздями -- DOS шёл на любом PC любого производителя as is, а Xenix каждый производитель должен был адаптировать к каждой своей модели PC, и разумеется, самой IBM эта процедура вообще была недоступна.

parent From Andrey V. Stolyarov profile Sun Mar 9 08:43:58 2025 UTC pencil

userpic

Re: offtop

Это конфликтует с моим пониманием истории. До сей поры мне встречалась только такая версия, что Билл Гейтс для MSDOS придумал модель per copy, т.е. вместо того, чтобы лицензировать её IBM за какую-то единовременную сумму, он потребовал, если не ошибаюсь, два бакса за каждый устанавливаемый экземпляр, и с этого началась копирастическая "революция" (ну или революция без кавычек, но в самом поганом смысле слова) в области софта. Упоминание Xenix в окрестностях этой истории я вижу впервые, да и при чём тут MS, на Xenix'е деньги бы зарабатывали не они.

parent From diesi (unverified) Sun Mar 9 10:57:54 2025 UTC pencil

Re: Re: offtop

Это верно, но не противоречит тому, что юзеру за его же деньги предоставляют в составе компа "троянского коня", который призван побудить его открыть кошелёк ещё раз, и на этот раз пошире, чтобы получить софт получше. Xenix лицензировалась точно так же, per copy (это для неё придумали изначально, ещё до дел с IBM), но значительно дороже, с отдельным вариантом для многопользовательских машин и без возможности купить копию у самой M$. Современная стратегия продаж винды это что-то среднее между таковыми для DOS и для Xenix.

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

parent From Недопредпенс (unverified) Fri Apr 11 14:26:48 2025 UTC pencil

offtop

DOS шёл на любом PC любого производителя as is

Если производитель написал для своего PC процедуры ввода и вывода на CON:, чтения и записи секторов дискеты, собрал BIOS (IO.SYS) https://raw.githubusercontent.com/microsoft/MS-DOS/refs/heads/main/v1.25/source/IO.ASM прилагаемым ассемблером и позаботился о процедуре IPL.

parent From diesi (unverified) Tue Apr 15 16:05:58 2025 UTC pencil

Re: offtop

Под PC здесь имелся в виду не абы какой персональный компьютер, а IBM PC-совместимый персональный компьютер, уже достаточно давно под PC имеют в виду именно это. Без указанных вами особенностей совместимым компьютер бы не был.

parent From Недопредпенс (unverified) Sat Apr 12 08:29:43 2025 UTC pencil

Re: offtop

Unix-подобную Xenix, которую нельзя было поставить на PC с завода из-за разногласий между IBM (делавшей PC) и AT&T (которой принадлежали права на Unix)

Gary Kildall:

The problem is that micros haven't had the power to support it. They haven't had the large amount of main memory, the hard disk, the fast processor and so forth.

UNIX1985. Computer Chronicles

У IBM в первой половине 1980-х были машинки с XENIX на мотороловских 68k с 32-разрядной архитектурой. И не только у IBM

parent From diesi (unverified) Tue Apr 15 16:28:58 2025 UTC pencil

Re: Re: offtop

Судя по тексту, Килдалл говорил о персоналках прошедшей эпохи, когда UNIX уже был, но никто и не думал ставить его на персоналки, то есть, про 1970-е годы, примерно времена процессора Intel 8080. На самом первом IBM PC с Intel 8088 Xenix ещё как работал. А писался он вообще для 18-разрядного PDP-7, у которого даже процессора не было, и памяти от десятка до сотни килобайт.

Мало ли, что там у IBM было, у них и сейчас много всякого есть интересного. На PC-то этого не было.

parent From Andrey V. Stolyarov profile Tue Apr 15 19:22:45 2025 UTC pencil

userpic

Re: Re: Re: offtop

> Xenix ещё как работал. А писался он вообще для 18-разрядного PDP-7

Кто, пардон, для PDP-7 писался? Xenix? Что-то сдаётся мне, к моменту появления Xenix если где ещё и были живые PDP-7, то разве что в музеях.

parent From diesi (unverified) Wed Apr 16 03:27:55 2025 UTC pencil

Re: Re: Re: Re: offtop

Возможно, что-то я напутал, и не для PDP-7, а для PDP-11. Но на 11 она работала уже совершенно точно.

parent From Andrey V. Stolyarov profile Wed Apr 16 14:31:56 2025 UTC pencil

userpic

Re: offtop

На PDP-7 Томпсон развлекался со своими игрушками, и типа "заодно операционку написал". Она к тому времени (начало семидесятых) была уже безнадёжно морально устаревшей, зато на конкретный экземпляр никто, кроме Томпсона, не претендовал. Ну, типа, тот самый первый Unix, который ещё Unics.

В PDP-11 верю, почему нет. Её и наштамповали экземпляров примерно в 5000 (прописью: пять тысяч) раз больше, и изрядно позднее сделали, и клонов у неё было — когда я на бейсике БК0010 свой стартрек писал, не подозревал, что эта штуковина у меня на столе где-то в глубине души таки тоже PDP11.

From Саша (unverified) Mon Mar 3 18:39:24 2025 UTC pencil

Содержание

В новом издании «Содержание» подписано как (второе) «Оглавление». Интересно, как так вышло.

parent From Andrey V. Stolyarov profile Sat Mar 29 19:03:15 2025 UTC pencil

userpic

Re: Содержание

Очень просто вышло, закомментарил лишнего. Спасибо за сообщение.

From NorD (unverified) Mon Feb 17 08:00:08 2025 UTC pencil

Процедуры reset/rewrite

Здравствуйте, Андрей Викторович! Объясните, пожалуйста, следующий момент в Вашей книге: В 2.9.3 "Типизированные файлы" 1-го тома указано, что для режима "только запись" нужно в переменную filemode внести значение 1 и использовать процедуру reset. При этом выше по тексту книги написано, что переменная filemode влияет на процедуру reset, но не влияет на процедуру rewrite. Далее в главе 2.9.4 "Блочный ввод-вывод" в коде примера block_cp.pas перед открытием файла dest на запись мы заносим в переменную filemode 1 и используем процедуру rewrite, хотя это противоречит ранее изложенному. Правильно я понимаю, что в данном случае всё-таки должна применяться процедура reset? P.S. Спасибо Вам за книги и удачи в Ваших начинаниях.

parent From Andrey V. Stolyarov profile Mon Feb 17 09:29:31 2025 UTC pencil

userpic

Re: Процедуры reset/rewrite

Нет, там по смыслу нужна именно rewrite, а вот заносить какое-то значение в filemode перед её вызовом не нужно. Это должно было исчезнуть из примера при подготовке второго издания, но, как видим, не исчезло.

From G (unverified) Fri Feb 7 10:36:53 2025 UTC pencil

Файлы

А где файлы с примерами?

parent From Andrey V. Stolyarov profile Fri Feb 7 10:45:24 2025 UTC pencil

userpic

Re: Файлы

Законный вопрос.

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

Технически проблема в том, что архив примеров один на все три тома, и там ожидаются, естественно, дальнейшие изменения по мере подготовки оставшихся двух томов. В общем, надо подумать, в каком виде это всё теперь публиковать.

parent From noanon (unverified) Fri Feb 14 11:32:31 2025 UTC pencil

Re: Re: Файлы

Редактирование в плане исправление опечаток и ошибок или какие-то примеры были основательно переработаны для большей наглядности?

parent From Andrey V. Stolyarov profile Fri Feb 14 16:09:16 2025 UTC pencil

userpic

Re: Re: Re: Файлы

В примерах конкретно к первому тому самое заметное изменение — в полноэкранных программах коды кнопок раньше (увы мне) присутствовали в виде чисел прямо в коде. Сейчас они вынесены в именованные константы.

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

From Руслан (unverified) Tue Jan 28 21:12:52 2025 UTC pencil

Задачник

Андрей Викторович, подскажите, задачник для второго издания учебника применим к новому изданию?

parent From Andrey V. Stolyarov profile Tue Jan 28 22:03:33 2025 UTC pencil

userpic

Re: Задачник

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

From a (unverified) Mon Jan 27 10:59:37 2025 UTC pencil

Errata

В издании 2.9 в 1 томе на странице 36 есть сноска номер 21. В ней слово "ps" должно быть напечатано другим шрифтом.

parent From Andrey V. Stolyarov profile Sat Mar 29 19:06:55 2025 UTC pencil

userpic

Re: Errata

Есть такое, благодарю

From Алексей Л. (unverified) Mon Jan 27 07:20:54 2025 UTC pencil

Печать издания 2.9

Издание 2.9 очень сложно распечатать, т.к. там что-то не то с размерами страниц :(

From Anonymous (unverified) Sat Jan 25 02:30:44 2025 UTC pencil

Том 1, стр 44

Я вас надеюсь не сильно заспамил комментариями? Комментарии/ошибки/неточности лучше в одном комменте или отдельно?

> При выполнении заданий практикума

Видно, что скопировано из методички без редактирования. Можно конечно так и оставить, но немного некрасиво.

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

Ну и до кучи, echo "" "$3" "$2" "$1" можно было бы заменить на printf, чтобы избежать неаккуратного пробела, но я думаю то за ошибку не считается, так что я не стал писать сразу.

$ foo() { printf "%s\n" "$3 $2 $1"; }
$ foo 1 2 -3
-3 2 1

parent From Andrey V. Stolyarov profile Sat Mar 29 19:50:31 2025 UTC pencil

userpic

Re: Том 1, стр 44

> Комментарии/ошибки/неточности лучше в одном комменте или отдельно?

Лучше отдельно. Далеко не всегда есть достаточно времени, чтобы обработать целиком поступившую простыню.

> Видно, что скопировано из методички без редактирования.

Есть такое, да. Это всё изначально пришло отсюда, там даже основная проблема не в том, в классе всё происходит или дома, а в том, что текст чёрт-те как написан, в 2009 году я ещё недостаточно насобачился на такие тексты. В планах стоит перетряхнуть весь этот текст целиком.

> можно было бы заменить на printf

Простите, вы что, издеваетесь? Посмотрите внимательно на окрестности этого фрагмента и прикиньте, как будет выглядеть, если туда впендюрить ещё и рассказ про printf(1) (особенно учитывая, что текст ориентирован на людей, не имеющих никакого представления о Си).

From Anonymous (unverified) Fri Jan 24 22:02:21 2025 UTC pencil

Том 1, стр 38

VI — это шесть римскими цифрами, а редактор таки vi

parent From Andrey V. Stolyarov profile Sat Mar 29 19:42:57 2025 UTC pencil

userpic

Re: Том 1, стр 38

Согласен, спасибо.

From Anonymous (unverified) Thu Jan 23 01:22:16 2025 UTC pencil

Том 1, стр 27

> flash-брелке

По идее правильно будет с буквой о, flash-брелоке. Я тоже удивился, что оно так склоняется, но вот так.

parent From diesi (unverified) Sun Feb 9 16:42:53 2025 UTC pencil

Re: Том 1, стр 27

"Брелоке" это старая норма, из времён, когда слово "брелок" ещё не укрепилось в русском языке, и подчинялось его правилам лишь условно. В настоящее время оба варианта официально определены, как равноправные, а неофициально вариант, где "о" не выпадает, уже почти стал архаизмом.

From anon (unverified) Tue Jan 21 19:22:48 2025 UTC pencil

Изменения в издании 2.9

Извините, а какие есть ключевые изменения в новом издании?

parent From Andrey V. Stolyarov profile Tue Jan 21 20:27:02 2025 UTC pencil

userpic

Re: Изменения в издании 2.9

"Ключевых" нет. В основном исправлены ошибки из эрраты. Из нового — доработаны некоторые параграфы про оформление кода, особенно 2.12.9 и 2.12.10. Ну и ещё много где есть по одному-два абзаца, всего не вспомнить.

parent From anon (unverified) Wed Jan 22 08:36:28 2025 UTC pencil

From Anonymous (unverified) Fri Jan 17 04:56:40 2025 UTC pencil

Стр 23, том 1

"без малого полвека" — уже не "без малого", а чуток больше полвека. Декабрь 1974 — появление Альтаира 8800, то есть ровно полвека - декабрь 2024.

parent From Недопредпенс (unverified) Sat Jan 18 05:24:13 2025 UTC pencil

Полвека ПК

Альтаир 8800 - ещё не привычный прибор, а нечто среднее между игрушечным однобитным Kenbak'ом и настольными миниЭВМ (в том числе и для "персонального", хоть и не домашнего, использования), которыми в 1970 уже никого не удивишь.

Изобретатель Kenbak'а со своим изобретением

Конечно, Альтаир запустил микрокомпьютерный хайп, который привёл в том числе и к взлёту бизнеса трёх корпораций на буквы A, D и М появлению ПК в привычном виде.

parent From Anonymous (unverified) Sat Jan 18 23:24:18 2025 UTC pencil

Re: Полвека ПК

Альтаир уже вполне себе ПК. Я довольно долго ковырялся на эмуляторе с ним. Хотя IMSAI 8080 пожалуй лучше.

From Anonymous (unverified) Thu Jan 16 16:57:24 2025 UTC pencil

Адресная арифметика в паскале

На странице 14 написано "за исключением разве что адресной арифметики" в отношении паскаля, но в гостевой книге есть примеры с таковой на паскале.

Интересно, адресная арифметика появилась только в Free Pascal или в TP и Delphi уже была?

parent From Andrey V. Stolyarov profile Thu Jan 16 17:05:40 2025 UTC pencil

userpic

Re: Адресная арифметика в паскале

Насколько я помню, в TP 7.0 честной адресной арифметики ещё не было, хотя, например, динамические массивы, от которых сишностью пасёт на километр, были уже в 5.0.

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

parent From Anonymous (unverified) Thu Jan 16 21:36:14 2025 UTC pencil

Re: Re: Адресная арифметика в паскале

Проблема с динамическим массивом понятна - если массив может ресайзить сама RTL, то нет особой мотивации изучать, как это делать вручную, но с адресной арифметикой в чём проблема?

Если ученик додумается, скажем, выделять при необходимости вдвое больше памяти и копировать массив в новую область памяти, а потом забывать старую, это тоже требует понимания указателя как идеи. Хотя я и не предлагаю специально этому учить раньше времени.

parent From Andrey V. Stolyarov profile Thu Jan 16 22:18:00 2025 UTC pencil

userpic

Re: Re: Re: Адресная арифметика в паскале

> Если ученик додумается, скажем, выделять при необходимости вдвое больше памяти и копировать массив в новую область памяти, а потом забывать старую, это тоже требует понимания указателя как идеи.

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

parent From Turbo (unverified) Thu Jan 23 12:47:29 2025 UTC pencil

Re: Адресная арифметика в паскале

Адресная арифметика с PChar появилась в TP/BP7 и TPW вместе с PChar, если мне не изменяет память.

Борландовский странноватый пример к StrEnd():

function StrEnd(Str: PChar): PChar;

uses Strings;
var
S: array[O .. 79] of Char;
begin
Readln(S);
Writeln('String length is', StrEnd(S) - S);
end.

TP7.0 Programmer's Reference (9.9M)

parent From Andrey V. Stolyarov profile Thu Jan 23 12:52:36 2025 UTC pencil

userpic

Re: Адресная арифметика в паскале

Тут да, я вполне могу ошибаться. Дело в том, что я TP осваивал на версии 5.5, активно писал (за деньги) на 6.0, "семёрка" у меня была, но я, скорее всего, не использовал от неё новые возможности, поскольку к моменту её появления (в смысле у меня, а не вообще в природе) все мои проекты на Паскале уже существовали, новых я не начинал. Поэтому если там что-то такое появилось, я мог просто не обратить внимания.

parent From Недопредпенс (unverified) Sat Jan 25 11:41:48 2025 UTC pencil

Re: Re: Адресная арифметика в паскале

Между 6.0 и 7.0 вышел такой "новый" продукт под названием Turbo Pascal for Windows 1.0(и 1.5)

В нём, похоже, и появилось это расширение для удобства прямого вызова функций 16-разрядного WinAPI. Вместе с фирменным борландовским стилем кнопочек, которые рисовала BWCC.DLL

Turbo Pascal for Windows. Version 1.5

From Anonymous (unverified) Wed Jan 15 13:52:47 2025 UTC pencil

Второе издание, которое вы держите в руках

На странице 17 в параграфе "Структура книги и используемые обозначения" во втором абзаце написано: "Второе издание, которые вы держите в руках...", хотя речь идёт про электронное издание 2.9.

From Anonymous (unverified) Wed Jan 15 11:49:08 2025 UTC pencil

Аннотация

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

В прошлом издании фраза была только в первом абзаце, поэтому, возможно, оно было добавлено во второй абзац случайно.

parent From Andrey V. Stolyarov profile Wed Jan 15 12:07:16 2025 UTC pencil

userpic

Re: Аннотация

Есть такое, да. Чуть позже заведу страничку для эрраты.


pencil

пояснение


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

Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда.

Андрей Михайлович Столяров в библиотеке Мошкова

Авторские права © Андрей Викт. Столяров, 2009 — 2025