OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 09:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Воскресенье, 18 Май, 2008 23:36 

Зарегистрирован: Среда, 14 Ноябрь, 2007 19:03
Сообщения: 1314
А помоему императивные языки не очень катят для такой
забавы. Удобно когда в языке имеется достаточный набор
крупноблочных,расширяемых и гибких операций,а так же возможность порождать по определенным правилам новые
из имеющихся. Ну и компактность записи нужна, а также
наверное полиморфность операций. Для этой цели подходит J
(и о ужас :( Haskell) .
http://ershov.iis.nsk.su/archive/eaimag ... leid=73955


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 06:10 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
По-моему эта забава нужна как раз малочитабельным компактифицированным языкам, где без тонны комментариев в чужом коде ни хрена понять нельзя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 07:28 

Зарегистрирован: Среда, 14 Ноябрь, 2007 19:03
Сообщения: 1314
Наша задача и состоит в программировании на основе исполнимых комментариев.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 08:11 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Info21 писал(а):
По-моему эта забава нужна как раз малочитабельным компактифицированным языкам, где без тонны комментариев в чужом коде ни хрена понять нельзя.

А в тонне чужого кода разобраться проще? :D

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 08:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Geniepro писал(а):
Info21 писал(а):
По-моему эта забава нужна как раз малочитабельным компактифицированным языкам, где без тонны комментариев в чужом коде ни хрена понять нельзя.

А в тонне чужого кода разобраться проще? :D

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

Старая шарманка, связанная с текущим предметом обсуждения чисто ассоциативно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 08:52 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Geniepro писал(а):
И на любом языке нужно весьма постараться, что бы код получился кристально ясным и понятным...

Вот попытка сделать на чистом Haskell кристально ясный и понятный алгоритм quicksort:
Код:
import Control.Monad (when)
import Control.Monad.ST
import Data.Array.ST
import Data.Array.IArray
import Data.Array.MArray
import System.IO.Unsafe
 
qsort :: (IArray a e,Ix i,Enum i,Ord e) => a i e -> a i e
qsort arr = processArray quickSort arr
 
processArray
    :: (IArray a e,IArray b e,Ix i)
    => (forall s. (STArray s) i e -> ST s ()) -> a i e -> b i e
processArray f (arr :: a i e) = runST (do
                arr' <- thaw arr :: ST s (STArray s i e)
                f arr'
                unsafeFreeze arr')
 
quickSort :: (MArray a e m, Ix i, Enum i, Ord e) => a i e -> m ()
quickSort arr = case bounds arr of (lo,hi) -> qsort lo hi
    where qsort lo hi | lo >= hi  = return ()
                      | otherwise = do
              p <- readArray arr hi
              l <- mainLoop p lo hi
              swap l hi
              qsort lo (pred l)
              qsort (succ l) hi
           
          mainLoop p l h | l >= h    = return l
                         | otherwise = do
              l' <- doTil (\l' b -> l' < h && b <= p) succ l                 
              h' <- doTil (\h' b -> h' > l' && b >= p) pred h
              when (l' < h') $
                  swap l' h'
              mainLoop p l' h'
         
          doTil pred op ix = do
              b <- readArray arr ix
              if pred ix b then doTil pred op (op ix) else return ix
 
          swap xi yi = do
              x <- readArray arr xi
              readArray arr yi >>= writeArray arr xi
              writeArray arr yi x


И соответствующий алгоритм на C:
Код:
void qsort(int a[], int lo, int hi) {
{
  int h, l, p, t;

  if (lo < hi) {
    l = lo;
    h = hi;
    p = a[hi];

    do {
      while ((l < h) && (a[l] <= p))
          l = l+1;
      while ((h > l) && (a[h] >= p))
          h = h-1;
      if (l < h) {
          t = a[l];
          a[l] = a[h];
          a[h] = t;
      }
    } while (l < h);

    t = a[l];
    a[l] = a[hi];
    a[hi] = t;

    qsort( a, lo, l-1 );
    qsort( a, l+1, hi );
  }
}


http://www.haskell.org/haskellwiki/Intr ... ksort_in_C
http://www.haskell.org/haskellwiki/Intr ... ranslation


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 10:40 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Ярослав Романченко писал(а):
Вот попытка сделать на чистом Haskell кристально ясный и понятный алгоритм quicksort:

Справедливости ради надо заметить, что вариант на Си далеко не полностью соответствует полиморфному варианту на Хаскелле. В свою очередь Хаскелл не сильно заточен под работу с массивами, особенно деструктивную...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Понедельник, 19 Май, 2008 11:05 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Geniepro писал(а):
работу с массивами, особенно деструктивную...

Переписываем "один в один" на Оберон и никакой деструктивности. Код на C был процитирован из оригинального источника.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Понедельник, 19 Май, 2008 16:55 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Ярослав Романченко писал(а):
Переписываем "один в один" на Оберон и никакой деструктивности. Код на C был процитирован из оригинального источника.

Никакой деструктивности -- это как? Стандартные варианты быстрой сортировки на императивных языках (в частности, приведённый на Си) -- деструктивны.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Понедельник, 19 Май, 2008 18:20 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Geniepro писал(а):
Никакой деструктивности -- это как? Стандартные варианты быстрой сортировки на императивных языках (в частности, приведённый на Си) - деструктивны.
Под деструктивностью понимается изменение (здесь - перестановка элементов) первоначального массива?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Понедельник, 19 Май, 2008 19:33 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
AVC писал(а):
Под деструктивностью понимается изменение (здесь - перестановка элементов) первоначального массива?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Вторник, 20 Май, 2008 00:06 

Зарегистрирован: Среда, 14 Ноябрь, 2007 19:03
Сообщения: 1314
О хорошем стиле вот тут еще есть
http://www.rsdn.ru/forum/message/1888086.flat.aspx
перпроцессинг -это наше все! Айверсон:
Цитата:
Я показал этот фрагмент другим с надеждой заинтересовать кого-нибдудь компетентного и в С и в АПЛ чтобы подхватить эту работу, и вскоре нашёл Роджера Хуи, который был очарован таким необычным (Артуровским) стилем программирования на С, стилем с интенсивным использованием средств препроцессора настолько, что это позволяло дальше работать в ярко-выраженном АПЛ-стиле по-прежнему используя С код.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Вторник, 20 Май, 2008 13:35 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Geniepro писал(а):
AVC писал(а):
Под деструктивностью понимается изменение (здесь - перестановка элементов) первоначального массива?

Ну да.
Просто мне показадось, что Ярослав Романченко понял это иначе (как отсутствие type-safety, отсюда совет переписать сортировку на Обероне).
Мне же хочется, чтобы у нас было взаимопонимание. :)
В принципе, такая "функциональная деструктивность" в императивных языках меня не пугает. А в условиях ограничений по времени и памяти (с чем мне сейчас постоянно приходится сталкиваться) порождение второго массива просто нежелательно.
У меня сложилось впечатление, что реальная работа со структурными переменными в ФЯ весьма неудобна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Вторник, 20 Май, 2008 15:01 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
AVC писал(а):
У меня сложилось впечатление, что реальная работа со структурными переменными в ФЯ весьма неудобна.
Со всеми структурными или только с однородными структурными?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Вторник, 20 Май, 2008 15:26 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
AVC писал(а):
У меня сложилось впечатление, что реальная работа со структурными переменными в ФЯ весьма неудобна.

В каком смысле неудобна? Чем Вас не устраивают мощнейшие и удобнейшие средства паттерн-матчинга?
И какой именно ФЯ Вы имеете в виду? Scheme? Там да, с этим могут быть некоторые неудобства...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Четверг, 22 Май, 2008 11:12 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Valery Solovey писал(а):
AVC писал(а):
У меня сложилось впечатление, что реальная работа со структурными переменными в ФЯ весьма неудобна.
Со всеми структурными или только с однородными структурными?
Вообще-то я думал об однородных. Но, IMHO, неудобны все. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Четверг, 22 Май, 2008 11:14 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Geniepro писал(а):
AVC писал(а):
У меня сложилось впечатление, что реальная работа со структурными переменными в ФЯ весьма неудобна.

В каком смысле неудобна? Чем Вас не устраивают мощнейшие и удобнейшие средства паттерн-матчинга?
Так и не смог понять связи. :(
Geniepro писал(а):
И какой именно ФЯ Вы имеете в виду? Scheme? Там да, с этим могут быть некоторые неудобства...
Некоторые?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Четверг, 22 Май, 2008 15:35 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Хорошо, можете привести реальный пример неудобств для Вас лично, а то что-то не доходит до меня, в чём там проблемы-то?..

Вообще, все эти "удобно-неудобно" настолько субъективны, вот, например, некоторым людям почему-то неудобен двумерный синтаксис со значимыми отступами, почему -- непонятно... :lol:
Всё это просто дело привычки, и в данном случае, уверен, никакой связи с ФП тут нет...

AVC писал(а):
Вообще-то я думал об однородных. Но, IMHO, неудобны все.

Непонятно, что именно имеется в виду под "однородными". Скалярные переменные? Гомогенные контейнеры?
Если речь о Схеме, то там списки являются гетерогенными контейнерами, есть (насколько мне известно) библиотеки паттерн-матчинга, так что особых проблем не должно быть...

В языках семейств Хаскел/ML контейнеры в принципе гомогенные, и что бы сделать их гетерогенными, нужно или объединять нужные типы в один общий АлгТД (что более правильно), или пользоваться экзистенциальными типами, у которых могут быть некоторые ограничения...

Нет, вот Вы всё-таки объясните, что такое по-Вашему, "реальная работа со структурными/однородными переменными в ФЯ"... ;о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плохой код на Хаскелле
СообщениеДобавлено: Четверг, 22 Май, 2008 17:04 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Geniepro писал(а):
Нет, вот Вы всё-таки объясните, что такое по-Вашему, "реальная работа со структурными/однородными переменными в ФЯ"... ;о)
Ну это, наверное, ко мне : ). Я называл однородными переменными массивы, а неоднородными - записи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Любопытное интервью Кнута
СообщениеДобавлено: Четверг, 22 Май, 2008 20:57 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Vlad писал(а):
Alexey Veselovsky писал(а):
Кстати, а что благородные доны скажут о literate programming'е?


Коллега на днях делился своими впечатлениями. "Красиво расписано что и как программа делает. А дальше такое мясо..." :)

Такой подход к Literate Programming никакого отношения не имеет...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB