Опечатки и ошибки, выявленные в тексте второго издания "Введения в профессию"

Номера страниц и строк даны в соответствии со вторым изданием, вышедшим в издательстве МАКС Пресс. В книгах издательства ДМК другая вёрстка, там номера страниц и строк отличаются. Кроме того, некоторые ошибки там уже исправлены, но, к сожалению, далеко не все.

Том I

Стр.ПоложениеСодержание, комментарий
3115 строка сверхув слове «модфицирующее» пропущена буква «и»
346 строка снизув слове «становиться» не должно быть мягкого знака
424 строка сверхунаписано лишнее слово «ещё» (ещё ещё)
456 строка снизунаписано «программых» вместо «программах»
474 строка снизунаписано «логических», должно быть «логическим»
51в сноскенаписано «ранее», должно быть «раннее»
597 строка сверхунаписано «вы вернёмся», должно быть «мы вернёмся»
6422 строка снизунаписано «соответствующее», должно быть «соответствующие»
78под рисункомточка на пустой строке
813 строка сверхупропущена «;» после команды exit 1 (перед фигурной скобкой)
81-82в тексте примеров скриптовобращения к $1 (аргументу скрипта) следует заключать в кавычки на случай, если в нём окажется что-нибудь нехорошее вроде пробела
8317 строка снизунаписано «полвека лет», слово «лет» лишнее
9220 строка сверхунаписано «/home/avst», должно быть «/home/lizzie»
97верхняя строканаписано «дугие», должно быть «другие»
10014 строка снизу«Ctrl-R» набрано не тем шрифтом
1068 строка сверхуслово «SIGTERM» набрано не тем шрифтом
1122 строка сверхунаписано «между между», должно быть просто «между»
11212 строка снизунаписано «этот именно этот», должно быть «именно этот»
112нижняя строканаписано «придусмотрен», должно быть «предусмотрен»
1162 абзацабзац следует переписать целиком с учётом того, что в действительности без прав на исполнение с директорией вообще ничего сделать невозможно, разве что узнать имена файлов, если есть права на чтение
120сноскаприведён пример ls как команды, встроенной с целью оптимизации; на самом деле в современных версиях bash она уже не встроена
12118-19 строки сверхунаписано «будеть», лишний мягкий знак
1272 абзацдопущена фактическая ошибка: чтобы убрать переменную из окружения, в действительности достаточно одной команды unset, команда export здесь избыточна
1307 строка снизунаписано «Часть», должно быть «Часто»
15417 строка сверхуиндекс и степень под знаком суммы должны быть i, а не k
1805-6 строка сверхунаписано «теории вероятности», нужно «теории вероятностей»
1936 строка снизунаписано «на Хаскелее», лишняя буква «е»
1998 строка в тексте условия задачинаписано «говорилсь», должно быть «говорилось»
20616 строка сверхунаписано «далее биты», должно быть «далее байты»
2369, 10 строки сверхуназвания клавиш, вводимые команды, Ctrl-... набраны не тем шрифтом
259текст примераназвание программы «modulo» выбрано неудачно, лучше назвать её «AbsoluteValue»
286начало второго абзацанаписано «похоже», должно быть «похожа»
31617 строка сверхупосле «(29)» ненужная точка
3223 строка сверхунаписано «наша функция», должно быть «наша процедура»
32915 строка снизу«Ctrl-D» набрано не тем шрифтом
33911 строка снизупропущена точка после «b[100]»
35810 строка сверхунаписано «стрингов», должно быть «строк»
36325 строка сверхунаписано «comparision», должно быть «comparison» (лишняя буква i)
36815 строка сверхунаписано «SreenHeight», должно быть «ScreenHeight»
36811 строка снизунаписано «высоту», должно быть «высоты»
376в тексте примеранаписано «ch: char;», должно быть «c: integer;»
38314 строка сверхунаписано «gotoxy», должно быть «GotoXY» (для единообразия)
391в тексте примерадля единообразия примеров стоит вставить close(f)
43721 строка сверхумежду словами «тем» и «насколько» должна быть запятая, а напечатана точка
4459 строка снизунаписано «остальные стержни», должно быть «остальные диски»
4574 строка снизунаписано «res := false», должно быть «res := true»
45920-21 строки снизунаписано «функции», должно быть «подпрограммы»
47616 строка сверхунаписано «==», должно быть просто равенство
48015 строка снизунаписано «это вариант», должно быть «этот вариант»
50512 строка снизунаписано «x=50», нужно «x:=50», ведь речь о Паскале
54112 строка снизу«Ctrl-D» набрано не тем шрифтом
54419 строка снизунаписано «колоноки», должно быть «колонки»
54417 строка снизуненужная скобка перед точкой в конце абзаца
54714-15 строки снизутекст в скобках — рудимент старых изданий, вдобавок фактическая ошибка; нужно убрать
5693 строка сверхунаписано «сбрасывает», должно быть «сбрасывают»
570последний абзац параграфанаписано «при делении беззнаковых чисел нет специальные команды для расширения разрядности числа не нужны», лишнее слово «нет»
5867--12 строки снизутекст от слов «Использование этих...» до «... весьма полезным» следует выбросить, он ошибочен — случайно остался при пересмотре всего текста параграфа
5895 строка сверхуненужная точка после «cmpsX»
6135-6 строки после заголовка параграфане закрыта команда дословного воспроизведения, получилось довольно несуразно
6249 строка сверхунаписано «ассембер», пропущена буква "л"
629в сноскенеправильно воспроизведены числа Фибоначчи после 13 (должно быть 21, 34, 55...)
66311 строка снизунеправильный отступ перед push dword
66515 строка сверху«FreeBSD» набрано не тем шрифтом, должен быть обычный
6975 строка снизунаписано «при попытка», должно быть «при попытке»

Том II

Стр.ПоложениеСодержание, комментарий
18нижняя строкапропущена точка после слова «литерал»
2621 строка сверхупропущен предлог «в», перед словом «любом»
336 строка сверхунаписано «функцию вызвать», должно быть «функцию можно вызвать»
3310 строка снизуprintf не тем шрифтом
334 строка снизунаписано «обёртку», должно быть «обёртки»
4318 строка снизунаписано «явлется», пропущена буква «я»
51строки 13, 17, 22, 24, 27написано «f()», это рудимент, должно быть просто «f»
64в сноске 22 предпоследняя строчканаписано «в перед», должно быть «а перед»
6916 строка снизунаписано «aplha», должно быть «alpha»
7016 строка снизунаписано «example_first + 1000», должно было быть «example_second + 1000»
707-8 строки снизуфраза начиная со слов «мы уже видели» представляет собой рудимент, её нужно выкинуть
747 строка сверхунаписано «требованиями», должно быть «требованиям»
775 строка снизунаписано «представляет обой», должно быть «представляет собой»
903 строка снизунаписано «в область память», должно быть «в область памяти»
9219 строка сверху«char» не тем шрифтом
9914 строка снизу«s» в скобках не тем шрифтом
102верхняя строканаписано «выполнены», правильнее будет «вычислены»
1033 строка сверхунаписано «вычисляются справа налево», должно быть наоборот — «слева направо»
1065 строка сверхунаписано «в этом параграфе», должно быть «в этой главе»
10918,19 строки снизуназвание кодировки cp1251 дважды набрано не тем шрифтом, должен быть моноширинный
116в таблицедля «x» написано, что оно целое, а оно беззнаковое целое
12411 строка сверхунаписано «отличаюся», должно быть «отличаются»
125в тексте примеранаписано «fscanf(...) == 1», следует поменять местами: «1 == scanf(...)»
14215 строка сверхупропущена точка в конце предложения (после слова «char»)
14810 строка сверхупосле слова «окажется» стоит точка вместо запятой
150последня строка первого абзацанаписано «рассмотренный», должно быть «рассмотренные»
15816 строка снизудопущена фактическая ошибка: в России изобретены не красно-чёрные, а AVL-деревья
162пример внизуотступ три пробела, должно быть четыре
163примеротступ три пробела, должно быть четыре
1659 строка снизунаписано «greater then», нужно «greater than»
1817 строка сверхупосле «в частности»стоит точка, должна быть запятая
20413 строка сверхунаписано «побочным», должно быть «побочными»
20522 строка снизудля единообразия следует убрать скобки при упоминании getchar
2118-9 строки снизунаписано «не оглядываяь», должно быть «не оглядываясь»
22410 строка сверху«p» набрано не тем шрифтом
24215 строка снизупосле слова «информации» стоит точка вместо запятой
24817 строка снизунаписано «gotoxy», должно быть «GotoXY» (для единообразия)
249примернужно добавить упоминание, что собирать это надо с флагом -lcurses
250верхняя строка«Ctrl-C» не тем шрифтом
25113 строка снизунаписано «перевода троки», должно быть «строки»
2604 строка сверхунаписано «init_pair(i, fg, bg);», должно быть «init_pair(i, all_colors[fg], all_colors[bg]);»
264в примерахздесь и далее в тексте примеров следует добавить восклицательный знак после имени пользователя, как сформулировано в исходных условиях задачи
265верхняя строканаписано «на единицу», должно быть «на два»; здесь и далее следует скорректировать числа
28016 строка снизунаписано «чем на самом деле», должно быть «чем они есть на самом деле»
31810 строка снизу«Ctrl-D» не тем шрифтом
33219 строка снизунаписано «ограничнивает», должно быть«ограничивает»
34420 строка сверхунаписано «памяти», должно быть «память»
3446 строка снизунаписано «упрощениям», должно быть «упрощениями»
349профиль вызова forkдля единообразия следует убрать слово «void»
3502 строка сверху«0» не тем шрифтом
355верхняя строканаписано «execve», должно быть «execvp»
3613 строка сверхунаписано «для отдельной главы», должно быть «для отдельного параграфа»
36217 строка сверху«wait» должно быть курсивом
364в тексте примеранужно добавить подключение заголовочников sys/types.h и sys/wait.h
3726 строка снизув тексте примера переменная fd описана второй раз и после операторов
38121 строка сверхунаписано «в следующей главе», должно быть «в пар.5.3.14» (рубрикацию я поменял, но не все такие вот ссылки выловил)
38210-11 строки снизунаписано «возможностями», должно быть «возможности»
3884 строка снизу«BSD» набрано моноширинным шрифтом, должно быть обычным
39013 строка сверхув слове «расчитывают» должна быть двойная «с»
3972 строка сверхунаписано «всё ещё единица», должно быть «всё ещё ноль»
3973 строка сверхудля единообразия следует убрать скобки у вызова «pause»
40317 строка сверху«0» не тем шрифтом
404в тексте примерапри общей чистке были упущены побочные эффекты в заголовках if; fork нужно вынести на отдельную строку вроде pid=fork()
4123 строка снизу«3» не тем шрифтом
4149 строка сверху«3» не тем шрифтом
41420 строка снизу«4» не тем шрифтом
41417 строка снизу«0» не тем шрифтом
41817 строка сверху«0 или 1» 0 и 1 не тем шрифтом
418перед заголовком«Ctrl-C» не тем шрифтом
423в тексте примеранужно убрать fgets из заголовка if
4527 строка сверхунаписано «транспортные», должно быть «сетевые»
4661 строка после заголовканаписано «ISO», должно быть «OSI»
48318 строка снизупример raw sockets неудачен, они есть не только в Linux
4904 строка сверху«0» не тем шрифтом
49020 строка сверхунаписано «этот fromlen», должно быть «этот *fromlen»
4943 строка сверхуво втором параметре профиля должен быть const
49516 строка сверху«0» не тем шрифтом
49919-20 строки сверху"частое употребление" слова «данных», надо переформулировать предложение
50618 строка снизуслово «long» набрано не тем шрифтом
50910 строка снизуоборот про timeout — атавизм от старой версии текста, нужно убрать
5093 строка снизунаписано «очищаем множество», но их там два, лучше будет «очищаем множества»
51020 строка сверхув вызове select последний параметр должен быть &timeout, а не NULL
521верхняя строканаписано «на стр.6.4.5», должно быть «на стр.512»
532предпоследний абзац (мелким шрифтом)утверждается, что все команды атомарны; это в действительности не так, например, чтобы inc [var] сделать атомарной, нужно к ней добавить префикс lock (см. пар. 3.2.14 в 1 томе)
53914 строка снизунаписано «пыталсь», должно быть «пытались»
54812 строка сверхунаписано «sepaphore», должно быть «semaphore»
555в тексте примерапри общей чистке был упущен побочный эффект в заголовке if; fork нужно вынести на отдельную строку вроде pid=fork()
5781 строка сверху«0» не тем шрифтом
5809 строка снизунаписано «элеметов», пропущена буква «н»
595в тексте примерапеременная fd описана после оператора; нужно из строки «int fd = ...» убрать слово int, а саму переменную добавить в описание в начале функции вместе с i.
604две верхние строки«(программного прерывания)» должно быть после «системного вызова», а не там, где сейчас
6184 строка сверхупропущено тире после слова «контейнеры»
6286 строка снизунаписано «планировщих», должно быть «планировщик»
63118 строка сверхунаписано «к концу третьего тома», должно быть «второго тома»
68512 строка снизунаписано «расширения», должно быть «суффикса»
686нижняя строканаписано «в части 5» должно быть «в части 4»
68916 строка сверхуслово «gdb» набрано не тем шрифтом
69121 строка снизу«Shift-F» набрано не тем шрифтом
69119 строка снизу«Ctrl-C» набрано не тем шрифтом
6912 строка снизуслово «pid» набрано не тем шрифтом
6974 строка сверхунаписано «при написании Makefile из предыдущего параграфа мы могли бы», нужно что-то вроде «мы могли бы в нашем Makefile» (здесь был убран заголовок параграфа)
70011 строка сверхунаписано «был», должно быть «было»
7015 строка сверхуслово «vim» набрано не тем шрифтом
70117 строка сверхупосле слов «в одну строчку» стоит две точки вместо одной
70121,22 строки сверхуслова «next» и «previous» набраны моноширинным шрифтом, должен быть курсив

Том III

Стр.ПоложениеСодержание, комментарий
448 строка сверхунаписано «во втором томе», должно быть «в первом томе»
7511 строка сверху«do-while» не тем шрифтом
7719 строка сверхув сноске пропущен сокр. пробел после «стр.»
97в примерахздесь и далее имена «modulo» и «Modulo» следует заменить на что-то более подходящее, напр. Modulus или даже Magnitude
1066 строка снизунаписано «функция-деструктора», должно быть «функции-деструктора»
1215-6 строки сверхунаписано «целочисленных переменных», должно быть «переменных типа float»
12615-16 строки снизунесогласование числа, должно быть «вызывать методы, не являющиеся константными»
13012 строка снизусомнительна форма слова «сам», желательно переформулировать фразу
147в тексте примера«A::» не нужно (избыточно и приводит к ошибке)
1579 строка сверхуимя класса «A» набрано не тем шрифтом
1815 строка снизунаписано «толлейбусы», пропущена буква «р»
1883 строка сверху«вытекает из» написано дважды
21416 строка снизунаписано «случе», должно быть «случае»
2404 строка снизунаписано «сроку», должно быть «строку»
2439 строка после заголовканаписано «по третьему тому», должно быть «по второму тому»
24817 строка сверхулишний пробел в заголовке цикла «for»
2624 строка снизу«Ctrl-C» набрано не тем шрифтом
2795 строка сверхуне нужны скобки у free
30021, 24 строки сверху0, 1, 0, 2 набраны не тем шрифтом
3062 строка снизунаписано «Xlib», нужно «Xlib.h»
3118 строка сверхунаписано «представляющая как (в роли которых», пропущено слово «данные» перед скобкой
31720 строка снизуслово «GCL» набрано моноширинным шрифтом, должен быть обычный
3323 строка сверхунаписано «операция!условнаяусловных операций», в исходнике перепутана команда LaTeX'а, должно быть просто «условных операций»
334первый примерназвание функции sqe-det стоит поменять на sqe-discr или что-то вроде
3363 строка снизунаписано «reverse_do», должно быть «reverse1_do»
34612 строка снизунаписано «наывается», пропущена буква «з»
35218 строка снизунаписано «лябмда-списка», перепутаны буквы в слове «лямбда»
374в комментарии к примеруслово «when» бывает не только в loop, как и некоторые другие символы — стоит это упомянуть
38321 строка сверхунаписано «состязяний», должно быть «состязаний»
3889 и 23 строки сверхунаписано «do-it», должно быть «do_it»
3899 строка сверхунаписано «do-it», должно быть «do_it»
3916 строка снизунаписано «Schicken» вместо «Chicken»
39413 строка снизунаписано «-postlude '(main ())'», должно быть «-postlude '(main \'())'», поскольку в Scheme, в отличие от классических лиспов, пустой список сам в себя не вычисляется
395последняя строка параграфанаписано «Hello, world», должно быть echo
4012 строка сверхунаписано «eof-object», должно быть «eof-object?»
4037 строка снизунаписано «Пропробуем», должно быть «Попробуем»
405текст примера вверхутело внутреннего let сдвинуто на 5 пробелов вместо 4
410пример внизуимя переменной det стоит поменять на discr или что-то вроде
4116 строка сверхунаписано «и если», должно быть «или если»
411пример внизунесколько раз написано eq, тогда как должно быть eq?, это ведь Scheme
42614 строка снизунаписано «подумть», пропущена буква «а»
474начало второго абзацанаписано «Все процедура», должно быть «Все процедуры»
4972 строка сверхунаписано «четырёх», должно быть «трёх»
49719 строка сверхув примере кортежа написано «truval», должно быть «true», ведь это значение, а не тип
5002 строка сверхунаписано «похожие шаблоны», должно быть «похожие на шаблоны»
5132 строка снизустоит точка вместо запятой
53320 строка снизунаписано «\x=20-x», должно быть «\x=>20-x»
54114 строка сверхунаписано «становлен», должно быть «установлен»
546нижний примерпропущено завершение с кодом неуспеха (например, exit 1) для случая, когда выражение не удалось вычислить
54916 строка сверху«fal» заключено в кавычки, это здесь не нужно
57018 строка снизупропущена запятая после «abra(kadabra)»
57013 строка снизупропущена точка перед словом «Подчеркнём»
57214 строка снизунаписано «вызывамого», пропущена буква "е"
57317 строка сверхунаписано «функциии»
5756 строка сверхунаписано «позволяюще» вместо «позволяющие»
57918 строка сверху«Tcl» набрано не тем шрифтом
57912 строка снизунаписано «прощ», должно быть «проще»
581нижняя строка«Ctrl-D» набрано не тем шрифтом
6014 строка снизунаписано «странам», должно быть «сторонам»
6293 строка сверху«Ctrl-C» набрано не тем шрифтом
63017 строка сверхунаписано «во втором томе», должно быть «в первом томе»
6485 строка сверхупропущена запятая после слова «например» в скобках
6544 строка снизуслово «World» дважды написано с заглавной буквы, должно быть со строчной
65514 строка снизуслово «xterm» набрано не тем шрифтом
659в примерахнаписано «old-new.patch», должно быть «old-new.diff» (дважды)
66414 строка сверхунаписано «назыают» — пропущена буква «в»
Спасибо всем, кто помог (и продолжает помогать) выявлять эти ошибки!

admin, а Вам

admin, а Вам висячие строки как, например, Том I, страница 416, самый низ - подсказывать? Или вы в них не видите проблем?

admin аватар

Вообще у меня

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

Том I, стр.472,

Том I, стр.472, пример в середине листа:

q:  dispose(a);
    dispose(b)

Для единообразия с другими примерами на листе - параметры поменять на p и q? Или в именно a, b - какой-то смысл вложен?

admin аватар

с именем метки

с именем метки законфликтует

Том I, стр. 169, 2-я строка снизу

Том I, стр. 169, 2-я строка снизу
Добрый день,
речь о конъюнкте отрициний аргументов x и y: в текущем виде может быть истолкован неверно - как отрицание конъюнкции двух аргументов, хотя чуть выше в тексте для этого и применялись скобки. Для невнимательных читателей, вроде меня :-), все-таки лучше визуально разделить аргументы (знаком точки (умножения) или амперсандом), чтобы отрицание каждого элемента не сливалось в общее отрицание конъюнкции.
Данное пожелание справедливо для двух конъюнктов на указанной строке, а также для двух конъюнктов в тексте рассматриваемого абзаца на следующей странице.

admin аватар

Пожалуй,

Пожалуй, вы правы. Поправил я это прямо в рукописи, в таблицу не буду выносить — долго объяснять, в чём проблема :-)

fluorine аватар

1 том, стр. 663

в примере кода внизу посередине нарушен отступ

%rep %0
%rotate -1
вот здесь.....push dword%1

в copy.asm отступ в 2 табуляции

Том I стр. 316

...Ctrl-\ (28), Ctrl-] (29)., ...
После Ctrl-] (29), скорее всего, ненужная точка.

admin аватар

Факт, спасибо

Факт, спасибо

Том 1, страница 109, таблица 1.3, последняя строка.

Том 1, страница 109, таблица 1.3, последняя строка. Предлагаю переформулировать. Не "отменить все изменения, внесённые в текущую строку", но "отменить все изменения, внесённые в последнюю изменённую строку (и перевести указатель на неё)". В скобках - опционально. Благодаря Вашей книге впервые открыл vim без опасения что-то сломать (а это, поверьте, очень много), начал пробовать команды из таблицы, и последнюю приведённую команду (U) проинтерпретировал как "отменить все изменения в строке, на которую указывает курсор". Ещё удивился, как это vim запоминает все изменения по строкам. Пришлось потратить время, чтобы понять, что произошло, когда я увидел, что vim повёл себя не так, как я того ожидал. Это не плохо и, пожалуй, не показательно, но всё же предлагаю переформулировать.

P.S. Благодарю за книги

admin аватар

Ну да,

Ну да, сформулировано не совсем корректно. Совсем правильно будет "отменяет сразу несколько последних изменений, если все они сделаны в одной строке текста".

Чтобы vim'а не бояться, откройте для себя vimtutor. Вот прямо команду такую дайте, дальше действуйте по инструкции.

feriman аватар

Том 3, стр. 629, 3-я

Том 3, стр. 629, 3-я строка сверху - "Ctrl-C" набрано не тем шрифтом.

fluorine аватар

1 том, стр 555 самое начало

fig7

Что-то не приходит в голову ассоциаций с fig*, может dig(it)?

admin аватар

figure, в принципе

figure, в принципе вполне допустимое слово для цифры, хотя и реже встречается, чем digit

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

fluorine аватар

Нет противоречий?

стр. 524

сноска внизу: коды команд ... от 1 до 15 ячеек

стр. 547

Регистр EIP, ... (отметим, .. от 1 до 11 идущих подряд ячеек)

feriman аватар

Том 3, стр. 601, 4-я

Том 3, стр. 601, 4-я строка снизу - написано "... значения, соответствующие странам света ...", должно быть "... сторонам света ...".

feriman аватар

Том 3, стр. 579, 18-я

Том 3, стр. 579, 18-я строка сверху - слово "Tcl" напечатано не тем шрифтом.

feriman аватар

Единство стиля

Том 3, стр. 576, 8-я строка снизу - r = fgets(cmd_buf + len, bufsize-len, stdin);, мне кажется что пробелы вокруг "+" лишние.

feriman аватар

Том 3, стр. 546,

Том 3, стр. 546, нижний пример - размер шрифта меньше чем у остальных примеров.

feriman аватар

Том 3, стр. 575, 6-я

Том 3, стр. 575, 6-я строка сверху - написано "позволяюще" вместо "позволяющие".

feriman аватар

Том 3, стр. 573, 17-я

Том 3, стр. 573, 17-я строка сверху - написано "функциии" вместо "функции".

feriman аватар

Том 3, стр. 572, 14-я

Том 3, стр. 572, 14-я строка снизу - написано "вызывамого", должно быть "вызываемого".

feriman аватар

Единство стиля

Том 3, стр. 554, третий пример сверху - написано proc greet {name} вместо proc greet { name }.
Том 3, стр. 555, два примера сверху - написано proc quad {x} вместо proc quad { x }.
Том 3. стр. 558, второй пример сверху - написано proc swap {a b} вместо proc swap { a b }.

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

admin аватар

Там этих

Там этих "других примеров" не намного больше, так что с ходу непонятно, в какую сторону править, в эту или в противоположную. Но, пожалуй, соглашусь: после Си/Си++ фигурные скобки без этих внутренных пробелов воспринимаются паршивенько.

feriman аватар

Том 3, стр. 555, 16-я

Том 3, стр. 555, 16-я строка сверху (текст примера) - написано "set s 0;". Не опечатка, но мне кажется что здесь точка с запятой излишняя.

admin аватар

Согласен.

Согласен. Поскольку не опечатка, правлю прямо в рукописи, её всё равно через несколько месяцев готовить к переизданию.

Я озвучу здесь,

