LINUX.ORG.RU

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

 , , ,

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

5

6

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

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

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

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

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

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

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

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

★★★★★

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

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

Всё так.

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

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

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

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

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

Те же функции и процедуры в computer science взяты на основании существовавших тогда языков программирование

И обобщены.

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

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

Википедия для тебя авторитет?

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

А слон это муха, только называется слоном и имеет другую форму.

Если быть точнее, слова в форте помещают результат в стек, что превращает слово в некое подобие функции.

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

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

побочный эффект может иметь только операция (operation) или выражение (expression)

Всё так.

Разумеется могут

Вызовы процедур не являются выражениями!

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

In programming, a function is a block of code that performs a processing and returns a result. A function may (or may not) have parameters. (https://www.francogarcia.com/en/blog/learn-programming-subroutines/)

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

они там называются словами и имеют другую семантику

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

И обобщены.

Да. Понятие побочных эффектов одинаково в Фортране, Паскале, Аде, … и обобщённое построено на них.

Но ты почему-то настаиваешь взять определение из Си.

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

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

Так я тебе обобщённое определение привёл, а не из конкретного языка.

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

Википедия для тебя авторитет?

Это не аргумент, отказать.

А слон это муха, только называется слоном и имеет другую форму.

Нет, не так: слон - это сложный многоклеточный организм, как и муха. Просто имеет другую ДНК. Что снова возвращает нас к моему комментарию об общих и частных определений.

У слова только наблюдаемое изменение глобального стека.

Которое используется как возвращаемое значение из-за семантики языка.

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

Но ты почему-то настаиваешь взять определение из Си.

Ссылочку, бегом. А то языком трепать - не мешки ворочать.

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

Зато выражения могут быть внутри них.

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

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

Нет, не так: слон - это сложный многоклеточный организм, как и муха. Просто имеет другую ДНК.

Слово - это подпрограмма, как и функция. Но подпрограмма, имеющая другую семантику. Поэтому слово не является функцией, также как слон не является мухой.

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

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

Чушь. Как только процедура делает что-то, что обладает побочным эффектом - она сама приобретает побочный эффект.

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

Слово - это подпрограмма, как и функция.

Таким образом, я прав. Если ты еще не понял, как так получилось - иди еще раз перечитай мое объяснение о частных и общих. Оно понятно написано, правда. Просто попробуй подумать над ним минут пять.

Совершенно не важно, каким образом возвращается значение, структурно это всё еще максимально близко к функции (хотя в чистом виде ею не является, но это и не важно).

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

Постарайся больше не путать.

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

Чушь. Как только процедура делает что-то, что обладает побочным эффектом - она сама приобретает побочный эффект.

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

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

Таким образом, я прав.

Русский для тебя не родной?

Ты пишешь:

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

То есть, «функции в форте называются словами».

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

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

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

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

Ты берёшь из критериев один, а остальные игнорируешь. «Если круглое, то оранжевое» (https://www.anekdot.ru/id/795266/).

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

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

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

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

Русский для тебя не родной?

У тебя просто проблемы с логикой.

Потом на основании «Слово - это подпрограмма, как и функция.», делаешь вывод, что ты прав, то есть слово это функция.

Нет. Я сказал, что структурно это всё еще максимально близко к функции - читай, по семантике.

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

И снова нет.

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

Синтаксис вторичен.

Ты берёшь из критериев один, а остальные игнорируешь.

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

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

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

То есть придумываешь своё определение, не соответствующее общепринятому. Что и требовалось доказать.

что структурно это всё еще максимально близко к функции - читай, по семантике.

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

И снова нет.

Двумя абзацами выше доказано, что да.

Я беру главный из критериев: всё пляшет вокруг семантики.

Столяров утверждает строго то же самое. Только он берёт семантику Паскаля, а ты семантику Си. Поэтому у него в Си есть «процедуры», у вызова которых не может быть побочного эффекта (по определению из computer science), а у тебя все подпрограммы являются функциями, потому что в Си все подпрограммы так называются.

Наглядно демонстрируешь, что верующий враг не атеисту, а верующему другой религии.

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

То есть придумываешь своё определение, не соответствующее общепринятому.

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

Выше ты писал «просто они там называются словами и имеют другую семантику».

Что ж, я тоже иногда могу ошибаться. Давай заменим «семантику» на «синтаксис», и тогда всё будет в порядке.

Двумя абзацами выше доказано, что да.

Не доказано, тебе показалось.

Столяров утверждает строго то же самое.

Нет.

Только он берёт семантику Паскаля, а ты семантику Си

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

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

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

Наглядно демонстрируешь, что верующий враг не атеисту, а верующему другой религии.

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

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

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

Идем на википедию и смотрим

Ты бы ещё к бабкам на лавочку у подъезда сходил... :D :))

Находим более авторитетный источник - «Systems Guide to figForth», C. H. Ting, Ph. D, Third Edition , «идём», находим "Forth Words" и читаем:

