Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение  Обсуждение из раздела Школа ОБЕРОНА
№ 5626 20-10-2007 05:55 |  |
Ответ на »сообщение 5624« (Geniepro)
___________________________
Ада, конечно, хороший язык, но побочные эффекты функциям, увы, не запрещает...
<...>
Так что увы и ах...
Так в этом смысле и Лисп их не запрещает...
Интересно, почему большинство языков (в т.ч. хороших) не торопится с полным запретом побочных эффектов хотя бы в функциях?
№ 5625 20-10-2007 05:46 |  |
Ответ на »сообщение 5622« (Geniepro)
___________________________
Ответ на »сообщение 5619« (info21)
___________________________
Так эта... Хм... Не будет профессионалов -- будут непрофессилоналы. Это ещё хуже... :о)
Во-первых, прочитайте внимательно мое сообщение.
Во-вторых, смотря какие профессионалы.
Мои непрофессионалы дадут лично Вам фору насчет инвариантов цикла, будьте спокойны.
№ 5624 20-10-2007 05:34 |  |
Ответ на »сообщение 5621« (AVC)
___________________________
Geniepro хвалит Аду за "правильный" цикл for и отсутствие побочных эффектов в функциях.
Побочные эффекты, по идее, должны концентрироваться в proper procedures.
Ада, конечно, хороший язык, но побочные эффекты функциям, увы, не запрещает...
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Test is
X : Integer := 0;
function F(V : in out Integer) return Integer is
-- Error: function can only have "in" parameters
begin
V := V + 1; -- Error: assignment to "in" mode parameter not allowed
X := X - 1; -- Побочный эффект, пропущенный компилятором как допустимый в Аде
Put (X); -- Аналогично - ввод/вывод ведь тоже побочный эффект...
return V;
end F;
begin
for I in 1..5 loop
I := 1; -- Error: assignment to loop parameter not allowed
Put (F(I));
end loop;
Put (I); -- Error: "I" is undefined
end Test;
Так что увы и ах...
№ 5623 20-10-2007 05:29 |  |
Ответ на »сообщение 5622« (Geniepro)
___________________________
Ответ на »сообщение 5619« (info21)
___________________________
Так эта... Хм... Не будет профессионалов -- будут непрофессилоналы. Это ещё хуже... :о)
Имеется ввиду подготовка грамотных программистов из "предметников". Чтобы программировали люди, "повёрнутые" на решение реальных задач наиболее эффективными методами программирования, а не на ловлю кайфа от комбинирование искусственных артефактов-фич :-)
Такие "непрофессионалы" будут формировать спрос на эффективные для опять же реальных задач инструменты. А уже сообщество программистов-профессионалов (системщиков) будет вынуждено разрабатывать такие инструменты под здоровый спрос, а не "от балды".
№ 5622 20-10-2007 05:11 |  |
Ответ на »сообщение 5619« (info21)
___________________________
Так эта... Хм... Не будет профессионалов -- будут непрофессилоналы. Это ещё хуже... :о)
№ 5621 20-10-2007 04:16 |  |
Ответ на »сообщение 5618« (Jack Of Shadows)
___________________________
Ответ на »сообщение 5617« (AVC)
___________________________
Просто добавим соответствующую опцию компиляции, и компилятор не пропустит "неграмотный" код.
Это невозможно сделать просто опцией компилятора.
Подумайте сами. Любая мало мальски большая программы будет содержать как минимум одну функцию с побочным эффектом.
Почему? Ведь все тут в один голос говорят, что это неправильно.
Geniepro хвалит Аду за "правильный" цикл for и отсутствие побочных эффектов в функциях.
Побочные эффекты, по идее, должны концентрироваться в proper procedures.
№ 5620 20-10-2007 03:51 |  |
Ответ на »сообщение 5616« (Стэн)
___________________________
Ответ на »сообщение 5612« (Илья Ермаков)
___________________________
В котором явно видно, что при определенных условиях появляется зависимость от порядка операндов в условном выражении цикла. Это что, грамотно по-вашему?
Естественно - это безграмотно. То, что выражения и функции не должны иметь побочных эффектов - это азы. Которые объясняются в правильных базовых курсах программирования сразу же, как только объясняются выражения и функции.
Или Вы хотите иметь предохранитель от дурости? Так это уже мало относится к вопросу правильных и неправильных циклов. Переходите на ФЯ, там этот предохранитель есть :-) Но за всё придётся платить.
№ 5619 20-10-2007 03:21 |  |
Ответ на »сообщение 5605« (Geniepro)
___________________________
И вапще! Нет программиста -- нет проблемы! :о)
Так я это давно понял и именно так проблемы свои и решил.
Собственно, и посыл Информатики-21 в том, что (профессиональных) программистов нужно максимально
РЕДУЦИРОВАТЬ КАК КЛАСС
№ 5618 20-10-2007 03:19 |  |
Ответ на »сообщение 5617« (AVC)
___________________________
Просто добавим соответствующую опцию компиляции, и компилятор не пропустит "неграмотный" код.
Это невозможно сделать просто опцией компилятора.
Подумайте сами. Любая мало мальски большая программы будет содержать как минимум одну функцию с побочным эффектом.
Это означает что опцию запрещающюю ВААБЩЕ побочные эффекты в функциях просто невозможно будет применять.
Единственный способ - это самому явно помечать какие функции с побочными эффектами, чтобы компилятор их пропустил. Но в таком случае вы приходите...к хаскелю :))
№ 5617 20-10-2007 03:09 |  |
Ответ на »сообщение 5611« (Стэн)
___________________________
В теории действительно здорово и просто:
while B do S;
Но кто может доказать, что реализация этого выражения будет гарантировать отсутствие side-effect'ов, подобно тем, что я приводил в »сообщение 5606«?
Это интересный вопрос, и всплывает (в той или иной формулировке) он не первый раз.
В книгах о своих языках Вирт всегда разбирает последствия, например, побочных эффектов при вычислении функции, рекомендует воздержаться от них, но... в языке явно этого не запрещает.
Любопытно также отметить, что такие ограничения, как запрет побочных эффектов для функций, можно ввести, практически не меняя синтаксиса языка. Просто добавим соответствующую опцию компиляции, и компилятор не пропустит "неграмотный" код.
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|