Я озвучу здесь, что я ничего не понимаю. Может стоит раскрыть доказательство Том I, 189, 2 последних абзаца? Мне не то, что не очевидно, мне доказательство кажется неверным, потому что S(S') вообще не обязан останавливаться, пусть S самоприменим, но мы же ему другой вход подали, не S, а S'?

admin аватар

Есть такое

Есть такое понятие "доказательство от противного", знаете? В этой схеме делается некое допущение, а потом доказывается, что такое допущение никак не может быть верным. В данном случае в роли допущения — что существует алгоритм, который про любой алгоритм может сказать, самоприменим тот или нет. Т.е. этот S (а именно так в доказательстве обозначен этот гипотетический алгоритм) должен, когда ему на вход дали алгоритм (любой!!!) не просто "остановиться", а ещё и сказать (правильно сказать!) "да" или "нет".

Если предположение ослабить и сказать, что, мол, вот пусть будет такой алгоритм, который для некоторых алгоритмов говорит "да" или "нет", а на других зацикливается — то доказать его невозможность не получится. Знаете, почему? Потому что такой алгоритм вообще-то возможен, и есть чуть-чуть подумать, это окажется очевидно (ну пусть он, к примеру, говорит "да" на всех алгоритмах, не содержащих ни циклов, ни рекурсии, ни переходов назад, а как чего из этого увидит — так тут же от ужаса в бесконечный цикл; выглядит слишком просто, но "ослабленным" условиям удовлетворяет). Но такой алгоритм не является решением проблемы самоприменимости.

Вот теперь даже

Вот теперь даже я понял доказательство.
Я ведь не просто так: не понял и вам сразу писать. Я перечитывал, я понять пытался, но не получалось.
А причина в том, что каждый раз до вашего объяснения воспринимал строчку "В самом деле, допустим, такой алгоритм есть" как "В самом деле, допустим, есть такой алгоритм, который, если подать ему на вход _собственный_ исходный код, определяет остановится ли он". Ну вижу что чушь, такую программу очень легко реализовать же, но что конкретно я неправильно понимаю - всё не доходило.
Так вот, вдруг я не один такой? Для таких как я специально, возможно переписать обозначенную строчку чуть, чтобы яснее было какой "такой" алгоритм есть.
"В самом деле, допустим, что существует алгоритм, который может определить, самоприменима ли программа, поданная ему на вход". Ну или как-то иначе, но раскрыв "такой" непосредственно в предложении.

admin аватар

Пожалуй,

Пожалуй, соглашусь; этот абзац надо переформулировать.

Опечатка

Том I, стр 97, строка 1: "дугие"

admin аватар

Класс! Вот прям

Класс! Вот прям на самом виду, и никто не заметил до сих пор. Спасибо!

Том 1 стр. 239

Про точку с запятой в Паскале:

Слово end оператором не является, так что точку с запятой перед ним обычно не ставят.

С точки зрения языка, её можно не ставить перед end. НО обычно её там ставят всегда, а её отсутствие можно считать плохим стилем. https://wiki.freepascal.org/End

Вы в книге обращаете внимание, что отступы и форматирование кода крайне важно. Так вот, точка с запятой перед end, по моему мнению, точно такая же важная часть форматирования.

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

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

Ну и придётся дописать точку с запятой во всех примерах кода...

admin аватар

Да неужели,

Да неужели, а?

Ну так вот нет. Совершенно категорически нет. Мне, надо сказать, стоило довольно серьёзных усилий выловить и ликвидировать все паразитные точки с запятой перед end'ами, в первом издании их было довольно много — всё-таки сишные привычки дают себя знать. Но именно их наличие — это крайне паршивый стиль, это, собственно говоря, показывает, что автор кода не вполне понимает, что пишет и как устроен язык, на котором он пишет. А кроме того, разница в подходах к точке с запятой между Паскалем и Си (здесь — разделитель между операторами, там — часть оператора) сама по себе ценна тем, что можно показать, как языки программирования умеют друг от друга отличаться, показать на довольно наглядном примере, что Си — не догма и что может быть по-другому.

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

Кстати, по приведённой ссылке ни слова не сказано на тему того, что такие точки с запятой можно и тем более нужно ставить. Впрочем, даже если бы и было сказано — после эпопеи с SeekEof, в ходе которой пришлось столкнуться и с кодом реализации FP, и с людьми, которые сейчас им занимаются — для меня эти люди более ни малейшим авторитетом не обладают.

UPD: Я предпочитаю объяснять людям, как устроен синтаксис языка, а не требовать, чтобы они запомнили, что, видите ли, перед else точка с запятой не ставится, но вообще-то если это else внутри case, то ставится. Привычка рассматривать точку с запятой по-сишному, как часть оператора, а не как разделитель между ними, совершенно неизбежно ведёт к недопониманию происходящего и к необходимости зубрёжки на ровном месте; это недопустимо, и, следовательно, недопустимо толерантное отношение к паразитным запяточкам, и уж тем более совершенно недопустимы любые измышления на тему желательности таковых.

Засим всё. Ваши дальнейшие ссылки на "авторитеты", которые рассказывают, что точку с запятой перед end следует ставить, здесь не пройдут премодерацию. И пойдите куда-нибудь ещё, в Интернете очень много разных сайтов, здесь вам делать нечего.

А мне вообще не

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

К сожалению, такое их использование плохо согласуется с тем, что каждый if, while, for и тд считаются за один оператор. Но в более поздних языках Вирта это изменили, вроде как.

А почему, по вашему мнению, сейчас всем пофиг на все Модулы, модулы-2, обероны и прочее кроме 1.5 анонимусов, а паскаль хоть и по-немногу теряет позиции, но всё ещё один из самых популярных языков?

Сейчас из языков с синтаксисом похожим на более поздние разработки Вирта остался только Lua.

admin аватар

> Во многих

> Во многих языках

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

> пофиг на все Модулы

Паскалю повезло — существовал Turbo Pascal, и он был в своё время самым популярным инструментом разработки под первую в истории реально массовую "платформу" (хотя тогда такого слова не было) — MSDOS. Поэтому появилось много людей, знающих Паскаль. На этом его популярность до сих пор и держится. Модулам повезло меньше.

Ну а Оберон изначально мертворождённый бастард. Потому что grabage collected. Вирт, судя по всему, на старости лет сбрендил, что такое выкатил.

> Lua

Да окститесь, что там общего с Паскалем?

> Да окститесь,

> Да окститесь, что там общего с Паскалем?

Не с паскалем, а скорее с модулами и обероном. Операторы цикла, условия и тд заканчиваются end, но без begin. Разработчик вроде где-то писал, что при разработке языка смотрел на модулу.

А вот почему он не взял уже имевшийся и занимавщий ту же нишу Tcl мне не очень понятно.

> Turbo Pascal, и он был в своё время самым популярным инструментом разработки

Ну, что он был популярен в народе — тут спору нет. Но как инструмент для разработки массового софта он почему-то в голове не укладывается. Например из игр на паскале я знаю только "Гопник". Если вы скажете, что что-то вроде Norton Commander, rar, pkzip, arj, lexicon, word perfect, prince of persia, wolf3d, digger..., в общем что-то из DOS-программ, названия которых я могу вспомнить, было написано именно на Turbo Pascal, я буду удивлён.

admin аватар

Ну уж слово end,

Ну уж слово end, гм... Это, конечно, очень, очень важный аспект синтаксиса языка :-)

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

По-моему, идея

По-моему, идея заменить громоздкие конструкции if ... then begin ... end else begin ... end на if ... then ... else ... end всё-таки весьма неплохая.

Странно, что Вирт сразу не догадался, что ключевые слова then, else, do дублируют роль операторных скобок. В asm и record он уже и так обошелся без begin, оставив только end, можно было так же сделать и в других конструкциях.

admin аватар

В asm и record конец

В asm и record конец должен быть обозначен всегда, а в циклах и ветвлениях телом может быть один оператор, тогда скобки не нужны. В действительности «лишние» begin'ы вообще никак не мешают, давно известно, что лаконичность не означает снижения трудоёмкости кодирования (да, вот так, вот прямо так).

Зато при таком раскладе начинается совершенно неизбежная путаница при вложенных if'ах, так и тянет потом ещё и else сделать обязательным.

> Зато при таком

> Зато при таком раскладе начинается совершенно неизбежная путаница при вложенных if'ах, так и тянет потом ещё и else сделать обязательным.

Не совсем понимаю, что за путаница. Но вообще, думаю есть смысл иметь оператор elseif, elif или подобный чтобы уменьшить количество вложенных условий. А else обязательным делать не нужно.

admin аватар

Да классика

Да классика же:

if ConditionA then
    if ConditionB then
        OperatorC
  else
      OperatorD

к какому из if'ов относится else. Вообще-то если каждый if нужно закрывать end'ом, проблемы как таковой нет, разве что с диагностикой (какой из end'ов забыли написать).

Слова elseif, elif и т.п. не являются операторами, такие вещи входят в тот оператор ветвления, который начался словом if. Кстати, да, если каждый if нужно закрывать end'ом, без elif'а или его аналога в конце будет слишком много end'ов и нормального форматирования не получится.

Том I стр. 154

... то его численное значение будет ⨊ki=010kdk
степень и индекс вместо k, вероятно, должны быть i
⨊ki=010idi
(теги sup и sub, скорее всего, не доступны).

admin аватар

Thanks :-)

.

Замечания

Том II с. 249
и далее возникла проблема: все программы с curses не линкуются с библиотекой при компиляции со стандартным набором опций. Решено добавлением -lcurses в конец.

gcc -Wall -g curses_hello.c -o curses_hello -lcurses

Том II c. 694
$ valgrind --version
valgrind-3.17.0
$valgrind --tool=memcheck --db-attach=yes ./badcode
valgrind: Unknown option: --db-attach=yes
valgrind: Use --help for more information or consult the user manual.

теперь для отладки используются -vgdb

$valgrind ---tool=memcheck -vgdb-error=0 ./badcode

и два терминала

Том III c. 659
имя файла патча должно быть old-new.diff - см. выше его
создание

admin аватар

Спасибо

Вопрос с valgrind требует дополнительного изучения, но к третьему изданию это будет учтено.

feriman аватар

Том 1, стр. 78 -

Том 1, стр. 78 - нарушен порядок сносок, сначала идёт сноска под номером 17, а за ней 16.

admin аватар

Это, к

Это, к сожалению, из серии "оно само". Такой эффект получается, если плавающий объект, сам содержащий сноску, и при этом описанный после некой другой сноски, физически оказывается в тексте до неё. Вон в версии от ДМК эти сноски оказались на разных страницах, и эффекта не наблюдается. Выловить такие штуки довольно сложно, хотя если выловить — то преодолеть можно. Факт тот, что вылавливать их нужно уже в полностью готовом оригинал-макете, где не предполагается больше никаких правок.

feriman аватар

Я так и подумал

Я так и подумал что "оно само", но всё же принял решение указать на это. :-)

feriman аватар

Том 1, стр. 78 -

Том 1, стр. 78 - точка на пустой строке после Рис. 1.5.

feriman аватар

Том 1, стр. 66, 11-я

Том 1, стр. 66, 11-я строка сверху - написано "... устройства, способные хранить от нескольких до нескольких десятков двоичных разрядов; ...". Кажется здесь "от нескольких" лишнее.

feriman аватар

Том 1, стр. 64, 22-я

Том 1, стр. 64, 22-я строка снизу - написано "... логические уровни, соответствующее ...", должно быть "соответствующие".

1 том.236, 2 абзац

1 том.
236, 2 абзац — шрифты у Ctrl-*

2 том.
10, 1 строка — "синтаксис", точнее будет "лексика"
33, 4 строка снизу -- "команды printf", возможно, должно быть "команды printf"
33, 4 строка снизу — "которые представляют собой обертку", "обёртку" вместо "обёртки"
372, пример — объявление переменной fd после операторов
452, 7 строка — "транспортные" вместо "сетевые"

3 том.
190, 1 абзац, последняя строка — "наконец", запятые
262 — Ctrl-C, шрифт
263 — подпись к рисунку, стоит добавить кавычки к "Hello, world"
279, 5 строка — free(), скобки
35 сноска — раннее в тексте "тип бокса" встречалось (273, 5 строка)
300, 2 абзац, 3 и 6 строки снизу — "0 и 1" и "0 и 2", шрифты

Параграф про "свой главный цикл" — стоит упомянуть wait_for_expose и Fl::flush (поскольку между win->show() и Fl::run() окна, как ни странно, еще не видно, а от использования Fl::run мы отказались), и, возможно, default_callback (callback, вызываемый при закрытии окна при помощи "крестика")

306, предпоследняя строка — <X11/Xlib> вместо <X11/Xlib.h>

------------------------------

Ещё есть такой вопрос: в 4 части в параграфе про параметры функций упомянуты strtol, strtoll и strtof; а нельзя ли вместо них использовать sscanf? Или это ещё хуже?

admin аватар

