Andrey Stolyarov

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

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

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

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

Tue Mar 2 16:06:59 2021 UTC

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

Том I

Стр.ПоложениеСодержание, комментарий
3115 строка сверхув слове «модфицирующее» пропущена буква «и»
346 строка снизув слове «становиться» не должно быть мягкого знака
424 строка сверхунаписано лишнее слово «ещё» (ещё ещё)
458 строка снизунаписано «должно было принято» вместо «должно быть принято»
456 строка снизунаписано «программых» вместо «программах»
474 строка снизунаписано «логических», должно быть «логическим»
51в сноскенаписано «ранее», должно быть «раннее»
597 строка сверхунаписано «вы вернёмся», должно быть «мы вернёмся»
6422 строка снизунаписано «соответствующее», должно быть «соответствующие»
78под рисункомточка на пустой строке
80-81в тексте примеров скриптовобращения к $1 (аргументу скрипта) следует заключать в кавычки на случай, если в нём окажется что-нибудь нехорошее вроде пробела
813 строка сверхупропущена «;» после команды exit 1 (перед фигурной скобкой)
8317 строка снизунаписано «полвека лет», слово «лет» лишнее
9220 строка сверхунаписано «это /home/avst», должно быть «это /home/lizzie и содержащий его /home»
929 строка снизуприглашение командного интерпретатора написано «lizzie@host:/$», должно быть «lizzie@host:/usr/include$»
97верхняя строканаписано «дугие», должно быть «другие»
10014 строка снизу«Ctrl-R» набрано не тем шрифтом
10319 строка снизунаписано «при нажатиии», лишняя буква на конце слова
1068 строка сверхуслово «SIGTERM» набрано не тем шрифтом
1122 строка сверхунаписано «между между», должно быть просто «между»
11212 строка снизунаписано «этот именно этот», должно быть «именно этот»
112нижняя строканаписано «придусмотрен», должно быть «предусмотрен»
1162 абзацабзац следует переписать целиком с учётом того, что в действительности без прав на исполнение с директорией вообще ничего сделать невозможно, разве что узнать имена файлов, если есть права на чтение
120сноскаприведён пример ls как команды, встроенной с целью оптимизации; на самом деле в современных версиях bash она уже не встроена
12118-19 строки сверхунаписано «будеть», лишний мягкий знак
12511 строка снизуВо фразе про традиционный приоритет логических связок в Shell'е допущена фактическая ошибка: в действительности приоритет «||» и «&&» одинаков
1272 абзацдопущена фактическая ошибка: чтобы убрать переменную из окружения, в действительности достаточно одной команды unset, команда export здесь избыточна
1307 строка снизунаписано «Часть», должно быть «Часто»
1542 строка сверхунаписано «будеть», лишний мягкий знак
15417 строка сверхуиндекс и степень под знаком суммы должны быть i, а не k
17119 строка сверхуточка вместо запятой после дроби «1/1»
1744 строка сверхунаписано «наменьший» (пропущена буква и)
1805-6 строка сверхунаписано «теории вероятности», нужно «теории вероятностей»
19311 строка сверхунаписано «представлемые», должно быть «представляемые» (пропущена буква я)
1936 строка снизунаписано «на Хаскелее», лишняя буква «е»
1998 строка в тексте условия задачинаписано «говорилсь», должно быть «говорилось»
20616 строка сверхунаписано «далее биты», должно быть «далее байты»
216рис. 1.14символ с кодом 39 в действительности апостроф, а не вопросительный знак
2369, 10 строки сверхуназвания клавиш, вводимые команды, Ctrl-... набраны не тем шрифтом
2577 строка снизунаписано «учениками», должно быть «ученикам»
259текст примераназвание программы «modulo» выбрано неудачно, лучше назвать её «AbsoluteValue»
286начало второго абзацанаписано «похоже», должно быть «похожа»
29917 строка сверхунаписано «контр-интуитивны», дефис здесь не нужен
31616-17 строки сверхукоды символов набраны не тем шрифтом
31617 строка сверхупосле «(29)» ненужная точка
3223 строка сверхунаписано «наша функция», должно быть «наша процедура»
32617 строка снизуупоминается переменная count, но дальше в тексте программы-примера фигурирует n, а не count
32915 строка снизу«Ctrl-D» набрано не тем шрифтом
33911 строка снизупропущена точка после «b[100]»
3563 строка снизу«Ctrl-A», «Ctrl-B»набрано не тем шрифтом
3573 строка снизу«11» в курсивном тексте набрано не тем шрифтом
35810 строка сверхунаписано «стрингов», должно быть «строк»
35820 строка снизу«+» набран не тем шрифтом
36325 строка сверхунаписано «comparision», должно быть «comparison» (лишняя буква i)
36815 строка сверхунаписано «SreenHeight», должно быть «ScreenHeight»
36811 строка снизунаписано «высоту», должно быть «высоты»
376в тексте примеранаписано «ch: char;», должно быть «c: integer;»
38217,18,21,22 строки сверхучисла, возвращаемые функциями, набраны не тем шрифтом
38314 строка сверхунаписано «gotoxy», должно быть «GotoXY» (для единообразия)
38612 строка снизунаписано «используя значение переменной IOResult», должно быть «используя функцию IOResult»
3875 строка сверхунаписано «эти процедуры», должно быть «эти функции»
391в тексте примерадля единообразия примеров стоит вставить close(f)
394-395последний абзац параграфа 2.9.3допущена фактическая ошибка, в действительности значение переменной filemode влияет только на работу процедуры reset, а rewrite её полностью игнорирует
396нижняя строка4096 набрано моноширинным, должно быть обычным
426текст примера внизу страницыв тексте примера допущена ошибка, см. комментарии на эту тему
43721 строка сверхумежду словами «тем» и «насколько» должна быть запятая, а напечатана точка
4459 строка снизунаписано «остальные стержни», должно быть «остальные диски»
45114 строка снизув заголовке цикла «i:=0» написано без пробелов, стоит исправить для единообразия
45421 строка снизунаписано «с сохранением сортировки», должно быть «с сохранением упорядоченности»
4574 строка снизунаписано «res := false», должно быть «res := true»
45920-21 строки снизунаписано «функции», должно быть «подпрограммы»
47616 строка сверхунаписано «==», должно быть просто равенство
48015 строка снизунаписано «это вариант», должно быть «этот вариант»
50420 строка снизунаписано «пять строчек», должно быть «четыре строчки», их всего десять вместе с текущей
50521 строка сверхунаписано «conditional», должно быть «condition»
50512 строка снизунаписано «x=50», нужно «x:=50», ведь речь о Паскале
5096-7 строки снизудопущена фактическая ошибка, в действительности директива uses может быть только одна и должна стоять сразу после заголовка (в модулях -- после interface/implementation)
5149 строка сверхуслово «обычно» в скобках представляет собой фактическую ошибку, поскольку в действительности так должно быть всегда (а не "обычно"); следует это слово выкинуть
51411-13 строки снизувыкинуть слово «обычно» в скобках и весь текст предложения после скобок (начиная со слова "или") — это фактическая ошибка
51513 и 15 строки сверхунаписано «в секцию/Эта секция», должно быть «в сегмент/Этот сегмент»
51510 строка снизупосле «ComplexMultiplication» стоит точка, должна быть запятая
52518 строка снизунаписано «цикл выполнения команды» должно быть «цикл выполнения команд»
54112 строка снизу«Ctrl-D» набрано не тем шрифтом
54419 строка снизунаписано «колоноки», должно быть «колонки»
54417 строка снизуненужная скобка перед точкой в конце абзаца
54714-15 строки снизутекст в скобках — рудимент старых изданий, вдобавок фактическая ошибка; нужно убрать
5505-6 строка снизунаписано «динамическе», пропущена буква «и» в окончании слова
5532 строка сверхунаписано «см. стр. 1.4.7», должен быть номер страницы (pageref вместо ref)
55514 строка сверхув примере фразы не должно быть восклицательного знака, т.к. далее в примере кода его нет
56017 строка снизунаписано «Примененив», должно быть «Применив»
56811 строка снизунаписано «используются», должно быть «используется»
5693 строка сверхунаписано «сбрасывает», должно быть «сбрасывают»
57022 строка сверхунаписано «extentded», должно быть «extended»
570последний абзац параграфанаписано «при делении беззнаковых чисел нет специальные команды для расширения разрядности числа не нужны», лишнее слово «нет»
570последний абзац параграфанаписано «при делении беззнаковых чисел нет специальные команды для расширения разрядности числа не нужны», лишнее слово «нет»
5795 строка снизунаписано «от остаток от», должно быть просто «остаток от»
584-585в тексте трёх примеров«edx» в комментариях в тексте трёх примеров написан нижним регистром, должен быть верхним
5867--12 строки снизутекст от слов «Использование этих...» до «... весьма полезным» следует выбросить, он ошибочен — случайно остался при пересмотре всего текста параграфа
58717-18 строки снизутекст в скобках (про stosw и movsw), судя по всему, не соответствует действительности, нужно убрать
5895 строка сверхутекст в скобках про CX для 16-битных команд не соответствует действительности, убрать
5897 строка сверхуненужная точка после «cmpsX»
58911-16 строки снизудопущена фактическая ошибка в пояснении работы repnz scasb, см. комментарий
592примечание вверхувыражение «растёт вниз» противоречит принятому в книге изображению адресного пространства на диаграммах, нужно скорректировать
59210 строка сверхунаписано «значения», должно быть «значение»
6135-6 строки после заголовка параграфане закрыта команда дословного воспроизведения, получилось довольно несуразно
61416 строка снизуненужный пробел в начале строки
6249 строка сверхунаписано «ассембер», пропущена буква "л"
62518 строка сверхунаписано «случе», должно быть «случае»
629в сноскенеправильно воспроизведены числа Фибоначчи после 13 (должно быть 21, 34, 55...)
63717 строка снизуВ конце предложения стоит запятая вместо точки.
63916 строка сверхунаписано «различые» (пропущена буква «н»)
6484 строка сверхунаписано «называется», должно быть «называться»
66311 строка снизунеправильный отступ перед push dword
66515 строка сверху«FreeBSD» набрано не тем шрифтом, должен быть обычный
6842 строка сверхунаписано «-16832» должно быть «-16382»
6924 строка сверхунаписано «фигурная скобка», должно быть просто «скобка»
6975 строка снизунаписано «при попытка», должно быть «при попытке»

Том II

