LINUX.ORG.RU

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

 , , ,

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

5

6

Тихо и незаметно 30 апреля 2026 года вышло издание 2.92, которое наконец включает в себя читаемый текстовый слой.

Исправлены опечатки и ошибки, обнаруженные в предыдущих изданиях, в частности 2.91 (где введена кликабельная навигация) и 2.9 (первое чисто электронное издание).

Книга предназначена для самообучения основам программирования и в отличии от многих других изданий предполагает фундаментальный подход — вначале основы дискретной математики и использования GNU/Linux или BSD с командной строкой, затем паскаль, потом ассемблер и только потом Си, системное программирование и альтернативные парадигмы (функциональное, логическое и так далее).

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

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

>>> Ссылка на страницу издания

>>> Альтернативные способы скачивания

>>> Новость на сайте автора

★★★★★

Проверено: dataman ()
Последнее исправление: CrX (всего исправлений: 10)
Ответ на: комментарий от liksys

Потому что в реальном мире writeln будет иметь еще и возвращаемое значение.

Не будет. Посмотри спецификацию паскаля.

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

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

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

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

Если у какой-нибудь writeln(n); вывод значения n на stdout — это единственный, причём ожидаемый эффект.

В некоторых реализациях Паскаля – не единственный. ( и stdout есть не везде )

Какие Вы видите побочные (или непобочные) эффекты выражения nine + ( six + seven ), функций и процедур в следующей бессмысленной «программе»?

И каким в целом может быть наблюдаемый эффект выполнения «программы»?

program a(output);
label 666;
function six: real;
begin
	six := 6;
	writeln( 'six')
end;

function seven: real;
begin
	seven := 7;
	writeln ('seven')
end;

function nine: real;
begin
	goto 666;
	nine := 9;
	writeln ('unreachable')
end;

begin
	writeln( nine + ( six + seven ): 3 : 0 );
666:
end.
vM ★★★
()
Ответ на: комментарий от liksys

Еще раз для особо тупых: определение некорректное. Оспаривать определения можно и нужно, потому что это суть постулат. Я уже много раз говорил: прочитай рассказ Азимова «Логика»: здорово прочищает мозги от заблуждений, типа твоего.

Вообще-то определение у Столярова схоже с обычным. У него (2.92 v1. стр.98):

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

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

В английской вики https://en.wikipedia.org/wiki/Side_effect_(computer_science) :

In computer science, an operation or expression is said to have a side effect if it has any observable effect other than its primary effect of reading the value of its arguments and returning a value to the invoker of the operation. Example side effects include modifying a non-local variable, a static local variable or a mutable argument passed by reference; performing I/O; or calling other functions with side-effects.

Правда с очень важным уточнением: any observable effect other than its primary effect Которого у Столярова нет. Но есть слова про контринтуитивность.

Далее сравниваю, написанное на вики и у Столярова. На вики - про значимость побочных эффектов в архитектуре и анализе языков программирования и их парадигм (функциональная, императивная). И у меня такое ощущение, что в целом Столяров примерно тоже самое имел ввиду, но выразился очень косноязычно и невнятно, сделав упор на разницу между procedure и function в Паскале, что и породило спор.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от r--r--r--

Я могу увидеть какой-то реальный пример?

Было давно и неправда =) Хотел что-то скаченное из интернета скомпилировать под Rust, cargo сразу полез скачивать зависимости. Далее я почитал про cargo vendor, что вроде можно всё упаковать, чтобы не требовался доступ в интернет, но в целом это выглядит сложнее,чем при разработке на C++ и как бы по умолчанию подразумевает наличие интернета во время работы.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

в Паскале goto изнутри процедуры/функции недопустим, будет ошибка компиляции.

В стандартном Си нет goto между функциями.

Но в Паскале все процедуры и функции вложены либо в главный блок программы, либо в блок другой процедуры или функции. И, если это не реализация урезанного подмножества паскаля для микроЭВМ, а Паскаль удовлетворяющий хотя бы неодобряемому самим Андреем Викторовичем ISO 7185, из блока можно выполнить goto ко всем меткам, видимым из этого блока.

https://standardpascal.org/iso7185.html#6.8.1%20General

выполнение процедуры или функции, выполняющей goto «наружу», естественно, прекращается

https://standardpascal.org/iso7185.html#6.8.2.4%20Goto-statements

А результат вычисления функции может быть неопределён.

https://standardpascal.org/iso7185.html#6.7.3%20Function-designators

vM ★★★
()
Ответ на: комментарий от vM
fpc side.pas 
Free Pascal Compiler version 3.2.2+dfsg-20 [2023/03/30] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling side.pas
side.pas(17,10) Error: Goto statements are not allowed between different procedures
side.pas(26) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito
fpc -Miso side.pas
Free Pascal Compiler version 3.0.4+dfsg-23 [2019/11/25] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling side.pas
Linking side
/usr/bin/ld.bfd: warning: link.res contains output sections; did you forget -T?
24 lines compiled, 0.1 sec
./side
six
seven
vM ★★★
()
Ответ на: комментарий от anonymous_incognito