> 10, 1 строка —

> 10, 1 строка — "синтаксис", точнее будет "лексика"

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

> 190, 1 абзац, последняя строка — "наконец", запятые

как ни странно, нет: в данном случае "наконец" представляет собой обстоятельство, а не вводное слово (отвечает на вопрос "когда"), и не обособляется

> 35 сноска — раннее в тексте "тип бокса" встречалось (273, 5 строка)

вот же чёрт :-) Good catch. Посмотрел, там с этим термином вообще полный бардак, так что поправил сразу в рукописи, а то тут в таблице слишком долго описывать, что и где надо поменять.

Про "свой главный цикл" — я FLTK не трогал со времени работы над этой главой при написании четвёртого тома первого издания, т.е. с февраля 2020 г., и всё напрочь забыл, сейчас нет времени туда лезть; но:

> wait_for_expose

А мы это вообще можем делать, если главный цикл у нас свой и программа построена событийно-ориентированно?

> Fl::flush

wait её вызывает, насколько я понимаю; в принципе возможен вариант, что из сокета, связанного с X-сервером, долго ничего не будет сыпаться, и окно так и будет невидимым, но может ли так быть на практике?

> sscanf? Или это ещё хуже?

конечно, хуже: sscanf нам ничего (от слова совсем) не скажет про то, где и обо что она споткнулась; все эти strtoXX хотя бы позволяют понять, в какой позиции строки возникли проблемы

> операторные

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

По поводу wait_for_expose:
Ну а если от программы без отрисованного окна не будет никакого толку?

> wait
Вы правы, wait вызывает эту функцию, однако, если перед началом главного цикла уже есть готовые окна, всё равно придётся вызвать wait или Fl::flush (или тот же wait_for_expose), чтобы отрисовать их.

По поводу strto*:
А как, на Ваш взгляд, должен выглядеть интерфейс этих функций?

admin аватар

> он не должен

> он не должен вернуть токен, в котором есть информация о типе этой скобки?

Насколько я понимаю, нет — если я только правильно понял ваш вопрос. Лексер возвращает токен, который и есть эта скобка, т.е. просто другое представление самой по себе скобки. Про то, что токен '{' как-то там связан с токеном '}', лексер ничего не знает, это епархия синтаксического анализатора.

> Ну а если от программы без отрисованного окна не будет никакого толку?

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

> всё равно придётся вызвать wait

В обсуждаемом параграфе предлагается делать Fl_Widget::wait(0,0) каждый раз, когда сокет связи с X-сервером демонстрирует готовность к чтению.

> А как, на Ваш взгляд, должен выглядеть интерфейс этих функций?

Например, так:

void str_to_long(const char *s, int base, long *result, char **err);

Я имел ввиду

Я имел ввиду кое-что другое. Допустим, все типы токенов описаны каким-нибудь enum'ом, и встретив ту же '{', лексер вернёт значение вроде token_left_brace, ну а то, что token_left_brace и какой-нибудь token_right_brace связаны между собой, лексер, конечно, не знает и знать не должен. При такой схеме работы разница между begin/end и фигурными скобками как раз остается на уровне лексики.

> wait
Может у меня что-то не так с иксами, но если ни одно окно программы не отрисовано, на сокете, связанном с X-сервером, никаких событий не возникает.

admin аватар

Ага, теперь

Ага, теперь представим себе, что лексемы представляются не enum'ами, а строками. Вряд ли так, конечно, будет в боевом компиляторе (ибо медленно), но в принципе такая реализация возможна. Лексер при этом знает только, что некоторые символы (и их последовательности) следует рассматривать как разделители. К тому же end в Паскале заканчивает не только begin, но ещё и record, и case, а вот представить себе фигурную скобку в такой роли как-то тяжко.

В общем, какой-то странный вопрос. Может, я и неправ, тогда я останусь при своём заблуждении, но повода для исправления я тут не вижу.

Про иксы: посмотрел одну свою старую программу, таки да — я там wait(0,0) вызывал, прежде чем нырнуть в главный цикл. Пожалуй, flush будет логичнее. Что-нибудь придумаю с этим.

feriman аватар

Том 2, стр. 205, 6-я

Том 2, стр. 205, 6-я строка сверху - "... что там возвращает операция инкремента в той и другой её форме." Мне кажется что должно быть "... в той или другой её форме."

admin аватар

Пожалуй,

Пожалуй, соглашусь. Поскольку это формально не ошибка, я её поправил сразу в рукописи.

feriman аватар

Том 2, стр. 165, 9-я

Том 2, стр. 165, 9-я строка снизу - вместо "then" должно быть "than".

fluorine аватар

1 том, страница 371, самое начало

Версия Free Pascal, имевшаяся у автора этих строк на момент, ... и дальше проблемы

В ncrt нет таких проблем (ReadKey не даёт тройных кодов, либо просто один символ, либо ноль и символ далее), правда там появились новые проблемы, в частности нет ScreenWidth, ScreenHeight, а попытка подключить вторым модулем crt, ведет к непредсказуемым последствиям.

Залез в исходники, там творится крамешный ад. Видимо буду дальше пользоваться простым crt.

admin аватар

Насчёт

Насчёт кромешного ада — это да. Исходный кромешный ад творится в головах тех, кто сейчас поддерживает Free Pascal, остальное просто производные.

К сожалению, другого поддерживаемого паскаля тупо нет.

fluorine аватар

Попробовал,

Попробовал, паскалевскую версию ncurces, получилась мешанина из попыток объединить паскалевские строки с сишными zero-terminated string, а на всякие попытки использовать integer'ы, компилятор вываливается с требованием использовать сишные int'ы, которые в паскале LongInt'ы. Больше наверное пробовать не буду :), правда ещё есть video... Но оно наверное тоже как fpc'шники пишут: The default Unix/Crt unit is not portable enough, and one big hack.

fluorine аватар

Теперь я точно

Теперь я точно утвердился, что не буду использовать этот модуль ncrt. На попытку вызвать KeyPressed, оно взяло ещё и включило вывод символов, то за что в ncurces отвечают noecho/echo. В начале, когда писал свою программу в ней KeyPressed не было. Когда включил туда KeyPressed поведение резко поменялось. 1.5 часа за отладкой D: Это первый случай, когда функция с побочным эффектом заставила меня потерять столько времени.

Спасибо за ответ!

fluorine аватар

> К сожалению,

> К сожалению, другого поддерживаемого паскаля тупо нет.
к сожалению (

Я все таки разобрался в этой мешанине кода,
вместо ScreenWidth -> nMaxCols,
а вместо ScreenHeight -> nMaxRows.

Ошибочка

МАКС-Пресс, страница 112, последняя строка:
Написано: "...в нём всё-таки прИдусмотрен."
Должно быть: "...в нём всё-таки прЕдусмотрен."

admin аватар

Факт, спасибо.

Факт, спасибо.

fluorine аватар

1 том литература

[2]
Можно поменять ссылку на (та не работает): https://www.bell-labs.com/usr/dmr/www/cacm.pdf

[3]
http://www.faqs.org/docs/artu/ не работает
PDF продаётся, а в HTML как ни странно есть:
http://www.catb.org/esr/writings/taoup/html/index.html

fluorine аватар

[3]http://www.faqs.org/docs/


[3]
http://www.faqs.org/docs/artu/ не работает

Наверное нужно ещё из второго тома удалить ссылку на Реймонда [6], там она та же.

admin аватар

Видимо, проще

Видимо, проще будет ссылки вообще выкинуть.

И да, о Реймонде я был лучшего мнения.

fluorine аватар

Видимо, проще

Видимо, проще будет ссылки вообще выкинуть.
==
Да, тоже так подумал, они же вам не подконтрольны.

Уже не важно, но
https://www.bell-labs.com/usr/dmr/www/cacm.pdf
это просто the unix time-sharing system, только когда начал читать понял, вообще-то правильней эта ссылка
https://www.bell-labs.com/usr/dmr/www/hist.pdf
the evolution of [...]

И да, о Реймонде я был лучшего мнения.
==
Я хотел "Собор и Базар" прочитать, тоже оказывается продаётся :(, поискать можно, но всё равно испортил впечатление о человеке

Том 1, стр. 505, 12

Том 1, стр. 505, 12 строка снизу:
"set var x=50"
При отладке программы, написанной на паскале, долго не мог понять, почему не работат эта команда, пока случайно не попробовал вместо "=" использовать ":=":
"set var x:=50"
Для меня было не совсем очевидно, что gdb использует не свой синтаксис, а синтаксис нужного языка. Он узнаёт это тоже из отладочной информации?

admin аватар

Любопытно

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

По поводу "откуда gdb узнаёт" -- нет, не из отладочной информации, там такого просто нет. Вот тут, например, про это рассказывается: https://css.csail.mit.edu/6.858/2014/readings/i386/s03_02.htm

feriman аватар

Том 2, стр. 74, 7-я

Том 2, стр. 74, 7-я строка сверху - написано "синтаксическим требованиями" вместо "синтаксическим требованиям".

feriman аватар

Том 2, стр. 43, 15-я

Том 2, стр. 43, 15-я строка снизу - "... sizeof, формально говоря, явлется операцией ...", пропущена буква 'я' в слове "является".

1 том.374, 384 — var

1 том.
374, 384 — var моноширинным шрифтом, в других местах обычным
541, 11 строка снизу — Ctrl-D, шрифт
550 — странно оформлена 13-ая сноска
591, абзац про nop — помимо иронии, команда nop действительно полезная; она занимает в памяти 1 байт и позволяет выравнивать адреса машинных команд, при этом тратит всего один такт процессора

2 том.
102, 1 строка — "операнды сложения могут быть выполнены", возможно, лучше "могут быть вычислены"
125 — fscanf(/* ... */) == 1
162-163 — размер отступа у примеров typedef
205 — getchar, скобки
224, 10 строка — p, шрифт
580, 9 строка снизу — "элеметов" вместо "элементов"
697, 4 строка — "предыдущего параграфа" (?)

3 том.
157 — "Наличие в классе A", A, шрифт
546 — if { $code } { /* ... */ /* возможно, здесь должно быть exit 2 */ }
549 — лишние "ёлочки" у fal

fluorine аватар

А можно, если не

А можно, если не секрет зачем вам пришлось выравнивать адреса машинных команд? Загуглил нашел только аргрумент "для быстродействия". Вроде мы не гонимся за скоростью.

nop с этой целью

nop с этой целью как раз компиляторы используют. Если человек использует эту команду (да и вообще если на языке ассемблера пишет), то уж точно не для повышения быстродействия.

admin аватар

Да ладно, кто

Да ладно, кто это не гонится за скоростью? Вон стандартизаторы и примкнувшие к ним gcc'шники за каждый лишний такт готовы удавиться (и пусть бы их) и весь мир тоже удавить (а это намного хуже) — без --fno-strict-aliasing уже gcc использовать невозможно.

admin аватар

> var

> var моноширинным шрифтом, в других местах обычным

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

> команда nop действительно полезная

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

Спасибо!

3 том, с. 546

3 том, с. 546 попала в список опечаток первого тома

admin аватар

Спасибо,

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

Опечатка том 1, стр. 353

Опечатка том 1, стр. 353:
В абзаце про явные преобразования типов:
>> Например, выражения integer('5') и byte('5') оба будут иметь целочисленное значение 53

admin аватар

вроде 48+5 с утра

вроде 48+5 с утра 53 было, не?

feriman аватар

Том 2, стр. 547, 9-я

Том 2, стр. 547, 9-я строка сверху - "...; ну а до тех пор, пока все операции захвата мьютексов проходят успешно, обращениЯ к ядру не потребуЕтся ни при захвате мьютексов (...), ни при их освобождении ..."; (мне кажется, что слово "потребуется" должно быть в множественном числе).

admin аватар

я здесь имел в

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

feriman аватар

Том 2, стр. 539, 14-я

Том 2, стр. 539, 14-я строка снизу - написано "... мы пыталсь избежать." - пропущена буква 'и' в слове "пытались".

feriman аватар

Том 2, стр. 417, 8-я

Том 2, стр. 417, 8-я строка снизу - написано "Ясно, что лидеР сеанса, не обладающЕГО управляющим терминалом ...".

admin аватар

Ну так

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

Печатная

Печатная версия от "ДМК Пресс" - 1 том, страница 159 (виды бесконечности). В самом низу: "Коль скоро мы упомянули рациональные симла ...". Симла - в данном случае числа?

admin аватар

Да-с,

Да-с, неприятненько. Первый обнаруженный глюк, внесённый в рукопись при подготовке макета для ДМК. В версии от МАКС Пресс этой фразы просто не было, там была длинная сноска, я её решил вытащить в основной текст, ну и вот :(

Спасибо за внимательность.

Опечатки

2 том.
с. 13 -- Вы про C18 забыли :)
с. 125 -- fscanf(/* ... */) == 1, в параграфе про строковые функции рекомендовано в таких ситуациях ставить 1 и тому подобное слева от знака равенства
с. 142, 15 строка снизу -- пропущена точка
Глава про программу на Си без стандартной библиотеки -- сообщение dunno выводится на stdout, а не на stderr
Там же -- "!", дальше его нет нигде
Там же, с. 265 -- формально, execve выполняет не наша программа (хотя и тот же процесс), но, если и его считать "нашим", то он является "полезным" вызовом (как write и exit_group)
с. 349 -- профиль fork, void в скобках, нигде такое больше не встречается
с. 320 -- CTRL-D шрифт
с. 361 -- "для отдельной главы", глава вместо параграфа
с. 397 -- pause(), скобки
с. 420 -- CTRL-C шрифт
с. 509, 3 строка снизу -- "множество" вместо "множества"
с. 600 -- возможно, моноширинный шрифт у чисел лишний
с. 693 -- CTRL-C и pid, шрифт

3 том.
часть про C++ -- class Complex, название метода modulo

admin аватар

> с. 13 -- Вы про C18

> с. 13 -- Вы про C18 забыли :)

да не так чтобы забыл, я просто перестал следить за этой вакханалией после C11

> с. 142, 15 строка снизу -- пропущена точка

не нашёл

> сообщение dunno выводится на stdout, а не на stderr

Вообще говоря, так и задумывалось, ведь само сообщение сформулировано как обращённое к пользователю, а не как диагностическое. Но я на эту тему подумаю.

> Там же, с. 265 -- формально, execve

там сказано, что строки нужно посчитать и единицу вычесть, это как раз имеется в виду execve :-) надо, наверное, добавить замечание об этом

> с. 320 -- CTRL-D шрифт

не нашёл

> с. 420 -- CTRL-C шрифт

не нашёл

> с. 600 -- возможно, моноширинный шрифт у чисел лишний

мысль понятна, но я не уверен, что могу объяснить, почему он тут лишний (при том что всякие нули и минус-единицы везде моноширинные)

> с. 693

691 :-P и pid в списке уже был, но Ctrl-C (и заодно Shift-F) не было

> с. 142, 15"типа char

> с. 142, 15
"типа char При этом"

> dunno
Формально, наша программа не сумела поприветствовать пользователя, а "return 1;" смотрится как-то привычнее с выводом на диагностический поток.

> strace
тогда 2 строки вычитать, последняя строка содержит информацию об обстоятельствах завершения процесса.

CTRL-D и CTRL-C уже внесены, а я опять про 22 страницы забыл :)