Стр.ПоложениеСодержание, комментарий
18нижняя строкапропущена точка после слова «литерал»
214 строка сверхуprintf не тем шрифтом
225 строка снизуmain не тем шрифтом
2621 строка сверхупропущен предлог «в», перед словом «любом»
28сноска (номер 6)названия функций и строковые литералы набраны курсивом вместо моноширинного
3020 строка сверху0 не тем шрифтом
336 строка сверхунаписано «функцию вызвать», должно быть «функцию можно вызвать»
3310 строка снизуprintf не тем шрифтом
334 строка снизунаписано «обёртку», должно быть «обёртки»
4318 строка снизунаписано «явлется», пропущена буква «я»
51строки 13, 17, 22, 24, 27написано «f()», это рудимент, должно быть просто «f»
5518 строка снизупосле слова «правил» должно быть двоеточие, а не точка с запятой
6320 строка снизу«void-функция» — здесь void должно быть обычным шрифтом
64в сноске 22 предпоследняя строчканаписано «в перед», должно быть «а перед»
6916 строка снизунаписано «aplha», должно быть «alpha»
7016 строка снизунаписано «example_first + 1000», должно было быть «example_second + 1000»
707-8 строки снизуфраза начиная со слов «мы уже видели» представляет собой рудимент, её нужно выкинуть
747 строка сверхунаписано «требованиями», должно быть «требованиям»
7617 строка сверху«27» набрано не тем шрифтом
76текст сноскиСсылка на веб набрана не тем шрифтом
775 строка снизунаписано «представляет обой», должно быть «представляет собой»
78текст сноскиСсылка на веб набрана не тем шрифтом
8920 строка снизунаписано «будеть», лишний мягкий знак
903 строка снизунаписано «в область память», должно быть «в область памяти»
9219 строка сверху«char» не тем шрифтом
9914 строка снизу«s» в скобках не тем шрифтом
102верхняя строканаписано «выполнены», правильнее будет «вычислены»
1033 строка сверхунаписано «вычисляются справа налево», должно быть наоборот — «слева направо»
104-105текст примераради единообразия следует убрать отдельный отступ у меток case
1058 строка снизунужно вставить пробел между ) и {
1065 строка сверхунаписано «в этом параграфе», должно быть «в этой главе»
10922 строка сверху«-1» набрано не тем шрифтом
10918,19 строки снизуназвание кодировки cp1251 дважды набрано не тем шрифтом, должен быть моноширинный
11410 строка сверхупосле слова «Например» стоит точка, должна быть запятая
116в таблицедля «x» написано, что оно целое, а оно беззнаковое целое
1187 строка снизув профиле функции fopen неправильно расположена звёздочка в типе возвращаемого значения: пробел должен быть перед ней, а не после
1236 строка снизу«test» набрано не тем шрифтом
12411 строка сверхунаписано «отличаюся», должно быть «отличаются»
12420 строка снизу«test» набрано не тем шрифтом
125в тексте примеранаписано «fscanf(...) == 1», следует поменять местами: «1 == scanf(...)»
14010 строка сверхунаписано «Во-первых», при этом обещанное во-вторых в тексте отсутствует (пропущено замечание о том, что и смещение отдельно взятого поля нам в общем случае неизвестно)
14215 строка сверхупропущена точка в конце предложения (после слова «char»)
14810 строка сверхупосле слова «окажется» стоит точка вместо запятой
150последня строка первого абзацанаписано «рассмотренный», должно быть «рассмотренные»
15816 строка снизудопущена фактическая ошибка: в России изобретены не красно-чёрные, а AVL-деревья
16017 строка сверхуупоминаются вариантные записи Паскаля, которые в книге не рассматриваются; первую часть этого предложения следует убрать
161верхняя строкачисла 0, 1 и 2 набраны не тем шрифтом
162пример внизуотступ три пробела, должно быть четыре
163примеротступ три пробела, должно быть четыре
1659 строка снизунаписано «greater then», нужно «greater than»
1817 строка сверхупосле «в частности»стоит точка, должна быть запятая
1822 и 4 строки снизунаписано «ARRAY_SIZE», по смыслу должно быть «arrsize»
198в тексте примеровв тексте примеров оформления описания структуры везде пропущено слово struct при описании указателя на такую же структуру, т.е. вместо «item» должно быть «struct item» (четыре раза)
20413 строка сверхунаписано «побочным», должно быть «побочными»
20522 строка снизудля единообразия следует убрать скобки при упоминании getchar
2074 строка снизув описаниях структуры выражений пропущен знак «>» после слова «параметры»
2118-9 строки снизунаписано «не оглядываяь», должно быть «не оглядываясь»
21919 строка снизунаписано «Solyarov», пропущена буква «t»
22410 строка сверху«p» набрано не тем шрифтом
2357,10,12 строки сверхунеправильно оформлены вариантные окончания слов
24215 строка снизупосле слова «информации» стоит точка вместо запятой
2434 строка сверхуиз профиля функции rand следует для единообразия убрать слово voif
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верхняя строканаписано «на единицу», должно быть «на два»; здесь и далее следует скорректировать числа
27718 строка снизунаписано «Управления», должно быть «Управление»
28016 строка снизунаписано «чем на самом деле», должно быть «чем они есть на самом деле»
2913 абзац снизу и далее по текстус "современными" (чтоб их) версиями сервера Xorg этот эксперимент в том виде, в котором он был описан в книге, не проходит; нужно указать в командной строке команды X дополнительные параметры -retro и -keeptty
29621 строка снизунаписано «EACCESS», должно быть «EACCES»
31120 строка сверхунаписано «её передали», должно быть «ей передали»
31123 строка сверхунаписано «командой строки», должно быть «командНой строки»
31312 строка сверхунаписано «игнорируюся», должно быть «игнорируюТся»
31810 строка снизу«Ctrl-D» не тем шрифтом
33212 строка сверху«SeekEof» набрано не тем шрифтом
33219 строка снизунаписано «ограничнивает», должно быть«ограничивает»
34011 строка снизунаписано «их которых», должно быть «из которых»
34214 строка сверхупропущена запятая после слова «кроме»
34218 и 13 строки снизунеправильное расположение звёздочки в типе аргумента вызовов chdir и chroot
34420 строка сверхунаписано «памяти», должно быть «память»
3446 строка снизунаписано «упрощениям», должно быть «упрощениями»
349профиль вызова forkдля единообразия следует убрать слово «void»
3502 строка сверху«0» не тем шрифтом
355верхняя строканаписано «execve», должно быть «execvp»
359,360в тексте трёх примеровопущены директивы подключения заголовочных файлов; в начале программы должны быть #include <stdio.h> и #include <unistd.h>
3613 строка сверхунаписано «для отдельной главы», должно быть «для отдельного параграфа»
36217 строка сверху«wait» должно быть курсивом
364в тексте примеранужно добавить подключение заголовочников sys/types.h и sys/wait.h
3726 строка снизув тексте примера переменная fd описана второй раз и после операторов
37522 строка сверхунаписано «/bin/init», должно быть «/sbin/init»
3787 строка сверхунаписано «geteuid», должно быть «getegid»
37915 строка сверхунаписано «setreuid, setregid, getreuid и getregid», должно быть «setreuid, setregid, setresuid, setresgid, getresuid и getresgid»
38121 строка сверхунаписано «в следующей главе», должно быть «в пар.5.3.14» (рубрикацию я поменял, но не все такие вот ссылки выловил)
38210-11 строки снизунаписано «возможностями», должно быть «возможности»
3884 строка снизу«BSD» набрано моноширинным шрифтом, должно быть обычным
39013 строка сверхув слове «расчитывают» должна быть двойная «с»
3972 строка сверхунаписано «всё ещё единица», должно быть «всё ещё ноль»
3973 строка сверхудля единообразия следует убрать скобки у вызова «pause»
3977 строка снизунаписано «какую нибудь», пропущен дефис
3999-10 строки сверхунаписано «действовашее», пропущена буква «в»
40317 строка сверху«0» не тем шрифтом
40311 строка снизу«0» и «1» не тем шрифтом
404в тексте примерапри общей чистке были упущены побочные эффекты в заголовках if; fork нужно вынести на отдельную строку вроде pid=fork()
40720 строка снизунаписано «стр. 5.3.2», должно быть «стр. 342» (в исходнике команда \ref вместо \pageref)
40914 строка сверхудопущена фактическая ошибка, в действительности используется ioctl, а не fstat
4123 строка снизу«3» не тем шрифтом
4149 строка сверху«3» не тем шрифтом
41420 строка снизу«4» не тем шрифтом
41417 строка снизу«0» не тем шрифтом
41817 строка сверху«0 или 1» 0 и 1 не тем шрифтом
418перед заголовком«Ctrl-C» не тем шрифтом
41916-17 строки сверхуубрать текст в скобках, это рудимент -- выше в том же абзаце промавтоматика уже есть
42110, 11, 29 строки сверху«13» не тем шрифтом
42118 строка сверху«koi8-r» не тем шрифтом
423в тексте примеранужно убрать fgets из заголовка if
42713 строка снизув профиле openpty параметры termp и winp должны быть константными
42814, 16 строки сверхуномера дескрипторов не тем шрифтом
42913 строка сверхудля единообразия следует убрать void из скобок в профиле closelog
42914 строка снизунаписано «LOG_WARN», должно быть «LOG_WARNING»
434в сноскелишняя точка после «см»
44013 строка снизунаписано «Wifi», должно быть «WiFi»
4527 строка сверхунаписано «транспортные», должно быть «сетевые»
4642-3 строки сверхузначения TTL набраны не тем шрифтом, д.б. простой, не моноширинный
4661 строка после заголовканаписано «ISO», должно быть «OSI»
47414-15 строки сверхукоды символов 13 и 10 набраны не тем шрифтом
47519 строка снизуунаписано «протколом» (пропущена буква «о»)
48318 строка снизупример raw sockets неудачен, они есть не только в Linux
4854 строка сверхув профиле bind второй параметр должен быть снабжён модификатором const
4855 строка снизупропущен пробел перед открывающей круглой скобкой
4904 строка сверху«0» не тем шрифтом
49020 строка сверхунаписано «этот fromlen», должно быть «этот *fromlen»
4943 строка сверхуво втором параметре профиля должен быть const
49516 строка сверху«0» не тем шрифтом
49919-20 строки сверху"частое употребление" слова «данных», надо переформулировать предложение
502в тексте примеранет необходимого преобразования типа во втором (сокет-адресном) параметре bind и accept
50618 строка снизуслово «long» набрано не тем шрифтом
50910 строка снизуоборот про timeout — атавизм от старой версии текста, нужно убрать
5093 строка снизунаписано «очищаем множество», но их там два, лучше будет «очищаем множества»
51020 строка сверхув вызове select последний параметр должен быть &timeout, а не NULL
521верхняя строканаписано «на стр.6.4.5», должно быть «на стр.512»
525описание pselectдопущена фактическая ошибка, тип пятого параметра pselect — struct timespec, а не struct timeval
5265 строка снизунаписано «setprocmask», должно быть «sigprocmask»
532предпоследний абзац (мелким шрифтом)утверждается, что все команды атомарны; это в действительности не так, например, чтобы inc [var] сделать атомарной, нужно к ней добавить префикс lock (см. пар. 3.2.14 в 1 томе)
53914 строка снизунаписано «пыталсь», должно быть «пытались»
54710 строка снизунаписано «каждый двоичный разряд», что формально не вполне верно, т.к. в регистре FLAGS/EFLAGS присутствуют неиспользуемые биты
54812 строка сверхунаписано «sepaphore», должно быть «semaphore»
550в сноске«англ.» набрано не тем шрифтом
555в тексте примерапри общей чистке был упущен побочный эффект в заголовке if; fork нужно вынести на отдельную строку вроде pid=fork()
5592 строка снизу и сноскафамилия «Танненбаум» написана неправильно, в действительности у этого Таненбаума одно "н" в первом слоге (хотя существуют люди с фамилией "Танненбаум" через двойное "н")
5686 строка сверхунаписано «небходимы», пропущена буква «о»
57122 строка снизунаписано «на мьютексе barber», должно быть «на семафоре barber»
57613 строка снизулишняя точка после профиля функции
5781 строка сверху«0» не тем шрифтом
5809 строка снизунаписано «элеметов», пропущена буква «н»
5943 строка сверхунаписано «другим», должно быть «другими»
59510 строка сверхунеправильно расположены звёздочки в типе параметра argv
595в тексте примерапеременная fd описана после оператора; нужно из строки «int fd = ...» убрать слово int, а саму переменную добавить в описание в начале функции вместе с i.
60019 строка сверхуНаписано «с позиции 600», должно быть «с позиции 800»
604две верхние строки«(программного прерывания)» должно быть после «системного вызова», а не там, где сейчас
61219 строка сверхупосле слова «опять-таки» должна быть запятая, а не точка
6132 строка снизуне закрыта скобка после слова «scripts», нужно добавить скобку
6184 строка сверхупропущено тире после слова «контейнеры»
6286 строка снизунаписано «планировщих», должно быть «планировщик»
63118 строка сверхунаписано «к концу третьего тома», должно быть «второго тома»
63518 строка снизунаписано «из параметра val», должно быть «из параметра env»
63920 строка снизунаписано «соотвовать», должно быть «соответствовать»
68512 строка снизунаписано «расширения», должно быть «суффикса»
686нижняя строканаписано «в части 5» должно быть «в части 4»
68711 строка снизудля единообразия убрать скобки у main
68916 строка сверхуслово «gdb» набрано не тем шрифтом
69121 строка снизу«Shift-F» набрано не тем шрифтом
69119 строка снизу«Ctrl-C» набрано не тем шрифтом
6912 строка снизуслово «pid» набрано не тем шрифтом
6974 строка сверхунаписано «при написании Makefile из предыдущего параграфа мы могли бы», нужно что-то вроде «мы могли бы в нашем Makefile» (здесь был убран заголовок параграфа)
70011 строка сверхунаписано «был», должно быть «было»
7015 строка сверхуслово «vim» набрано не тем шрифтом
70117 строка сверхупосле слов «в одну строчку» стоит две точки вместо одной
70121,22 строки сверхуслова «next» и «previous» набраны моноширинным шрифтом, должен быть курсив
7033 строка сверхунаписано «httpt», должно быть «https»

Том III

Стр.ПоложениеСодержание, комментарий
448 строка сверхунаписано «во втором томе», должно быть «в первом томе»
5816 строка сверхунаписано «return list_length(», должно быть «return list_length_do(»
7511 строка сверху«do-while» не тем шрифтом
7719 строка сверхув ссылке пропущен сокр. пробел после «стр.»
97в примерахздесь и далее имена «modulo» и «Modulo» следует заменить на что-то более подходящее, напр. Modulus или даже Magnitude
1066 строка снизунаписано «функция-деструктора», должно быть «функции-деструктора»
1077 строка сверхулишняя точка после слова «Дескриптор» в комментарии
11516 строка сверхуслово «operator» набрано моноширинным шрифтом, по смыслу должен быть курсив
1163 строка снизуотступ для тела конструктора три пробела, должно быть четыре
1215-6 строки сверхунаписано «целочисленных переменных», должно быть «переменных типа float»
12615-16 строки снизунесогласование числа, должно быть «вызывать методы, не являющиеся константными»
13012 строка снизусомнительна форма слова «сам», желательно переформулировать фразу
147в тексте примера«A::» не нужно (избыточно и приводит к ошибке)
15614 строка снизунаписан номер параграфа «10.4.10», должен быть «10.4.4» (в исходнике была допущена ошибка в имени метки в команде \ref)
1579 строка сверхуимя класса «A» набрано не тем шрифтом
157сносказамечание не соответствует действительности, в примере используется обычный int
1815 строка снизунаписано «толлейбусы», пропущена буква «р»
1883 строка сверху«вытекает из» написано дважды
21416 строка снизунаписано «случе», должно быть «случае»
2404 строка снизунаписано «сроку», должно быть «строку»
2439 строка после заголовканаписано «по третьему тому», должно быть «по второму тому»
2447 строка сверхунаписано «этих», должно быть «эти»
24817 строка сверхулишний пробел в заголовке цикла «for»
25519 строка снизув конце тела if после вызова функции CheckLines должен быть оператор break или return
25719 строка снизунаписано «graphics», должно быть «graphical»
2624 строка снизу«Ctrl-C» набрано не тем шрифтом
26617 строка сверхуточка вместо запятой после «Quit»
2795 строка сверхуне нужны скобки у free
2902 строка сверхунаписано «справа сверху», должно быть «слева сверху»
29118 строка снизупропущена запятая перед тире
29819 строка сверху«FLTK» набрано не тем шрифтом
30021, 24 строки сверху0, 1, 0, 2 набраны не тем шрифтом
3062 строка снизунаписано «Xlib», нужно «Xlib.h»
3118 строка сверхунаписано «представляющая как (в роли которых», пропущено слово «данные» перед скобкой
3167 и 13 строки снизув названии «GNU readline» слово «readline» написано со строчной буквы, должно быть с заглавной
31712 строка сверху«GNU Readline» набрано моноширинным шрифтом, должен быть обычный
31720 строка снизуслово «GCL» набрано моноширинным шрифтом, должен быть обычный
3323 строка сверхунаписано «операция!условнаяусловных операций», в исходнике перепутана команда LaTeX'а, должно быть просто «условных операций»
332в сноске«cond» набрано курсивом вместо моноширинного
334первый примерназвание функции sqe-det стоит поменять на sqe-discr или что-то вроде
3363 строка снизунаписано «reverse_do», должно быть «reverse1_do»
34612 строка снизунаписано «наывается», пропущена буква «з»
35218 строка снизунаписано «лябмда-списка», перепутаны буквы в слове «лямбда»
36315 строка сверху«GCC» нарушает единообразие (и далее несколько раз до конца параграфа так же)
3656 строка сверхунаписано «изчезновение», должно быть «исчезновение»
3666 строка сверху«7» и «3» не тем шрифтом
374в комментарии к примеруслово «when» бывает не только в loop, как и некоторые другие символы — стоит это упомянуть
37820,21 строки снизуномера потоков и их названия набраны не тем шрифтом
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
3975 строка сверхунаписано «назвается» — пропущена буква «ы»
4012 строка сверхунаписано «eof-object», должно быть «eof-object?»
40120 строка сверхупропущен сокращённый пробел перед знаком параграфа
4025 строка сверху«stderr» не тем шрифтом
4037 строка снизунаписано «Пропробуем», должно быть «Попробуем»
405текст примера вверхутело внутреннего let сдвинуто на 5 пробелов вместо 4
410пример внизуимя переменной det стоит поменять на discr или что-то вроде
4116 строка сверхунаписано «и если», должно быть «или если»
411пример внизунесколько раз написано eq, тогда как должно быть eq?, это ведь Scheme
42614 строка снизунаписано «подумть», пропущена буква «а»
43318,19 строки сверхуобозначения «xf, yf» и «fx, fy» для префиксных и постфиксных операций перепутаны местами, должно быть наоборот
4496 строка сверхунаписано «на стр. 11.4.3», должен быть указан номер страницы (в данном случае 435), а не параграфа
46413 строка сверхунаписано «A_3 = []», это ошибка, должно быть «A_3 = [ H_2 | [] ]», дальнейшее рассуждение в абзаце тоже ошибочно, хотя авария по бесконечной рекурсии, конечно, будет
47110 строка сверхунаписано «как же», должно быть «так же»
47115 строка сверхудля единообразия следует убрать скобки при упоминании getchar
474начало второго абзацанаписано «Все процедура», должно быть «Все процедуры»
47511 строка снизу0, 1 и 2 набраны не тем шрифтом
4783, 4 строки снизуотступ 5 пробелов вместо 4
4823 строка сверхуимя переменной X набрано не тем шрифтом
483нижняя строканаписано «влючая» должно быть «включая»
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 строка сверхунаписано «позволяюще» вместо «позволяющие»
576нижняя строканеправильно оформлено пустое тело цикла
57813 строка сверхунаписано «what's the hell», правильно с т.зр. английского словоупотребления будет «what the hell»; пример выдачи на стр. 582 тоже должен следует скорректировать
57918 строка сверху«Tcl» набрано не тем шрифтом
57912 строка снизунаписано «прощ», должно быть «проще»
581нижняя строка«Ctrl-D» набрано не тем шрифтом
58319 и 21 строки снизуУказан суффикс «_init» и имя «Tclembed_init», должно быть «_Init» и «Tclembed_Init»
58814 строка снизунаписано «Кнопка», должно быть «Метка»
6014 строка снизунаписано «странам», должно быть «сторонам»
6246 строка сверхунаписано «типизицией», должно быть «типизацией»
6293 строка сверху«Ctrl-C» набрано не тем шрифтом
63017 строка сверхунаписано «во втором томе», должно быть «в первом томе»
643Первая строка параграфанаписано «утвержение», должно быть «утверждение» (пропущена буква "д")
6485 строка сверхупропущена запятая после слова «например» в скобках
6544 строка снизуслово «World» дважды написано с заглавной буквы, должно быть со строчной
65514 строка снизуслово «xterm» набрано не тем шрифтом
659в примерахнаписано «old-new.patch», должно быть «old-new.diff» (дважды)
66414 строка сверхунаписано «назыают» — пропущена буква «в»
Спасибо всем, кто помог (и продолжает помогать) выявлять эти ошибки!


From Daniil (unverified) Sat Nov 16 19:28:57 2024 UTC pencil

Не все параметры в функции

Здравствуйте, Андрей Викторович. Не нашёл в эррате такого: МАКС Пресс 2-е издание Том 3, стр 58. Пример функции получения длины списка, с использованием аккумулятора для преобразования ее в остаточную рекурсию.

int list_length_do(const struct item *lst, int count)
{
    if(!lst)
        return count;
    return list_length(lst->next, count + 1);
}
int list_length(const struct item *lst) /*не хватает 2 параметра int для переданного count*/
{
    return list_length_do(lst, 0); /*Если передавать 0, то возвращаемая длина всегда 0*/
}
int list_length_do(const struct item *lst, int count)
{
    if(!lst)
        return count;
    return list_length(lst->next, count + 1);
}
int list_length(const struct item *lst, int count)
{
    return list_length_do(lst, count);
}

PS: знаю что комментарии к коду пишутся на английском

parent From Andrey V. Stolyarov profile Sat Nov 16 20:14:56 2024 UTC pencil

userpic

Re: Не все параметры в функции

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

Судя по тому, как вы предложили эту ошибку исправить, вы вообще не поняли, о чём идёт речь в тексте. Увы, вынужден вам это сказать.

parent From Daniil (unverified) Sat Nov 16 20:51:33 2024 UTC pencil

Re: Re: Не все параметры в функции

Спасибо что сказали, перечитал текст внимательнее, разобрался в чем ошибся

From ScrollLock (unverified) Sat Nov 2 09:24:33 2024 UTC pencil

Размеры long

Том 2 (ДМК пресс), стр. 39, утверждается, что тип long на 64-битных платформах - 64-битный, и "совпадает с long long" даже выделено курсивом. Но это не всегда справедливо:

1) Под Linux и, возможно, Cygwin - это действительно так.

2) Под MinGW он 32-битный (т.к. этот порт GCC пытается имитировать MSVC).

Я понимаю, что в книге используются UNIX-подобные системы, но портирование программ под Windows - дело не столь уж и редкое, и 4-байтный long - явление не экзотическое.

Специально поставил эксперимент. Сама тестовая программа (stdio.h - в кавычках, т.к. при предпросмотре комментария куда-то пропадал из кода):

#include "stdio.h"

int main()
{
    printf("short size:     %d\n", (int) sizeof(short));
    printf("int size:       %d\n", (int) sizeof(int));
    printf("long size:      %d\n", (int) sizeof(long));
    printf("long long size: %d\n", (int) sizeof(long long));
    printf("pointer size:   %d\n", (int) sizeof(void *));
    return 0;
}

Выдача (указатель из 8 байт, т.е. действительно компилирует под x64, в заголовке PE-файла стоит архитектура AMD64):

short size:     2
int size:       4
long size:      4
long long size: 8
pointer size:   8

Версия компилятора:

gcc --version
gcc.exe (tdm64-1) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.

parent From Andrey V. Stolyarov profile Sat Nov 2 17:44:19 2024 UTC pencil

userpic

Re: Размеры long

Про MSVC я знал, но что gcc с него пример взяли — это для меня новость. Уроды моральные :(

Там дело в чём, был какой-то апокрифический текст, утверждающий, что разрядность long должна совпадать с разрядностью указателей. Ну да ладно, в третьем издании внесу поправочку.

From Egor (unverified) Sat Nov 2 03:58:28 2024 UTC pencil

Ошибка в макросе kernel под FreeBSD

Мне кажется, что макросе kernel под FreeBSD (стр.663) Вы забыли засунуть в стек рандомное значение, имитирующее вызов процедуры-пустышки kernel, и, соответственно, освободить стек надо было на (%0+1) * 4, а не на "%0 * 4" как сделано сейчас. На FreeBSD не проверял, просто увидел.

parent From Andrey V. Stolyarov profile Sat Nov 2 06:53:40 2024 UTC pencil

userpic

Re: Ошибка в макросе kernel под FreeBSD

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

И да, я-то все примеры, которые есть в книжке, на FreeBSD проверял :-)

From Robert (unverified) Thu Oct 17 11:47:50 2024 UTC pencil

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

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

В 1-м томе на стр. 571 написано:

Короткие (short) переходы используются для оптимизации в случае, если точка, куда надлежит "прыгнуть", отстоит от текущей команды не более чем на 127 байт вперёд или 128 байт назад.

Нет ли здесь ошибки? Если я правильно понимаю, это частный случай относительной адресации, по поводу которой далее по тексту говорится (стр. 572):

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

parent From Andrey V. Stolyarov profile Thu Oct 17 12:27:55 2024 UTC pencil

userpic

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

Формально всё правильно, поскольку во время выполнения jmp текущей уже является команда, непосредственно следующая за jmp (см. описание цикла выполнения команд). Но вообще формулировочка кривовата, согласен. Тем более что jmp — это вообще имя команды безусловного перехода. Надо это дело переформулировать.

From Anonymous (unverified) Mon Oct 7 20:10:21 2024 UTC pencil

Том 1, стр. 104

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

parent From Andrey V. Stolyarov profile Mon Oct 7 20:20:29 2024 UTC pencil

userpic

Re: Том 1, стр. 104

Вы про 8-ю строку снизу? Насколько я понимаю, эта запятая зависит от того, как воспринимать сам оборот "скорее всего".

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

From Robert (unverified) Thu Oct 3 00:17:33 2024 UTC pencil

Опечатка. 2-е издание, том 1, стр. 570, 22 строка сверху

cwde (convert word to dword, extentded)

Вместо "extentded" должно быть "extended".

parent From Andrey V. Stolyarov profile Thu Oct 3 18:24:35 2024 UTC pencil

From newx (unverified) Tue Oct 1 16:36:02 2024 UTC pencil

Опечатка 1й том, стр. 193, 2й абзац

Здравствуйте. Не нашел в таблице опечаток:

1й том, стр. 193, 2й абзац сверху, 4я строчка, последнее слово

... (представлемые

parent From Andrey V. Stolyarov profile Thu Oct 3 17:24:54 2024 UTC pencil

userpic

Re: Опечатка 1й том, стр. 193, 2й абзац

Давным-давно уже в таблице, только что проверил. Ищите лучше :-) (впрочем, в данном случае просто Ctrl-F и вбить вот это вот ошибочное слово "представлемые")

From Robert (unverified) Sat Sep 28 22:44:55 2024 UTC pencil

Том 1. Замечания и ошибки

Здравствуйте, Андрей Викторович. Принёс немного замечаний и ошибок, которые не нашёл в эррате.

Номера страниц и строк приведены для второго издания.

Стр. 437, 12-11 строки снизу

узел имеет два поля-указателя -- на правое поддерево и на левое поддерево; обычно их называют left и right.

Возможно, слова "правое" и "левое" стоит поменять местами, чтобы они соответствовали left и right.

Стр. 454

Процедура удаления списка не "обнуляет" указатель:

procedure DisposeItemList(p: itemptr);
begin
    if p = nil then
        exit;
    DisposeItemList(p^.next);
    dispose(p)
end;

Лучше:

procedure DisposeItemList(var p: itemptr);
begin
    if p = nil then
        exit;
    DisposeItemList(p^.next);
    dispose(p);
    p := nil
end;

Стр. 504, строки 22-25

Если выданной строки недостаточно, можно воспользоваться командой list, которая выдаст на экран окрестности текущей строки -- пять строчек перед ней, её саму и пять строчек после.

Не знаю, зависит ли это от версии отладчика или его конфигурации, но на версии 13.1 команда list выводит пять строк перед текущей (или указанной) строкой и пять строк, начиная с текущей (или указанной), то есть, всего 10 строк, а не 11.

На той же странице, строки 10-9 снизу:

продолжить её выполнение можно командой cont (от слова continue)

На самом деле cont -- это сокращённая форма, а полностью команда и есть continue. Причём отладчик выдаёт три формы этой команды:

(gdb) help cont
continue, fg, c
Continue program being debugged, after signal or breakpoint.
Usage: continue [N]
...

Аналогично, на стр. 505, в строке 21:

команда cond (от слова conditional)

Полностью команда называется condition (не conditional):

(gdb) help cond
Specify breakpoint number N to break only if COND is true.
Usage is `condition [OPTION] N COND', where N is an integer and COND
is an expression to be evaluated whenever breakpoint N is reached.

Стр. 525, строка 18 снизу

цикл выполнения команды

Должно быть "цикл выполнения команд".

Стр. 551, строки 13-15

в большинстве версий Linux в секцию стека можно передавать управление

Вместо "секцию" должно быть "сегмент".

Аналогично в строке 15:

Эта секция также может увеличиваться в размерах

parent From Andrey V. Stolyarov profile Thu Oct 3 17:47:23 2024 UTC pencil

userpic

Re: Том 1. Замечания и ошибки

Так, ну прежде всего:

> Процедура удаления списка не "обнуляет" указатель:

Разумеется, не обнуляет, и не должна. Ни dispose в Паскале, ни free в чистом Си, ни delete в C++ этого тоже не делают. А тому, кто вам рассказал, что якобы так "лучше", плюньте в рожу, это извращает саму суть операции освобождения памяти по заданному адресу, поскольку создаёт в мозгу обучаемого ложную связь между блоком динамической памяти и конкретной переменной-указателем — в отличие от адреса, т.е. значения, которое может поменять место хранения раз этак миллион; т.е. крайне важно понимать, что выделенная область памяти идентифицируется адресным значением, а не переменной-указателем. Адрес, кстати, может ещё много где в других указателях остаться, так что обнуление одного из них, разумеется, ничего не даст.

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

> Вместо "секцию" должно быть "сегмент".

Нет, не должно быть. Сегментная организация виртуальной памяти безвременно сдохла лет сорок назад. Нынешний строгий термин — mapping (отображение), но если его применить в книге, понятнее она от этого не станет, особенно если учесть, что это пока что первый том, а что адресное пространство процесса состоит именно что из отображений, созданных mmap'ом (в Linux'е есть ещё .data, которая с помощью brk управляется, в *BSD уже давно нет) — это всё обсуждается во втором томе, и сильно не в начале. Поэтому я для этой сущности, находящейся в памяти процесса, применяю тот же термин, что и для образа памяти в исполняемом файле — секция. Благо читатель с секциями уже прочно знаком, директиву section приходится писать в каждой (буквально каждой) программе на асме, а это как раз ассемблерная часть.

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

> Возможно, слова "правое" и "левое" стоит поменять местами, чтобы они соответствовали left и right.

Тут вы, пожалуй, правы, хотя поскольку там нет слова "соответственно", формально это не ошибка. Но в рукописи я это поправлю. В эррату не потащу.

Относительно дебаггера и цикла выполнения согласен, сейчас внесу. Спасибо.

From Student (unverified) Sun Sep 22 18:23:19 2024 UTC pencil

Обозначения второго аргумента (Type) в цели op/3

Хочу обратить внимание на упоминаемые обозначения для второго аргумента («Type») встроенной цели op/3.

Том 3, параграф 11.4.3 про модель данных в Прологе, с. 433 (=435 в PDF-ке), первый из абзацев, написанных малым шрифтом, строки 2–3 с конца абзаца (=19–20 в общей нумерации с начала страницы):

... xf и yf задают обычные (префиксные) унарные операции, fx и fy — постфиксные. ...

С интуитивной точки зрения, должно быть наоборот: fx — для префиксной операции, а xf — для постфиксной, так как в случае префиксного минуса, например, функтор f будет находиться перед операндом x — т. е. как раз fx.

Я ещё посмотрел в документации SWI Prolog: там xf, yf во встроенных операторах не встречаются.

parent From Andrey V. Stolyarov profile Sun Sep 22 18:51:43 2024 UTC pencil

userpic

Re: Обозначения второго аргумента (Type) в цели op/3

Да, good catch. Специально проверил, op(1000, fx, fuck) допускает потом "fuck you" в роли терма, а "you fuck" не допускает (для xf наоборот). Почти пять лет ошибка прожила, никто её не замечал.

Спасибо.

From Student (unverified) Sun Sep 22 15:40:11 2024 UTC pencil

Предложение по улучшению форматирования

Добрый день! Предлагаю проверить, не пропущен ли пробел после запятой.

Том 3, параграф 11.2.3 про ввод-вывод в Scheme, с. 401 (=403 в PDF-ке), второй полный абзац (второй из абзацев, написанных малым шрифтом), строка 3 с конца абзаца (=20 в общей нумерации строк с начала страницы):

... (см. т. 2,\S 5.4.3) ...

Не могу проверить наверняка, но есть стойкое ощущение, что после запятой (перед символом параграфа) пропущен пробел.

parent From Andrey V. Stolyarov profile Sun Sep 22 16:00:16 2024 UTC pencil

userpic

Re: Предложение по улучшению форматирования

Вы абсолютно правы, спасибо!

From anon (unverified) Sat Sep 21 12:17:05 2024 UTC pencil

Том 1, страница 555, строка 11 сверху

В тексте во фразе "So I say: "Don't panic!"" присутствует восклицательный знак, а в примере кода его нет.

parent From Andrey V. Stolyarov profile Sat Sep 21 16:47:54 2024 UTC pencil

From xxx (unverified) Fri Sep 20 12:51:58 2024 UTC pencil

Том 1, стр 271 -- 272

Первый том, параграф 2.2.12, страницы 271 -- 272. В двух первых примерах параграфа после слова program идентификаторы набраны в разном стиле: hello20for и square100_for.

parent From Andrey V. Stolyarov profile Fri Sep 20 13:44:49 2024 UTC pencil

userpic

Re: Том 1, стр 271 -- 272

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

From Nikolai (unverified) Thu Aug 29 05:24:47 2024 UTC pencil

Том 2, с. 182

2 и 4 строки снизу: arrsize вместо ARRAY_SIZE

parent From Andrey V. Stolyarov profile Thu Aug 29 06:46:54 2024 UTC pencil

userpic

Re: Том 2, с. 182

Класс :-)

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

Спасибо.

From Анон (unverified) Fri Aug 23 18:41:27 2024 UTC pencil

parent From Andrey V. Stolyarov profile Fri Aug 23 18:51:35 2024 UTC pencil

From uf4n (unverified) Tue Aug 13 12:07:40 2024 UTC pencil

Том 2, стр. 166, строка 20 снизу (МАКС Пресс)

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

parent From Andrey V. Stolyarov profile Tue Aug 13 12:26:22 2024 UTC pencil

userpic

Re: Том 2, стр. 166, строка 20 снизу (МАКС Пресс)

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

From uf4n (unverified) Thu Aug 8 07:03:02 2024 UTC pencil

Том 2, стр. 277, строка 18 сверху (МАКС Пресс)

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

parent From Andrey V. Stolyarov profile Thu Aug 8 08:14:34 2024 UTC pencil

userpic

Re: Том 2, стр. 277, строка 18 сверху (МАКС Пресс)

Спасибо. Странно, что никто ещё не заметил такой жирный косяк прямо в первом слове абзаца.

From Алексей (unverified) Mon Aug 5 10:08:44 2024 UTC pencil

Том 1, стр. 216, рис. 1.14

Прошу прощения, наверное, я сначала не туда написал комментарий. Опечатка в таблице ASCII. С кодом 39 должен находиться не вопросительный знак (?), а одинарная кавычка (')

parent From Andrey V. Stolyarov profile Mon Aug 5 10:44:38 2024 UTC pencil

userpic

Re: Том 1, стр. 216, рис. 1.14

пофигу, я уже нашёл и даже ответил

From uf4n (unverified) Mon Aug 5 10:03:49 2024 UTC pencil

Том 2, стр. 227, 11 строка снизу (МАКС Пресс)

Обнаружил маленькое несоответствие на странице 227 в названии функции delete_negatives_from_list. Судя по всему она должна называться delete_negatives_from_int_list, как на странице 148.

parent From Andrey V. Stolyarov profile Mon Aug 5 10:56:02 2024 UTC pencil

userpic

Re: Том 2, стр. 227, 11 строка снизу (МАКС Пресс)

Спасибо за внимательность :-)

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

From uf4n (unverified) Wed Jul 31 18:16:13 2024 UTC pencil

стр. 198

В примерах описания типа struct item пропущено слово struct при описании поля next

parent From Andrey V. Stolyarov profile Wed Jul 31 21:00:50 2024 UTC pencil

userpic

Re: стр. 198

Факт, спасибо (для публики: имеется в виду второй том).

From Александр (unverified) Mon Jun 24 16:55:11 2024 UTC pencil

Опечатка

Опечатка в 2 томе издательства ДМК на странице 259. Первое предложение параграфа 5.1.2: "... запуск задач и их останов."

parent From Andrey V. Stolyarov profile Mon Jun 24 17:51:28 2024 UTC pencil

userpic

Re: Опечатка

Словоформа "останов" абсолютно корректна, хотя, возможно, относится к т.н. "профессионализмам".

From asb (unverified) Tue Jun 11 13:47:26 2024 UTC pencil

стр. 426

Добрый день.

if first <> nil then
begin
    while first^.data < 0 do    { удаление из начала }
    begin
        tmp := first;
        first := first^.next;
        dispose(tmp)
    end
end;

Если список состоит только из отрицательных чисел, то программа упадёт с runtime error 216, так как когда в first будет храниться значение nil мы попытаемся обратиться к полю data.

Нужна дополнительная проверка, как на странице 430:

while (first <> nil) and (first^.data < 0) do

parent From Andrey V. Stolyarov profile Mon Jul 29 17:39:19 2024 UTC pencil

userpic

Re: стр. 426

Да, вы правы, пример придётся переделать. Пометил его в рукописи пометкой "к доработке". Спасибо.

From Alejandro profile Sun May 5 08:49:45 2024 UTC pencil

Опечатки

2 том

с. 372-373, пример — возможно, вызов open и обработку ошибки стоит делать до fflush(stdout); и save1 = dup(1);

с. 375, 2 абзац, 2 строка — /bin/init вместо /sbin/init

с. 378, конец 1-го абзаца — "с помощью комбинации вызовов getgroups и geteuid", geteuid вместо getegid

parent From Andrey V. Stolyarov profile Tue Jul 30 19:10:34 2024 UTC pencil

userpic

Re: Опечатки

Первое не ошибка, так что в эррату не выношу, но да, пример поправлю. Остальные два пункта — хорошо поймано.

From Fedor Potseluev (unverified) Tue Apr 16 07:53:09 2024 UTC pencil

Получение случайных чисел из заданного диапазона

Во втором томе, на странице 244, объясняется, как получить случайное число из заданного диапазона с равномерным распределением, на примере диапазона от 1 до 12:

1 + (int)(12.0*rand()/(RAND_MAX+1.0))

Решив получить случайный ASCII символ, я написал

33 + (int)(126.0*rand()/(RAND_MAX+33.0))

и некоторое время недоумевал, почему код не работает так, как я ожидаю. Вооружившись гуглом, нашёл ответ: https://stackoverflow.com/questions/11641629/generating-a-uniform-distribution-of-integers-in-c

На мой взгляд, пример в книжке лучше переписать как

min + (int)((max-min+1.0)*rand()/(RAND_MAX+1.0))

для большей наглядности.

Спасибо.

parent From Andrey V. Stolyarov profile Tue Apr 16 09:35:54 2024 UTC pencil

userpic

Re: Получение случайных чисел из заданного диапазона

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

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

parent From Anonymous (unverified) Wed Jun 19 10:23:03 2024 UTC pencil

Re: Получение случайных чисел из заданного диапазона

Откуда взялось вот это?

33 + (int)(126.0*rand()/(RAND_MAX+33.0))

Нужно выбрать печатный символ, включая или исключая пробел?

Пусть будет включая пробел, тогда нужно число в диапазоне от 32 до 126 включительно, всего 95 чисел, первое из которых 32:

32 + (int)(95.0*rand()/(RAND_MAX+1.0))

Делим rand() которое есть целое в интервале от 0 до RAND_MAX включительно на (RAND_MAX+1.0), получаем число в полуоткрытом интервале [0-1), затем его умножаем на 95 и получаем вещественное число в полуоткрытом интервале [0-95), откругляем вниз - выходит целое от 0 до 94 включительно, добавляем 32, выходит целое от 32 до 126 включительно.

Ну и в конце преобразование к char можно сделать, если надо его в строку запихать или ещё куда.

Хотя на самом деле это не совсем правильный способ. Целое число [0-RAND_MAX] не может быть преобразовано в целое число [33-196] идеально равномерно, если RAND_MAX+1 не делится на количество чисел в целевом интервале. Неизбежно какие-то конкретные числа будут выпадать чуть-чуть чаще чем другие. В идеале нужно откромсать лишние числа от rand() и если они выпали, перебрасывать. Но это довольно заметно усложнит код. Да и вообще я не особо уверен в равномерности rand(). Возможно, лучше читать байты из /dev/urandom или даже /dev/random?

parent From Andrey V. Stolyarov profile Wed Jun 19 12:55:13 2024 UTC pencil

userpic

Re: Получение случайных чисел из заданного диапазона

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

Но раз уж я ваш коммент раскрыл, скажу, что нет, байты читать из /dev/random, во-первых, намного медленнее, поскольку чтение — это системный вызов, т.е. обращение к ядру ОС, при котором в процессоре рубятся конвейеры команд и вообще происходит жёсткий дизастер. А во-вторых, /dev/random не всегда есть; к сожалению, пока что в мире существуют и другие системы, кроме всевозможных вариантов Unix (лично я бы, несомненно, предпочёл, чтобы они передохли).

parent From ScrollLock (unverified) Thu Jul 11 22:42:49 2024 UTC pencil

Re: Re: Получение случайных чисел из заданного диапазона

У функции rand() есть два серьёзных недостатка: 1) не гарантируется криптографическая стойкость ГПСЧ и не говорится о минимальном периоде ГПСЧ. 2) RAND_MAX может быть довольно маленький, меньше 2^32. Что неудобно для генерации случайных чисел типа double.

Также в книге есть спорная формулировка "Во многих случаях, как правило, не связанных с безопасностью - например, в тех же компьютерных играх - непредсказуемость случайных чисел не слишком важна, поскольку никто, скорее всего, не станет пытаться их предсказывать". Те же научные вычисления типа интегрирования по Монте-Карло, как правило, не связаны с безопасностью, но функция rand для них обычно непригодна, там ведь даже RANDU может быть. А Си в этой сфере используют часто. И, наверное, нет большого смысла использовать для них что-либо хуже криптографически стойкого генератора псевдослучайных чисел с периодом не менее 2^64, проходящего тесты BigCrush и PractRand на 32 Тб.

Вот хорошая статья про возможные злоключения с псевдослучайными числами и аргументы за использование криптостойких ГПСЧ как генераторов общего назначения.

https://sortingsearching.com/2023/11/25/random.html

Аргумент у них такой: криптостойкие генераторы могут выдавать порядка сотен мегабайт в секунду и реализуются в несколько десятков строк на Си. А если так - зачем использовать что-то менее качественное?

parent From Andrey V. Stolyarov profile Mon Jul 29 10:22:46 2024 UTC pencil

userpic

Re: Re: Re: Получение случайных чисел из заданного диапазона

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

На вопрос "зачем использовать что-то менее качественное" ответ очень простой: чтобы в программе не было этих вот "нескольких десятков строк на Си".

parent From ScrollLock (unverified) Wed Aug 7 22:50:05 2024 UTC pencil

Re: Re: Re: Re: Получение случайных чисел из заданного диапазона

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

Это вполне понятное желание, но функция rand() для серьёзной работы обычно непригодна. А неискушённый читатель, которому псевдослучайные числа нужны не для написания игр, а для расчётов, может сдуру понадеяться на разработчиков стандартной библиотеки. Если отказаться от криптостойкости, то если есть int128 - то нормальный, т.е. проходящий BigCrush, ГПСЧ поместится в 2 строки и пару машинных команд x86-64 (вариации LCG), если int64 - то в 5 строк (SplitMix или PCG), а для 32-разрядных машин - наверное, строк 10 (вариации на тему xoroshiro).

Хотя, наверное, эти "несколько десятков строк на Си" должны были написать разработчики функции rand(). Но доходит до абсурда: даже в C++11 не просто не предлагают криптостойкого ГПСЧ! Но чуть ли не все их генераторы даже BigCrush не пройдут. А ведь 2010 году тесты TestU01/BigCrush уже были. И в GSL ситуация похожая. В общем, излишне полагаться на библиотеки вредно.

>> и при этом нормально умел программировать.

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

parent From Andrey V. Stolyarov profile Thu Aug 8 07:58:42 2024 UTC pencil

userpic

Re: Re: Re: Re: Re: Получение случайных чисел из заданного диапазона

> может сдуру понадеяться

Сдуру можно и х$$ сломать, как известно. И что? Вообще-от ответ, по-моему, ровно один: и ничего.

> Но доходит до абсурда: даже в C++11 не просто не предлагают криптостойкого ГПСЧ! Но чуть ли не все их генераторы даже BigCrush не пройдут

Вам туда, может, ещё декодер для mp3 загнать? Или какой-нибудь класс для генерации BMPшек? Да и вообще, вон есть ffmpeg, может, весь его в стандарт языка, чего мелочиться-то? Да и криптографию всю, чего там, вон OpenSSL есть, взять да и сделать его тоже "частью языка".

Но вообще коль скоро вы упоминаете C++11 в каком-то контексте, предполагающем возможность его полезности (как и вообще возможность полезности технических стандартов как явления), то мне не вполне понятно, что вы делаете на моём сайте. Будьте любезны, пойдите куда-нибудь ещё.

parent From ScrollLock (unverified) Thu Aug 8 19:45:35 2024 UTC pencil

Re: Re: Re: Re: Re: Re: Получение случайных чисел из заданного диапазона

Я как раз наоборот хотел привести пример неадекватности C++11. Те генераторы, которые они натаскали в random (MT19937, RANLUX), нередко даже сложнее, хуже по качеству и тормознутее криптографических, и намного сложнее высококачественных некриптографических. По мне так даже rand/srand - это пример того, как объявление библиотеки стандартной может расхолаживать и создавать ложное чувство надёжности.

>> И что? Вообще-от ответ, по-моему, ровно один: и ничего.

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

Стр. 227: "случайные числа используются и в математических расчётах (небезызвестный "метод Монте-Карло"), и в области обеспечения безопасности"

Стр. 227: "/dev/random... Этим методом стоит пользоваться только в тех случаях, когда вам действительно нужны хорошо распределённые и непредсказуемые числа - например, при генерации всевозможных паролей и криптографических ключей".

Стр. 228: рекомендация использовать rand для генерации псевдослучайных чисел в случаях, не связанных с безопасностью. Здесь как раз и лежат "грабли" для читателя, реализующего метод Монте-Карло.

Стр. 229: "Проще всего этого добиться с помощью взятия остатка от деления ... Но так делать не рекомендуется, поскольку распределение младших разрядов псевдослучайных чисел может быть неравномерным". Это в общем-то верно (хотя там дело не в неравномерности, а в малых периодах: в младшем бите может быть последовательность 0, 1, 0, 1, 0, 1 и т.п.) и указывает на возможное низкое качество именно rand(), а не ГПСЧ вообще. В качественном ГПСЧ младшие биты тоже должны быть хорошими.

У читателя может сложиться иллюзия, что можно rand() использовать в методе Монте-Карло, хотя на самом деле - нельзя. Простых решений тут два:

1) /dev/urandom

2) Собственный качественный ГПСЧ на 5 строк, не криптостойкий. Возможный пример, легко переводящийся на K&R C при наличии long long: https://www.pcg-random.org/download.html.

P.S. Да, я зануда :) Но на использовании аналогов функции rand в разных языках наказывались не только учащиеся, но и учёные.

parent From Andrey V. Stolyarov profile Thu Aug 8 20:26:28 2024 UTC pencil

userpic

Re: Получение случайных чисел из заданного диапазона

Так-с. Я, по правде говоря, не специалист по численным методам, но мне несколько странно, что метод Монте-карло может сломаться из-за предсказуемости случайных чисел; мне казалось, что там ничего кроме равномерности не требуется. Где-нибудь есть на эту тему ликбез?

parent From ScrollLock (unverified) Thu Aug 8 22:21:18 2024 UTC pencil

Re: Re: Получение случайных чисел из заданного диапазона

Сходу вспоминаются вот такие поломки:

1) Расчёт ранга двоичной случайной матрицы методом Монте-Карло: https://sortingsearching.com/2023/11/25/random.html (уже было). Причём далеко не на самом примитивном ГПСЧ.

2) Неравномерное распределение точек в пространстве, сгенерированных RANDU (https://ru.wikipedia.org/wiki/RANDU). А он был в некоторых версиях функции rand в старых компиляторах. Если с его помощью посчитать интеграл - будет плохо. По мере роста числа измерений такое может быть и с более удачными множителями. Характерно вообще для линейных конгруэнтных генераторов, хотя если удачно подобрать множители и разрядность - можно это почти нивелировать.

Т.е. если из-за несовершенства ГПСЧ появляется какой-то очевидный паттерн - то это чревато. А т.к. в современных вычислениях по Монте-Карло могут фигурировать миллиарды чисел, тасуемых самым причудливым образом, то это ужесточает требования к генератору.

Примеры работ с ликбезом:

1) Научно-популярный обзор: http://www.sml.ece.upatras.gr/images/UploadedFiles/methodologia-prosomoiosis/07-RNG0-random_number_generators.pdf

2) Обзоры Дж.Марсальи: https://digitalcommons.wayne.edu/cgi/viewcontent.cgi?article=1725&context=jmasm, также разработанная им батарея тестов DIEHARD. Эти тесты как раз имитируют возникающие при использовании метода Монте-Карло задачи. Являются развитием тестов из второго тома "Искусства программирования" Кнута. И многие ГПСЧ той эпохи его не прошли.

3) Публикация-обзор по PCG: https://www.pcg-random.org/paper.html. Содержит почти научно-популярный обзор некоторых существующих ГПСЧ.

4) Комплект тестов TestU01 https://simul.iro.umontreal.ca/testu01/tu01.html, развивающий идеи из DIEHARD. Там есть научная публикация, где показано, как большинство ГПСЧ из "стандартных библиотек" на них сломались. Многие "выжившие" были как раз для криптографии. Доступен по лицензии Apache и написан на ANSI C, единственный недостаток - не поддерживает многопроцессорность, хотя BigCrush выполняется несколько часов.

5) Комплект тестов PractRand, дополняющий TestU01. Криптостойкие ГПСЧ с 32-битными счётчиками, а также устаревшие шифры вроде RC4 его проваливают.

parent From ScrollLock (unverified) Sun Nov 3 22:40:56 2024 UTC pencil

Re: Re: Получение случайных чисел из заданного диапазона

Через какое-то время после написания той теоретической "простыни" я наткнулся на две статьи, в которых плохие генераторы псевдослучайных чисел приводили к неверным результатам в методе Монте-Карло:

1. https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.69.3382

2. https://doi.org/10.1142/S0129183196000235

У меня эффект воспроизвёлся на самописных генераторах. Один из генераторов, приведших к проблемам в статье 2., LFib(250,103,+), очень сходен с тем, что используется в glibc (только там - LFib(31,3,+) вроде бы). В более поздних публикациях установили, что тесты на основе алгоритма Wolff примерно аналогичны Gap Test из TAOCP. Судя по всему, код в glibc для функции rand - во многом из 80-х, а потом её улучшением не занимались, т.к. физики всё равно притащат свой ГПСЧ. Способ по повышению качества LFib(31,3,+) из Thalassa CMS отчасти работает, но некоторые особо хитрые тесты он всё равно проваливает.

Алгоритм Wolff на Си (для тестов ГПСЧ константы вроде 2.269 там излишне округлены; более точные можно взять из библиотеки SPRNG):

https://phyweb.physics.nus.edu.sg/~phywjs/Bworkshop/Wolff.c

Обратите внимание на использование функции drand48(): именно в этом случае линейный конгруэнтный генератор оказался предпочтительнее, хотя он тоже не очень хороший.

Также удалось найти очень простой криптостойкий генератор Speck128/128. И по сложности реализации он сопоставим по с тем, что сейчас в glibc.

https://ia.cr/2013/404

https://nsacyber.github.io/simon-speck/implementations/ImplementationGuide1.1.pdf.

Да, он разработан в АНБ, но бэкдоров пока не нашли. Да и даже если они там есть - то вряд ли испортят метод Монте-Карло. Я замерял скорость - получается около 3.0 cpb (тактов на байт), что сопоставимо с minstd или subtract with borrow (в последних двух - много if/then/else, чего процессоры не любят). При запихивании в 256-битные SIMD-регистры 8 экземпляров генератора скорость повышается до 0.7 cpb, свыше 3 ГиБ/с. Не очень быстро, но сопоставимо с вихрем Мерсенна.

P.S. Я понимаю, что Ваша книга - не книга по численным методам. Просто хотел показать, что опасения насчёт ГПСЧ - не схоластика.

parent From Andrey V. Stolyarov profile Mon Nov 4 07:52:32 2024 UTC pencil

userpic

Re: Получение случайных чисел из заданного диапазона

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

UPD: Так, всё, хватит. Казус с методом монте-карло меня внезапно (и не слишком надолго) заинтересовал, но это не повод продолжать весь этот поток словоблудия в пользу переусложнённых решений.

From ScrollLock (unverified) Sat Apr 13 21:56:35 2024 UTC pencil

Неточность (плавающая точка)

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

В томе 2 на стр. 46 (МАКС Пресс) и в томе 2 на стр. 44 (ДМК) есть фраза "Так, значение выражения 5.0/2.0 приблизительно равно 2.5", причём "приблизительно" выделено курсивом. Хотя в формате IEEE-754 оно имеет точное представление. Если заменить 5.0/2.0, на 8.0/5.0, то 1.6 действительно не будет иметь точного представления.

parent From Andrey V. Stolyarov profile Wed Jul 31 10:35:04 2024 UTC pencil

userpic

Re: Неточность (плавающая точка)

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

From Max Zhenzhera (unverified) Thu Apr 11 12:03:03 2024 UTC pencil

Опечатка: том 1, страница 648

Приветствую!

1-ый абзац, 2-ое предложение

На разных архитектурах соответствующая инструкция может называется trap (ловушка), ...

называется вместо называться

From gg (unverified) Tue Feb 20 06:35:09 2024 UTC pencil

Приоритет логических связок в шелле

В первом томе (страница 125) про связки && и || написано следующее:

Приоритет логических связок между собой - традиционный (то есть «и» приоритетнее чем «или»).

Из этого, кажется, следует, что такая вот конструкция:

{ echo 1; true; } || { echo 2; false; } && { echo 3; true; }

должна напечатать:

1

Однако на практике получается:

1
3

Т.е. приоритет у && и || одинаковый и они левоассоциативны

parent From Andrey V. Stolyarov profile Tue Feb 20 10:14:08 2024 UTC pencil

userpic

Re: Приоритет логических связок в шелле

Похоже на правду. Спасибо.

From ilya (unverified) Mon Feb 12 13:53:10 2024 UTC pencil

Длина машинных команд

Андрей Викторович, здравствуйте. Перечитывал первый том и обнаружил противоречивые предложения (номера страниц по версии ДМК Пресс, увы):

На стр. 510, второй абзац снизу, текст в скобках: Вы утверждаете, что машинные инструкции могут занимать от 1 до 11 ячеек памяти. Однако на стр. 489, в примечании номер 3, третьей части, Вы пишете, что команды занимают от 1 до 15 ячеек.

Насколько я помню, команды в семействе i386 имеют длину от 1 до 15 ячеек. Это опечатка или я чего-то недопонимаю? Спасибо!

parent From Andrey V. Stolyarov profile Fri Aug 2 14:17:48 2024 UTC pencil

userpic

Re: Длина машинных команд

На самом деле вопрос сложнее, чем кажется. Команду можно снабжать префиксами, в том числе одинаковыми, изначальная логика построения этой системы команд устроена именно так; но если это так, то код одной инструкции может быть сколь угодно длинным, ну взять там какую-нибудь movsb и пришпандорить к ней, скажем, мегабайт префиксов rep. Вот это вот 15 — это искусственно введённое ограничение, типа больше нельзя, перебьётесь, у нас столько префиксов нет.

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

From amareigi (unverified) Sun Feb 11 09:37:26 2024 UTC pencil

3 том 156 страница 14 строчка снизу

"... это конструктор преобразования (см. 10.4.10);" Параграф про конструктор преобразования 10.4.4

10.4.10 про конструктор копирования

parent From Andrey V. Stolyarov profile Wed Jul 31 15:28:01 2024 UTC pencil

From amareigi (unverified) Sat Feb 3 15:29:38 2024 UTC pencil

3 том 117 страница

"В теле константного метода нельзя для того же объекта вызвать метод, не являющийся константными." Слово константными заменить на константный

parent From Andrey V. Stolyarov profile Wed Jul 31 21:08:14 2024 UTC pencil

userpic

Re: 3 том 117 страница

В версии от МАКС Пресс это стр. 126, в эррате есть

From Alejandro profile Wed Jan 31 17:52:53 2024 UTC pencil

Название точки входа у плагина

Том 3 (МАКС Пресс), с. 583, 3 абзац, строки 4 и 6 — _init вместо _Init и Tclembed_init вместо Tclembed_Init.

parent From Andrey V. Stolyarov profile Fri Aug 2 16:25:38 2024 UTC pencil

userpic

Re: Название точки входа у плагина

Досадная ошибочка. Спасибо.

From Anonymous (unverified) Sat Jan 27 14:44:34 2024 UTC pencil

Ширина текста программы: 79 vs 80

Доброго времени суток, Андрей Викторович.

В 1-м томе в параграфе 2.12.7 обсуждалось правило 80-го столбца, в частности, говорилось (стр. 475):

"каким бы текстовым редактором вы ни пользовались, не следует допускать появления в программе строк, длина которых превосходит 80 символов. В действительности желательно всегда укладываться в 75 символов"

Однако, на странице 481 есть предложение, в котором фигурирует число 79, а не 80:

"Бывает, что даже после всех этих ухищрений заголовок по-прежнему не помещается в 79 знакомест."

Число 79 фигурирует и в главе, посвящённой NASM, на странице 544:

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

Так какой же ширины текста программы следует придерживаться -- в 80 или в 79 символов? В книге объясняется, откуда взялось число 80, но про 79 не сказано ничего; возможно, стоит добавить какие-либо пояснения на этот счёт.

parent From Andrey V. Stolyarov profile Sat Jan 27 14:53:17 2024 UTC pencil

userpic

Re: Ширина текста программы: 79 vs 80

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

parent From Anonymous (unverified) Sun Jan 28 10:38:10 2024 UTC pencil

From Василий (unverified) Wed Jan 24 17:02:10 2024 UTC pencil

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

На странице 588 после изменения текста метки абзац начинается со слова "Кнопка", должно быть "Метка", потому что речь идет именно о ней

parent From Andrey V. Stolyarov profile Wed Jul 31 16:00:18 2024 UTC pencil

userpic

Re: Том 3, опечатка

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

From Василий (unverified) Wed Jan 24 16:44:04 2024 UTC pencil

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

На странице 578 обработка кода TCL_RETURN сопровождается сообщением: "what's the hell?". Все же "какого черта?" это "what the hell [is ...]?", в противном случае сообщение скорее значит: "что такое ад?"

parent From Andrey V. Stolyarov profile Thu Aug 1 20:24:15 2024 UTC pencil

userpic

Re: Том 3, опечатка

Похоже на правду :-) Спасибо.

From Василий (unverified) Mon Jan 22 12:26:33 2024 UTC pencil

3 том, страница 545, опечатка в названии примера

Пример программы echo на Tcl назван calc0.tcl

parent From Andrey V. Stolyarov profile Wed Jul 31 09:47:43 2024 UTC pencil

userpic

Re: 3 том, страница 545, опечатка в названии примера

Там нет "примера программы echo", зато написано, что echo реализуется одной строчкой. А пример (как и написано там же) вычисляет выражение, заданное в командной строке.

From null (unverified) Mon Jan 8 14:56:29 2024 UTC pencil

Издание 2, том 1, стр. 368, последний абзац

"половину высоту экрана", а должно быть "половину высоты экрана"

parent From Andrey V. Stolyarov profile Mon Jan 8 15:30:47 2024 UTC pencil

userpic

Re: Издание 2, том 1, стр. 368, последний абзац

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

parent From null (unverified) Mon Jan 8 15:53:44 2024 UTC pencil

Проглядел)

Но по 364 странице(в очереди на премод) ничего в таблице не нашел

parent From Andrey V. Stolyarov profile Mon Jul 29 10:34:18 2024 UTC pencil

userpic

Re: Проглядел)

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

From null (unverified) Mon Jan 8 14:35:09 2024 UTC pencil

parent From Andrey V. Stolyarov profile Mon Jul 29 10:20:30 2024 UTC pencil

userpic

Re: Издание 2, том 1, стр. 364, последняя строка

И что?

На всякий случай даже проверил, вот первая попавшаяся ссыль, только осторожно, там js и много мельтешащей анимации: https://kak-pravilno.net/nenamnogo-ne-namnogo-ili-ne-na-mnogo-kak-pravilno/#google_vignette

Или я чего-то не понял?

From Alejandro profile Thu Jan 4 18:32:36 2024 UTC pencil

Ошибка в архиве

В файле tclembed.c в комментариях:

gcc -Wall -g -ltcl tclembed.c -o tclembed

вместо

gcc -Wall -g tclembed.c -ltcl -o tclembed

parent From Andrey V. Stolyarov profile Fri Aug 2 16:01:40 2024 UTC pencil

userpic

Re: Ошибка в архиве

Ага, факт. Пора мне уже отвыкать от gcc 4.*, как это ни печально.

parent From Alejandro profile Tue Aug 6 16:53:57 2024 UTC pencil

Re: Re: Ошибка в архиве

Андрей Викторович, не могли бы вы объяснить подробнее по поводу версий gcc?

parent From Andrey V. Stolyarov profile Tue Aug 6 18:39:01 2024 UTC pencil

userpic

Re: Ошибка в архиве

А чего тут объяснять, версии до четвёртых включительно флажки -l допускали в любом месте, а линкеру их отдавали после всех объектников, но начиная с gcc 5.* эта халява кончилась. Это даже где-то обсуждалось, но сейчас лень искать.

From punkochel profile Thu Nov 23 05:04:42 2023 UTC pencil

Незакрытая скобка

Том 2. 613 стр. 2 строка снизу. DMKV: 573 стр. 1 строка сверху. "стартовые скрипты (англ. startup scripts;".

parent From Andrey V. Stolyarov profile Wed Jul 31 20:53:41 2024 UTC pencil

userpic

Re: Незакрытая скобка

Факт медицинский, спасибо.

From Anonymous (unverified) Sat Oct 14 16:26:48 2023 UTC pencil

Обозначения бесконечных чисел

Добрый день, Андрей Викторович! Предлагаю проверить обозначения для бесконечных чисел.

Том 1, параграф 1.3.4 про виды бесконечности, с. 172 (=174 в PDF-ке), первый полный абзац, строки 2–3 (=14–15 в общей нумерации на странице):

математики обозначают это символом \aleph_1 («алеф-один»)

Насколько мне известно, мощность континуум обозначается через c. В Википедии это обозначение также упоминается: континуум. В той же статье есть нумерация для этого бесконечного числа через дзету (т. е. \aleph_\zeta), но думаю, это уже углубление в тему и немного лишнее. По крайней мере, дзету я в процессе обучения не видел, а вот обозначение континуума через c встречал как стандартное.

Через алеф-один (\aleph_1) обозначается следующее бесконечное число после алеф-ноль. А вот равно оно континууму или нет — есть континуум-гипотеза. Кстати, судя по описанию, как раз континуум-гипотезу вы упоминаете в конце этого параграфа в дополнительном абзаце.

parent From Andrey V. Stolyarov profile Tue Jul 30 18:23:40 2024 UTC pencil

userpic

Re: Обозначения бесконечных чисел

Похоже на правду, спасибо.

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

From Alejandro profile Mon Sep 11 05:12:50 2023 UTC pencil

Опечатка

1 том (ДМК), описание редактора Nano, первый абзац, третья строка сверху от команды запуска nano — написано "придусмотрено" вместо "предусмотрено".

parent From Andrey V. Stolyarov profile Tue Jul 30 19:17:05 2024 UTC pencil

userpic

Re: Опечатка

Строку нашёл, слово нашёл, в моём экземпляре оригинал-макета написано правильно (прЕ...). Э?

parent From Alejandro profile Thu Aug 1 19:32:23 2024 UTC pencil

Re: Re: Опечатка

Вы правы, прошу прощения. Не знаю, как я там "при" увидеть умудрился.

parent From Andrey V. Stolyarov profile Thu Aug 1 20:14:35 2024 UTC pencil

userpic

Re: Опечатка

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

From Anonymous (unverified) Thu Aug 31 22:26:48 2023 UTC pencil

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

Том 1, стр 568, последняя строка первого абзаца, слово "небходимы"

parent From Andrey V. Stolyarov profile Fri Aug 2 15:30:03 2024 UTC pencil

userpic

Re: том 1, страница 568

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

From Anonymous (unverified) Tue Aug 29 14:49:59 2023 UTC pencil

том 1, ДМК

страница 513, 14 строка снизу, пропущена буква и. Написано "динамическе" вместо "динамические"

parent From Andrey V. Stolyarov profile Tue Jul 30 18:02:40 2024 UTC pencil

userpic

Re: том 1, ДМК

Еле нашёл. I том, стр. 550, 5-6 строки снизу.

Спасибо :-)

From putilin (unverified) Tue Aug 22 14:55:17 2023 UTC pencil

Опечатки, том II, 2e издание

Прошу проверить:

с. 291 X.Org X Server 1.20.13 Команда: $:sudo X :0 Отображается просто пустой экран. X-курсор и фон: $:sudo X :0 -retro X не уходит в фоновый режим по Ctrl+Z. Возможно, это проблема настроек моего терминала.

c. 359 в текст программы добавить: #include <unistd.h> #include <stdio.h>

с. 374 if(pid == -1) { /* ... обработка ошибки ... */} Почему такой же строки нет в примере выше?

c. 378 7 строка сверху: "getgroups и geteuid" должно быть "getgroups и getegid" т.к. речь о группах.

с. 379 15 строка сверху: getreuid и getregid не нашёл в man-ах.

с. 407 (см. стр. 5.3.2) - д.б. пар. 5.3.2

c. 571 ...(количество клиентов заблокированных на мюьтексе barber...) barber - семафор.

с. 572 ...(в зависимости от реализации двоичного семафора здесь либо произойдёт ошибка, либо barber получит непредусмотренное значение 2...) barber в этой ситуации не может получить значение 2. Единственный, кто может увеличить семафор barber это парикмахер. Даже при несоответствии семафора customers количеству ожидающих клиентов парикмахер уменьшит customers, поднимет barber и заблокируется на down(client) до прибытия следующего реального клиента. Но при "неполном" решении на следующей странице уже понятно, как barber может получить 2. Возможно это осталось с предыдущей редакции, где было приведено только "неполное" решение.

c. 596 "...с вероятностью 90% - писатель flock_ex окажется заблокирован навсегда, поскольку у двух ваших читателей отсутствует переcечение временных промежутков нахождения вне критической секции." По моим подсчётам, вероятность 95%: 1.9 с - время блокировки, 0.1 с - время ожидания. Вероятность второго читателя запуститься в момент ожидания первого - 5%.

c. 600 "...то у вас останется два захвата: с позиции 500 длиной 200 и с позиции 600 длиной 700" д.б. "...с позиции 800 длиной 700".

c. 635 "...longjump копирует свой параметр val в EAX, после чего восстанавливает значения ESP и EIP из параметра val,..." д.б. "...восстанавливаeт значения ESP и EIP из параметра env,...": ESP и EIP хранятся в env.

c. 696 Параметры -ansi -pedantic здесь и далее у вас то появляются, то исчезают

c. 700 Cтоит добавить в clean файл с зависимостями deps.mk

Большое спасибо за книги!

P.S.: Третий раз пытаюсь оставить этот коммент: предыдущие пропали.

parent From Andrey V. Stolyarov profile Sat Aug 3 18:47:02 2024 UTC pencil

userpic

Re: Опечатки, том II, 2e издание

Так-с, во-первых, и в-главных:

P.S.: Третий раз пытаюсь оставить этот коммент: предыдущие пропали.

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

Теперь по делу.

с. 291 X.Org X Server 1.20.13 Команда: $:sudo X :0 Отображается просто пустой экран. X-курсор и фон: $:sudo X :0 -retro X не уходит в фоновый режим по Ctrl+Z. Возможно, это проблема настроек моего терминала.

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

Второй момент состоит в том, что sudo здесь не нужно, у X-сервера обычно установлен suid-бит (иначе прямой доступ к видеокарте ему не получить, плюс к тому всякие манипуляции с vty, в общем ему админские права нужны без вариантов). Более того, sudo не нужно вообще никогда, и не только не нужно, но и недопустимо.

Что касается Ctrl-Z, то дурное дело, как мы понимаем, нехитрое, спасибо они хотя бы Ctrl-C не заблокировали. Вообще оно довольно странно, возможность использования Ctrl-Z, как я только что попробовал, восстанавливается флажком -keeptty, без этого сервак, видимо, благополучно уходит в свой собственный сеанс (ну, типа, демонизируется) — вот только кто бы мне сказал, почему при этом Ctrl-C продолжает работать, а Ctrl-Z отваливается. Мистика какая-то.

Сухой остаток тут такой: придётся, увы, описание эксперимента адаптировать под новые реалии. В рукописи я это пометил "к доработке".

c. 359 в текст программы добавить: #include <unistd.h> #include <stdio.h>

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

с. 374 if(pid == -1) { /* ... обработка ошибки ... */} Почему такой же строки нет в примере выше?

Как почему, потому что я ленивый. Но вы правы, в рукописи я это дело поправил. В эррату, извините, не потащу :-)

c. 378 7 строка сверху: "getgroups и geteuid" должно быть "getgroups и getegid" т.к. речь о группах.

Факт. В принципе это уже нашли, но поскольку я полтора года не мог добраться до разгребания багрепортов, вам тут пришлось сделать двойную работу. За это вынужден просить извинений.

с. 379 15 строка сверху: getreuid и getregid не нашёл в man-ах.

Это потому что их там нет. Правильное перечисление выглядит так: setreuid, setregid, setresuid, setresgid, getresuid и getresgid. Что конкретно со мной произошло, когда я писал этот фрагмент, сейчас за давностью лет уже не восстановить.

с. 407 (см. стр. 5.3.2) - д.б. пар. 5.3.2

Ну да, как водится, \ref вместо \pageref

c. 571 ...(количество клиентов заблокированных на мюьтексе barber...) barber - семафор.

Факт.

с. 572 barber в этой ситуации не может получить значение 2.

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

c. 596 "...с вероятностью 90% - писатель flock_ex окажется заблокирован навсегда, поскольку у двух ваших читателей отсутствует переcечение временных промежутков нахождения вне критической секции." По моим подсчётам, вероятность 95%: 1.9 с - время блокировки, 0.1 с - время ожидания. Вероятность второго читателя запуститься в момент ожидания первого - 5%.

Вот тут вы кое-чего не учли. Второму читателю можно запуститься ещё в течение 0.1 с *до* того, как первый уйдёт в ожидание. Так что общая длительность "окна возможностей" составляет для него 0.2 с на каждом цикле.

c. 600 "...то у вас останется два захвата: с позиции 500 длиной 200 и с позиции 600 длиной 700" д.б. "...с позиции 800 длиной 700".

Факт. И во второй раз вынужден извиняться, что заставил вас делать работу, которую кто-то уже сделал.

c. 635 "...longjump копирует свой параметр val в EAX, после чего восстанавливает значения ESP и EIP из параметра val,..." д.б. "...восстанавливаeт значения ESP и EIP из параметра env,...": ESP и EIP хранятся в env.

Факт.

c. 696 Параметры -ansi -pedantic здесь и далее у вас то появляются, то исчезают

Ой да ладно, там в одном месте их нет, в остальных есть. В рукописи добавил их в то место, где не было. В эррату не потащу, не фатально.

c. 700 Cтоит добавить в clean файл с зависимостями deps.mk

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



Спасибо!

Как ни странно, управился за один присест, хотя и ушло почти четыре часа :-)

From Anonymous (unverified) Wed Aug 9 23:35:59 2023 UTC pencil

Возможно, фаткическая ошибка

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

Том 1, параграф 2.9.3 под названием "Типизированные файлы". В конце параграфа написано: "Очень редко встречается ситуация, когда у нас есть права на запись в файл, но нет возможности чтения. В этом случае нужно занести в переменную `filemode` значение `1` и для открытия файла использовать `rewrite`".

На практике же, если присвоить переменной `filemode` значение `1` и попытаться с помощью `rewrite` открыть файл, для которого у нас есть только права на запись, всё равно произойдёт ошибка. Проверял для FPC 3.2.0 и 3.2.2. Вот пример:

asdf@qwerty:~$ mkdir filemode_rewrite_test
asdf@qwerty:~$ cd filemode_rewrite_test/
asdf@qwerty:~/filemode_rewrite_test$ cat > filemode_rewrite_test.pas
program FilemodeRewriteTest;
var
    f: file of byte;
begin
    filemode := 1;
    assign(f, ParamStr(1));
    {$I-}
    rewrite(f);
    if IOResult <> 0 then
    begin
        writeln(ErrOutput, 'Could not open file ''', ParamStr(1), '''');
        halt(1)
    end;
    close(f)
end.
asdf@qwerty:~/filemode_rewrite_test$ echo "ERASE ME" > file.txt
asdf@qwerty:~/filemode_rewrite_test$ chmod 0222 file.txt 
asdf@qwerty:~/filemode_rewrite_test$ fpc filemode_rewrite_test.pas 
Free Pascal Compiler version 3.2.2 [2021/05/16] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling filemode_rewrite_test.pas
Linking filemode_rewrite_test
15 lines compiled, 0.1 sec
asdf@qwerty:~/filemode_rewrite_test$ ./filemode_rewrite_test file.txt 
Could not open file 'file.txt'
asdf@qwerty:~/filemode_rewrite_test$ 

parent From Andrey V. Stolyarov profile Wed Jul 31 12:05:58 2024 UTC pencil

userpic

Re: Возможно, фаткическая ошибка

Да-с, кто бы мог подумать: оказывается, filemode предназначена для использования с reset'ом, а не rewrite'ом. При том что документация на reset начинается с фразы, что оно открывает файл на чтение.

O_TRUNC оно при этом не использует, так что могут остаться охвостья старого содержимого. Но да, rewrite вообще игнорирует filemode.

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

From asb (unverified) Tue Aug 1 18:15:04 2023 UTC pencil

repnz scasb

Том первый, страница 589, абзац после кода содержит несколько неверных утверждений. "Последняя строчка будет циклически сравнивать...и остановиться в двух случаях: если ECX дошел до нуля или если очередное сравнение показало равенство (взведён флаг ZF)." Это не взаимоисключающие случаи - если искомый элемент последний, в ECX будет ноль, а ZF будет установлен. Вы, наверное, исходили из того, что сначала выполняется строковая инструкция, происходит проверка, а затем уменьшение счётчика и увеличение (или уменьшение) указателя. На деле же - наоборот, сначала выполняется инструкция и уменьшается счётчик и манипуляции с указателем, а затем проверка условия. Именно такой псевдокод repnz даёт Дандамуни в своей ассемблерной книге (стр. 366) и он прав, я проверил в gdb. "Если после этого ECX будет равен нулю, то нужного символа в массиве не нашлось." Нет, это всего лишь значит, что мы обработали всю строку, дальше нужно проверить ZF. "Также можно проверить, чему равно значение ячейки по адресу [edi]" Лучше не надо, так как edi будет указывать уже на следующий элемент, и там может быть всё что угодно - в моём тесте этого кода была одна строка в section .data без нулевого терминатора - edi указывал на символ с кодом 28 - File separator ?! Если строк в section .data несколько, edi будет указывать на первый символ следующей строки.

parent From Andrey V. Stolyarov profile Tue Jul 30 11:00:47 2024 UTC pencil

userpic

Re: repnz scasb

Похоже на правду, спасибо.

From Anonymous (unverified) Tue Aug 1 11:50:28 2023 UTC pencil

Любой ли рекурсивный вызов расходует память?

Том I, страница 302. "Если этого не сделать, рекурсия окажется бесконечной; но поскольку каждый рекурсивный вызов расходует память - на хранение адреса возврата, на размещение значений параметров, на локальные переменные - то при уходе программы в бесконечную рекурсию рано или поздно доступная память кончится и произойдёт аварийное завершение программы." Это явно не касается Scheme: (define ever (lambda () (ever))) При вычислении (ever) уйдёт в бесконечную рекурсию, но память не потечёт.

parent From admin profile Tue Aug 1 12:59:04 2023 UTC pencil

userpic

Re: Любой ли рекурсивный вызов расходует память?

В первом томе речь идёт о Паскале. Оптимизация хвостовой (a.k.a. остаточной) рекурсии подробно рассмотрена там, где ей и положено быть — в третьем томе.

parent From Anonymous (unverified) Tue Aug 1 15:46:58 2023 UTC pencil

Re: Re: Любой ли рекурсивный вызов расходует память?

Кажется, в фрагменте идёт речь о рекурсии вообще, понятие вводится впервые; добавляет ли что-то к пониманию сути рекурсии это длинное предложение с деталями реализации? Насколько я понял предисловие, Паскаль в книге нужен в первую очередь для разбора основных концепций программирования. Тем более, легко себе представить Паскаль с оптимизацией хвостов, раз уж она даже в Си от GCC есть.

parent From admin profile Tue Aug 1 16:16:09 2023 UTC pencil

userpic

Re: Re: Re: Любой ли рекурсивный вызов расходует память?

>фрагменте идёт речь о рекурсии вообще

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

добавляет ли что-то к пониманию сути рекурсии это длинное предложение с деталями реализации?

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

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

Паскаль в книге нужен в первую очередь для разбора основных концепций программирования

Как рекурсия, так и её реализация на стековых фреймах, несомненно, относится именно к основным концепциям. В третьей части есть пример построения рекурсии на ассемблере, и нет, это никоим образом не случайность.

Если вы считаете, что учить надо как-то иначе — у вас всегда остаётся опция написать свою книгу.

Тем более, легко себе представить Паскаль с оптимизацией хвостов

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

раз уж она даже в Си от GCC есть.

"Си" от команды долбанутых маньяков, пишущих gcc начиная c версии 4.1, не имеет никакого отношения к Си. К счастью, там ещё остаются, видимо, вменяемые люди, благодаря которым в gcc всё ещё не разрушена обратная совместимость, иначе этот компилятор использовать было бы уже нельзя.

Про сумасшедших маньяков пруф вот, если что:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30475 А дополнительный материал (ЧСХ, от авторов, которые на момент написания статьи были моими студентами) есть ещё вот тут: http://veresov.pro/cmustdie/. Я не так чтобы там со всеми тезисами авторов был согласен, но для общего кругозора материал, на мой взгляд, просто прекрасный.

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

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

UPD: Я неоднократно подчёркивал, что никакие советы и рекомендации по содержанию книги и построению логики изложения не принимаю. Вы злоупотребляете моим временем. Ваш новый комментарий останется в очереди на премод навсегда, и настоятельно прошу избавить меня от вашего присутствия. Не нравится книга — пишите свою. А ещё — ну так, "на подумать" — в языках вроде Scheme, где есть настоящая оптимизация остаточной рекурсии, две или больше функций могут вызывать друг дружку "по кругу", вроде f вызывает g, та вызывает h, а h снова вызывает f. И тоже ничего расходоваться не будет. Причём даже в том случае, если все эти функции находятся в разных единицах трансляции (так что оптимизатор не может их все сразу к чему-то преобразовать). Это к вопросу о том, насколько лично вы с вашим "преобразованием в while" далеки от понимания, что на самом деле собой представляет остаточная рекурсия.

From Alejandro profile Sat Jul 22 18:00:30 2023 UTC pencil

2 том (ДМК), с. 370

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

parent From Andrey V. Stolyarov profile Wed Jul 31 10:57:09 2024 UTC pencil

userpic

Re: 2 том (ДМК), с. 370

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

From evanation (unverified) Mon Jul 17 12:11:14 2023 UTC pencil

echo *

Стр. 98
команда "echo *" не напечатает список файлов

parent From admin profile Mon Jul 17 12:16:30 2023 UTC pencil

userpic

Да неужели, бл$

crocodil@trex:~$ mkdir test
crocodil@trex:~$ cd test
crocodil@trex:~/test$ touch alpha beta gamma delta
crocodil@trex:~/test$ ls
alpha  beta  delta  gamma
crocodil@trex:~/test$ echo *
alpha beta delta gamma
crocodil@trex:~/test$ 

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

parent From evanation (unverified) Mon Jul 17 12:28:00 2023 UTC pencil

Re: Да неужели, бл$

Да, поторопился. Проверял эту команду в директории со скрытыми файлами - в этом случае echo выводит * вместо файлов

parent From admin profile Mon Jul 17 12:51:35 2023 UTC pencil

parent From evanation (unverified) Mon Jul 17 12:22:37 2023 UTC pencil

Re: echo *

А нет, печатает, но только не скрытые :) Если в директории только скрытые файлы, то echo напечатает *

parent From admin profile Mon Jul 17 12:47:55 2023 UTC pencil

userpic

Re: Re: echo *

Скрытые файлы в "звёздочку" не входят; точнее, если говорить строго, имена скрытых файлов не включаются в список слов, подставляемых вместо звёздочки, если только сама звёздочка не входит составной частью в слово, начинающееся с точки. Эффект легко демонстрируется, например, так:

crocodil@trex:~$ mkdir empty
crocodil@trex:~$ cd empty/
crocodil@trex:~/empty$ touch .hidden
crocodil@trex:~/empty$ echo *
*
crocodil@trex:~/empty$ echo .*
. .. .hidden
crocodil@trex:~/empty$ 

А если вместо звёдочки нечего подставить, bash оставляет её как есть (кстати, другие оболочки в этом плане ведут себя иначе)

From Anonymous (unverified) Mon Jul 17 05:05:35 2023 UTC pencil

Том 1, стр. 639, абзац 2

Том 1, стр. 639, абзац 2, ошибка во втором слове.

parent From Andrey V. Stolyarov profile Wed Jul 31 21:14:12 2024 UTC pencil

userpic

Re: Том 1, стр. 639, абзац 2

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

From Alejandro profile Thu Jul 13 06:01:58 2023 UTC pencil

Пробелы вокруг бинарных операций

Том 2 (ДМК), с. 329, пример, 5 строка — написано size = ((size-1) / pgs + 1) * pgs;, лучше будет убрать пробелы вокруг операции деления (как то так size = ((size-1)/pgs + 1) * pgs;), чтобы с приоритетами операций случайно не запутаться (и, соответственно, с тем, как тут происходит округление) :-)
Чуть ниже — в 5-ом параметре вызова mmap логичнее использовать значение -1, а не 0 (дескриптор, как-никак)

parent From Andrey V. Stolyarov profile Wed Jul 31 10:53:25 2024 UTC pencil

userpic

Re: Пробелы вокруг бинарных операций

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

parent From Alejandro profile Thu Aug 1 19:26:10 2024 UTC pencil

Re: Re: Пробелы вокруг бинарных операций

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

parent From Andrey V. Stolyarov profile Thu Aug 1 20:12:40 2024 UTC pencil

userpic

Re: Пробелы вокруг бинарных операций

А, да, допёрло, это тут мне прощения просить надо. Оно, конечно, не ошибка, в эррату не потащу, но в рукописи поправил.

From Alejandro profile Sun Jul 9 08:15:56 2023 UTC pencil

(-)

Том 3 (ДМК), с. 99, пример — (1) лишняя точка в комментарии к полю fd, (2) условие (fd != -1) оформлено по разному в методе OpenRO и деструкторе

parent From Andrey V. Stolyarov profile Fri Aug 2 11:51:09 2024 UTC pencil

userpic

Re: (-)

С первым согласен, второе не ошибка, так что поправил в рукописи (и не только это, пример вообще как-то стрёмно был оформлен) без вынесения в эррату.

From Anonymous (unverified) Tue Jun 27 14:42:46 2023 UTC pencil

том_1_стр_100_строка_22

том_1_стр_100_строка_22.

..."!:2 обозначает второе слово" ...

ВИДИМО 3?

parent From Andrey V. Stolyarov profile Thu Aug 1 14:05:54 2024 UTC pencil

userpic

Re: том_1_стр_100_строка_22

Это смотря откуда считать :-) но да, претензия законная, переформулирую этот фрагмент.

From Max (unverified) Tue May 23 07:41:04 2023 UTC pencil

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

2 том, 310 стр, 3 строка снизу
"... к тому же существенно ограничнивает переносимость ..."
Слово ограничивает с отпечаткой

parent From Andrey V. Stolyarov profile Tue Jul 30 20:00:59 2024 UTC pencil

From Арсений (unverified) Thu May 18 17:16:30 2023 UTC pencil

Противоречие?

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

Не только для них - для 3 завершится успешно, если поставить отсечение после "is" (об этом как раз и сказано ниже)

parent From Andrey V. Stolyarov profile Mon Jul 29 20:30:26 2024 UTC pencil

userpic

Re: Противоречие?

Не сразу понял, в чём дело, даже полез проверять, что ten(X) выдаёт именно 1 и 2 во всех трёх вариантах.

Но да, вы правы, ten(3) будет успешным, когда отсечение стоит правее is (хотя ten(X) выдавать тройку не будет). В рукописи поправил, в эррату не выношу, поскольку тут скорее не совсем удачная формулировка, а правильная ситуация подробно расписана абзацем ниже.

Спасибо.

From Alejandro profile Sun May 14 22:23:23 2023 UTC pencil

(-)

2 том, с. 508, 3 абзац, 2-4 строки — к дейтаграммным сокетам даже если они не "соединены" connect'ом можно применять read. Например, эти три вызова эквивалентны друг другу:

    res = read(sd, buf, sizeof(buf));
    res = recv(sd, buf, sizeof(buf), 0);
    res = recvfrom(sd, buf, sizeof(buf), 0, NULL, NULL);

И к слову: send/recv зачастую реализовывается через sendto/recvfrom (если верить strace) :-)

parent From Andrey V. Stolyarov profile Thu Aug 1 11:02:32 2024 UTC pencil

userpic

Re: (-)

Текст про readfds попробую переформулировать, а что касается strace и того, что там через что реализовано — то, например, писать про exit_group, openat и прочее подобное я не собираюсь.

From Max (unverified) Thu May 11 08:27:24 2023 UTC pencil

1 там 540 страница 18 строка снизу

..., а "and eax, 1fh" - от остаток от деления на 32
первое "от" лишнее

parent From Andrey V. Stolyarov profile Wed Jul 31 15:37:05 2024 UTC pencil

userpic

Re: 1 там 540 страница 18 строка снизу

В издании от МАКС Пресс это стр.579, 5 строка снизу, в эррате есть.

From Max (unverified) Sat May 6 05:06:54 2023 UTC pencil

2 том, 292 страница, 5 страница снизу

"Для символических ссылок права обычно игнорируюся ..."
В слове "игнорируюся" пропущена буква

parent From Andrey V. Stolyarov profile Wed Jul 31 15:47:09 2024 UTC pencil

userpic

Re: 2 том, 292 страница, 5 страница снизу

Это том 2, стр. 313, 12 строка сверху. Спасибо.

From Max (unverified) Sat May 6 04:43:01 2023 UTC pencil

2 том 291 страница 11 строка сверху

"... любая программа, способная обработать скрипт, имя которого её передали параметром командной строки."
её заменить на ей

parent From Andrey V. Stolyarov profile Fri Aug 2 15:21:07 2024 UTC pencil

userpic

Re: 2 том 291 страница 11 строка сверху

Факт, спасибо (это 311 страница в издании от МАКС Пресса)

From Alejandro profile Tue Apr 11 07:46:42 2023 UTC pencil

FLTK и свой главный цикл

В продолжение этого обсуждения: судя по всему, вопреки всей логике, лучше использовать (по крайней мере в главном цикле) Fl::wait(0.0);, а не Fl::flush();, т.к. последняя иногда почему-то не хочет корректно работать.

Простынка с примером неработающего Fl::flush. Здесь само окно отображается, но не обновляется.

#include <FL/Fl.H>
#include <FL/x.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>

#include <stdio.h>
#include <string.h>

#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>


class MainWindow : Fl_Window {
    Fl_Box *box;
    char *lb;
public:
    MainWindow();
    virtual ~MainWindow() { delete box; }
    void Show() { show(); ShowTime(); }
    void Timeout() { ShowTime(); }
private:
    void SetLabel(const char *str);
    void ShowTime();
};

MainWindow::MainWindow()
    : Fl_Window(300, 100, "Window title")
    , box(new Fl_Box(0, 0, 300, 100)), lb(0)
{
    box->labelsize(18);
    end();
}

void MainWindow::SetLabel(const char *str)
{
    if(lb)
        delete[] lb;
    lb = new char[strlen(str) + 1];
    strcpy(lb, str);
    box->label(lb);
    Fl::flush();
}

void MainWindow::ShowTime()
{
    time_t t = time(0) + 1;
    SetLabel(asctime(localtime(&t)));
}


int x11_connect()
{
    Display *disp = XOpenDisplay(0);
    if(!disp)
        return -1;
    int fd = ConnectionNumber(disp);
    fl_open_display(disp);
    return fd;
}


int main()
{
    int fd = x11_connect();
    if(fd == -1) {
        fprintf(stderr, "Cannot open display, goodbye...\n");
        return 1;
    }

    MainWindow *win = new MainWindow;
    win->Show();
    for(;;) {
        fd_set readfds;
        FD_ZERO(&readfds);
        FD_SET(fd, &readfds);

        struct timeval tv;
        gettimeofday(&tv, 0);
        tv.tv_sec = 0;
        if(tv.tv_usec > 0)
            tv.tv_usec = 1000*1000 - tv.tv_usec;

        int res = select(fd + 1, &readfds, 0, 0, &tv);
        if(res == -1) {
            perror("select");
            return 2;
        }

        if(res == 0) {
            win->Timeout();
            continue;
        }
        if(FD_ISSET(fd, &readfds)) {
#ifndef USE_FLUSH
            Fl::wait(0.0);
#else
            Fl::flush();    // doesn't work :(
#endif
        }
    }
    return 0;
}

From Alejandro profile Tue Apr 11 06:55:22 2023 UTC pencil

3 том (ДМК)

144 — методы operator* и operator-> помечены как константные, но возвращают неконстантные ссылку и указатель соответственно
177, 5 строка сверху — "их обычно задают числами с плавающей точкой", если честно, даже представить не могу, кто бы на такое решился :-) обычно координаты хранят в интах, а обсчитывают геометрию float'ами (даже не double'ами)
178, 5 строка снизу — "нарисовать в новом месте", лучше "нарисовать на новом месте", рисуем ведь на экране :-)
192, описание класса A — разный уровень отступа у комментов + коммент на первой строчке лучше убрать :)
215, класс MultiMatrix — параметр шаблона T init_val, по видимому, бесполезный, его можно и через конструктор передать (тем более, что само значение хранится в поле объекта)

parent From Andrey V. Stolyarov profile Wed Jul 31 20:46:44 2024 UTC pencil

userpic

Re: 3 том (ДМК)

> помечены как константные, но возвращают неконстантные

и чО? они там значение из поля p возвращают, т.е. позволяют менять то, на что указывает это p, а не само p (которое часть объекта). Разница примерно как между константным указателем и указателем на константу.

> даже представить не могу

Я рад. Менять не буду.

> лучше "нарисовать на новом месте"

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

> разный уровень отступа у комментов + коммент на первой строчке лучше убрать

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

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

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

From Anonymous (unverified) Sun Apr 9 09:43:59 2023 UTC pencil

Поломанный OCR

При попытке скопировать текст из книги, он превращается в подобную белиберду:
5\p aQR_cl b cQ[Y]Y RYc_Sl]Y bca_[Q]Y Yb`_\mXdocbp b`VgYQ\m6
^lV [_]Q^Ul `_RYc_Slf _`VaQgYZ7
(фрагмент из 3.12.2, "Для работы с такими битовыми строками используются специальные команды побитовых операций.")
Проверено во втором издании первой части и задачнике, скорее всего так же в остальных.

parent From admin profile Sun Apr 9 16:03:23 2023 UTC pencil

userpic

Да неужели?

А я-то и не в курсе, ага. Идите читайте FAQ, там об этом написано.

From Горностай (unverified) Thu Mar 30 18:24:33 2023 UTC pencil

Том 2, стр. 703

В ссылке 13 стоит протокол httpt

parent From Andrey V. Stolyarov profile Wed Jul 31 16:26:34 2024 UTC pencil

userpic

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

Есть такое, спасибо

From Alejandro profile Tue Mar 28 00:09:28 2023 UTC pencil

Пример из $10.10

1). Метод EventSelector::Run — в цикле, в котором проходит подготовка к вызову select, проверка элемента массива на нулевой указатель выглядит так:

    if(fd_array[i]) { /* ... */ }

а при обработке событий так:

    if(!fd_array[i])
        continue;
    /* ... */

Наверно, лучше сделать единообразно.

2). Бесполезная проверка if(res > 0)

3). Ещё в примере есть баг, из-за которого сообщение пересылается всем участникам чата вместе с отправителем (заметил при попытке заменить в исходниках select на poll).

parent From Andrey V. Stolyarov profile Fri Aug 2 18:23:13 2024 UTC pencil

userpic

Re: Пример из $10.10

> Наверно, лучше сделать единообразно.

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

> 2). Бесполезная проверка if(res > 0)

Если её убрать, придётся там написать ВООООООТ такой коммент, что, мол, если мы досюда дошли, то res никак не может быть ни нулём, ни отрицательным. А потом если взбредёт в голову задействовать таймауты, то придётся этот коммент убирать и возвращать if. Ну то есть код станет явно менее понятным и более хрупким, а вот чего мы при этом добьёмся положительного — не вполне понятно.

> Ещё в примере есть баг, из-за которого сообщение пересылается всем участникам чата вместе с отправителем

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

From Alejandro profile Sun Mar 26 23:33:05 2023 UTC pencil

(-)

2 том (ДМК)
400, 3 строка снизу --- "fork-exit" вместо "fork/exit" (как в других местах)

3 том (ДМК)
231, последний абзац --- "но в нём нет элемента с нужным номером", по видимому, имелось ввиду "не хватает места под элемент с нужным номером"
277, функция set_buttons_count --- лучше модификатор %s взять в скобки :-)

parent From Andrey V. Stolyarov profile Fri Aug 2 16:52:31 2024 UTC pencil

userpic

Re: (-)

> "fork-exit" вместо "fork/exit" (как в других местах)

"Других мест" не нашёл. Не вижу достаточных оснований что-то тут исправлять.

> по видимому, имелось ввиду "не хватает места под элемент с нужным номером"

В массиве вообще нет никакого "места", есть только элементы.

> лучше модификатор %s взять в скобки

Может, и лучше, а может, и нет.

From ssr (unverified) Sat Mar 25 19:32:37 2023 UTC pencil

Том 1, 1.2.5

Том 1, стр. 92: опечатка в примере работы с командой cd.

Приглашение интерпретатора командной строки для команды "lizzue@host:/$ cd /" должно быть "lizzue@host:/usr/include$ cd /".

parent From Andrey V. Stolyarov profile Wed Jul 31 16:13:23 2024 UTC pencil

userpic

Re: Том 1, 1.2.5

Вот это вы поймали! Круто, спасибо.

From fluorine profile Sat Mar 18 03:59:26 2023 UTC pencil

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

Том 2, стр 249, 2 абзац
> delay предоставляется модулем crt
napms
The napms routine is used to sleep for ms milliseconds.

parent From admin profile Sat Mar 18 09:56:28 2023 UTC pencil

userpic

И что?

Free Pascal поддерживает прорву всего такого, что в книгу не вошло.

parent From fluorine profile Sun Mar 19 08:48:49 2023 UTC pencil

Вы походу меня не поняли

В книге написано было, что в ncurses нет альтернативы delay() из crt, а оно есть https://linux.die.net/man/3/napms

parent From admin profile Sun Mar 19 12:43:59 2023 UTC pencil

userpic

Ага, теперь понятнее

Даже интересно, нахрена оно там и какое отношение имеет к управлению терминалом. Ладно, покопаю в этом направлении.

UPD (29.07.2024): Похоже, оно там не просто так, поскольку оно не просто спит, оно во время этого сна реагирует на изменение размеров терминала. Надо будет поэкспериментировать с этим.

From Илья (unverified) Mon Mar 13 17:44:28 2023 UTC pencil

III том, стр. 643, 1-я строка параграфа 12.5.6.

Упущена буква "д" в слове "утверждение".

From Илья (unverified) Mon Mar 13 17:43:44 2023 UTC pencil

III том, стр. 624, 6-я строка.

Вместо "типизицией" должно быть "типизацией".

parent From Andrey V. Stolyarov profile Mon Jul 29 11:14:37 2024 UTC pencil

userpic

Re: III том, стр. 624, 6-я строка.

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

From Илья (unverified) Mon Mar 13 17:42:50 2023 UTC pencil

III том, стр. 483, последняя строка.

Вместо "влю-" должно быть "вклю-".

From Илья (unverified) Mon Mar 13 17:42:12 2023 UTC pencil

III том, стр. 471, 10-я строка.

Вместо "как же" должно быть "так же".

From Илья (unverified) Mon Mar 13 17:41:24 2023 UTC pencil

III том, стр. 449, 6-я строка.

Вместо "на стр." должно быть "в параграфе".

parent From Andrey V. Stolyarov profile Mon Jul 29 14:32:51 2024 UTC pencil

userpic

Re: III том, стр. 449, 6-я строка.

Имелась в виду как раз страница, просто рука дрогнула и в исходнике там оказалась команда \ref вместо \pageref. К сожалению, это не единственное место, где допущена именно такая ошибка.

From Илья (unverified) Mon Mar 13 17:40:14 2023 UTC pencil

III том, стр. 397, 5-я строка.

Вместо "назвается" должно быть "называется".

From Илья (unverified) Mon Mar 13 17:39:22 2023 UTC pencil

III том, стр. 387, 2-я строка

Не понятен смысл текста после слова "ошибки".

parent From Andrey V. Stolyarov profile Mon Jul 29 14:40:35 2024 UTC pencil

userpic

Re: III том, стр. 387, 2-я строка

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

From Илья (unverified) Mon Mar 13 17:37:12 2023 UTC pencil

II том, стр. 639, 2-й абзац, 1-я строка

Вместо "соотвовать" должно быть "соответствовать".

From Илья (unverified) Mon Mar 13 17:36:20 2023 UTC pencil

II том, стр. 600, 2-й абзац, 4-я строка снизу

Вместо "600" должно быть "800", если я правильно понял логику работы захвата.

parent From Andrey V. Stolyarov profile Mon Jul 29 12:19:10 2024 UTC pencil

userpic

Re: II том, стр. 600, 2-й абзац, 4-я строка снизу

Примите моё восхищение :-) Несомненно, должно быть 800, это тупо опечатка, там даже длина правильно указана (700 байт), а с учётом того, что фрагмент кончается на отметке 1500, начинаться он на 600 никак не может. Но углядеть такое — это реально круто.

From Илья (unverified) Mon Mar 13 17:35:01 2023 UTC pencil

II том, стр. 594, 3-я строка сверху

Вместо "другим" должно быть "другими".

From Илья (unverified) Mon Mar 13 17:32:02 2023 UTC pencil

II том, стр. 558, 2-й абзац, 5-я строка

Лишний символ номера.

parent From Andrey V. Stolyarov profile Mon Jul 29 13:04:44 2024 UTC pencil

userpic

Re: II том, стр. 558, 2-й абзац, 5-я строка

Ни фига он не лишний, там же несколько номеров.

From Илья (unverified) Mon Mar 13 17:30:13 2023 UTC pencil

II том, стр. 340, строка после "extern char **environ;"

Вместо "каждый их" должно быть "каждый из".

From Alejandro profile Sat Mar 11 12:07:13 2023 UTC pencil

Тоже не буду подбирать тему :)

1 том (ДМК)
с 369, 3 абзац, 6 строка -- 4096, скорее всего, должен быть обычный шрифт вместо моноширинного

2 том (ДМК)
59 -- "Следует отметить, что void-функция", то же, что и выше :) у void должен тут быть обычный шрифт
глава про сокеты -- в профилях функций параметр, указывающий номер сокета, везде обозначается по разному (s, sd, sockfd), даже у setsockopt/getsockopt
с 468-469, пример -- стоит добавить установку опции SO_REUSEADDR

И ещё: в третьем томе, в главе про TCP-сервер упомянута ваша библиотека Sue. Так вот, я, из интереса, посмотрел её и нашёл там несколько моментов :-) Причём, некоторые из них довольно серьёзные. Стоит ли их отрепортить, или как?

parent From admin profile Sat Mar 11 16:30:43 2023 UTC pencil

userpic

Re: Тоже не буду подбирать тему :)

> (ДМК)

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

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

> SO_REUSEADDR

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

> библиотека Sue.

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

From fluorine (unverified) Fri Mar 10 19:54:56 2023 UTC pencil

Не подобрал тему

# Том 1
стр. 443, предпосл. предложение
= что вызываем solve с параметрами 1, 3, 2, N
+ следует использовать n (не сходится с названием переменной)

стр. 451, середина кода
= for i:=0 to length(str)-idxs+1 do
+ нет отступов в присваивании i:=0

стр. 579, конец 2-го абзаца
= Похоже, что под PF имелось в виду OF

стр. 663, середина кода
= после %rep и %rotate лишние два отступа у push dword %1

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

- стр. 614
= я заметил, что вы не ставите пробелов перед абзацами, которые идут после кода, а в абзаце начинающемся с "Выражение" кажется стоит лишний пробел

parent From admin profile Sat Mar 11 11:55:30 2023 UTC pencil

userpic

Re: не подобрал тему

не сходится с названием переменной

Ну так и не должно же, маленькой n назван параметр процедуры, тогда как здесь большое N (как и в начале той же страницы) обозначает исходное количество дисков, заданное пользователем.

под PF имелось в виду OF

Да нет, вроде как раз PF тут (parity, ну я его в подробностях не рассматриваю, но он же есть, и даже упоминается). Вообще на побитовых операциях бессмысленно рассматривать знаковое переполнение. Ну то есть они OF вообще не трогают, если мне склероз не изменяет.

стр. 663,

Уже есть же в таблице

Остальное внёс, спасибо!

parent From fluorine profile Thu Mar 16 13:48:42 2023 UTC pencil

Пробел

> Том 2, стр 148 /* запоминаем его адрес*/ пробел в конце пропустили, ну и сдвинуть вправо

parent From Andrey V. Stolyarov profile Wed Jul 31 10:46:38 2024 UTC pencil

userpic

Re: Пробел

Ага, спасибо. В эррату не выношу, но в тексте книги поправил.

From Илья (unverified) Thu Feb 24 17:05:00 2022 UTC pencil

Том ІІ, стр. 311, 2-й абзац, 5-я строка снизу

В слове "командной" пропущена буква н.

parent From admin profile Thu Nov 3 17:23:31 2022 UTC pencil

userpic

Факт

Спасибо!

From fluorine profile Tue Feb 22 16:16:00 2022 UTC pencil

userpic

1 том, стр. 490, предпосл. абзац параграфа

... Поскольку к моменту выполнения команды (в данном случае — в данном случае команды с запоминанием возврата) ...

не забыто ли слово адреса (команды с запоминанием адреса возврата)?

parent From admin profile Thu Nov 3 17:18:09 2022 UTC pencil

userpic

Еле нашёл. В

Еле нашёл. В издании от МАКС Пресс это страница 526.

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

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

From Alejandro profile Tue Feb 22 11:01:00 2022 UTC pencil

2 том587, 3 строка

2 том
587, 3 строка перед заключением — точка с запятой вместо просто запятой
606, 4 строка снизу — "... прерывании надлежащим образом сохранена. ..." вместо "... прерывании будет надлежащим образом сохранена. ..."
616, 16 строка снизу — "IBM PC-совместимых", лучше "IBM-PC-совместимых"
616, 11 строка снизу — "DosBox", обычно пишут "DOSBox"
617, 9 строка — Qemu вместо qemu, единообразие

3 том
625, 5 строка снизу — судя по всему, оборот "к сожалению" лишний
636, 2 абзац, 4 строка — запятая после "как минимум"
636, 3 абзац, 2 строка — "в форме, отличной от исходного текста", по смыслу должно быть "в форме исходного текста"

parent From admin profile Thu Nov 3 17:05:31 2022 UTC pencil

userpic

> 587, 3 строка

> 587, 3 строка перед заключением — точка с запятой вместо просто запятой

фигушки :-)

> 606, 4 строка снизу — "... прерывании надлежащим образом сохранена. ..." вместо "... прерывании будет надлежащим образом сохранена. ..."

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

> 625, 5 строка снизу — судя по всему, оборот "к сожалению" лишний

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

> 636, 2 абзац, 4 строка — запятая после "как минимум"

Там ещё и Ч.У. (пресловутое "как минимум" употреблено дважды), так что я переделал фразу совсем.

> 636, 3 абзац, 2 строка — "в форме, отличной от исходного текста", по смыслу должно быть "в форме исходного текста"

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

Спасибо!

P.S. Фуууууух, неужели я всё это разгрёб?

From Alejandro profile Tue Feb 22 10:57:00 2022 UTC pencil

2 том440, 13

2 том
440, 13 строка снизу — "Wifi" вместо "WiFi"
469, 15 строка снизу — "koi8r" вместо "koi8-r"
499, 3 абзац, 4 строка — точка с запятой вместо просто запятой
502, вызов bind — нет приведения типа к struct sockaddr*
Тот же пример — название переменной ok; по идее, должно быть res, т.к. ok логичнее использовать с отрицанием, а не сравнением
506, 16 строка снизу — 999999, возможно, лучше использовать математический режим
515, 4 строка и 516, 1 строка примера — разные размеры буфера
576, первый профиль функции — лишняя точка

3 том
290, 2 строка — "справа сверху" вместо "слева сверху"
291, начало 4 абзаца — пропущена запятая перед тире
Там же, на следующей строке — "это что" вместо "это то, что"
292, 8 строка — R и A, шрифт

parent From admin profile Thu Nov 3 16:00:39 2022 UTC pencil

userpic

> 499, 3 абзац, 4

> 499, 3 абзац, 4 строка — точка с запятой вместо просто запятой

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

> 506, 16 строка снизу — 999999, возможно, лучше использовать математический режим

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

> 515, 4 строка и 516, 1 строка примера — разные размеры буфера

Йолки, как вы такое вылавливаете? 8-() Впечатляет.

> "это что" вместо "это то, что"

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

В очередной раз спасибо!

From Alejandro profile Tue Feb 22 10:53:00 2022 UTC pencil

2 том142,

2 том
142, предпоследний абзац параграфа — противоречие, на первой строке написано "Некоторые компиляторы ... позволяют описывать", на предпоследней строке "... и в других компиляторах не поддерживается ..."
161, 1 строка — "0, 1 и 2", шрифт
Также перечисление enum expr_item_types оформлено не в соостветствии с рекомендациями из главы, посвященной оформлению кода
247, 12 строка — putty, шрифт
338, 8 строка — 1, шрифт

3 том
109, функция void f(const char *str) — лучше str заменить на str ? str : "" или что то вроде такого в связи с тем, что ниже приведён пример вызова f(0)
114, сноска — "символ раскрытия области видимости" вместо "раскрытие области видимости"
162, перегрузки инкремента — побочный эффект во 2-ой строке обоих методов
253, вызов accept — лишний пробел после операции приведения типа

parent From admin profile Thu Nov 3 15:07:19 2022 UTC pencil

userpic

> 142,

> 142, предпоследний абзац параграфа — противоречие,

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

> 247, 12 строка — putty, шрифт

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

> лучше str заменить на str ? str : ""

А ведь верно. Как вы такое замечать ухитряетесь, этому тексту 15 лет, я с трудом могу оценить количество читателей, но несколько тысяч точно есть, и вот поди ж ты.

> 114, сноска — "символ раскрытия области видимости" вместо "раскрытие области видимости"

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

> 162, перегрузки инкремента — побочный эффект во 2-ой строке обоих методов

Кстати да, good catch. Просто этот пример написан задолго до того, как я для себя определил, как надо относиться к побочным эффектам.

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

Короче, занёс это в TODO, тут надо думать.

> 253, вызов accept — лишний пробел после операции приведения типа

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

From Flau (unverified) Sun Feb 20 12:15:00 2022 UTC pencil

Задачник, 77 стр., #6.13

textttuknowncommand. Проблема с командой LaTeX'а

parent From admin profile Sun Feb 20 12:40:10 2022 UTC pencil

userpic

На задачник

На задачник есть своя errata — прямо на странице, посвящённой задачнику. И эта ошибка там уже есть.

From Anonymous (unverified) Sat Feb 12 14:48:00 2022 UTC pencil

2 том, 399

2 том, 399 страница, 2 абзац, "...заменяет действоваВшее множество...", пропущена в.

From Anonymous (unverified) Sat Feb 12 14:34:00 2022 UTC pencil

2 том, 397

2 том, 397 страница, 8 строчка снизу, написано "какую нибудь", пропущен дефис.

From Alejandro_ (unverified) Tue Feb 8 03:47:00 2022 UTC pencil

1 том.299 -

1 том.
299 - "контр-интуитивны", лишний дефис
432, рисунок 2.12 - треугольник у стрелки, идущей от first, лучше немного повернуть по часовой стрелке, т.к. линия в треугольник входит неаккуратно
570, 8 строка - для числа 2, по видимому, лучше включить математический режим

2 том.
241 (5 строка) и 548 (сноска) - man, шрифт
556, 2 абзац, 6 строка - "от 0 до 4" набраны обычным шрифтом, ниже - моноширинным
557, 2 абзац, 3 строка - "1", шрифт
559 - дважды неправильно набрана фамилия Таненбаума

3 том.
283, 3 абзац - возможно, числа, используемые в тексте программы (9, 5, 7 и т.д.), должны быть моноширинными
298, 2 абзац, 4 строка снизу - FLTK, шрифт
300, 2 абзац - Ok, Yes и No, возможно, должны быть моноширинными
307 - "в §10.10" вместо "в главе 10.10"

parent From admin profile Thu Nov 3 13:21:23 2022 UTC pencil

userpic

> треугольник у

> треугольник у стрелки,

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

> 241 (5 строка) и 548 (сноска) - man, шрифт

Вот не хочу в конструкции "man-страница" менять шрифт. По той же причине, по которой не хочу этого делать в слове "var-параметр".

> 300, 2 абзац - Ok, Yes и No, возможно, должны быть моноширинными

Ну, э... скорее всё-таки нет. Они ведь не на терминал выводятся, и в нашей программе в явном виде не фигурируют (хотя, конечно, они есть где-то в недрах FLTK). А так -- это же кнопки в графических диалогах, и шрифт, которым их нарисует FLTK, моноширинным не будет.

За всё остальное спасибо, внёс (в основном прямо в рукопись)

From punkochel (unverified) Sun Feb 6 18:57:00 2022 UTC pencil

Опечатка

Издание ДМК. Стр. 532. В описании типов переходов: "Короткие (short) переходы используюся для оптимизации в случае, если точка, куда надлежит «прыгнуть», отстоит от текущей команды не более чем...". Опечатка в слове отстоит, возможно здесь имелось ввиду слово - отстает, а возможно это и не опчатка, но меня она ввела в некоторое недоумение)

parent From admin profile Wed Nov 2 20:07:17 2022 UTC pencil

userpic

Не поверите, в

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

From Strongful (unverified) Fri Feb 4 05:32:00 2022 UTC pencil

Опечатка

Т.1,стр. 45, 9 строчка снизу:"Во-первых, такое решение должно было принято осознанно.

Правильно будет: Такое решение должно быть принято осознанно.

From Alejandro_ (unverified) Thu Feb 3 22:23:00 2022 UTC pencil

I'm here again :)

1 том
702, предпоследний абзац - фрагмент "всех, у кого возникнет такое желание" лучше поставить перед "Хочется, однако, ", т.к. "предупредить" и "что" разделяет слишком длинная фраза
702, последняя строка - у смайлика из-за шрифта третий символ съехал вверх (или первые два вниз) :-)

2 том
с. 502 - для 2-го параметра вызова accept отсутствует операция приведения типа

3 том
с. 157, сноска - вместо unsigned long используется int

Также объект класса SparseArrayInt невозможно индексировать, если он, например, передан в функцию по константной ссылке (а без этой возможности пример выглядит каким-то неполным). Компилятор будет ругаться, например, на такое:

static void print_first(const SparseArrayInt &array)
{
    printf("First element is %d\n", static_cast<int>(array[0]));
}

P.S.: Также в файле sparse.cpp в функции main ветки switch отформатированы в разных стилях, а в ветке default перечислены не все возможные действия.
P.P.S.: а мне ведь просто задачки по 10-ой части порешать захотелось :D

parent From admin profile Wed Nov 2 20:00:49 2022 UTC pencil

userpic

> 702,

> 702, предпоследний абзац

Да, тяжеловата получилась. Спустя 12 лет после того, как эта фраза была впервые составлена (а она присутствовала ещё в самом первом издании книжки по NASM'у -- в виде друх брошюрок в МГТУГА) я, пожалуй, соглашусь, что её стоит переформулировать, там эта вводная конструкция сокращается втрое без потери смысла. Ну, э... в бесконечно далёком 2010 году мои навыки работы с текстом были намного слабее, чем сейчас (после двух изданий трёхтомника).

> у смайлика из-за шрифта

Это и есть, на мой взгляд, канонический вид смайлика, ведь смайлики появились во времена господства текстового режима и моноширинных шрифтов.

> объект класса SparseArrayInt невозможно индексировать

Да, факт -- для полноты картины нужна константная версия для operator[]. Ну, это надолго, внёс себе в список TODO одним из пунктов, там много чего придётся перекраивать, и в тексте, и в последующих примерах.

> в файле sparse.cpp в функции main

экая бяка, thanks, поправил

From fluorine profile Thu Feb 3 11:54:00 2022 UTC pencil

userpic

1 том, 222 стр.,

1 том, 222 стр., сверху

Кроме того, каждое число... , а строки как мы знаем разделены символом перевода строки

Видимо имелось в виду заканчиваются

1 том, стр 171, ближе к концу второго абзаца

На первый "уголок" попадут дроби 1/1 И ЗДЕСЬ ТОЧКА вместо запятой

Вот это (снизу) не помню скидывал или нет, поэтому продублирую

1 том, стр 174 начало

Если, скажем, нарезать ... (сейчас в физике считается, что наменьший

parent From admin profile Wed Nov 2 16:31:31 2022 UTC pencil

userpic

Спасибо :-)

> разделены

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

> ТОЧКА

Good catch! (на мелком шрифте, да в окружении всяких дробей -- её ещё пойди заметь. круто в общем)

> не помню скидывал

Да, это уже было :)

From Alejandro_ (unverified) Wed Feb 2 19:32:00 2022 UTC pencil

1 том.694, 3 абзац,

1 том.
694, 3 абзац, 9 строка - должно быть "от -127 до 128"

2 том.
139, 3 абзац - ", не снабженный словом struct, "; лучше " (без слова struct) ", а то можно подумать, что в Си есть названия структур без слова struct (если забыть про typedef)
429, 3 абзац, 5 строка - 0, шрифт
429, 4 абзац - для неустранимых ошибок используется LOG_CRIT
Там же - LOG_WARN вместо LOG_WARNING

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

И на всякий случай
3 том.
177, начало параграфа, 5 строка - "couldn't open the file", обычный шрифт вместо моноширинного

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

Также есть пара вопросов. В параграфе, посвящённом чисто виртуальным методам, сказано, что синтаксис с "= 0;" неудачен и, в частности, есть проблема в том, что нет возможности использовать другое число (вместо 0). Так вот, какой синтаксис здесь был бы лучше и в чём проблема с числом 0, если 0 можно просто рассматривать как адрес данного метода в таблице виртуальных методов?

parent From admin profile Wed Nov 2 14:05:51 2022 UTC pencil

userpic

> 694, 3 абзац, 9

> 694, 3 абзац, 9 строка - должно быть "от -127 до 128"

Может, я и не понимаю чего, но: порядок у нас тут 8-битный, т.е. от 0 до 255, причём 0 и 255 -- значения особые (0 - для денормализованных, 255 -- для не-чисел), остаются от 1 до 254, если из них вычесть смещение -- а оно в данном случае 127 -- получим от -126 до 127, что и написано в книге.

> 139, 3 абзац - ", не снабженный словом struct, "; лучше " (без слова struct) ", а то можно подумать, что в Си есть названия структур без слова struct

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

> 4 абзац - для неустранимых ошибок используется LOG_CRIT

Цитирую man:

# LOG_CRIT critical conditions
# LOG_ERR error conditions

Готов согласиться, что "неустранимая ошибка" -- это термин не из этой области (это отличие между кодами 4xx и 5xx в http и smtp), но CRIT -- это тоже не "неустранимая ошибка", а "критическая ситуация" (если я только правильно понимаю, что к чему, скажем, неизвестное имя пользователя в пришедшем письме -- это вполне себе неустранимая ошибка, но на критическую не тянет ни анфас, ни в профиль).

В общем, переформулировал в рукописи, убрав слово "неустранимая".

> Так вот, какой синтаксис здесь был бы лучше

Подозреваю, правильно было бы ввести ключевое слово, например, pure или undefined.

> если 0 можно просто рассматривать как адрес данного метода

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

В таком же виде синтаксис просто идиотичен.

From Илья (unverified) Mon Jan 31 17:27:00 2022 UTC pencil

Том І, cтр. 625, 18-я строка сверху

Написано «случе», пропущена буква "а"

parent From admin profile Wed Nov 2 12:57:00 2022 UTC pencil

userpic

Good catch!

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

From Alejandro_ (unverified) Sun Jan 30 10:06:00 2022 UTC pencil

2 том, с. 287 --

2 том, с. 287 -- recvfrom и sendto принимают шесть параметров, но они перечислены в списке вызовов с пятью параметрами; вместо них можно привести getsockopt и setsockopt (или mount и linkat, для того, чтобы имена не были похожи друг на друга, но эти два вызова, в отличие от getsockopt/setsockopt, в книге не встречаются)

parent From admin profile Wed Nov 2 12:21:54 2022 UTC pencil

userpic

Факт

Отдельное спасибо за предложенную замену :-)

From Alejandro_ (unverified) Thu Jan 27 08:38:00 2022 UTC pencil

1 том540 - i386

1 том
540 - i386 набрано моноширинным шрифтом

2 том
251 - 343, шрифт
253, функция check - if сдвинут на следующую строку
259, 3 строка - 27, шрифт
366 - возможные значения полей структуры struct tm набраны обычным шрифтом
384, 1 абзац - сигналы реального времени один раз всё же были упомянуты (389, 4 абзац)
393 - пустой оператор, обозначенный ";" вместо "{}" (для единообразия)
397, 7 строка снизу - "какую нибудь", пропущен дефис
403, предпоследний абзац, 4 строка - "0 и 1", шрифт
407, последнее предложение параграфа - "сложный" и "сложнее" (тавтология)
482, 3 строка снизу - протоколы IPX/SPX не поддерживаются в ядре Linux с 2018 года, в OpenBSD - с 2007

3 том
114 - "точка" без кавычек, "стрелка" с кавычкамим
306 - треугольные скобки у <X11/Xlib.h>

parent From admin profile Wed Nov 2 12:14:59 2022 UTC pencil

userpic

Спасибо в очередной раз

> 251 - 343, шрифт

увы, не понял, что имеется в виду

> 253, функция check - if сдвинут на следующую строку

так и задумано, см. пар. 2.12.5 в первом томе. Стиль, когда "else if" пишут в одну строчку, допустим и даже чаще применяется, но мне он не нравится, потому что при этом первая ветка выглядит не так, как последующие.

> 384, 1 абзац - сигналы реального времени один раз всё же были упомянуты (389, 4 абзац)

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

> 114 - "точка" без кавычек, "стрелка" с кавычкамим

Ну так точка там же действительно точка, а стрелка -- вообще-то никакая не стрелка, а минус и знак больше.

Спасибо ещё раз :-)

From fluorine profile Tue Jan 25 14:24:00 2022 UTC pencil

userpic

конец первого

конец первого абзаца, А ещё здесь любопытно отметить, что 0.00(0110)2 - это не что иное, как одная десятая... , ну а 0.25 - это 1/4, то есть то самое 0.01...

1 том ДМК, стр 151

В во втором издании 162я стр. снизу

parent From admin profile Wed Nov 2 09:28:54 2022 UTC pencil

userpic

И так прочитал,

И так прочитал, и сяк, и в ту сторону, и в эту... Что тут не так-то?

From Илья (unverified) Tue Jan 25 12:55:00 2022 UTC pencil

Том І, стр. 579, 5-я строка снизу

Лишнее "от" после длинного тире.

parent From admin profile Wed Nov 2 09:26:40 2022 UTC pencil

userpic

Спасибо!

Спасибо!

From Alejandro_ (unverified) Tue Jan 18 05:56:00 2022 UTC pencil

2 том161, 1 строка

2 том
161, 1 строка - 0, 1 и 2, шрифт
231, функция int_callback_minmaxcount - конструкция вида a = b = c;
692, 9 строка - "собственный тамошний", одно из слов лишнее
695, 6 строка - main(), скобки

3 том
215 - инстанциация вместо инстанцирование
252, метод Start - нет вызова close(ls) для случаев, если bind или listen вернули -1
255, метод ReadAndIgnore - "ignoring = 0;" вместо "ignoring = false;"
257, начало 11 главы - graphics вместо graphical
575, $12.3.1, 4 и 5 строки - лишние угловые скобки у названий файлов (тем более, что в следующем абзаце скобок нет)
Там же, во втором абзаце - шрифты у числовых значений кода завершения команды

parent From admin profile Wed Nov 2 09:15:46 2022 UTC pencil

userpic

> 692, 9 строка -

> 692, 9 строка - "собственный тамошний", одно из слов лишнее

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

> 215 - инстанциация вместо инстанцирование

пардон, не вижу криминала

За всё остальное большое спасибо, внёс (тем или иным способом)

From Anonymous (unverified) Tue Jan 18 03:30:00 2022 UTC pencil

Том 2, стр 46, конец страницы.

> значение выражения 5.0/2.0 приблизительно равно 2.5

Но ведь в данном случае оно как раз в точности равно 2.5.

Может надо было взять пример, где знаменатель бы делился на 5? Тогда получится конечная десятичная дробь в десятичной записи, но бесконечная в двоичной.

parent From admin profile Mon Oct 31 21:11:00 2022 UTC pencil

userpic

Good catch!

Отличное замечание, спасибо! В рукописи заменил на 32/5, давайте теперь вместе надеяться, что когда-нибудь эта рукопись будет напечатана.

From fluorine profile Sat Jan 15 18:56:00 2022 UTC pencil

userpic

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

1ый абзац

поискать в Интернете статьи про так называемое число Грэма. ... (сейчас в физике считается, что это наменьший

From Alejandro_ (unverified) Sat Jan 15 00:22:00 2022 UTC pencil

2 том.685 &mdash; -o

2 том.
685 — -o <filename>, моноширинный шрифт у угловых скобок
Также, возможно, стоит упомянуть о флаге -Wextra и о том, что не стоит использовать уровнь оптимизации выше 2, т.к. код может получаться даже медленнее

3 том.
292, сноска — создатели FLTK для сборки библиотеки из исходных текстов используют CMake, так что о консерватизме говорить не приходится :(

parent From admin profile Mon Oct 31 21:04:43 2022 UTC pencil

userpic

> моноширинный

> моноширинный шрифт у угловых скобок

Факт, спасибо -- поправил прямо в исходнике

> Также, возможно, стоит упомянуть о флаге -Wextra

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

> не стоит использовать уровнь оптимизации выше 2

поставил себе пометку, подумаю на эту тему

> о консерватизме говорить не приходится :(

Увы, консерватизм не исключает идиотизма.

From Alejandro_ (unverified) Thu Jan 13 03:32:00 2022 UTC pencil

1 том83,

1 том
83, предпоследняя строка — кавычки для "love, ken"
283, 2 строка — HTTP, шрифт
609 — "(0 или 1)", шрифты у чисел

2 том
18, последняя строка — точка перед "Следует"
21, 4 строка — printf, шрифт
22, 2 строка после заголовка — main, шрифт
26, 2-ая сноска — шрифты у типов данных и строковых литералов
30, 2 абзац, 2 строка — 0, шрифт
174 — отступ у пустого комментария :-)
576, 4 строка — waitpid(), скобки

3 том
10 часть — delete[] и delete [], единообразие
130, рис. 10.2 — рисунок стоит обновить, на фоне всех остальных выглядит неаккуратно :(
179, 1 строка — "функция" вместо "[статический] метод", на всякий случай :)
366, 6 строка — 7 и 3, шрифты
378, 2 абзац, 2 последние строки — шрифт у номеров дескрипторов и названий потоков

Во всех томах — MS DOS, единообразие

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

Ёще есть несколько вопросов:
1. 1 том, с. 334, 2 строка — возможно, не стоит предлагать новичкам беззнаковыми типами увлекаться, особенно если эти Id кто-нибуль решится использовать в качестве счётчика цикла? :)
2. 3 том, с. 248 — значение, возвращаемое методом RemoveFd, в чём его всмысл? В исходниках я не заметил чтобы оно использовалось
3. 3 том, с. 252 — проверка результата listen, есть ли в ней смысл, если socket и bind успешно отработали?

parent From admin profile Mon Oct 31 20:43:43 2022 UTC pencil

userpic

Спасибо!

> 1 том
> 83

там слишком много кавычек тогда будет, выделил английский вариант курсивом — это тоже допустимо

> 2 том
> 26, 2-ая сноска

Это 28 страница, и сноска там единственная :-P Но да, сплошной \textit вместо \texttt

> 130, рис. 10.2 — рисунок стоит обновить,

Как вам версия в издании ДМК? (стр.120 и 121) Или тоже не очень? В принципе эти диаграммы можно вообще перерисовать, расположив оба объекта слева, чтобы исключить сплайновые стрелочки, от которых вся неаккуратность. Просто места занимать будет намного больше, вот это меня останавливает.

> 179, 1 строка — "функция" вместо "[статический] метод"

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

> MS DOS

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

1. 1 том, с. 334, 2 строка — возможно, не стоит предлагать новичкам беззнаковыми типами увлекаться, особенно если эти Id кто-нибуль решится использовать в качестве счётчика цикла? :)

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

2. 3 том, с. 248 — значение, возвращаемое методом RemoveFd, в чём его всмысл? В исходниках я не заметил чтобы оно использовалось

Оно и не используется, слишком простенький пример для этого. Но вот вы подумайте, а что делать, если такого дескриптора в списке не нашлось? Падать с треском? Или "молча игнорировать"? По-моему, вернуть false тут самый правильный вариант, а проигнорировать ошибку может и головная программа.

3. 3 том, с. 252 — проверка результата listen, есть ли в ней смысл, если socket и bind успешно отработали?

С этим, пожалуй, даже соглашусь.

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

From Anonymous (unverified) Tue Jan 11 18:54:00 2022 UTC pencil

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

ComplexMultiplication. ComplexRealPart...
Вероятно, после ComplexMultiplication должна быть запятая, а не точка.

From Anonymous (unverified) Mon Jan 10 16:39:00 2022 UTC pencil

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

написано «учениками» вместо «ученикам»

From Scud (unverified) Sat Jan 8 06:56:00 2022 UTC pencil

Том I, стр. 592,

Том I, стр. 592, первая строка:
"стек «растёт вниз», то есть в направлении убывания адресов"
стр. 600, третья строка снизу:
"«вверх» (то есть в сторону уменьшения адресов)"

Я вижу здесь противоречие.

From Scud (unverified) Fri Jan 7 11:18:00 2022 UTC pencil

Том I, стр. 589,

Том I, стр. 589, указание в скобках (кроме команд... ...регистр CX), чуть ниже середины страницы:
А это действительно так? Мне не удалось добиться обозначенного поведения, в моём nasm version 2.13.02 строчка

rep stosw

выполняется ECX раз.

parent From admin profile Thu Feb 17 12:50:02 2022 UTC pencil

userpic

Похоже, вы

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

Хотя, конечно, версия ассемблера тут ни при чём, речь ведь идёт о командах процессора.

From Alejandro_ (unverified) Wed Jan 5 19:51:00 2022 UTC pencil

2 том201-202 —

2 том
201-202 — пробел между do и while
361, 9 строка — моноширинный шрифт у 1 и 31, возможно, лишний
369, 8 строка — похожая ситуация, моноширинный шрифт у 0, возможно, лишний
486, профили функций — избыточное слово int после short
500 — можно упомянуть, что на вызовах fcntl можно сэкономить при помощи опции SOCK_NONBLOCK (при вызове socket), а также при помощи вызова accept4, по последнее есть только в линуксе
525 - 5-ый параметр pselect — указатель на структуру timespec, а не timeval

3 том
252, 254 — конструктору FdHandler зачем-то передаётся true в качестве 2-го параметра
По поводу класса EventSelector — а не правильнее было бы завершать цикл не (или не только) по флажку quit_flag, но и если у нас нет никаких отслеживаемых событий (max_fd == -1, нет таймаутов и т.п.), причём проверку организовывать в начале, а не конце цикла? В частности, если кто-то случайно удалит объект класса ChatServer, то программа навсегда застрянет в главном цикле. Да и главный цикл может не один, а несколько серверов обслуживать, и позволять всем подряд прерывать его как-то странно.

parent From admin profile Fri Feb 18 12:24:00 2022 UTC pencil

userpic

> 201-202 — пробел

> 201-202 — пробел между do и while

то ли не нашёл, то ли не понял, но в общем не вижу дефекта

> 361, 9 строка — моноширинный шрифт у 1 и 31, возможно, лишний

В других аналогичных местах вы сами требовали сделать шрифт моноширинным.

> 369, 8 строка — похожая ситуация,

Здесь, пожалуй, соглашусь, так как рядом имеет место арифметическое выражение, набранное в math mode. В таблицу выносить не буду, поправил прямо в исходнике.

> 486, профили функций — избыточное слово int после short

оно и после unsigned избыточное вообще-то; здесь меня терзают смутные сомнения, стоит ли что-то править

> 500 — можно упомянуть

но можно ведь и не упоминать, правда? учебник/самоучитель — это не справочник, к тому же книжка и так толстая получилась

> 525 - 5-ый параметр pselect

неприятненько, да. Спасибо.

> 252, 254 — конструктору FdHandler зачем-то передаётся true в качестве 2-го параметра

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

> а не правильнее было бы завершать цикл не (или не только)

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

Далее, завершение главного цикла при исчерпании событий логично лишь на первый взгляд. Это можно сделать каким-то ещё флагом (что-то вроде quit_on_empty_event_set), но совершенно точно нельзя делать иначе как по явно выраженной воле программиста. Библиотека должна делать своё дело.

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

parent From Alejandro profile Fri Feb 18 13:47:00 2022 UTC pencil

>> 201-202 — пробел

>> 201-202 — пробел между do и while

Ох, и под чем я был, когда писал это?! Имелись ввиду пробелы между while и круглой скобкой

> вы сами требовали

Я ничего не требовал, кто я такой для этого :D Когда я репорчу подобные штуки, то исхожу из соображения, что то, что встречается в коде (идентификаторы, константы, etc) или печатает программа, набираются моноширинным, а числа, описывающие, например, диапазоны возможных значений (как тут) или "состояние" программы (как тут, 2 том, страница 600), обычным.

>> 486, профили функций

Как ни странно, я это решил отрепортить, вспомнив про этот комментарий (только вместо комитетов man-страницы).

Маленькое уточнение: под "по исчерпанию событий" имеются ввиду в т.ч. и исчерпание источников событий?

parent From admin profile Fri Feb 18 18:43:56 2022 UTC pencil

userpic

> пробелы между

> пробелы между while и круглой скобкой

а! теперь понял :-) самое интересное, что источником этого (судя по EV_QUIT_NOW) оказался пример из главы про ncurses, там тоже этот пробел есть. Вернее, был. Поправил всё прямо в рукописи, формально это не ошибка, хотя, конечно, единообразие нарушается. Заодно поставил в планы втащить в текст параграф про "декоративные пробелы" из "Оформления кода" (ну, не весь, скорее всего, но хотя бы какой-то рассказ про это тут нужен).

> а числа, описывающие, например, диапазоны возможных значений

что-то сложно :-) вообще, надо сказать, проработка соглашений подобного рода — занятие ещё то

> вместо комитетов man-страницы

в man-страницах нынче вообще stdint'овские типы, комитеты дотуда добрались

> под "по исчерпанию событий" имеются ввиду в т.ч. и исчерпание источников событий?

А там иначе быть и не может. Иной вопрос, что, коль скоро в примере нет инфраструктуры для обработки сигналов, то логично было бы, если select вернул -1, вываливаться в любом случае (в примере не так, и это не очень правильно), а тогда уже программист в основной программе может захотеть, чтобы оно при отсутствии событий работало до сигнала (примерно как pause()), а сигналы обрабатывать вне этой функции. Впрочем, даже если оставить как есть, siglongjump из обработчика сигнала тоже никто не отменял. Короче, нет никаких проблем представить себе ситуацию, когда продолжение работы при отсутствии источников событий имеет смысл. Следовательно, нефиг автору главной программы навязывать свои услуги, которых он не просил.

From Scud (unverified) Wed Jan 5 08:55:00 2022 UTC pencil

Том I, стр 584-585, в

Том I, стр 584-585, в комментариях программы:
Название регистра edx должно быть записано как EDX
Я так и не понял, где вы используете строчные, а где - прописные для имён регистров, но конкретно здесь стилистически все одинаково должны быть, наверное?

parent From admin profile Thu Feb 17 11:58:18 2022 UTC pencil

userpic

Да, тут явное

Да, тут явное нарушение единообразия, вы правы.

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

From Олег (unverified) Sun Jan 2 12:30:00 2022 UTC pencil

Том I стр. 316, 17-ая строка сверху

...Ctrl-\(28), Ctrl-](29)., Ctrl-^(30)...
Вероятно, ненужная точка после Ctrl-](29).

From Anonymous (unverified) Thu Dec 30 19:28:00 2021 UTC pencil

Том 2, Стр. 362

Том 2, Стр. 362 строка 22: "отправляется" вместо "отправляет"
Том 2, Стр. 371 строка 10: вызовы на практике не проверял, но может речь о setpriority, вместо getpriority, исходя из описания ошибки, возвращаемой вызовом nice, EPERM
Том 2, Стр. 465 последняя строка: может быть "нового провайдера доступа в Интернет или хостингового оператора", вместо "новый провайдер доступа в Интернет или хостинговый оператор"
Также в некоторых фрагментах одного кода встречаются как комментарии на русском, так и на английском (например, код на стр. 516, стр. 518 и стр. 520) Понятно, что книга --- не код, но так и задумано?

parent From admin profile Thu Feb 17 11:50:01 2022 UTC pencil

userpic

> Том 2, Стр. 362

> Том 2, Стр. 362 строка 22: "отправляется" вместо "отправляет"

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

> Том 2, Стр. 371 строка 10:

Берём man 2 getpriority и читаем следующее (в секции RETURN VALUE):

  Since  getpriority() can legitimately return the value -1, it is neces-
  sary to clear the external variable errno prior to the call, then check
  it afterward to determine if -1 is an error or a legitimate value.  The
  setpriority() call returns 0 if there is no error, or -1 if there is.

Так что речь тут именно про getpriority, ибо с setpriority такой проблемы вообще нет, он только и умеет что 0 или -1 возвращать. А про EPERM тут вообще не упоминается.

> Том 2, Стр. 465 последняя строка: может быть "нового провайдера

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

В общем, спасибо за выявление шероховатости с "зомби" :)

From Scud (unverified) Wed Dec 29 06:34:00 2021 UTC pencil

admin, а Вам

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

parent From admin profile Wed Dec 29 16:14:04 2021 UTC pencil

userpic

Вообще у меня

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

From Scud (unverified) Wed Dec 29 06:27:00 2021 UTC pencil

Том I, стр.472,

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

q:  dispose(a);
    dispose(b)

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

parent From admin profile Wed Dec 29 16:15:04 2021 UTC pencil

userpic

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

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

From fluorine profile Tue Dec 28 20:11:00 2021 UTC pencil

userpic

2 том, стр. 409, конец 2 абзаца

... знакомый нам системный вызов fstat

как оказалось isatty работает через ioctl, а не через fstat

From fluorine profile Mon Dec 27 19:39:00 2021 UTC pencil

userpic

не повезло этому примеру

1 том страница 664, пример кода не соответсвует содержанию copy.asm

В copy.asm:
%if %0 > 6
pop ebp
%if %0 > 6
%error "Can't handle Linux syscalls for more than 6 params"
%endif
p.s.: оказывается вы ещё вместо 7'и перед %error поставили 6

В книге
%if %0 > 6
pop edi
%if %0 > 7
%error "Can't do Linux syscall with 7+ params

Ещё на странице 661, в конце предпоследнего абзаца
сказано, что он откажется работать с более чем шестью параметрами.

Ещё в конце макроса kernel можно было бы, поставить отступ в 2 пробела
перед %error, выглядело бы лучше, но в принципе это не так, чтобы ошибка.

parent From admin profile Thu Feb 17 11:05:18 2022 UTC pencil

userpic

Требуется внесение ясности

Тут явственно требуются пояснения.

Итак, во-первых, и в-главных: больше шести параметров у линуксового системного вызова быть не может, ибо некуда. EAX занят номером вызова, ESP — ну, это ESP, его трогать нельзя вообще совсем (если я правильно понимаю, ядро, работая в контексте процесса, некоторое время ещё продолжает использовать его, процесса, стек, да плюс к тому если на выходе из сисколла будет сигнал отрабатывать — ... Ну в общем нельзя ESP трогать :) ), так что (если речь идёт о i386) остаётся на параметры всего шесть регистров. Но это и не страшно, я знаю всего два сисколла с шестью параметрами (mmap и pselect), а с семью и больше, насколько я понимаю, их нет и никогда не было.

Во-вторых, у макроса kernel на один параметр больше, там ведь ещё и номер вызова. %0, таким образом, на единичку больше, чем количество параметров вызова.

В-третьих, макрос этот, кроме copy.asm, встречается ещё в двух примерах, которые расположены в отдельных директориях: asmcopy/ и asmgreet/, в обоих случаях там макрос вынесен в отдельный файл kernel.inc, он вроде одинаковый в обоих случаях, и там таки уже всё правильно. А вот в copy.asm, да, признаю, поправить забыл. При этом в книжке макрос воспроизводится ровно один раз, в примере copy.asm, а дальше предлагается "набрать такой макрос, как на странице такой-то".

Далее, фраза "Can't handle Linux syscalls for more than 6 params" при переносе в книгу превратилась в "Can't handle Linux syscalls with 7+ params" по одной довольно банальной причине: в той версии, которая в примерах, оно тупо не лезло в ширину полосы вёрстки :-) Но я как-то привык к тому, что "7+" значит "семь и больше". Т.е. смысл при этом остался прежний.

Итого: единственная ошибка тут — в архиве примеров в файле copy.asm, там самый внутренний %if должен быть %0 > 7. Её я только что поправил, спасибо за её выявление. Надо ещё собраться с силами и выложить исправленный архив.

Заодно:

> Ещё в конце макроса kernel можно было бы, поставить отступ в 2 пробела перед %error

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

parent From Alejandro profile Thu Feb 17 12:00:00 2022 UTC pencil

> всего два

> всего два сисколла с шестью параметрами (mmap и pselect)

Ещё есть recvfrom и sendto (это ещё в одном из моих комментов указано) :)

parent From admin profile Thu Feb 17 17:19:14 2022 UTC pencil

userpic

Ну да, факт :) Я

Ну да, факт :) Я почему-то всё время забываю, что там есть ещё параметр flags, и в результате мне подсознательно кажется, что параметров там пять.

parent From fluorine profile Thu Feb 17 15:48:00 2022 UTC pencil

userpic

Ну и простыня. С

Ну и простыня. С примереми, которые в книге дублируются беда конечно.

Ещё не все разгребли? Боюсь, что мои комменты потерялись :)

Ещё
---

1 том, стр. 419 предпоследний абзац середина
. Возвращать наша функция будет значение типа boolean: true, ..., и false, если не удалось

значение, или тип? Может: Возвращать наша функция будет логическое значение true, ..., и false, если не удалось.

1 том, стр. 424 перед следующей темой
Сравните это с кодом, приведённым на стр. 401, ...

А на стр. 401 продолжение объяснения, а не начало. Код в конце 400й страницы. Команда не та?

Не люблю репортить такие ошибки, вроде и не ошибки, но придратся хочется.

parent From admin profile Fri Feb 18 11:17:00 2022 UTC pencil

userpic

Разгрёб ещё

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

> значение типа boolean

Я решительно не вижу, что вам тут не нравится. Функция возвращает значение. Значение имеет тип boolean. Ну вот бывают переменные типа boolean, бывают значения типа boolean, что не так?

> на стр. 401
> Команда не та?

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

parent From fluorine profile Fri Feb 18 10:02:00 2022 UTC pencil

userpic

Ещё---конкретно

Ещё
---
конкретно ДМК
т.1, стр. 475, 2й абзац

Директив uses можно использовать несколько, а можно перечислять

нельзя использовать несколько
proof: https://wiki.freepascal.org/Uses

Every Pascal module – i. e. program, unit, or library – can have at most one uses clause per section. It has to appear right after the section headings. Section headings are interface and implementation in a unit.

parent From admin profile Fri Feb 18 11:07:45 2022 UTC pencil

userpic

Да,

Да, неприятненько. Хорошо, что обратили внимание.

NB: во втором издании это стр.509

parent From fluorine profile Fri Feb 18 10:26:00 2022 UTC pencil

userpic

К предыдущему комментарию

1 т., стр. 479, последний абзац

или вообще в самом начале модуля сразу после его заголовка

Не будет работать:

$ cat unit1.pp
unit unit1;
uses crt;
interface
implementation
end.

$ fpc unit1.pp | tail -n 3
unit1.pp(2,5) Fatal: Syntax error, "INTERFACE" expected but "USES" found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode

parent From admin profile Fri Feb 18 11:32:19 2022 UTC pencil

userpic

Неприятно, но

Неприятно, но факт. Спасибо.

From Miha_s (unverified) Sun Dec 26 12:16:00 2021 UTC pencil

Опечатка Т.2

Опечатка: Т.2 стр. 399 в начале:
после профиля вызова 3 строчка: заменяет "действовашее"

From Alejandro (unverified) Sun Dec 26 09:42:00 2021 UTC pencil

Шрифты и еще кое-что :)

1 том.
299, 4 строка - возможно, жирный закончился раньше чем нужно :)
316 - "Ctrl-] (29)", после скобки ненужная точка + возможно, не те шрифты у кодов в скобках
356, 3 строка снизу - Crtl-*, шрифты
357, 3 строка снизу - "символу с кодом 11", шрифт у 11
358 - возможно, тут лучше символ "+" моноширинным
382 - шрифты у возвращаемых функцией random значений
454 - "с сохранением сортировки", лучше "с сохранением упорядоченности"
491, 1 строка - возможно, лучше "Конечно, эта программа не решает никакой(-ую) задачи(-у)..."

2 том.
60, строки 9 и 15 - возможно, у названий циклов шрифт не тот
110 - функция starmatch, нет пробела после заголовка цикла
Там же, тело switch - возможно, отступы у меток лишние
419, 16-17 строки - лучше "например, в той же сфере промышленной автоматики", т.к. промышленная автоматика уже раннее упоминалась
421 - 13, шрифт, 3 раза
Там же - возможно, koi8-r тоже не тем шрифтом
428 - шрифт у номеров дескрипторов
429 - профиль closelog, void в скобках
464 - моноширинный шрифт у TTL, возможно, лишний
474 - 10 и 13, шрифт
687 - скобки у main

3 том.
244, 7 строка - "этих", лучше "эти"
271 - colnames неудачно снесены на следующую строку
Параграф про фунарг-проблему в нефункциональных языках - gcc почему-то заглавными, в других местах такого, вроде бы, нет
Там же - 2 раза шрифт у var
370 - функции вроде select функциональщики обычно называют filter или что-то вроде; и, кстати, а не правильнее ли было её с использованием левой редукции реализовать?
402, 5 строка - stderr, шрифт

parent From admin profile Wed Feb 16 00:50:00 2022 UTC pencil

userpic

начнём с декабрьской простыни

> 299, 4 строка - возможно, жирный закончился раньше чем нужно :)

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

> 491, 1 строка

ну вот нет, мне не кажется, что так лучше

> 2 том
> 60, строки 9 и 15 - возможно, у названий циклов шрифт не тот

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

> 3 том
> 271 - colnames неудачно снесены на следующую строку

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

> Там же - 2 раза шрифт у var

не нашёл; на указанной странице что-то найти ещё реально, но в таком здоровом параграфе -- в общем ожидаемо не нашлось

> 370 - функции вроде select функциональщики обычно называют filter

мне об этом ничего не известно, ну да и пусть себе называют, мне-то что :)

> а не правильнее ли было её с использованием левой редукции реализовать?

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

В общем, спасибо. Уффф :) Так, глядишь, постепенно все ваши комменты разгребу.

parent From Alejandro_ (unverified) Wed Feb 16 11:02:00 2022 UTC pencil

> строки

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

А нельзя, например, так? Проблемы с отступом тут нет и первые элементы массивов находятся на одномм уровне.

static const int colors[] =
    { FL_RED, FL_GREEN, FL_BLUE };
static const char *const colnames[] =
    { "red", "green", "blue" };

Кстати, по моим наблюдениям, в книге в описаниях нигде "звёздочка" не "прилипает" к слову const, кроме этого примера.

> 2 раза шрифт у var

Mein Gott, сам еле нашёл :) 361 (3 строка снизу) и 362 (2 абзац, 3 строка). Но вообще такое может найтись в любой из 12 частей.

> filter

Зато тот, кто видел слово filter (в таком контексте), быстро сообразит, что оно делает, например, здесь

(define (sort lst)
    (cond
        ((or (null? lst) (null? (cdr lst))) lst)
        (else
            (let ((pivot (car lst)) (rest (cdr lst)))
                (append
                    (sort (filter (lambda (x) (< x pivot)) rest))
                    (list pivot)
                    (sort (filter (lambda (x) (>= x pivot)) rest))
                )
            )
        )
    )
)

И, заодно, не возникнет при случае асссоциаций в выборкой событий и вызовом select :)

parent From admin profile Wed Feb 16 18:40:49 2022 UTC pencil

userpic

> А нельзя,

> А нельзя, например, так?

подумаю

> "звёздочка" не "прилипает" к слову const

звёздочка перед const — вообще крайне редкое явление, сейчас grep'нул, нашёл всего четыре таких места во всей книге. При этом я совершенно не уверен, что поступил правильно при описании прототипов exec*

>> 2 раза шрифт у var

э нет :-) сейчас специально проверил, "термин" (жаргонизм, конечно, не термин) "var-параметр" есть много где и нигде не используется шрифтовое выделение для var. Причина примерно та же, что и выше с do-while: это человеческое название, а не цитата из языка.

> Зато тот, кто видел слово filter

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

Вот в данном конкретном случае вы мне предлагаете переименовать функцию в примере, основываясь на том, что где-то у кого-то якобы существует какая-то именовательная традиция, при этом лично я про неё понятия не имею, никогда с этим не сталкивался и вдобавок у меня самого слово filter тоже нагружено ассоциациями, причём посильнее, чем select. Есть здесь вообще повод для обсуждения? По-моему, нет, только время потеряли.

parent From Alejandro profile Mon Feb 21 15:58:00 2022 UTC pencil

На счёт терминов

Во втором томе: с. 200 и далее — do-while
В третьем томе: параграф про inline-функции — само слово inline-функции :)

parent From admin profile Mon Oct 31 18:39:45 2022 UTC pencil

userpic

Про inline-функции

Про inline-функции согласен, поправил эту главу. С do-while вопрос сложнее, там во многих местах перечисления -- в одном месте if, while, do-while, и если их переделать, но придётся везде, где "оператор if" упоминается, тоже шрифт переделывать. Единообразие, конечно, штука хорошая, но тут мне уже пассионарности не хватит.

From Anonymous (unverified) Sat Dec 25 11:41:00 2021 UTC pencil

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

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

parent From admin profile Wed Jan 5 19:36:00 2022 UTC pencil

userpic

Пожалуй,

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

From fluorine profile Fri Dec 24 11:06:00 2021 UTC pencil

userpic

1 том, стр. 663

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

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

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

From Олег (unverified) Thu Dec 23 20:24:00 2021 UTC pencil

Том I стр. 316

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

parent From admin profile Wed Jan 5 19:30:28 2022 UTC pencil

userpic

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

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

From (unverified) Thu Dec 23 18:11:00 2021 UTC pencil

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

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

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

parent From admin profile Wed Jan 5 19:13:51 2022 UTC pencil

userpic

Ну да,

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

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

From feriman profile Wed Dec 22 09:28:00 2021 UTC pencil

userpic

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

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

From fluorine profile Mon Dec 20 13:49:00 2021 UTC pencil

userpic

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

fig7

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

parent From admin profile Wed Jan 5 19:00:39 2022 UTC pencil

userpic

figure, в принципе

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

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

From fluorine profile Mon Dec 20 12:35:00 2021 UTC pencil

userpic

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

стр. 524

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

стр. 547

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

From feriman profile Sun Dec 19 16:48:00 2021 UTC pencil

userpic

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

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

From feriman profile Sat Dec 18 22:41:00 2021 UTC pencil

userpic

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

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

From feriman profile Sat Dec 18 22:26:00 2021 UTC pencil

userpic

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

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

From feriman profile Sat Dec 18 22:14:00 2021 UTC pencil

userpic

Том 3, стр. 546,

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

From feriman profile Sat Dec 18 21:54:00 2021 UTC pencil

userpic

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

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

From feriman profile Sat Dec 18 21:34:00 2021 UTC pencil

userpic

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

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

From feriman profile Sat Dec 18 21:07:00 2021 UTC pencil

userpic

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

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

From feriman profile Sat Dec 18 15:36:00 2021 UTC pencil

userpic

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

Том 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.

parent From admin profile Sun Jan 2 20:25:07 2022 UTC pencil

userpic

Там этих

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

From feriman profile Sat Dec 18 14:08:00 2021 UTC pencil

userpic

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

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

parent From admin profile Sun Jan 2 20:15:56 2022 UTC pencil

userpic

Согласен.

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

From feriman profile Sat Dec 18 13:27:00 2021 UTC pencil

userpic

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

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

parent From admin profile Mon Oct 31 18:28:46 2022 UTC pencil

userpic

Пожалуй,

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

From scud (unverified) Sat Dec 18 10:58:00 2021 UTC pencil

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

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

parent From admin profile Sat Dec 18 11:10:00 2021 UTC pencil

userpic

Есть такое

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

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

parent From Scud (unverified) Thu Dec 23 09:37:00 2021 UTC pencil

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

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

parent From admin profile Thu Dec 23 17:41:19 2021 UTC pencil

userpic

Пожалуй,

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

From scud (unverified) Sat Dec 18 10:38:00 2021 UTC pencil

Опечатка

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

parent From admin profile Sat Dec 18 10:44:26 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Sat Dec 11 08:53:00 2021 UTC pencil

Том 1 стр. 239

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

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

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

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

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

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

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

parent From admin profile Sat Dec 11 10:02:00 2021 UTC pencil

userpic

Да неужели,

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

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

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

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

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

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

parent From Anonymous (unverified) Fri Dec 17 02:47:00 2021 UTC pencil

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

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

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

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

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

parent From admin profile Fri Dec 17 09:21:12 2021 UTC pencil

userpic

> Во многих

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

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

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

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

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

> Lua

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

parent From Anonymous (unverified) Fri Dec 17 12:44:00 2021 UTC pencil

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

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

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

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

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

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

parent From admin profile Fri Dec 17 16:21:47 2021 UTC pencil

userpic

Ну уж слово end,

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

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

parent From Anonymous (unverified) Sat Dec 18 01:28:00 2021 UTC pencil

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

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

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

parent From admin profile Sat Dec 18 10:09:25 2021 UTC pencil

userpic

В asm и record конец

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

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

parent From Anonymous (unverified) Sat Dec 18 16:58:00 2021 UTC pencil

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

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

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

parent From admin profile Sat Dec 18 18:23:52 2021 UTC pencil

userpic

Да классика

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

if ConditionA then
    if ConditionB then
        OperatorC
  else
      OperatorD

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

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

parent From jedah (unverified) Wed May 17 05:02:15 2023 UTC pencil

Извините за некропостинг, не смог пройти мимо

Справедливости ради, во времена Turbo Pascal существовала такая прекрасная штука, как TopSpeed Modula-2 (она же JPI Modula-2 в девичестве). Так вот, она крыла борландовое поделие попросту в ноль по качеству и возможностям. К сожалению, знали о ней немногие.

Ну и да, совсем недавно Модулу-2 добавили в GCC, так что хоронить её ещё рановато: https://www.linux.org.ru/news/opensource/17078360

parent From admin profile Wed May 17 10:10:25 2023 UTC pencil

userpic

Да в те времена чего только не было

Ключевое тут — вот это ваше знали о ней немногие. Я вот, например, не знал. Признаюсь, я тогда вообще не знал, что есть такой язык Modula2 — ну как не знал, всерьёз программировать (за деньги) я начал в 1991 году, а о существовании Модулы узнал на третьем курсе, это уже осень 1994го.

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

parent From Anonymous (unverified) Fri Oct 6 12:43:32 2023 UTC pencil

Да в те времена чего только не было

Слишком поздно опубликовали перевод книги на русский ;) https://www.libex.ru/img/x/03/31/c2c43.jpg

Но в любом случае 16-разрядные писишные платформы в 1990-х были уже коммерчески обречены.

From Олег (unverified) Fri Dec 10 09:30:00 2021 UTC pencil

Том I стр. 154

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

parent From admin profile Fri Dec 10 17:49:50 2021 UTC pencil

From putilin (unverified) Thu Dec 9 01:42:00 2021 UTC pencil

Замечания

Том 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 - см. выше его
создание

parent From admin profile Fri Dec 10 11:19:20 2021 UTC pencil

userpic

Спасибо

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

From feriman profile Wed Nov 24 14:45:00 2021 UTC pencil

userpic

Том 1, стр. 78 -

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

parent From admin profile Fri Dec 17 10:43:43 2021 UTC pencil

userpic

Это, к

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

parent From feriman profile Sat Dec 18 16:02:00 2021 UTC pencil

userpic

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

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

From feriman profile Wed Nov 24 14:41:00 2021 UTC pencil

userpic

Том 1, стр. 78 -

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

From feriman profile Wed Nov 24 13:34:00 2021 UTC pencil

userpic

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

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

From feriman profile Wed Nov 24 10:51:00 2021 UTC pencil

userpic

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

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

From Alejandro (unverified) Tue Nov 23 05:43:00 2021 UTC pencil

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? Или это ещё хуже?

parent From admin profile Fri Dec 10 10:58:47 2021 UTC pencil

userpic

> 10, 1 строка —

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

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

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

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

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

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

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

> wait_for_expose

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

> Fl::flush

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

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

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

parent From Alejandro (unverified) Fri Dec 10 13:20:00 2021 UTC pencil

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

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

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

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

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

parent From admin profile Fri Dec 10 17:48:12 2021 UTC pencil

userpic

> он не должен

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

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

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

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

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

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

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

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

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

parent From Alejandro (unverified) Fri Dec 10 18:38:00 2021 UTC pencil

Я имел ввиду

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

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

parent From admin profile Fri Dec 10 23:04:09 2021 UTC pencil

userpic

Ага, теперь

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

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

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

From feriman profile Mon Nov 22 12:08:00 2021 UTC pencil

userpic

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

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

parent From admin profile Fri Dec 17 10:31:00 2021 UTC pencil

userpic

Пожалуй,

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

From feriman profile Sun Nov 21 15:59:00 2021 UTC pencil

userpic

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

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

From fluorine profile Sun Nov 21 13:23:00 2021 UTC pencil

userpic

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

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

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

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

parent From admin profile Sun Nov 21 14:37:18 2021 UTC pencil

userpic

Насчёт

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

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

parent From fluorine profile Sun Nov 21 14:42:00 2021 UTC pencil

userpic

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

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

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

parent From fluorine profile Sun Nov 21 15:07:00 2021 UTC pencil

userpic

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

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

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

parent From fluorine profile Sun Nov 21 19:50:00 2021 UTC pencil

userpic

Попробовал,

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

From Bogd_Art (unverified) Sun Nov 21 12:57:00 2021 UTC pencil

Ошибочка

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

parent From admin profile Sun Nov 21 13:18:51 2021 UTC pencil

userpic

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

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

From fluorine profile Sun Nov 14 09:34:00 2021 UTC pencil

userpic

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

parent From admin profile Sun Nov 14 13:16:38 2021 UTC pencil

userpic

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

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

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

parent From fluorine profile Sun Nov 14 13:40:00 2021 UTC pencil

userpic

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

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

Уже не важно, но
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 [...]

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

parent From fluorine profile Wed Dec 29 14:40:00 2021 UTC pencil

userpic

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


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

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

From Anonymous (unverified) Sat Nov 13 19:04:00 2021 UTC pencil

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

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

parent From admin profile Sat Nov 13 19:25:40 2021 UTC pencil

userpic

Любопытно

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

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

From feriman profile Thu Nov 11 22:11:00 2021 UTC pencil

userpic

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

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

From feriman profile Tue Nov 9 19:38:00 2021 UTC pencil

userpic

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

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

From Alejandro (unverified) Sat Nov 6 11:50:00 2021 UTC pencil

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

parent From admin profile Sat Nov 13 13:36:06 2021 UTC pencil

userpic

> var

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

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

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

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

Спасибо!

parent From Alejandro (unverified) Sun Nov 14 06:48:00 2021 UTC pencil

3 том, с. 546

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

parent From admin profile Sun Nov 14 11:39:26 2021 UTC pencil

userpic

Спасибо,

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

parent From fluorine profile Sat Nov 13 14:58:00 2021 UTC pencil

userpic

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

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

parent From admin profile Sat Nov 13 19:18:28 2021 UTC pencil

userpic

Да ладно, кто

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

parent From Alejandro (unverified) Sat Nov 13 20:21:00 2021 UTC pencil

nop с этой целью

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

From sbs1990 (unverified) Thu Nov 4 03:48:00 2021 UTC pencil

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

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

parent From admin profile Fri Nov 12 22:45:12 2021 UTC pencil

userpic

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

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

From feriman profile Tue Nov 2 16:16:00 2021 UTC pencil

userpic

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

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

parent From admin profile Fri Nov 12 22:43:00 2021 UTC pencil

userpic

я здесь имел в

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

From feriman profile Tue Nov 2 14:58:00 2021 UTC pencil

userpic

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

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

From feriman profile Mon Nov 1 13:05:00 2021 UTC pencil

userpic

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

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

parent From admin profile Fri Nov 12 22:54:00 2021 UTC pencil

userpic

Ну так

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

From Anonymous (unverified) Sat Oct 30 07:33:00 2021 UTC pencil

Печатная

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

parent From admin profile Fri Nov 12 22:50:00 2021 UTC pencil

userpic

Да-с,

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

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

From Alejandro (unverified) Thu Oct 28 16:00:00 2021 UTC pencil

Опечатки

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

parent From admin profile Sat Nov 13 11:04:33 2021 UTC pencil

userpic

> с. 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) не было

parent From Alejandro (unverified) Sat Nov 13 11:20:00 2021 UTC pencil

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

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

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

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

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

parent From admin profile Sat Nov 13 11:53:12 2021 UTC pencil

userpic

> "типа char При

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

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

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

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

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

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

From fluorine profile Thu Oct 28 14:41:00 2021 UTC pencil

userpic

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

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

parent From admin profile Sat Nov 13 10:01:26 2021 UTC pencil

userpic

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

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

From feriman profile Tue Oct 26 12:04:00 2021 UTC pencil

userpic

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

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

parent From admin profile Fri Nov 12 19:59:12 2021 UTC pencil

userpic

Ну да, именно

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

parent From feriman profile Sat Nov 13 10:31:00 2021 UTC pencil

userpic

Тут я ошибся.

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

From Anonymous (unverified) Mon Oct 25 17:12:00 2021 UTC pencil

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

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

parent From admin profile Fri Nov 12 19:53:15 2021 UTC pencil

userpic

Факт. Я

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

parent From Anonymous (unverified) Sun Nov 14 08:50:00 2021 UTC pencil

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

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

parent From admin profile Sun Nov 14 16:02:52 2021 UTC pencil

userpic

Спасибо,

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

From feriman profile Mon Oct 25 12:41:00 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Fri Oct 22 10:40:00 2021 UTC pencil

3 том, 664

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

From fluorine profile Mon Oct 18 12:48:00 2021 UTC pencil

userpic

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

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

===

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

parent From admin profile Fri Nov 12 19:37:03 2021 UTC pencil

userpic

ага, и как CVS

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

parent From fluorine profile Sat Nov 13 15:03:00 2021 UTC pencil

userpic

Извиняюсь,

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

From Anonymous (unverified) Sun Oct 17 16:56:00 2021 UTC pencil

Т3 стр. 579, 12

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

From Anonymous (unverified) Sun Oct 17 16:30:00 2021 UTC pencil

2 том, 188

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

parent From admin profile Fri Nov 12 19:23:56 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Wed Oct 13 22:24:00 2021 UTC pencil

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

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

parent From admin profile Fri Nov 12 19:20:06 2021 UTC pencil

userpic

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

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

From feriman profile Sun Oct 10 10:04:00 2021 UTC pencil

userpic

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

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

From feriman profile Sun Oct 10 08:50:00 2021 UTC pencil

userpic

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

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

From feriman profile Thu Oct 7 10:32:00 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Tue Oct 5 10:43:00 2021 UTC pencil

Свои 5 копеек

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

From Alejandro (unverified) Tue Oct 5 09:03:00 2021 UTC pencil

1 том.646 -

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

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

parent From admin profile Fri Nov 12 18:57:05 2021 UTC pencil

userpic

> 646 - В первом

> 646 -

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

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

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

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

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

parent From Alejandro (unverified) Sat Nov 13 03:12:00 2021 UTC pencil

> 683, 3 строка

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

parent From admin profile Sat Nov 13 08:51:37 2021 UTC pencil

userpic

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

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

parent From Alejandro (unverified) Sat Nov 13 11:27:00 2021 UTC pencil

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

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

parent From admin profile Sat Nov 13 12:03:51 2021 UTC pencil

userpic

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

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

parent From Alejandro (unverified) Sat Nov 13 12:50:00 2021 UTC pencil

> слишком

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

parent From admin profile Sat Nov 13 14:21:16 2021 UTC pencil

userpic

Ну вот я не

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

From Alejandro (unverified) Thu Sep 30 20:47:00 2021 UTC pencil

2 том.с. 499, 3

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

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

parent From admin profile Sun Oct 3 12:02:47 2021 UTC pencil

userpic

Спасибо!

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

From Anonymous (unverified) Sat Sep 25 07:57:00 2021 UTC pencil

3 том, 121

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

parent From admin profile Sat Sep 25 16:44:08 2021 UTC pencil

userpic

Ух ты

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

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

From Anonymous (unverified) Fri Sep 24 19:26:00 2021 UTC pencil

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

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

parent From admin profile Sun Oct 3 12:00:50 2021 UTC pencil

userpic

Вы правы, это

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

From Alejandro (unverified) Fri Sep 24 14:09:00 2021 UTC pencil

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 строка - правильно "серверы", а не "сервера", т.к. в слове "сервер" ударение неподвижное. То же самое, например, с драйверами и кластерами.

parent From admin profile Fri Nov 12 18:45:45 2021 UTC pencil

userpic

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

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

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

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

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

> 489 - inet_addr

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

> 686

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

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

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

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

parent From Alejandro (unverified) Sat Nov 13 03:34:00 2021 UTC pencil

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

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

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

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

parent From admin profile Sat Nov 13 08:59:21 2021 UTC pencil

userpic

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

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

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

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

From unch profile Fri Sep 24 10:46:00 2021 UTC pencil

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

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

From Юра (unverified) Thu Sep 23 09:17:00 2021 UTC pencil

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

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

Лютая капча

parent From admin profile Thu Sep 23 19:17:00 2021 UTC pencil

userpic

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

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

From feriman profile Tue Sep 7 19:29:00 2021 UTC pencil

userpic

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

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

From feriman profile Tue Sep 7 11:21:00 2021 UTC pencil

userpic

Опечатка

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

parent From admin profile Fri Sep 24 13:21:25 2021 UTC pencil

userpic

Насколько я

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

From feriman profile Tue Sep 7 11:14:00 2021 UTC pencil

userpic

Опечатки

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

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

parent From admin profile Fri Sep 24 13:16:36 2021 UTC pencil

userpic

Большое

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

From Anonymous (unverified) Sun Aug 29 10:16:00 2021 UTC pencil

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

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

From Tony (unverified) Sun Aug 22 10:43:00 2021 UTC pencil

Том № 2, стр. 521

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

From Xen (unverified) Sat Aug 14 05:45:00 2021 UTC pencil

Том №1 с.368

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

From Anonymous (unverified) Sat Aug 7 12:56:00 2021 UTC pencil

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

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

From Anonymous (unverified) Sat Jul 17 13:31:00 2021 UTC pencil

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

Хотел возмутиться, что у вас во всех файлах комменты на русском в КОИ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 в том же каталоге.

parent From admin profile Tue Aug 3 14:53:00 2021 UTC pencil

userpic

Спасибо!

Спасибо!

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

From Anonymous (unverified) Sat Jul 17 06:05:00 2021 UTC pencil

modulo

Том 1, стр 259

> program modulo;

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

parent From admin profile Fri Sep 24 12:26:33 2021 UTC pencil

userpic

Пожалуй, Вы

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

From Anonymous (unverified) Fri Jul 16 05:33:00 2021 UTC pencil

Биты - байты

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

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

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

From Anonymous (unverified) Thu Jul 15 07:14:00 2021 UTC pencil

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, насколько я понимаю, сделать внешней командой невозможно и в виде отдельного файла её нет.

parent From admin profile Fri Jul 16 18:32:01 2021 UTC pencil

userpic

Вы оказались

Вы оказались правы насчёт 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 нельзя сделать внешней. Про это рассказывается во втором томе.

From Anonymous (unverified) Sun Jul 11 01:51:00 2021 UTC pencil

Страница 81,

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

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

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

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

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

From Flau (unverified) Thu Jul 8 13:24:00 2021 UTC pencil

т.2, с.148

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

From Alejandro (unverified) Wed Jun 30 16:39:00 2021 UTC pencil

Опечатки

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) коды обозначены моноширинным

parent From admin profile Thu Aug 19 12:55:00 2021 UTC pencil

userpic

Спасибо!

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

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

parent From Alejandro (unverified) Thu Aug 26 19:28:00 2021 UTC pencil

Ну тогда ...

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

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

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

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

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

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

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

parent From admin profile Fri Sep 24 12:24:31 2021 UTC pencil

userpic

спасибо!

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

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

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

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

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

parent From Alejandro (unverified) Sun Sep 26 13:49:00 2021 UTC pencil

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

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

parent From admin profile Sun Oct 3 11:15:34 2021 UTC pencil

userpic

спасибо

поправил

From Anonymous (unverified) Tue Jun 15 13:57:00 2021 UTC pencil

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

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

From Alejandro (unverified) Wed Jun 9 14:53:00 2021 UTC pencil

Том 2.с. 555 -

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

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

parent From admin profile Tue Jun 15 17:19:28 2021 UTC pencil

userpic

> с. 586 - нет

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

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

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

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

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

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

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

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

parent From Alejandro (unverified) Tue Jun 15 18:15:00 2021 UTC pencil

Еще кое-что

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

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

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

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

parent From admin profile Tue Jun 15 19:33:51 2021 UTC pencil

userpic

> А в чём

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

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

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

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

From Anonymous (unverified) Wed Jun 9 14:15:00 2021 UTC pencil

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

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

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

From Anonymous (unverified) Wed Jun 9 11:15:00 2021 UTC pencil

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

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

From Anonymus (unverified) Mon Jun 7 11:58:00 2021 UTC pencil

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

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

From Alejandro (unverified) Sat Jun 5 19:48:00 2021 UTC pencil

Опечатки

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

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

parent From admin profile Sun Jun 6 17:27:00 2021 UTC pencil

userpic

"много" - в

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

parent From Alejandro (unverified) Sun Jun 6 18:27:00 2021 UTC pencil

В таблице у

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

parent From admin profile Sun Jun 6 18:49:47 2021 UTC pencil

From Anonymous (unverified) Tue Jun 1 11:31:00 2021 UTC pencil

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

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

(Массивы - Том 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] ?

parent From admin profile Tue Jun 1 14:40:14 2021 UTC pencil

userpic

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

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

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

parent From Anonymous (unverified) Tue Jun 1 15:15:00 2021 UTC pencil

"Теперь real100 —

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

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

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

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

parent From admin profile Tue Jun 1 15:57:03 2021 UTC pencil

userpic

> В моем

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

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

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

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

From Александр (unverified) Fri May 28 09:06:00 2021 UTC pencil

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

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

parent From admin profile Fri May 28 14:27:56 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Thu May 27 13:45:00 2021 UTC pencil

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

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

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

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

From Anonymous (unverified) Thu May 27 13:15:00 2021 UTC pencil

Том 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);
}
}

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

parent From admin profile Thu May 27 15:13:26 2021 UTC pencil

userpic

А ничего, что

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

parent From Anonymous (unverified) Thu May 27 18:23:00 2021 UTC pencil

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

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

parent From admin profile Thu May 27 19:21:20 2021 UTC pencil

userpic

Да нет,

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

From Anonymous (unverified) Thu May 27 07:31:00 2021 UTC pencil

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

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

From Anonymous (unverified) Wed May 26 09:23:00 2021 UTC pencil

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

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

parent From admin profile Thu May 27 15:18:32 2021 UTC pencil

userpic

Устройте

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

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

From Anonymous (unverified) Wed May 26 07:56:00 2021 UTC pencil

Том 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, как указано в книге

From Alejandro (unverified) Tue May 25 18:17:00 2021 UTC pencil

Опечатки

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 абзац, последняя строка - трансляции или транслятора?

parent From admin profile Thu May 27 16:26:15 2021 UTC pencil

userpic

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо!

parent From Alejandro (unverified) Thu May 27 18:37:00 2021 UTC pencil

> MacOS XЯ на это

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

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

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

parent From admin profile Sat May 29 22:54:24 2021 UTC pencil

userpic

Про Mac OS &mdash;

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

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

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

From Александр (unverified) Sat May 22 10:56:00 2021 UTC pencil

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

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

From Алексей Олегович (unverified) Thu May 20 22:17:00 2021 UTC pencil

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

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

From Алексей Олегович (unverified) Thu May 20 05:49:00 2021 UTC pencil

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

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

From Алексей Олегович (unverified) Wed May 19 01:44:00 2021 UTC pencil

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

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

parent From admin profile Wed May 19 08:24:20 2021 UTC pencil

userpic

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

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

parent From Алексей Олегович (unverified) Mon May 24 15:37:00 2021 UTC pencil

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

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

From Алексей Олегович (unverified) Fri May 14 00:17:00 2021 UTC pencil

опечатка?

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

parent From admin profile Fri May 14 07:03:36 2021 UTC pencil

userpic

Пожалуй, Вы

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

From Anonymous (unverified) Thu May 6 23:50:00 2021 UTC pencil

Т. 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);
}

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

parent From admin profile Wed May 12 07:45:09 2021 UTC pencil

userpic

Это где,

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

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

From Gleb (unverified) Sat May 1 17:04:00 2021 UTC pencil

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

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

parent From admin profile Tue May 11 14:51:44 2021 UTC pencil

userpic

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

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

From __greye (unverified) Thu Apr 29 19:31:00 2021 UTC pencil

v2:242 4.10.3

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

From Tony (unverified) Thu Apr 29 12:51:00 2021 UTC pencil

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

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

From Vladimir_M profile Sun Apr 25 06:53:00 2021 UTC pencil

Том 2, стр. 397,

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

From Anonymous (unverified) Mon Apr 19 09:31:00 2021 UTC pencil

Макросы nasm

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

parent From admin profile Fri Apr 23 16:44:24 2021 UTC pencil

userpic

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

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

From newx profile Sat Apr 17 23:26:00 2021 UTC pencil

userpic

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

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

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

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

From Anonymous (unverified) Sat Apr 17 11:34:00 2021 UTC pencil

Том 1

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

From Alejandro (unverified) Thu Apr 15 16:12:00 2021 UTC pencil

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

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

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

parent From admin profile Sun Apr 18 11:57:33 2021 UTC pencil

userpic

?

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

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

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

parent From Alejandro (unverified) Tue Apr 20 16:26:00 2021 UTC pencil

С nil и (exit)

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

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

parent From admin profile Fri Apr 23 18:41:53 2021 UTC pencil

userpic

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

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

ммм где?

parent From Alejandro (unverified) Sat Apr 24 11:24:00 2021 UTC pencil

"сначала не

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

parent From admin profile Sat Apr 24 11:37:29 2021 UTC pencil

userpic

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

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

parent From Elentin_ (unverified) Fri Nov 12 19:24:00 2021 UTC pencil

"сначала не

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

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

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

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

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

From Sergius (unverified) Wed Apr 14 16:38:00 2021 UTC pencil

Опечатка

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

parent From Anonymous (unverified) Thu Apr 15 19:42:00 2021 UTC pencil

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

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

parent From admin profile Sun Apr 18 09:46:46 2021 UTC pencil

userpic

Спасибо,

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

From Trollkarl (unverified) Tue Apr 13 17:10:00 2021 UTC pencil

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

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

parent From admin profile Thu Apr 15 08:45:54 2021 UTC pencil

userpic

Спасибо,

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

From Anonymous (unverified) Tue Apr 13 12:54:00 2021 UTC pencil

Опечатка т.1

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

parent From admin profile Tue Apr 13 14:05:26 2021 UTC pencil

userpic

И что? :-)

И что? :-)

parent From Anonymous (unverified) Tue Apr 13 18:21:00 2021 UTC pencil

Эта тема уже

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

From Anonymous (unverified) Tue Apr 13 11:38:00 2021 UTC pencil

Опечатка т.1

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

From Parthen profile Sun Apr 11 11:22:00 2021 UTC pencil

userpic

Баг или фича?

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

parent From admin profile Mon Apr 12 21:28:19 2021 UTC pencil

userpic

По делу,

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

From Anonymous (unverified) Thu Apr 8 09:34:00 2021 UTC pencil

3 том, с. 391, 6

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

From Trollkarl (unverified) Tue Apr 6 15:53:00 2021 UTC pencil

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

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

From Alejandro (unverified) Thu Apr 1 19:33:00 2021 UTC pencil

Опечатки

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 шрифт

parent From admin profile Thu Apr 8 12:24:55 2021 UTC pencil

userpic

Спасибо!

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

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

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

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

> 83 - m+k шрифт

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

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

не нашёл

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

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

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

parent From Alejandro (unverified) Sat Apr 10 15:19:00 2021 UTC pencil

Спасибо за

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

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

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

parent From admin profile Sat Apr 10 16:07:23 2021 UTC pencil

userpic

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

> [Ch] = ","

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

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

?- 

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

set_prolog_flag(double_quotes, codes)

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

From Vsevolod (unverified) Mon Mar 29 19:07:00 2021 UTC pencil

Том 1, стр

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

parent From admin profile Wed Mar 31 07:45:23 2021 UTC pencil

userpic

Спасибо.

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

From Anonymous (unverified) Thu Mar 25 13:14:00 2021 UTC pencil

Опечатка

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

From Anonymous (unverified) Thu Mar 25 11:32:00 2021 UTC pencil

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

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

From Anonymous (unverified) Wed Mar 24 14:47:00 2021 UTC pencil

Первый том,

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

From Trollkarl (unverified) Tue Mar 23 12:01:00 2021 UTC pencil

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

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

From AniMath (unverified) Mon Mar 22 13:07:00 2021 UTC pencil

1 том, 200

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

parent From admin profile Tue Mar 23 17:47:57 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Mon Mar 22 12:55:00 2021 UTC pencil

199 страница, 1

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

From Anonymous (unverified) Sun Mar 21 01:37:00 2021 UTC pencil

Том 3, стр. 243:

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

parent From admin profile Sun Mar 21 10:42:43 2021 UTC pencil

userpic

Спасибо

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

он и есть

From Anonymous (unverified) Fri Mar 19 19:51:00 2021 UTC pencil

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

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

parent From admin profile Sat Mar 20 07:44:00 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Thu Mar 18 19:34:00 2021 UTC pencil

Не знаю,

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

parent From admin profile Thu Mar 18 21:25:41 2021 UTC pencil

userpic

А зачем? Чтоб

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

parent From Anonymous (unverified) Fri Mar 19 06:11:00 2021 UTC pencil

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

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

parent From admin profile Fri Mar 19 19:18:59 2021 UTC pencil

userpic

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

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

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

parent From Anonymous (unverified) Fri Mar 19 19:38:00 2021 UTC pencil

вот прямо

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

From Anonymous (unverified) Thu Mar 18 06:20:00 2021 UTC pencil

Опечатка

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

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

From DenisTsed (unverified) Sat Mar 13 19:50:00 2021 UTC pencil

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

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

parent From admin profile Sun Mar 14 13:36:56 2021 UTC pencil

userpic

И в чём,

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

parent From Anonymous (unverified) Sat Jul 3 05:54:00 2021 UTC pencil

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

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

parent From admin profile Sat Jul 3 09:42:48 2021 UTC pencil

userpic

Здесь (в

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

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

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

From Metronomicon (unverified) Sat Mar 13 05:00:00 2021 UTC pencil

Том 1, стр. 322

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

parent From admin profile Sat Mar 13 07:56:16 2021 UTC pencil

userpic

Спасибо

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

From Tony (unverified) Thu Mar 11 18:41:00 2021 UTC pencil

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

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

From Montague (unverified) Thu Mar 11 15:35:00 2021 UTC pencil

Опечатка

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

parent From admin profile Fri Mar 12 09:07:52 2021 UTC pencil

userpic

Факт.

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

From Trollkarl (unverified) Thu Mar 11 13:30:00 2021 UTC pencil

Том 1, с. 286,

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

From Alejandro (unverified) Wed Mar 10 15:01:00 2021 UTC pencil

Опечатки

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

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

parent From admin profile Fri Mar 12 09:02:23 2021 UTC pencil

userpic

Спасибо!

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

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

Спасибо!

parent From Alejandro (unverified) Mon Mar 15 15:35:00 2021 UTC pencil

В книге всё в

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

From Skonikol profile Wed Mar 10 06:54:00 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Tue Mar 9 17:39:00 2021 UTC pencil

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

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

parent From admin profile Tue Mar 9 17:47:00 2021 UTC pencil

userpic

В упор не вижу

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

parent From Parthen profile Mon Mar 29 15:38:00 2021 UTC pencil

userpic

Наверное,

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

parent From admin profile Mon Mar 29 18:56:15 2021 UTC pencil

userpic

Проблема как

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

From Anonymous (unverified) Tue Mar 9 12:36:00 2021 UTC pencil

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

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

parent From anon (unverified) Tue Jan 2 11:06:10 2024 UTC pencil

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

Разве не /home? Мы ведь находимся в пользовательском каталоге, значит на уровень выше находится /home, а не /home/lizzie.

parent From Andrey V. Stolyarov profile Fri Aug 2 10:14:16 2024 UTC pencil

userpic

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

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

Спасибо.

From Anonymous (unverified) Tue Mar 9 11:19:00 2021 UTC pencil

Опечатка?

Том 1, стр. 613

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

parent From admin profile Tue Mar 9 17:36:33 2021 UTC pencil

userpic

Эх :(

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

From Tony (unverified) Sun Mar 7 13:14:00 2021 UTC pencil

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

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

From Anonymous (unverified) Sat Mar 6 15:31:00 2021 UTC pencil

Первый том,

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

From Anonymous (unverified) Sat Mar 6 13:53:00 2021 UTC pencil

Опечатка т.2

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

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

можно?

From Skonikol profile Sat Mar 6 13:23:00 2021 UTC pencil

userpic

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

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

From Anonymous (unverified) Thu Mar 4 18:53:00 2021 UTC pencil

Опечатка

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

From Anonymous (unverified) Thu Mar 4 12:03:00 2021 UTC pencil

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

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

From Anonymous (unverified) Wed Mar 3 20:27:00 2021 UTC pencil

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

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

parent From admin profile Wed Mar 3 21:21:56 2021 UTC pencil

userpic

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

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


pencil

пояснение


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

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

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

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