Re[30]: Write in Nemerle!
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.01.07 07:04
Оценка:
Здравствуйте, ie, Вы писали:

ie>Да фиг знает, если честно.

ie>Вчера вечером о выводах как-то недумалось — спать хотелось. Сегодня утром сделал вывод, что надо было плюнуть на все и идти таки спать

Хороший вывод.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Write in Nemerle!
От: PhantomIvan  
Дата: 08.01.07 09:27
Оценка:
VD>Здорово. Теперь объясните мне, пожайлуста, какие выводы из этой пенесометрии можно сделать?

VD>Собственно интересуют ответы обоих сторон.


я собственно, третья сторона, но моё мнение такое:
членометрия важна —
с каждым таким примером становится ясно:
немерле позволяет в большинстве случаев переписать прогу 1-в-1
или почти 1-в-1

собсно, скепсис в среднем и уменьшается
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Write in Nemerle!
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.01.07 13:10
Оценка:
Здравствуйте, PhantomIvan, Вы писали:

PI>собсно, скепсис в среднем и уменьшается


Вообще-то товарищь здесь защищал мнение о том, что ленивость по умолчанию это супер-пупер-здорово. Мол это дает невероятную гибкость. На просьбу привести жизненный пример подтверждащий его слова он привел очередной оторванный от жизни пример из математики (и как всегда далекий от оптимального алгоритм в угоду красоты).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Write in Nemerle!
От: PhantomIvan  
Дата: 08.01.07 14:42
Оценка:
PI>>собсно, скепсис в среднем и уменьшается

VD>Вообще-то товарищь здесь защищал мнение о том, что ленивость по умолчанию это супер-пупер-здорово. Мол это дает невероятную гибкость. На просьбу привести жизненный пример подтверждащий его слова он привел очередной оторванный от жизни пример из математики (и как всегда далекий от оптимального алгоритм в угоду красоты).


та ладно, рано или поздно все "гастрономы" и "бизнесы" будут удовлетворительно автоматизированы
и программирование вернётся к изначальным ценностям — там, вычисление простых чисел,
расчёты вычислительной математики, системы автоматического вывода,
управление марсоходами и прочими терраформирующими комбинатами...

так что фраза "оторванный от жизни" — это временная фраза, уводящая программирование
от его, программирования, цели...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Write in Nemerle!
От: Андрей Хропов Россия  
Дата: 08.01.07 16:16
Оценка:
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, VladD2, Вы писали:


VD>>Здорово. Теперь объясните мне, пожайлуста, какие выводы из этой пенесометрии можно сделать?


ie>Да фиг знает, если честно.

ie>Вчера вечером о выводах как-то недумалось — спать хотелось. Сегодня утром сделал вывод, что надо было плюнуть на все и идти таки спать
ie>Вообщем вывод который я для себя сделал, пора завязывать с пенесометрией! Вот только alpha-blend на J сделаю, уже пообещал Хропову

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

Результаты там были такие:
Lisp  - от 2 до 8,5 часов
C/C++ - от 3 до 25 часов
Java  - от 4 до 63 часов

( здесь). Сам Норвиг (который не кто-нибудь там, а руководитель всего исследовательского подразделения в Google) написал за 2 часа на Lisp.

Однако тут один товарищ (Lionello Lunesu) недавно запостил свое решение на D, которое заняло по его словам всего 1 час 15 мин!

Я сам попробовал на Nemerle и у меня вышло 3 ч 17 мин. Пришлось правда самому писать тривиальщину которая должна быть в станд. библиотеке (построчное чтение из файла через IEnumerable) и также сказалась недоделанность отладчика. А также мне понадобилось конвертировать string в list[char] и обратно, хотя возможно можно обойтись и без этого.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Write in Nemerle!
От: R.K. Украина  
Дата: 08.01.07 17:42
Оценка: 5 (1)
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, R.K., Вы писали:


ie>

>>out.exe
ie>Elapsed: 8.0298764 ;; Count: 1080193




ie>>>По поводу переписывания на C++, опять же ленивости то нет, как ты функцию подобную primesFromTo писать собираешься?