admin аватар

> "типа char При

> "типа char При этом"

Ага, теперь нашёл, только оно уже в списке после вот этого коммента

> Формально, наша программа не сумела

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

> тогда 2 строки вычитать

чёрт, а ведь факт!

fluorine аватар

т.1, стр. 116 стр, 12 стр сверху

Права на запись позволяют модифицировать каталог...
==
Для модификации каталога нужен не только бит записи, нужен ещё и бит исполнения для каталога.

admin аватар

Там весь абзац

Там весь абзац придётся переформулировать. Ну да, придётся :)

feriman аватар

Том 1, стр. 13, 9-10

Том 1, стр. 13, 9-10 строки сверху - написано "... добил рукопись части про Си ...".

admin аватар

Ну да, именно

Ну да, именно так и написано. А что не так-то?

feriman аватар

Тут я ошибся.

Тут я ошибся. Осознал после отправки коммента. Извините :)

Опечатка, Том 2

В коде curses_col.c на страницах 259-260 в функции shift_pairs для изменения цвета пары используются целочисленные значения (fg и bg), но разве они не должны быть индексами для массива all_collors? В других функциях так и сделано. Заранее извиняюсь, если что-то неправильно понял

admin аватар

Факт. Я

Факт. Я восхищён :-)

В опечатках вы

В опечатках вы отметили "bg, fg", а надо, наоборот, "fg, bg"

admin аватар

Спасибо,

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

feriman аватар

Том 3, стр. 214, 16-я

Том 3, стр. 214, 16-я строка снизу, опечатка в слове "случае".

3 том, 664

3 том, 664 страница, 3 абзац, 4 строка, в самом конце написано: "назыают"

fluorine аватар

Том 3, страница 670

После двух export'ов в в конце страницы:
(в нашем примере можно убрать из CVSROOT слово vasya вместе с символом @)

===

Разве не нужно убрать ещё домен cvsserv.example.com?

admin аватар

ага, и как CVS

ага, и как CVS тогда узнает, где реп? телепатически?

fluorine аватар

Извиняюсь,

Извиняюсь, пропустил, если ваша локальная уч. запись называется так же, как и запись на машине с реп.-ом

Т3 стр. 579, 12

Т3 стр. 579, 12 строка снизу. "для этого прощ всего воспользоваться..."

2 том, 188

2 том, 188 страница, 3 сверху строка, 2 раза написано "вытекает из"

admin аватар

это третий том,

это третий том, не второй
и оно уже в списке

Том 1, страница 535

Здравствуйте!
В первом томе на 535 странице (предпоследний абзац) написано: "в памяти ячейках, идущих подряд". Думается, что имелось в виду "в ячейках памяти, идущих подряд".

admin аватар

там не "в памяти

там не "в памяти ячейках", там в "пяти ячейках"

feriman аватар

2 том, стр. 204, 13

2 том, стр. 204, 13 строка сверху - написано "побочным" вместо "побочными".
2 том, стр. 211, 8-9 строки снизу - написано "не оглядываяь" вместо "не оглядываясь".

feriman аватар

стр. 204, 13 строка

стр. 204, 13 строка сверху - написано "побочным" вместо "побочными".

feriman аватар

2-й том, стр. 628,

2-й том, стр. 628, 3-я строка снизу (без учёта сноски), написано "планировщих" вместо "планировщик".

Свои 5 копеек

Том 3 страница 630 2 абзац "В этом смысле примеры программ на языке ассемблера, которые мы рассматривали в третьей части книги (во втором томе)..."
Третья часть в новом издании первый том:)

1 том.646 -

1 том.
646 - "номером прерывания" набрано курсивом, хотя это новое понятие и в первом издании был жирный курсив.
683, 3 строка снизу - судя по всему, пропущено "движется".

2 том.
674, 12 строка сверху - лишняя запятая перед вообще.

admin аватар

> 646 - В первом

> 646 -

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

> 683, 3 строка снизу - судя по всему, пропущено "движется".

мммм.... ну вот не понял, куда там его вкрячить.

> 674, 12 строка сверху - лишняя запятая перед вообще.

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

> 683, 3 строка

> 683, 3 строка снизу
"то в любом разумном смысле слова "движется" следует считать"
Просто, по идее, после "слова" должно быть то самое слово, про смысл которого говорится :)

admin аватар

Ага, понял. Ну,

Ага, понял. Ну, э... тут, наверное, правильнее будет выкинуть слово "слова". Просто — в любом разумном смысле.

М.б. тогда лучше

М.б. тогда лучше "то здравый смысл подсказывает, что этот автомобиль стоит на месте" ?

admin аватар

Не, это слишком

Не, это слишком слабое утверждение. Мало ли кому кто что подсказывает.

> слишком

> слишком слабое утверждение
Разве это проблема? Сомневаюсь, что человек, для которого 10^-10 км/час -- это скорость едущего автомобиля, до конца части про язык ассемблера доберется.

admin аватар

Ну вот я не

Ну вот я не хочу, чтобы меня за такого человека приняли :-)

2 том.с. 499, 3

2 том.
с. 499, 3 абзац - тавтология в первом предложении, дважды повторяется слово "данных"

3 том.
388 - дважды "do-it" вместо "do_it"
401, 2 строка - "eof-object" вместо "eof-object?"
581, последняя строка - "Ctrl-D" шрифт

admin аватар

Спасибо!

Это всё внёс, а ваш более старый коммент (который побольше объёмом) пока ждёт своего часа, но я и до него скоро доберусь.

3 том, 121

3 том, 121 страница, 1 абзац, написано: "...синонимы неких целочисленных переменных...", но ведь min, max у нас ссылки на переменные типа float, или я чего-то не понимаю...

admin аватар

Ух ты

Как говорят англоязычные товарищи, good catch. Когда-то очень давно в этом примере использовался тип int, но я в какой-то момент обнаружил, что засилье типа int приводит к довольно странному эффекту: некоторые студенты забывают, что это вообще такое, и пытаются вообще все переменные, вплоть до указателей, описывать как int'ы :-) У них, конечно, не получается, но сам факт довольно забавен. С тех пор я стараюсь в примерах варьировать типы. Вот только код примера я поменял, а про фразу, упоминающую тип, забыл.

В следующем издании поправлю эту фразу, спасибо :-)

Опечатка, Том 2

Здравствуйте, на странице 70 второго тома в последнем предложении предпоследнего абзаца упоминаются инициализаторы массивов ("...мы уже видели эту ситуацию в примерах инициализаторов массивов."), но часть про них расположена дальше.

admin аватар

Вы правы, это

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

2 том

83, последняя строка - эта операция имеет смысл и для проверки на то, перекрываются ли 2 области памяти или нет, например, для реализации своего memcpy
158 - в России были изобретены АВЛ-деревья, а не красно-черные
318 - "Ctrl-D" шрифт

Параграф про mmap - стоит упомянуть, что перед созданием отображения только что созданного файла необходимо не забыть увеличить его размер при помощи truncate или ftruncate, иначе можно поймать SIGBUS
(и это не один я такой забывчивый, 1, 2, 3)

350 - 0, шрифт
403, жирным - 0, шрифт
414 - 0, шрифт
418 - "0 или 1", шрифты
483 - raw-сокеты есть не только в ядре Linux
489 - inet_addr, man рекомендует не использовать эту функцию, из-за ip-адреса 255.255.255.255, при котором она "ошибется", вернув -1 (прям как atoi, только наоборот)
490 - 0, шрифт
490 - "этот fromlen", должно быть "то на что указывает этот fromlen"
494 - указатель, передаваемый в качестве 2-го параметра, константный
495, жирным - 0, шрифт
506 - в этой связи можно упомянуть (ссылкой наперед) про pselect, который не портит timeout
509, многострадальный timeout - перед началом листинга сказано, что прарметр timeout будет оставлен нулевым, но в самом листинге timeout зачем-то заполняется
578, 1 строка - 0, шрифт
686 - "заменой расширения на .o", должно быть "заменой суффикса на .o"

----------------------------------------

Филологическое:
473, 7 строка - правильно "серверы", а не "сервера", т.к. в слове "сервер" ударение неподвижное. То же самое, например, с драйверами и кластерами.

admin аватар

> 83, последняя

> 83, последняя строка

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

> Параграф про mmap

В принципе да, хотя не факт, что нужно упоминать именно ftruncate, скорее нужен какой-то пассаж про размер файла. Подумаю на эту тему.

> 489 - inet_addr

Во-первых, 487, а не 489 :) А во-вторых, ну не рекомендует, и что? Там двумя строками выше показано, как надо. Хотя оговорку добавить, конечно, можно.

> 686

685 :-P даже не сразу нашёл

> правильно "серверы", а не "сервера"

Ну да, конечно, и уж точно "тракторы", а не "трактора", адназначна (tm). Я одну филологиню как-то спросил, а как тогда будет множественное от слова "доктор". Она, не моргнув глазом, ответила "врачи". Но меня так просто не собьёшь, а что, говорю, если это не те, которые врачи, а те, которые "наук", ну, они ещё в учёном совете заседают. Тут она на секунду запнулась, но таки выдала, что эти будут "обладатели учёной степени".

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

> 83, последняя

> 83, последняя строка
А если рассматривать только плоскую модель? Это же только в форточках и MS DOS есть проблемы с сегментами (особенно в последнем с этими идиотскими регистровыми парами)

> 487, а не 489
забыл, что нужно 2 страницы прибавлять :)

> 685
А это уже никакие 2 страницы не объяснят...

admin аватар

> Это же только

> Это же только в форточках

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

Про MS-DOS — дело не в нём, дело в 16-битной версии x86. Фиксированные регистровые пары из исполнительного адреса исчезли при переходе к 32-битной системе регистров и команд.

опечатка (том 2, стр. 700)

"...,это простое и понятное поведение был "модифицировано"...".

Опечатка. т3.

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

Лютая капча

admin аватар

Какое ещё нафиг

Какое ещё нафиг "пустое тело"? Перечитайте параграф 10.4.13, а потом осознайте, что этот ваш деструктор — вовсе не пустой, он на следующей странице описан с телом весьма и весьма не пустым.