The usage of 'word' in Forth literature is very confusing because many quite different concepts are associated with it. Without sorting out these different aspects of 'word' into independently identifiable entities, it is impossible to arrive at a satisfactory description of Forth language. Here 'word' is defined as a syntactical unit in the language, simply a group of characters separated from other words by delimiting characters. Semantically (which concerns the meaning of words), a word in Forth can be only one of three things: a string, an instruction, or a number.

Ищешь дальше по слову function, убеждаешься в моей правоте, посыпаешь голову пеплом.

Без комментария, ибо здесь нельзя. Но люди и так понимают... :)

Somebody ★★★★
()
Последнее исправление: Somebody (всего исправлений: 1)

Введение в профессию столяров есть — спрашивайте в серии введения в профессию слесарей, плотников, злых жестянщиков.

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

Ты бы ещё к бабкам на лавочку у подъезда сходил… :D :))

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

a word in Forth can be only one of three things: a string, an instruction, or a number.

Читаем про instructions и видим пачку разновидностей. Смотрим пример из всё той же википедии: The FLOOR5 word is equivalent to this function written in the C programming language using the conditional operator ‘?:’

: FLOOR5 ( n -- n' )   DUP 6 < IF DROP 5 ELSE 1 - THEN ;
int floor5(int v) {
  return (v < 6) ? 5 : (v - 1);
}

Сравниваем это с твоим источником:

When a colon instruction is being compiled, words appearing on the list of structures are compiled into the body of the colon instruction as execution addresses. Thus a colon instruction is similar to a list of subroutine calls in conventional programming languages.

Таким образом, убеждаемся в двух фактах:

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

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

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

В частном случае форта понятия функция не существует.

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

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

охё лёл

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

т.е. у тя же реальные «ошибки включения множеств и постояные ложные обратные импликации»

это ровно так же как из утверждения что goto есть случай J-оператора Ландина утверждать что всякий J-оператор Ландина есть goto

ты реально фанатик рантайм_модели сяшки

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

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

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

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

Смотрим пример из всё той же википедии

Мне до сих пор непонятно, что побуждает (заставляет?) тебя постоянно, тут и там, если не доказывать, то подтверждать, не то что низкий уровень твоей компетенции, а совершенное её отсутствие. Ссылки на «ПедиВикию» - ярчайший пример и подтверждение этого отсутствия... :)

Я таки прав

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

В общем, нет, ты не прав, ты просто болтлив. :)

смысловой аналог

:))))))

В википедии

Спасибо, ты меня смешишь... :))

официальным документом по форту

Не существует такого. :)

Возвращайся обратно на лавочку и в игнор

«Детский сад», вкупе с обычными и привычными уже личными выпадали лишь подтверждающий твою несостоятельность как в этой дискуссии, так и в принципе... :))

P.S. А FORTH - это как раз то, чего ты явно не знаешь, а я знаю... :)

В 1980-х, 1990-х годах я много читал о нём, достаточно много писал на нём и неплохо изучил «изнутри» пару форт-систем, как изучая «исходники» одной из них, благо они были и остаются доступными, так и при помощи отладчика разобравшись в другой, исходных текстов которой у меня не было и нет... Так что тут ты мне не соперник. :))

А ссылающийся на Вики «специалист» - обычный «ламер», по моему мнению... :)

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

ну всё таки в форте если соблюдать дисциплину(не менять стек возвратов - соблюдать тот или иной порядок на стеке аргументов) можно писать функции

Там можно «писать» всё, что угодно. Но в «чистом» Forth нет ни процедур, ни функций. :)

тот же PostScript как бы ровно об этом

Нет. Это «проблемно-ориентированный» язык, созданный на основе Forth, получивший широчайшее распространение и «обретший самостоятельную жизнь»...

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

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

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

Функция, из которой не возвращается вообще ничего и никак, становится процедурой

Однако в Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий) ты считаешь void free (void *ptr) функцией.

При этом обе могут быть как чистыми, так и нет.

Так с этим никто и не спорит. Разве что чистая процедура не имеет смысла. Спор про побочный эффект, который по компьютерной науке применим только к выражению или операции, а значит не имеет смысла для вызова процедуры также, как объём не имеет смысла для окружности.

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

Ощущение, что вы друг друга не поняли.

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

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

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

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

Форт теряет, если из форта пытаться сделать сишку. Также, как сишка очень сильно потеряет, если сначала программу написать на лиспе, а потом переписать на си 1-в-1 с замыканиями и односвязными списками (будет заметно медленнее, чем на лиспе).

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

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

Ну, подпрограммы, то есть «a block of reusable code designed to perform a specific task», положим, словам соответствуют.

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

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

Ноль ответов по существу вопроса — с таким же успехом можно было бы играть в бокс по переписке через email. В чём смысл твоих письмён для других форумчан?

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

1. Коллега я в курсе.

2. Прелесть конкатетивных языков почти ровно таже что и у АПЛ/j/k они при желании позволяют очень терс код

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

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

Однако в Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий) ты считаешь void free (void *ptr) функцией.

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

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

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

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

словам соответствуют

Как пишут «в этих ваших интернетах, „Спасибо, поржал!“... :))