RK>>Ну будет не так кратко, но что быстрее в 4-8 раз — почти не сомневаюсь

ie>Можно и в моем варианте еще немного пооптимизировать. Например, избавится от основных тормозов — списков в строчках (**) и (++), заменить их соответственно на

ie>
ie>    def eratosthenes = (p, i) => 
ie>        foreach (j in [i,i+p..arr.Length-1])
ie>            arr[j] = true;
ie>    def addCulculated = (s, e) => 
ie>        foreach (j in [s..e-1])
ie>            when (!arr[j])
ie>                lst.Add(num(j));
ie>


ie>

>>out.exe
ie>Elapsed: 1.1022526 ;; Count: 1080193


У меня на компе соответственно получается 7.62 и 0.98 в среднем.
Спасибо за указание тормозных мест — они в наших программах аналогичны. Пооптимизировал свою изначальную версию, вот что получилось:
genMap 2 3 = [5,7] -- special case, even p0^2
genMap p0 p1 = arrayFilter $ accum (\_ e -> e)
    (listArray (1, bound-1) $ repeat True :: UArray Int Bool)
    [ (j, False)
    | i <- takeWhile (<p1) $ tail primes
    , j <- takeWhile (<bound) $
        iterate (+i) $ (correct (lo-rem lo i+i) i - lo) `quot` 2
    ]
    where
    lo = p0^2; hi = p1^2
    bound = (hi-lo) `quot` 2
    correct n i
        | even n = n+i
        | otherwise = n
    arrayFilter a = intern (lo+2) 1
        where intern n i
            | i==bound = []
            | a!i = n : intern (n+2) (i+1)
            | otherwise = intern (n+2) (i+1)

Выполняется за 6.10 сек. Но на этом останавливаться не захотелось — вот версия, выполняющая тест за 0.94 сек:
import Data.Array.IO
import System.IO.Unsafe

genMap 2 3 = [5,7]
genMap p0 p1 = unsafePerformIO $ do
    a <- newArray (1, bound) True :: IO (IOUArray Int Bool)
    let erase i = intern $ (correct (lo-rem lo i+i) i - lo) `quot` 2
        where
        intern j
            | j>bound = return ()
            | otherwise = do writeArray a j False; intern $! j+i
        correct n i
            | even n = n+i
            | otherwise = n
    mapM_ erase $ takeWhile (<p1) $ tail primes
    let extract n i acc
        | i==0 = return acc
        | otherwise = do
            f <- readArray a i
            if f
                then ((extract $! n-2) $! i-1) $ n:acc
                else ((extract $! n-2) $! i-1) acc
    extract (hi-2) bound [] >>= return
    where
    lo = p0^2; hi = p1^2
    bound = (hi-lo) `quot` 2 - 1

Все остальные функции остаются без изменений. Ну как?
You aren't expected to absorb this
Re[29]: Write in Nemerle!
От: ie Россия http://ziez.blogspot.com/
Дата: 08.01.07 18:52
Оценка: :)
Здравствуйте, R.K., Вы писали:

RK>Все остальные функции остаются без изменений. Ну как?


Круто! В очередной раз показали, что тормозные программы не есть свойство языков, а есть свойство программистов их пишущих
... << RSDN@Home 1.2.0 alpha rev. 655>>
Превратим окружающую нас среду в воскресенье.
Re[31]: Write in Nemerle!
От: Cyberax Марс  
Дата: 09.01.07 03:21
Оценка:
Андрей Хропов wrote:
> Однако тут один товарищ (Lionello Lunesu) недавно запостил
> <http://www.digitalmars.com/d/lisp-java-d.html&gt; свое решение на D,
> которое заняло по его словам всего 1 час 15 мин!
C++ — 2 часа 20 минут. Начал писать в 4 часа ночи
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: Write in Nemerle!
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.01.07 04:39
Оценка: +1 :)))
Здравствуйте, ie, Вы писали:

ie> Круто! В очередной раз показали, что тормозные программы не есть свойство языков, а есть свойство программистов их пишущих


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

Так же можно поступать и с отладкой.

... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.