feriman аватар

Том 3, стр. 188, 3-я

Том 3, стр. 188, 3-я строка сверху, словосочетание "вытекает из" повторяется дважды.

feriman аватар

Опечатка

3-й том:
стр. 130, 12 строка снизу, написано "сам", возможно должно быть "самого"

admin аватар

Насколько я

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

feriman аватар

Опечатки

2-й том:
стр. 344, 6 строка снизу, написано "упрощениям", должно быть "упрощениями"
стр. 390, 13 строка сверху, написано "расчитывают", должно быть "рассчитывают"

3-й том:
стр. 106, 5 строка снизу, написано "функция-деструктора", должно быть "функции-деструктора"
стр. 126, 15 строка снизу, написано "константными", должно быть "константным"

admin аватар

Большое

Большое спасибо, прошу прощения за замедленную реакцию.

Второй том, стр.

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

Том № 2, стр. 521

Первая строка. Номер страницы указан неверно из-за неправильной ссылки в латехе.

Том №1 с.368

Том №1 с.368 во втором абзаце, 7 строка SreenHeight вместо ScreenHeight
PS Большое спасибо за книги!

1 том, страница

1 том, страница 544, 4 абзац, "правило восьмидесятой колонОки".

Примеры из книги: кодировка и опечатка

Хотел возмутиться, что у вас во всех файлах комменты на русском в КОИ8, который мне неудобно читать, а оказалось, что всего в одном, и конечно же, том самом, в который я посмотрел первым:

$ find . -type f -exec file {} + | grep -v ASCII 
./numbers.bin:             data
./diamond.pas:             ISO-8859 text
./gettext/ru.po:           GNU gettext message catalogue, ISO-8859 text

Предлагаю комменты в diamond.pas таки перевести на английский.

А в третьем файлике закралась опечатка:
> "Last-Translator: Andrey V. Solyarov\n"

Такая же опечатка и в de.po в том же каталоге.

admin аватар

Спасибо!

Спасибо!

Особенно досадно, что в diamond.pas остались комменты по-русски, я их тупо забыл вычистить, когда формировал этот файл copy-paste'ом из LaTeX'овского исходника книжки. Разумеется, это совершенно недопустимая ситуация -- в тексте программы не место символам, не входящим в ASCII.

modulo

Том 1, стр 259

> program modulo;

Что-то глаз зацепился. Вроде как modulo в английском — это mod из Pascal или % из остальных языков. А тут absolute value. Но с другой стороны, гугление показывает, что для комплексных чисел и векторов modulus значит их длину/расстояние от нуля. Не знаю, стоит ли вообще такие мелочи репортить и отвлекать?

admin аватар

Пожалуй, Вы

Пожалуй, Вы правы. Исправлю в следующем издании, если оно когда-нибудь будет.

Биты - байты

Том первый, страница 206:

>> Один подход, называемый little-endian, предполагает, что первым идёт самый младший байт числа, далее биты располагаются в порядке возрастания

Наверное, имелось в виду "байты".

ls внешняя программа

Страница 120, первый том, второе издание, примечание. Реальный тест показывает, что :