Нет там никаких „подпрограмм“. „В Форте всё - слово“ ©

По-моему, не стоило бы пытаться на „слова“ Форта „клеить“ привычные вам „ярлыки“: „Это другое!“ © :))

Хотя... Кто я такой, чтобы запрещать вам „транслировать“ ваши фантазии?!.. ;))

Хорошо, пусть это будут „подрограммы“, раз уж вам так хочется... :) „Хоть горшком назови, только в печь не сажай!“... :)))

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

«Чувак», если ты что-то не видишь, это не значит, что этого нет... :)

И то, что «приводит» «оппонент», как ты его «величаешь» - это пустословие с апеллированием к Вики - известной сетевой «мусорке» (да, я смягчил :) ). «Оппонент» из него, в случае с FORTH, сильно «так себе»: он FORTH не знает, и просто пытается «спорить о вкусе устриц с тем, кто их пробовал»...

И ты не знаешь, раз не видишь «технических аргументов». Подозреваю, что это ты и есть... просто с другого аккаунта...

Ноль ответов по существу вопроса — с таким же успехом можно было бы играть в бокс по переписке через email.

«Чувак», ты очень знакомо ;) не знаешь FORTH - отсюда и твоё непонимание...

В чём смысл твоих письмён для других форумчан?

Ну, не вам двоим это решать... Здесь есть и куда более сведущие люди.

А смысл (один из), доступный (ну, я надеюсь) для вас двоих - указать людям на то, что наш известный «експёрд во всём» в FORTH откровенно «плавает»... И ты, явно, с ним... :)

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

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

Ощущение, что вы друг друга не поняли.

Вполне возможно... Думаю, что, если это так, то товарищ уточнит и поправит меня... :)

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

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

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

Впрочем, мне близка позиция liksys:

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

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

Хотя сомневаюсь, что можно говорить о едином «абстрактном определении» таких широко использующихся понятий. Ну как бы у слова «вектор» есть как минимум 4 разных определения в разных областях математики.

Для Си актуальны совсем другие термины/«уровни чистоты» (https://gcc.gnu.org/onlinedocs/gcc/Common-Attributes.html):

// const: одни и те же аргмуенты => одно и то же возвращаемое значение.
//
// Не может читать по указателям-аргументам, потому что значение по одному
// и тому же указателю может измениться между вызовами.
//
// Обязана когда-нибудь завершаться.
__attribute__((const))
int square(int);

// pure: «не имеет никакого наблюдаемого влияния на состояние программы, кроме
// возврата значения».
//
// Обязана когда-нибудь завершаться.
__attribute__((pure))
int hash(const char *);

// Как const, но не обязана когда-нибудь завершаться.
__attribute__((unsequenced))
int collatz_termination_time_val(_BitInt(65535));

// Как pure, но не обязана когда-нибудь завершаться.
__attribute__((reproducible))
int collatz_termination_time_ptr(const _BitInt(65535) *);

Собственно, в C23 уже есть [[unsequenced]] и [[reproducible]] в языке. Как и понятия effectless, idempotent, stateless, independent.

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

P.S. Скопипащу с небольшими изменениями моё мнение по сабжу, которое я здесь высказывал 2 года назад.

Столяров — поехавший, я ещё 9 лет назад тут об этом писал. В его CMS находят баги и уязвимости, в том числе находят их новые версии компиляторов, по поводу которых есть пердёж в документации его CMS, что они, мол, только штампуют “idiotic features”.

А ещё он не считает нужным проверять результат malloc(), calloc() и прочее, на NULL.

Тех, кто указывает на эти косяки, он добавляет в игнор. А в уязвимостях, которые сам же допустил, винит «веб-макак» (пруфы ищите сами у него на сайте).

Но на его сайте только положительные отзывы: не вписывается в рынок, мол, такая качественная CMS.

Как его можно воспринимать всерьёз?

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

Кстати вот фанаты Столярова могут спросить его, какие из этих… эм… объявлений сущностей с внешней линковкой (с очевидными реализациями) являются «функциями». И сами подумать над этим вопросом. А потом сравнить.

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

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

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

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

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

Зато выражения могут быть внутри них.

Ну тогда «побочный эффект» относится к выражению внутри процедуры. И что это меняет?

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

А ещё он не считает нужным проверять результат malloc(), calloc() и прочее, на NULL.

А современные ОС разве возвращают NULL? Всё равно ведь дают адрес, а прибивают (что-нибудь) только при записи по этому адресу.

А разыменование NULL всё равно успешно завершает программу безо всяких проверок. Или у него в такой ситуации какой-то файл остаётся в несогласованном состоянии?

Как его можно воспринимать всерьёз?

ad hominem?

Мы обсуждаем моральный облик автора или его книгу и утверждения в книге?

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

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

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

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

Зайди в любой срач про systemd или wayland. Там тоже примерно такое же пишут.

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

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

Число возвращает? Возвращает. Значит функция.

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

Если бы у Столярова не было аллергии на новшества, мог бы свою идею излагать как «в Си, насколько возможно, надо писать функции так, чтобы к ним можно было применить атрибут pure».

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