выразился очень косноязычно и невнятно, сделав упор на разницу между procedure и function в Паскале, что и породило спор

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

liksys ★★★★
()
Ответ на: комментарий от Xenius

Не будет. Посмотри спецификацию паскаля.

Это у паскаля не будет - он игрушечно-теоретический. А в реальности посмотри man write.

приведи примеры кода, который по твоим критериям будет ОК, а по Столяровским плохим и наоборот

Таласса - один сплошной пример.

liksys ★★★★
()
Ответ на: комментарий от liksys

вы возможно правы в частностях

при этом вы не арбитр в своём деле

следовательно - вы явно возгордились

и аргумент всё так же валиден - уменьшение семантической сложности суммы команд языка не есть автоматически увеличение читаемости кода

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

следовательно

Не следовательно.

и аргумент всё так же валиден

Аргумент всё еще софистика. Ты просто доводишь его до абсурда.

liksys ★★★★
()
Ответ на: комментарий от anonymous_incognito

Далее я почитал про cargo vendor, что вроде можно всё упаковать, чтобы не требовался доступ в интернет,

Он вообще не требуется. Для компиляции. Для скачивания - требуется, но исходники можно и на флоппе-диске принести.

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

r--r--r--
()
Ответ на: комментарий от liksys

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

будь мужыком - опровергай а не отвергай :)

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

Помимо того, что я всё объяснил уже ранее - мне нечего добавить. Ничего из моих слов до сих пор не было опровергнуто, а потому я просто клеймлю бред и словоблудие по факту. Мне не интересно заниматься опровержением заведомо ложных или софистических «аргументов».

liksys ★★★★
()
Ответ на: комментарий от liksys

Это у паскаля не будет - он игрушечно-теоретический.

Паскаль — это вполне полноценный язык и на нём пишут серьёзный софт.

А в реальности посмотри man write.

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

Таласса - один сплошной пример.

Ну то есть конкретики от тебя не дождёшься?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от vM

Какие Вы видите побочные (или непобочные) эффекты выражения nine + ( six + seven ), функций и процедур в следующей бессмысленной «программе»?

Тут просто неверное использование функций для извращений. У каждой есть побочный эффект. Интересно, что этот goto делает со стековым фреймом?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

Паскаль — это вполне полноценный язык и на нём пишут серьёзный софт.

Нет. Ничего на нем уже не пишут, кроме дремучего легаси.

Исторически решили сделать так, но это ничего не доказывает.

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

Ну то есть конкретики от тебя не дождёшься?

Не в коня корм. Вся конкретика была уже приведена в тредах под талассу. Идешь и читаешь всё это там.

liksys ★★★★
()
Ответ на: комментарий от liksys

Вся конкретика была уже приведена в тредах под талассу.

И где тут треды про Талассу?

Таласса - один сплошной пример.

Не самый удачный. Это недоделка. FEDAnet ещё больше недоделана.

Сам Андрей Викторович из своего известного творчества считает доделанными последние издания своиз книг.

vM ★★★
()
Ответ на: комментарий от Xenius

Интересно, что этот goto делает со стековым фреймом?

Посмотрите, если интересно.

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

vM ★★★
()
Ответ на: комментарий от anonymous_incognito

сложнее,чем при разработке на C++ и как бы по умолчанию подразумевает наличие интернета во время работы

а для плюсового кода зависимости на лошадях везут?

seiken ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Для плюсового сам выкачиваешь, если в репозитории нет.

Ну надо же, почти как у раста. Только в расте ещё и скачивание автоматическое.

unC0Rr ★★★★★
()
Ответ на: комментарий от vM

И где тут треды про Талассу?

В новостях и в толксах, очевидно.

Не самый удачный. Это недоделка. FEDAnet ещё больше недоделана.

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

liksys ★★★★
()
Ответ на: комментарий от qulinxao3

будь мужыком - опровергай а не отвергай :)

Не умеет и не может...

Somebody ★★★★
()
Ответ на: комментарий от vM

Или несёшь колоду перфокарт в рюкзаке

Можно и в чемодане...

Somebody ★★★★
()

Огромное спасибо автору.

Когда нибудь я смогу дочитать математическую часть и перечитать остальное.

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

Slackware_user ★★★★★
()
Ответ на: комментарий от liksys

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

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

Понятие побочного эффекта также заметно отличается, например, в си и хаскеле: в хаскеле чтение значения по ссылке (через IORef) это сторонний эффект (потому что требует монаду IO), а в си чтение по указателю сторонним эффектом не является.

Поэтому какое-то определение «само по себе» практически невозможно. Даже понятие целого числа в лиспе и си по разному понимается.

monk ★★★★★
()
Ответ на: комментарий от monk

Почти любое определение приколочено к семантике какого-либо языка.

