Cтраница 1
Использование побочного эффекта нежелательно, поскольку он сильно затрудняет ( особенно, если не предусмотрен заранее) отладку и доказательство правильности программы. [1]
При вычислении выражений не рекомендуется прибегать к использованию побочного эффекта. Это может привести к непредсказуемым результатам. [2]
Способствуют ли имеющиеся в этом языке программирования операции использованию побочных эффектов. [3]
Очень важными являются также вопросы, связанные с использованием побочных эффектов. Побочные эффекты тесно связаны с операторами присваивания, если последние трактуются в языке программирования как выражения, имеющие определенные значения. Общепринятым является мнение, что использование побочных эффектов снижает надежность программного обеспечения и удобочитаемость программ [84], обеспечивая в то же время возможность создания более компактных программ. [4]
Говоря о побочных эффектах в языке Си будет правильным отметить, что язык Си подталкивает к использованию побочных эффектов. Это означает, что оператор присваивания в языке Си трактуется как выражение, имеющее некоторое значение ( а именно значение правой части оператора присваивания, преобразованное к типу операнда, стоящего в левой части оператора присваивания), причем это выражение ( оператор присваивания) может быть использовано в любом контексте, где может быть использовано значение. [5]
Сделанное выше замечание вынуждает автора объективности ради признать существование двух крупных программных комплексов, реализованных на языке Евклид [108], в котором в угоду безопасности запрещено использование побочных эффектов и ряда других средств, которые считаются необходимыми для решения задач системного программирования. Необходимо отметить, что ограничения языка Евклид не были расценены использовавшими его программистами как серьезные недостатки. [6]
Начиная с начала 60 - х гг., когда было опубликовано Пересмотренное сообщение об алгоритмическом языке Алгол 60 [124], появилась группа специалистов по языкам программирования, активно выступающих против использования побочных эффектов. Почти все, кому пришлось столкнуться с побочными эффектами, соглашались, что неограниченное использование побочных эффектов не может привести к хорошим результатам. [7]
Если говорить коротко, то в языках Ада и Паскаль отношение к побочным эффектам крайне отрицательное - побочные эффекты не только нежелательны, но даже более того могут считаться чем-то аморальным, и поэтому использования побочных эффектов следует избегать всеми доступными способами. В противоположность этому язык Си подталкивает к использованию побочных эффектов. [8]
Честно говоря, автор еще раз вынужден вспомнить о языке Евклид, упоминавшемся им уже в разд. Евклид, в котором запрещено использование побочных эффектов, для реализации двух больших программных комплексов. [9]
Если говорить коротко, то в языках Ада и Паскаль отношение к побочным эффектам крайне отрицательное - побочные эффекты не только нежелательны, но даже более того могут считаться чем-то аморальным, и поэтому использования побочных эффектов следует избегать всеми доступными способами. В противоположность этому язык Си подталкивает к использованию побочных эффектов. [10]
Начиная с начала 60 - х гг., когда было опубликовано Пересмотренное сообщение об алгоритмическом языке Алгол 60 [124], появилась группа специалистов по языкам программирования, активно выступающих против использования побочных эффектов. Почти все, кому пришлось столкнуться с побочными эффектами, соглашались, что неограниченное использование побочных эффектов не может привести к хорошим результатам. [11]
Очень важными являются также вопросы, связанные с использованием побочных эффектов. Побочные эффекты тесно связаны с операторами присваивания, если последние трактуются в языке программирования как выражения, имеющие определенные значения. Общепринятым является мнение, что использование побочных эффектов снижает надежность программного обеспечения и удобочитаемость программ [84], обеспечивая в то же время возможность создания более компактных программ. [12]
Автор ничего не имеет против такой цели до тех пор, цока ее достижение не становится навязчивой идеей, начиная оказывать чрезмерное влияние на язык программирования. Например, на ранних этапах разработки языка Ада была сделана попытка полностью отказаться от возможности использования побочных эффектов. Позднее ( и по мнению автора, к счастью) эта попытка была признана нецелесообразной, поскольку полный отказ от возможности использования побочных эффектов оказывает слишком плохое влияние на язык программирования в целом. Таким образом, автор не имеет ничего против поиска путей повышения безопасности языка программирования, а возражает лишь против чрезмерного уменьшения числа полезных возможностей, предоставляемых языком программирования в угоду попыткам обеспечить защиту от беспечности программиста. [13]
Так же как и в случае с типами данных, операции в языке Си опираются на использование реальной ЭВМ, в то время, как операции в языке Паскаль опираются на использование виртуальной Паскаль-машины высокого уровня. Именно это является причиной того, что в языке Си имеются операции для работы с битами, а в языке Паскаль - операции для работы с множествами. Кроме того, языки Си и Паскаль сильно отличаются друг от друга в вопросах, связанных с побочными эффектами. Разрешенное в языке Си использование оператора присваивания внутри выражений подталкивает к использованию побочных эффектов, что приводит к снижению надежности и удобочитаемости программ, затрудняет их модификацию. С другой стороны, разрешенное в языке Си использование оператора присваивания внутри выражений приводит к уменьшению размеров написанных на нем программ по сравнению с функционально эквивалентными им программами, написанными на языке Паскаль. В качестве иллюстрации этого рассмотрим два функционально эквивалентных фрагмента программы, записанных на языке Си и Паскаль, каждый из которых обеспечивает ввод символов в массив до тех пор, пока не будет введен признак конца файла. [14]
Автор ничего не имеет против такой цели до тех пор, цока ее достижение не становится навязчивой идеей, начиная оказывать чрезмерное влияние на язык программирования. Например, на ранних этапах разработки языка Ада была сделана попытка полностью отказаться от возможности использования побочных эффектов. Позднее ( и по мнению автора, к счастью) эта попытка была признана нецелесообразной, поскольку полный отказ от возможности использования побочных эффектов оказывает слишком плохое влияние на язык программирования в целом. Таким образом, автор не имеет ничего против поиска путей повышения безопасности языка программирования, а возражает лишь против чрезмерного уменьшения числа полезных возможностей, предоставляемых языком программирования в угоду попыткам обеспечить защиту от беспечности программиста. [15]