Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 5246 26-09-2007 17:56 | |
Ответ на »сообщение 5244« (Сергей Перовский)
___________________________
Присваивание и цикл - признаки императивности.
А откуда это следует?
№ 5245 26-09-2007 17:55 | |
Ответ на »сообщение 5243« (Jack Of Shadows)
___________________________
Ну вот опять по кругу.
Уже же обсужали наверное раз сто.
Иногда полезно и двести раз обсуждать. Сомневаться никогда не врядно. Особенно там, где нет общепринятого, четко сформулированного значения термина.
Императивность определяется серией операций (опероторов) изменяющих состояние.
Представим себе, что в языке (Occam -- это так, для понимания вариантов) нет глобального состояния (нет глобальных переменных как таковых). И в нем нет последовательности выполнения основных единиц (операторов). В Occam, например, специальная управляющая структура (SEQ) помечает зоны явного следования операторов.
На мой взгляд, это два важнейших момента (глобальное состояние и последовательность выполнения операторов), отличающие ИП от ДП (декларативного программирования).
Кстати, а SQL -- императивный язык?
№ 5244 26-09-2007 17:51 | |
Ответ на »сообщение 5242« (Руслан Богатырев)
___________________________
А что такое императивность для языка программирования? Присваивание? Цикл? Неужели?
Присваивание и цикл - признаки императивности.
Причем признаки достаточно однозначные.
В функциональном программировании присваивание невозможно в силу отсутствия понятия состояния.
Не понял, почему это вызывает вопросы.
№ 5243 26-09-2007 17:48 | |
Ответ на »сообщение 5242« (Руслан Богатырев)
___________________________
Ну вот опять по кругу.
Уже же обсужали наверное раз сто.
Императивность определяется серией операций (опероторов) изменяющих состояние.
Соответственно ключевым оператором императивного языка является присваивание, и наиболее часто используемым приемом - цикл.
Соответственно важной особенностью императивных языков является наличие операторов (ветвление, цикл, безусловный и условный переход, выход из подпрограммы, возвращение результата), в отличие от функциональных языков где существуют только декларации и функции.
Все остальное что наращивается поверх императивной парадигмы (процедурное программирование, ОО, модульное) это уже частности.
Wikipedia есть МНЕНИЕ многих интернет-прохожих. К ней так и надо относиться.
Я отношусь к википедии гораздо большим доверием и уважением нежели вы. Впрочем это уже личный выбор каждого.
№ 5242 26-09-2007 17:37 | |
Ответ на »сообщение 5241« (Jack Of Shadows)
___________________________
Так и есть: occam is an imperative procedural language (such as Pascal).
Wikipedia есть МНЕНИЕ многих интернет-прохожих. К ней так и надо относиться.
А что такое императивность для языка программирования? Присваивание? Цикл? Неужели?
№ 5241 26-09-2007 17:33 | |
Ответ на »сообщение 5238« (Руслан Богатырев)
___________________________
Вопрос: как вы считаете, язык Occam относится к императивным?
Occam в глаза не видел.
Смотрим книжку на предмет признаков императивности:
- Присваивание ? Есть
j := j + 1
- Циклы ? Есть
SEQ
SEQ i = 0 FOR n
SEQ j = 0 FOR n
a[i][j] := 0.0 (REAL32)
Да еще с изменением ячеек массива на месте.
- Операторы не возвращающие значений ?
Есть. Смотрите if
Так теперь смотрим http://en.wikipedia.org/wiki/Occam_programming_language
Так и есть: occam is an imperative procedural language (such as Pascal).
№ 5240 26-09-2007 17:23 | |
Ответ на »сообщение 5239« (Сергей Перовский)
___________________________
Какие претензии к императивному Оберону, что он не поддерживает конструкции, практически в императивном программировании не используемые?
Абсолютно никаких. Был вопрос чем именованные функции отличаются от анонимных. К оберону никаких претензий.
Более того я первый противник скрещивания ужа с ежом. Я считаю что вместо того чтобы делать очередного монстра PL1 for 21 century нужно просто на одной платформе полноценно поддерживать 2 языка - чисто императивный OO (Оберон) и чисто функциональный (haskell)
Задачей в данном случае является обеспечить бесшовную интеграцию языков. Чтобы можно было модули разных языков компилировать в одном проекте.
№ 5239 26-09-2007 16:39 | |
Ответ на »сообщение 5235« (Jack Of Shadows)
___________________________
Я тоже не передаю функции в качестве параметров и тем более не возвращаю их как результат, когда работаю на императивных языках.
Об этом и звук :)
Какие претензии к императивному Оберону, что он не поддерживает конструкции, практически в императивном программировании не используемые?
№ 5238 26-09-2007 16:34 | |
Ответ на »сообщение 5235« (Jack Of Shadows)
___________________________
Хотя вроде задачи одни и те же. С чего бы это ? :))
Задачи-то одни, а вот полушарии мозга -- разные :)
В ИП привыкли работать не на том уровне абстракций, как в ФП. Это не значит, что нельзя работать на ином. Можно. И работают. Просто разная шкала ценностей. ИП ценно одними средствами. ФП -- другими. И под эти средства заточены синтаксис и семантика. ИП и ФП -- два полюса. Диалектика... :)
Кстати, в ИП можно вполне сохранить степень детализации более высокую, нежели в ФП (как и сейчас), но при этом легко уйти от императива...
Вопрос: как вы считаете, язык Occam относится к императивным?
См. http://www.europrog.ru/ilog.html#260207 и
"Introduction to the Programming Language Occam". Daniel Hyde (1995)
http://www.europrog.ru/paper/dh1995-01e.pdf
№ 5237 26-09-2007 16:23 | |
Ответ на »сообщение 5236« (Geniepro)
___________________________
А вот посложнее пример - простейшая сортировка:
Допустим, такой алгоритм на псевдокоде на основе Си:
void sort (Ord el => el arr[])
}
}
} и почти дословный перевод на Хаскелл: sort arr = do
let len = length arr
forM [1..len-1] $ \i -> do
forM [0..i-1] $ \j -> do
ai <- readIORef (arr !! i)
aj <- readIORef (arr !! j)
when (aj > ai) $ do
(arr !! i) =: aj
(arr !! j) =: ai
-- вспомогательные функции:
ref =: n = ref `writeIORef` n
when condition action = if condition then action else return () Тут внутри функции sort имеются три анонимных функции, две из которых имеют параметры i и j соответственно и подаются как аргументы функциям forM, а третья - без параметров, подаётся функции when...
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|