Чушь. Функции определены в computer science существуют независимо от желания разработчиков форта - просо они там называются словами и имеют другую семантику (хотя, конечно, может быть язык и совсем без функций. Процедуры тоже определены в CS независимо от желаний хаскелистов, и так далее. Все эти определения абстрактны, незавсимы и построены вокруг соответствующих теорий, которые могут быть не реализованы в языках.

Понятие побочного эффекта также заметно отличается

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

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

liksys ★★★★
()
Ответ на: комментарий от Slackware_user

если поминать Паскаль то лучше по виртовским алго и структуры данных что=то там программы

ну и парачка книг из ряда Систематического программирования его же авторства и Дейкстры,Дала,Хоара(их псевдоАлгол почти 99% чистый Паскаль)

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

Разница между нами в том, что я аргументирую, а столяров и его паства - веруют.

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

Собственно, ничего другого я от вас и не ждал.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 2)
Ответ на: комментарий от liksys

Функции определены в computer science существуют независимо от желания разработчиков форта - просо они там называются словами и имеют другую семантику

Не путай функции и подпрограммы. Если в Си все подпрограммы — это функции, то в других языках и в CS не так.

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

Потому, что он считает, что семантика паскаля работает и для других императивных языков и не без оснований. В том же C например нет разницы между числом 65 и буквой A, но для программиста-то она есть. В паскале это сделано явно через ord() и chr(), что ближе к программисту чем неявное преобразование в Си.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

ну в сяшке нет в части char неявного преобразования типов - ибо скорее 'A' и 65 (если мы в ascii) это скорее разные токены|глифы(составные) для одного и того же - и так как знаковость(безнакововость) на 7 битах у 8 битовых datum тождественна то «проблемы индейцев шерифов не волнуют»

т.е. опят же всё упирается в кочку зрения

и вот в том что у Столярова(его публичном амплуа) что у предыдущего от вас оппонента - сложности с пониманием рацио(очевидно что есть и эмоцио которое влияет но тут не суть) у им оппонирующих лиц

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

Ты уже какой раз подряд не в состоянии выдать ни одной конструктивной мысли.

Отправляйся-ка в игнор к остальным клоунам.

liksys ★★★★
()
Ответ на: комментарий от Xenius

Не путай функции и подпрограммы. Если в Си все подпрограммы — это функции, то в других языках и в CS не так.

Ты читаешь вообще комментарий, на который отвечаешь? Я говорил про форт, а ты мне - про си.

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

Нет у него никаких оснований.

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

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

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 2)
Ответ на: комментарий от liksys

Читаю. В forth слова - это не функции. А ты называешь их функциями, путая его с C где из подпрограмм есть только функции.

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

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

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

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от Xenius

Читаю.

Не читаешь.

В forth слова - это не функции.

Идем на википедию и смотрим: Forth emphasizes the use of small, simple functions called words.. Ищешь дальше по слову function, убеждаешься в моей правоте, посыпаешь голову пеплом.

Нет никакой рекурсивности.

Конечно же есть. И я объяснял ее источник на предыдущих страницах. Можешь снова вернуться и изучить мои комментарии внимательно.

термин «побочный эффект» в более интуитивном понимании

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

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

Потому что это так и есть.

Интутивно побочный эффект - это не основной эффект.

Нет никакого «интуитивно». Есть формальное определение из CS, и есть неудачная попытка прикрутить это определение изолентой к паскалю, чтобы затем экспортировать в другие языки.

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

liksys ★★★★
()
Ответ на: комментарий от liksys

Функции определены в computer science существуют независимо от желания разработчиков форта - просо они там называются словами и имеют другую семантику

Нет. У слова в форте нет возвращаемого значения. Что позволяет, например, компилировать в шитый код. А функция в computer science должна иметь возвращаемое значение.

monk ★★★★★
()
Ответ на: комментарий от liksys

Идем на википедию и смотрим: Forth emphasizes the use of small, simple functions called words.. Ищешь дальше по слову function, убеждаешься в моей правоте, посыпаешь голову пеплом.

Это в том же смысле, в котором void free (void *ptr) называют функцией.

monk ★★★★★
()
Ответ на: комментарий от liksys

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

Так ты пытаешься также объяснить всё через Си. Я согласен, что получается такая же каша.

monk ★★★★★
()
Ответ на: комментарий от liksys

Есть формальное определение из CS

Так в нём побочный эффект может иметь только операция (operation) или выражение (expression). Но не вызов процедуры или оператор (statement).

А ты настойчиво утверждаешь, что у процедур и функций, возвращающих пустой тип (void), могут быть побочные эффекты.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от liksys

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

Не совсем абстрактны. Они основаны на семантике тех языков, где эти определения реализованы. Те же функции и процедуры в computer science взяты на основании существовавших тогда языков программирование, в некоторых из которых было понятие возвращаемого значения подпрограммы, в некоторых не было, а в некоторых было два вида подпрограмм.

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

monk ★★★★★
()
Ответ на: комментарий от monk

Нет.

Да. Идешь и читаешь ссылку, которую я привел выше.

У слова в форте нет возвращаемого значения.

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

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от monk

Так ты пытаешься также объяснить всё через Си.

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

Я согласен, что получается такая же каша.

Каша получается у тебя в голове из-за того, что ты читаешь через слово то, что я пишу.

liksys ★★★★
()
Ограничение на отправку комментариев:
Тема будет перемещена в архив .