$ help ls
-bash: help: no help topics match `ls'.  Try `help help' or `man -k ls' or `info ls'.
$ builtin ls
zsh: no such builtin: ls
$ builtin ls
-bash: builtin: ls: not a shell builtin

Я думаю, вы хотели сказать echo, а не ls. А вот cd, насколько я понимаю, сделать внешней командой невозможно и в виде отдельного файла её нет.

admin аватар

Вы оказались

Вы оказались правы насчёт ls, хотя проверять-то это, конечно, нужно иначе, например:

crocodil@frock:~$ mkdir d
crocodil@frock:~$ cd d
crocodil@frock:~/d$ touch file1
crocodil@frock:~/d$ strace -f -o XXX bash
crocodil@frock:~/d$ ls
file1  XXX
crocodil@frock:~/d$ exit
crocodil@frock:~/d$ grep exec XXX
4095  execve("/bin/bash", ["bash"], [/* 31 vars */]) = 0
4095  read(3, "# ~/.bashrc: executed by bash(1)"..., 3941) = 3941
4097  execve("/usr/bin/dircolors", ["dircolors", "-b"], [/* 30 vars */]) = 0
4098  execve("/bin/ls", ["ls", "--color=auto"], [/* 30 vars */]) = 0
crocodil@frock:~/d$ 

И вправду вызывает внешнюю, зараза. Но "хотел сказать" я ровно то, что сказал, раньше ls таки внутри шеллов присутствовал. В какой момент выпилили — не знаю, не уследил.

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

Страница 81,

Страница 81, первый том:

mkdir $DIR/$1
cp /mnt/flash/dcim/* $DIR/$1

Следует заключать конструкцию "$DIR/$1" в двойные кавычки, поскольку имена каталогов может содержать пробелы и прочие спецсимволы. Вообще, в bash следует все обращения к переменным заключать в кавычки, кроме исключительных ситуаций, когда вы пытаетесь сделать что-то странное.

Для сравнения, в Tcl после подстановки переменной её содержимое никогда не интерпретируется, если вы явно сами не напишете {*}$var или что-то вроде. А в bash — наоборот, если не добавить кавычек, то содержимое побьётся на слова.

Жалко, нет шелла с синтаксисом Tcl, но поддержкой пайпов и прочих перенаправлений ввода-вывода.

т.2, с.148

2-й том, стр. 148. В последней строке первого абзаца после слова "окажется" стоит точка, а не запятая.

Опечатки

1 том.
с. 329, 15 строка снизу - "Ctrl-D", шрифт
с. 665 - FreeBSD шрифт

2 том.
с. 69 - "aplha" вместо "alpha"
с. 99 - "(s от слова string)", s набрана обычным шрифтом, смешивается с остальным текстом
с. 318 - "Ctrl-D", шрифт
c. 418 - "Ctrl-C", шрифт
с. 436, сноска - "меньшего" вместо "наименьшего"
с. 682, предпоследняя строка - пропущена запятая
с. 686, последняя строка - "в части 5", должно быть "в части 4"

3 том.
с. 75 - "do-while" набрано обычным шрифтом, в других местах моноширинным
с. 77 - "стр.207", нет пробела

Также в архиве примеров есть следы CVS.

------------------------------

Возможно, тоже опечатки:

2 том.
с. 51 - скобки у имени функции f (нигде в книге они вроде бы больше не используются)
с. 92, 19 строка сверху - char, шрифт. В 4 строке снизу используется моноширинный
с. 412, 414 - 2 абзац, 3 и 4 набраны обычным шрифтом, выше по тексту (c. 412) коды обозначены моноширинным

admin аватар

Спасибо!

Т.2 стр. 436 — не вижу криминала;
стр. 682 — подозреваю, что имеется в виду запятая перед союзом "и", но я не уверен, что там она есть — перед ним не обособляемая конструкция, а простое перечисление однородных членов;

Остальное внёс, спасибо! Пардон за замедленную реакцию, внезапно стало не до того.

Ну тогда ...

... щас еще добавлю :)

2т.
c. 64, 1-ый абзац - формально, нет. Умножение и деление можно реализовать и без аккумулятора (хотя только вручную и работать будет гораздо медленнее).
с. 250 - CTRL-C шрифт
c. 362, 5 строка после заголовка вызова wait - "wait", возможно, тут должен быть курсив
с. 604 - фрагмент текста "(программного прерывания)", видимо, съехал вперед

т 3.
с 181, 5 строка снизу - "толлейбусы"
с 248 - в заголовке 2-го цикла for лишний пробел

Таблица с опечатками, 1-ый том, с. 100 - "CTRL-К" вместо "CTRL-R"

------------------------------

И еще такой вопрос: а что по поводу электронной версии издания для ДМК Пресс? Вы писали, что планировали выложить её на сайт. Или пока нет возможности?

> Пардон за замедленную реакцию
Я, если честно, уже через неделю волноваться начал. Вдруг все пропало.

admin аватар

спасибо!

2т. c. 64, 1-ый абзац - формально, нет

Ну да, подумаю, что тут следует сделать.

Остальное внёс/исправил, большое спасибо! Вы ухитряетесь вылавливать опечатки, прожившие в тексте много лет.

а что по поводу электронной версии издания для ДМК Пресс? Вы писали, что планировали выложить её на сайт. Или пока нет возможности?

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

Опечатки в опечатках

2 т., с. 604 попала в опечатки первого тома.
3 т., с. 188 - "0 строка сверху" вместо "3 строка сверху".

admin аватар

спасибо

поправил

Том 2, Обзор средств взаимодействия процессов

Во втором томе в параграфе 5.3.13 на странице 382 второй абзац начинается с предложения: "... использовать возможностями системы ...". Возможно, имелось в виду: "... пользоваться возможностями системы ..."

Том 2.с. 555 -

Том 2.
с. 555 - if(fork()==0) /* ... */
с. 586 - нет операции взятия адреса функции worker_thread
с. 591 - а как вариант перевода "файл захвата"?

Том 3.
с. 413 - в статье Мэтта Майта (ссылка [17] из книги ведёт сюда) с отключённым js большую часть примеров не видно
с. 415 - относительно defun и let сдвиг обычно делают равным одному стандартному отступу (2-3 пробела)

admin аватар

> с. 586 - нет

> с. 586 - нет операции взятия адреса функции worker_thread

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

> с. 591 - а как вариант перевода "файл захвата"?

по мне так намного хуже; это словосочетание предполагает, что существует некий захват как отдельная сущность, тогда как его на самом деле нет, есть только файл

> с. 413 - в статье Мэтта Майта

вопрос, как мы понимаем, не ко мне; не сослаться на этот набор примеров я никак не могу

> с. 415 - относительно defun и let

вообще-то именно это я и предлагаю сделать, только не для defun и let, а вообще для всех форм; но вот насчёт "обычно" — я пока что чаще встречал именно такой стиль, как показано в примере

Еще кое-что

404 - Ещё два fork'a в заголовке if
631, мелким шрифтом - "к концу третьего тома"

> в параграфах про callback-функции и про сигналы
А в чём отличие от обычных функций? Или это какая-то традиция?

Про статью: я, когда зашел на эту страницу, подумал, куда таки примеры спрятались :)

> я пока что чаще встречал именно такой стиль
Я хоть и немного игрался с лиспом, но вот такого ни разу не встретил. Вообще, это "разнообразие" вызывает ощущение, что у любителей лиспа вообще нет никаких принципов.

admin аватар

> А в чём

> А в чём отличие от обычных функций?

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

> ощущение, что у любителей лиспа вообще нет никаких принципов.

К сожалению, у меня такое тоже временами возникает.

Том 2, Пример запуска внешней программы

Во втором томе в параграфе 5.3.8 приведен пример вызова внешней программы с последующим ожиданием устранения зомби-процесса.

Для функции wait() в коде не включены заголовочные файлы sys/types.h и sys/wait.h

Том 2, опечатка

Во втором томе на странице 344 первый абзац заканчивается предложением: "... причем одна и та же физическая памяти может про необходимости ..."

Том 3 стр.336 3-я

Том 3 стр.336 3-я строка снизу.
Должно быть reverse1_do вместо reverse_do ?

Опечатки

том 2
с 381 - "подробное рассмотрение сигналов нас ждет в следующей главе", сигналы рассматриваются через параграф

том 3
240, 4 строка снизу - "сроку" вместо "строку"
375, 3 абзац, 4 строка - "много старше" вместо "намного старше"
383 - состязяний

admin аватар

"много" - в

"много" — в таком контексте вполне допустимо, хотя, возможно, выглядит устаревшим. Остальное внёс. Спасибо!

В таблице у

В таблице у опечатки "стоку" номер страницы не тот :)

admin аватар

thanks :-)

.

Просьба пояснить

Здравствуйте.
Поясните, пожалуйста, не могу понять:

(Массивы - Том 1, стр.346)

program OlympiadCounter;
const
MaxSchool = 67;
MaxGroup = 100;
type
CountersArray = array [1..MaxSchool] of integer;
var
Counters: CountersArray;
i, c, n: integer;
begin
for i := 1 to MaxSchool do
Counters[i] := 0;

Переменной Counters был присвоен тип соответственно описанный выше.
Вопрос: что это за индекс Counters[i] ?

admin аватар

Честно говоря,

Честно говоря, не вполне понимаю ваш вопрос, что значит "что за индекс"? Переменная Counters имеет тип CountersArray, который описан как массив integer'ов. То есть Counters — это массив переменных типа integer. Ну а Counters[i], очевидно, элемент этого массива с номером i. Поскольку это находится в цикле по переменной i, она пробегает значения от 1 до MaxSchool. Весь цикл целиком — заносит нули во все элементы массива.

Что-то вы, похоже, слишком быстро книжку читаете, а делать ничего не пробуете.

"Теперь real100 —

"Теперь real100 — это имя типа; переменная такого типа будет состоять из ста переменных типа real (элементов массива), которые снабжены своими номерами (индексами), причём в качестве таких индексов используются целые числа от 1 до 100. Введя имя типа, мы можем описывать переменные этого типа, например:

Описанные таким образом а и b — это и есть массивы; они состоят из элементов а[1], а[2], ..., a[100], b[1], b[2], ..., b[100]"

В моем понимании элемент массива Counters должен иметь индекс от 1 до 67.

По поводу пробовать - я проверял, все работает, так же пробовал свое понимание - не работает. По этому попросил пояснить.

admin аватар

> В моем

> В моем понимании элемент массива Counters должен иметь индекс от 1 до 67.

Абсолютно верно, и что? Чему, по-вашему, равен идентификатор MaxSchool? Какие значения будет принимать переменная i?

> так же пробовал свое понимание - не работает

Вот смотрите, часть про Паскаль в книге начинается на стр.231, а обсуждаемый пример находится на стр.346. Ну хорошо, допустим, параграф про массивы начинается раньше, на стр.338. Всё равно больше ста страниц материала. Что, до сей поры прямо вот всё-всё было понятно? А сколько, извините за вопрос, программ вы за время изучения всего этого материала самостоятельно придумали, написали на компьютере и запустили? У меня, честно говоря, ощущение, что ни одной, поскольку в тупик вас поставили не массивы и не индексы, а банальный цикл for и переменная цикла в нём.

Удаление из списка

На стр. 153 при удалении текущего элемента из списка, в ветках "else" разве не нужно делать first->prev = NULL и last->next = NULL соответственно? Спасибо.

admin аватар

Нет, не нужно,

Нет, не нужно, это уже сделал второй if (не тот, в котором ветка else сработала, а второй). В этом плане случаи первого и последнего элементов не представляют собой ничего особенного.

Том 2, опечатка

На странице 150 первый абзац заканчивается предложением:
"...; ограничимся тем, что адаптируем рассмотренный там решения к реалиям языка Си"

Возможно, имелось ввиду:
"...; ограничимся тем, что адаптируем рассмотренное там решение ..."

Либо:
"...; ограничимся тем, что адаптируем рассмотренные там решения ..."

Том 2, рекурсивное удаление элементов из односвязного списка

Во втором томе на странице 149 приведен следующий алгоритм:

void delete_negatives_from_int_list(struct item **pcur)
{
if (!*pcur)
return;
delete_negatives_from_int_list(&(*pcur)->next);
if ((*pcur)->data < 0) {
struct item *tmp = *pcur;
*pcur = (*pcur)->next;
free(tmp);
}
}

Не должен ли уход в рекурсию быть после проверки элемента?

admin аватар

А ничего, что

А ничего, что тогда придётся вместо if сделать while, то есть вернуть в текст тот самый цикл, от которого хотелось избавиться?

По закону Мерфи

По закону Мерфи я это понял уже после того, как комментарий был написан и отправлен, да там и связность может тогда нарушиться. Не по чину взял :)

admin аватар

Да нет,

Да нет, связность не нарушится, если сделать всё аккуратно, но вот цикл в таком примере будет смотреться прямо-таки грандиозно :-)

Том 2, Форматированный ввод

Во втором томе на странице 116 в таблице 4.2 форматный символ x описан как ожидающий целое число в шестнадцатеричном представлении из стандартного потока ввода, но этот спецификатор ожидает своим параметром беззнаковое целое

Том 2, Динамическая память

В параграфе 4.3.14 после первого абзаца приведен прототип функции void* malloc(int size), в то время как он должен быть void* malloc(size_t size)

admin аватар

Устройте

Устройте спиритический сеанс и расскажите это покойному Деннису Ритчи. NB: ни одно из имён типов, кончающихся на _t, в Той Самой Книге не упоминаются нигде, кроме последней главы, в которой рассказывается про совсем свежий на тот момент "стандарт" (и рассказ не оставляет сомнений в том, что авторам языка стандарт — даже самый первый и наименее идиотичный из всех — не понравился).

Если серьёзно: выверты комитетского мышления я стараюсь не пропускать в текст своей книги — настолько, насколько это возможно. К сожалению, возможно это не всегда; gid_t пришлось упомянуть в рассказе про getgroups/setgroups, а одиозный socklen_t — в рассказе про accept и recvfrom. Естественно, соответствующие рассказы снабжены подобающими комментариями.

Том 2, Перечисляемые типы

На странице 70 приведен следующий участок кода:

enum example_enum {
example_first = 100,
example_second = example_first * 20,
example_third = example_first + 1000,
example_last = example_third
};

Значения констант будут 100, 2000, 1100 и 1100, а не 100, 2000, 3000 и 3000, как указано в книге

Опечатки

2 том.
280 - "выглядят проще, чем на самом деле", возможно лучше "выглядят проще, чем они есть на самом деле"
388 - BSD набрано моношириным шрифтом
689, 3 абзац - gdb, шрифт
691, предпоследняя строка - pid, шрифт

3 том.
44, 8 строка - не изменен номер тома
402 - нет точки в конце 4 абзаца
403, последний абзац - "пропробуем" вместо "попробуем"
404 - у второго let'а нарушен размер отступов
411, строка 6 - написано "и"; по идее, должно быть "или"
533 - \x=>20-x и \x=20-x, так и должно быть?
541, 643 - написано "MacOS X", пропущен пробел
570, 4 абзац - пропущено две запятые
654 - world с заглавной буквы, в программе - с маленькой
655 - xterm шрифт

--------------------------------------------

Не уверен, что тут ошибки или опечатки, но, возможно, стоит обратить на это внимание.

2 том.
386, 9 строка - "1" набрано моноширинным шрифтом

3 том.
56 - "рекурсию, либо как максимум" вместо "рекурсию либо, как максимум,"
413 - hello world набрано моноширинным шрифтом, в других местах обычным
492, 2 абзац, 7 строка - ", когда" вместо "; когда"
648 - "(например тот же Tcl)", пропущена запятая после "например"
650, 3 абзац, последняя строка - трансляции или транслятора?

admin аватар

III том, стр.402 --

III том, стр.402 -- по-моему, точка там и не нужна, достаточно вопросительного знака в скобках

MacOS X -- ну их нафиг, я такое написание считаю допустимым, благо macOS уж точно когда-то использовалось (слитно, хотя и без X)

> 570, 4 абзац - пропущено две запятые

не нашёл; зато там точка пропущена -- это факт :-)

> II том, 386, 9 строка - "1" набрано моноширинным шрифтом

конкретно здесь это было так задумано, я только не уверен, что везде так :(

> 56 - "рекурсию, либо как максимум" вместо "рекурсию либо, как максимум,"

по-моему, хуже становится

> 413 - hello world набрано моноширинным шрифтом, в других местах обычным

здесь говорится, что программа это печатает, то есть выдаёт на терминал, так что использование моноширинного шрифта тут правильно; к сожалению, я не уверен, что везде так же

> 492, 2 абзац, 7 строка - ", когда" вместо "; когда"

там одна запяточка уже есть, разве что всю фразу переделать

> 650, 3 абзац, последняя строка - трансляции или транслятора?

по смыслу именно "любые элементы трансляции"

Спасибо!

> MacOS XЯ на это

> MacOS X
Я на это обратил внимание, т.к. в первом томе используется "Mac OS X"

> 570, 4 абзац
"abra(kadabra), foo(bar,bur), и т.п." На 5 строк выше той точки.

> "рекурсию, либо как максимум"
Не уверен. Если убрать "как максимум", то запятые там вообще не нужны. Там же "либо" одно.

admin аватар

Про Mac OS &mdash;

Про Mac OS — убедили, сделал везде с пробелом (это не только в третьем томе такое было), если будет следующее издание -- получится единообразно :-)

Про запятые — ок, после abra(kadabra) запятая действительно пропущена, но зачем она перед "итп"?

Про "либо" — видимо, вы это воспринимаете как перечисление однородных членов, а я — как придаточное предложение, отделённое союзом.

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

Здравствуйте, в Т.1 на странице 586 говорится, что использование "rep" с "lods" не имеет смысла, но до этого команда "rep" нигде не упоминалась. Спасибо за книги, очень нравятся.

освободить ресурс

Том 1, страница 391, программа MultAndAdd.
В программе отсутствует close(f).

опечатка в слове comparison

Первый том, страница 363, ветка в case со знаками '<', '>', '='. В слове comparisIon лишняя буква i. Проверял в нескольких словарях - везде comparison.

согласование падежных окончаний

Второе издание, первый том, страница 321, середина второго абзаца сверху: строка с примечанием №29.
...параметры-переменные, которых потребуется двА:...
Нужно: двЕ, так как параметры-переменные женского рода.

admin аватар

Мне почему-то

Мне почему-то кажется, что они как раз мужского рода. Надо будет корректору это дело показать.

посоветовавшись со справочниками...

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

опечатка?

Первый том, второе издание, страница 180, 3-4 строка второго сверху абзаца: "или, скажем, теории вероятности". Насколько я знаю не "теория вероятностИ", а "теория вероятностЕЙ" - не раз за эту оговорку от разных математиков и физиков выслушивал.

admin аватар

Пожалуй, Вы

Пожалуй, Вы правы.

Т. 2, стр. 364-365,

Т. 2, стр. 364-365, параграф 5.3.8.
Исходя из предыдущих параграфов текст программы следует исправить, дабы не противоречить:

if(pid == 0) {
execlp("ls", "ls", "-l", "a", "/var", NULL);
perror("ls");
fflush(stderr);
_exit(1);
}

И без подключённого компилятор ругается, но работает.

admin аватар

Это где,

Это где, по-вашему, что-то чему-то противоречит? Тому, что десяток страниц назад в комментарии мелким шрифтом сказано, что "некоторые авторы рекомендуют"?

А что, включить мозг и понять, что в данной конкретной программе (как, на самом деле, и в большинстве программ) эта рекомендация не имеет смысла — это мы уже не можем?

Первый том, на

Первый том, на странице 578 [array+4*ecx-4], кажется, должно быть [array+4*ecx-1]

admin аватар

Когда кажется,

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

v2:242 4.10.3

Второй том, стр.242, п.4.10.3, второй абзац: "Такой случайной информации." -- используется точка вместо запятой.

Опечатка, т.2

Опечатка т.2, стр. 355, первая строка:
"Важную роль играет execve". Вместо функции "execve" должна быть функция "execvp".

Том 2, стр. 397,

Том 2, стр. 397, строка 2- вместо "единица" должно быть "нуль". При единице процесс не должен уходить в вызов pause().

Макросы nasm

В файле stud_io.inc в последнем абзаце преамбулы присутствует фраза "Should this needs ...", не стоит ли использовать просто "should this need"?

admin аватар

Да, кривенько

Да, кривенько получилось. Переформулировал.

newx аватар

Опечатка: т.1, стр. 130

Опечатка: т.1, стр. 130

В последнем абзаце внизу написано:
"Часть рекомендуют команды запуска программ,..."

Как я понимаю, должно быть:
"Часто рекомендуют команды запуска программ,..."

Том 1

Том 1, стр. 629, числа Фибоначчи 1,1,2,3,5,8,13,21,34,55

Тут еще кое-что

Тут еще кое-что нашлось :)

3 том.
147 - раскрытие области видимости, вероятно, лишнее
374 - Поправьте, если не прав, но слово when, в отличие от for и т.п., можно использовать и вне loop
389 - do-it вместо do_it. Кстати, по моим наблюдениям, лисперы как раз предпочитают использовать тире вместо подчеркиваний
390 - nil вместо (exit). С nil при нажатии Ctrl+C программа не завершится, а перейдёт в REPL
395 - Не знаю, уместно это или нет, но там не "Hello world", а echo :)
410 - det вместо discrim (или тому подобного)
411 - eq вместо eq?

------------------------------

Оставлю это здесь, вдруг поможет кому-нибудь.

В Chicken Scheme 5.* флаг -uses library в сочетании с -x, а также флаг -postlude не работают. Вместо этого, чтобы убрать лишнее из бинарника, нужно в начало программы добавить строку (import scheme), в конец программы - вызов главной функции, а компилятор вызывать так

csc -static -strip -x main.scm
admin аватар

?

> 390 - nil вместо (exit). С nil при нажатии Ctrl+C программа не завершится, а перейдёт в REPL

УМВР, только что ещё раз проверил. Возможно, зависит от версии?

С остальным согласен, внёс. Спасибо!

С nil и (exit)

С nil и (exit) немного погорячился. Скриптовую версию не проверял, но "откомпилированная" при nil нормально завершается. В REPL при нажатии Ctrl+C программа переходит только при загрузке исходника при помощи флага --load.

Ещё на странице 21, на 12 строке запятая пропущена. И то, что на с. 147 не просто избыточно, а приводит к ошибке.

admin аватар

> на странице 21,

> на странице 21, на 12 строке запятая пропущена

ммм где?

"сначала не

"сначала не понял, потом объяснили и я понял". Запятая перед "и".

admin аватар

Вот чёрт знает,

Вот чёрт знает, я тут запятой не ощущаю. Надо будет корректору показать.

"сначала не

"сначала не понял, потом объяснили и я понял"

Сложносочинённое предложение. Нужна запятая перед и.

Не нужна была бы если было:

"Сначала не понял, потом я понял и пошёл" (я понял и я пошёл).

И не нужна была бы в ещё довольно хитром случае (когда части сложноподчинённого предложения объединяются либо вопросительной интонацией, либо общим вводным словом или придаточной частью), но тут не он :)

Опечатка

Опечатка: том 1, страница 112, строка 12 снизу
Написано: ставят этот именно этот редактор
Исправление: ставят именно этот редактор

Опечатка в опечатках

Опечатка в таблице опечаток
В комментарии выше говорится про опечатку на странице 112, но в таблице опечаток она ошибочно указана, как страница 142.

admin аватар

Спасибо,

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

В томе II на стр.

В томе II на стр. 142 нет точки в конце первого предложения во 2 абзаце.
Андрей Викторович, посмотрите еще на первую опечатку, обозначенную в таблице для второго тома - стр. 21, пропущен предлог "в" перед словом "любом". Если это опечатка из моего комментария, то там стр. 26, а строка, получается, 14-15. Во всяком случае, на стр. 21 ничего такого нет.

admin аватар

Спасибо,

Спасибо, страница действительно была указана неправильно, а вот строка там реально 21-я.

Опечатка т.1

В первом томе на странице 391 приведен текст программы, считывающей из заданного пользователем файла действительные числа. В ходе работы программы происходит открытие файла с помощью reset(f), но не происходит закрытия с помощью close(f)

Эта тема уже

Эта тема уже поднималась, почитайте эту цепочку.

admin аватар

И что? :-)

И что? :-)

Опечатка т.1

В первом томе на странице 383 в программе, рисующей цветные звездочки в терминале, на строке 27 вместо принятого ранее стиля GotoXY(..., ...) напечатано gotoxy(..., ...)

Parthen аватар

Баг или фича?

1 том, начало стр. 389
"(см. §§ 1.4.5 и 1.4.6)"
Двойной знак параграфа по делу тут стоит?

admin аватар

По делу,

По делу, читается как множественное число ("параграфы")

3 том, с. 391, 6

3 том, с. 391, 6 строка снизу - Schicken вместо Chicken

Том 2, стр. 26, 2

Том 2, стр. 26, 2 абзац: "в Си можно описать локальную переменную любом составном операторе" -- потерялся предлог "в".

Опечатки

1 том.
106 - SIGTERM шрифт
459 - "функции" вместо "процедуры"
532 - процессоры Itanium перестали выпускать в 2017 году
537 - 5 строка снизу, 40 и 64 шрифт

2 том.
83 - m+k шрифт
106 - параграф или глава?
109 - cp1251 шрифт
116 - 10 строка сверху, форматная строка
220 - до свиданья (?)
466 - ISO вместо OSI
506 - long шрифт
701 - 5 строка, vim шрифт
701 - 2 абзац, 3 строка, лишняя точка
701 - next и previous шрифт

admin аватар

Спасибо!

> 532 - процессоры Itanium перестали выпускать в 2017 году

Насколько я понимаю, в 2017 году вышел последний процессор в линейке, то есть его начали производить, а не закончили; а прекратить поставки Intel только ещё собирается грядущим летом.

> 537 - 5 строка снизу, 40 и 64 шрифт

как ни странно, так и задумано

> 83 - m+k шрифт

а тут прямо-таки так и задумано, и совсем не странно -- m тут переменная из программы, так что должна быть моноширинная, а k -- абстрактное "произвольное число", набрано математическим шрифтом, как и должно быть

> 116 - 10 строка сверху, форматная строка

не нашёл

> 220 - до свиданья (?)

там это во всём параграфе так, начиная со стр.219 (в самом верху); вроде бы вполне допустимая разговорная форма

По остальным -- спасибо, внёс в список.

Спасибо за

Спасибо за объяснения!

В 3 томе на с. 317 GCL не тем шрифтом набран.

Также хотелось бы спросить по поводу примера на с. 487: что делает [Ch] = "," и тому подобное? Интерпретатор (по крайней мере, в режиме REPL) это всё унифицировать не может.

admin аватар

> [Ch] = "," Очень

> [Ch] = ","

Очень просто, тут проверяется, представляет ли собой Ch символ запятой, точнее, код этого символа:

?- [Ch] = ",".
Ch = 44.

?- 

Незадача в том, что это шестая версия swipl, а у вас наверняка уже седьмая. До шестой включительно строковые литералы в двойных кавычках по умолчанию рассматривались как список кодов символов, начиная с седьмой версии умолчания поменялись. Сейчас седьмой версии развёрнутой нет под рукой, но если мне склероз не изменяет, получить старый вариант поведения можно, вычислив такую вот псевдоцель:

set_prolog_flag(double_quotes, codes)

Подробности — на стр.435--436 мелким шрифтом.

Том 1, стр

Том 1, стр 457
procedure IsInTree
В случае равенства (val == p^.data) надо бы true вернуть
(res := true)

admin аватар

Спасибо.

Спасибо. Досадно, конечно...

Опечатка

Т. 3, стр. 541:
"под именем tclsh в системе становлен"

Том 3, стр. 426, "не

Том 3, стр. 426, "не давшие себе труда подумть"

Первый том,

Первый том, сноска на стр.51
"... известно более ранее описание..." - раннее

Первый том, с.

Первый том, с. 569, первый абзац — "Команды mul и imul сбрасывает флаги".

1 том, 200

1 том, 200 страница, 4 абзац, 8 строчка. "т.н. число с плавающей точкой". Наверно должно быть: "т.е.(то есть) число с плавающей точкой".

admin аватар

"т.н." означает

"т.н." означает "так называемое", именно это и было задумано

199 страница, 1

199 страница, 1 том, в тексте задачи, во втором абзаце, 3 строка, в самом конце написано "говорилсь".

Том 3, стр. 243:

Том 3, стр. 243: "хорошо знакомое нам по третьему тому событийно-управляемое программирование". След первого издания?

admin аватар

Спасибо

> След первого издания?

он и есть

Так и было задумано?

с. 358, второй абзац - Что особенно приятно, при присваивании стрингов. Посыл, безусловно, понятен, но ассоциации пикантные ;-) Да и везде по тексту либо "строки", либо "string".

admin аватар

Не было так задумано

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

Не знаю,

Не знаю, считать ли это ошибкой, но всё же. В примере на стр. 397, если открытие файла dest завершилось ошибкой, выдаем сообщение в erroutput и вырубаем всё halt'ом. Но разве мы не должны перед этим закрыть src, открытие которого прошло успешно несколькими строками ранее?

admin аватар

А зачем? Чтоб

А зачем? Чтоб лишний раз прыгнуть в ядро и обратно? Если б это ещё хотя бы был поток на вывод, то можно было бы подумать про вытесение буферов или что-то такое, но на чтение-то...

Т.е., закрытие

Т.е., закрытие файла при "одноразовом использовании", как и возврат затребованной динамической памяти — скорее, правило хорошего тона? И там, и там система всё равно уберёт за нами на выходе весь бардак, поэтому допускаются некоторые вольности, нужно только понимать, чем рискуем.

admin аватар

Вы вообще о чём?

Вы вообще о чём? Какое ещё "правило хорошего тона"? И то, и другое абсолютно обязательно.

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

вот прямо

вот прямо сейчас программа будет завершена
Освобождение ресурсов именно в этой ситуации и имелось в виду под "правилом хорошего тона" - можно, но, в принципе, никакого криминала без этого не приключится. А так, вы мой второй комментарий-догадку и перефразировали сейчас. Спасибо, прибавилось ясности.

Опечатка

Т.1, стр. 697, 5 строка снизу:

"...либо при попыткА"

Том 1, страница

Том 1, страница 258, шестая строчка сверху. Опечатка в слове "низачем".

admin аватар

И в чём,

И в чём, по-вашему, состоит опечатка?

Имеется в виду,

Имеется в виду, что у компиляции (по мнению школьников) больше нет функций. Не́зачем - не нужно, нет необходимости, нет причины, нет основания.

admin аватар

Здесь (в

Здесь (в наречии) не/ни определяется положением ударения. При этом слово "низачем" с ударением на последний слог в русском языке существует:

https://ru.wiktionary.org/wiki/%D0%BD%D0%B8%D0%B7%D0%B0%D1%87%D0%B5%D0%B...

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

Том 1, стр. 322

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

admin аватар

Спасибо

Да, всё именно так.

Опечатка, т.2

Пропущена буква во втором абзаце сверху на странице 124: "printf и scanf они отличаюся только наличием".

Опечатка

Том 1, стр. 376.
Опечатка в коде программы "MovingStar". В место ch: char; должно быть c: integer;

admin аватар

Факт.

Результат пагубной привычки копировать текст изменённой программы по кусочкам. В архиве примеров, естественно, всё в порядке, поскольку программу я запускал и пробовал. А вот в тексте -- вот такое :(

Том 1, с. 286,

Том 1, с. 286, первая строка второго абзаца: "В общем случае структура текста процедуры очень похоже на".

Опечатки

2 т.
510 - не используется timeout. Обидно, что то же самое с writefds заметил, а это нет :(
548 - binary sepaphore
575 - запятая перед "либо"
595 - объявление переменной после оператора if

3 т.
394 - пустой список без квотирования
472 - "все процедура" вместо "все процедуры"

admin аватар

Спасибо!

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

А последняя ошибка — на стр.474, а не 472 :-P

Спасибо!

В книге всё в

В книге всё в порядке. Это, видимо, мне показалось, что там два "либо", а не одно.

Skonikol аватар

Опечатка. Том #1

Страница 59, строка 7 сверху:
«...вы вернёмся...» скорее всего, исходя из общей стилистики, «...мы вернемся...».

Кажется, опечатка

Том 1. Стр. 294. 6 строка снизу. "но по окончании выполнение процедуры x".

admin аватар

В упор не вижу

В упор не вижу опечатки, что вы имеете в виду?

Parthen аватар

Наверное,

Наверное, должно быть так:
"... но по окончании выполнениЯ процедуры x"

admin аватар

Проблема как

Проблема как раз в том, что там так и написано, можете сами в PDF глянуть.

Страница 92, "(в

Страница 92, "(в нашем примере это /home/avst)" перед блоком, демонстрирующим команды cp и pwd (в конце страницы), должно быть "/home/lizzie"

Опечатка?

Том 1, стр. 613

Некоторые такие псевдокоманды - db, dw, dd, resb, resw и resd~---нам уже известны из \Sx\ref{memory_reservation}

admin аватар

Эх :(

Ну да, команду \verb не там закрыл. Но вот как я это не заметить-то ухитрился?...

Опечатка, т.2

Здравствуйте.
В сноске на 64 странице есть предложение "в перед возвратом переносится".
Возможно вместо предлога "в" должен стоять союз "а".

Первый том,

Первый том, страница 83, второй снизу абзац, четвертая снизу строка: "спустя почти полвека лет"

Опечатка т.2

Опечатка т.2 стр.33, строка 6:

Си, функцию вызвать, не объявив.

можно?

Skonikol аватар

Опечатка Том №1

Страница 45, строка 6 снизу:
"программых" вместо правильного "программах".

Опечатка

Т.2, стр.90, 3 строка снизу:
"данные будут копироваться в область память в стековом фрейме"
в область памяти

Возможно опечатка

Возможно опечатка, или я никак не пойму:
т.2, стр.103, стока 3 сверху:
"Аналогично действует и операция "запятая": её операнды всегда вычисляются справа налево, и перед началом вычисления правого операнда завершаются все побочные эффекты левого."
Если сначала завершается вычисление левого, а потом правого, то наверно это слева направо.

Опечатка: т.1,

Опечатка: т.1, стр. 47, 4 строка снизу:
"... с функциональным и логических программированием, ..."

admin аватар

Факт, спасибо

Факт, спасибо

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

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

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

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны 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.