Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Бррр. Скорость здесь постольку-поскольку. Когда мы вводим конструкции типа repeat .. until .. то надо полагать, что мы их вводим не для того, чтобы побить все рекорды в language shootout benchmarks. Скорее всего мы это делаем для того, чтобы чего-то там выглядело более красиво.
LCR>Так вот, в этом свете замечание VK про то, что замыкания тормозят ... выглядит немного странно. В конце концов, если не нравится скорость — перепеши без использования замыканий. Предлагать же переписывать тормозящие места на макросах везде, где можно, ну я бы поостерёгся, ибо оплачивать скорость полученную макросами нам придётся усложнением поддержки — это и есть упомянутая мной выше небесплатность макросов.
Насчет усложения поддержки:
По-моему это
macro Repeater (condition, action)
syntax ("repeatLoop", action, "until", "(", condition, ")")
{
<[
{
def until () {
$action
when ($condition) until();
}
until ()
}
]>
}
не сильно сложнее чем
class Repeater( action: => unit ) {
def until( condition: => boolean ): unit = {
action
if( condition ) until( condition )
}
}
def repeatLoop( action: => unit ) = new Repeater( action )
Основная разница которую я вижу — это то, что макросы — это функции, которые живут непосредственно в модуле, в то время как в случае с замыканиями это упаковано в класс.
Но вообще макросы — это конечно механизм более низкого уровня, но зато и гораздо более мощный.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Benchmark] Встроенный while vs макросы vs замыкания
Здравствуйте, PhantomIvan, Вы писали:
PI>a D по скоростным характеристикам аналогичен C ?
В большинстве простых случаев что-то среднее между C и C++.
В данном тривиальном случае есть предположение что все они практически одинаково себя покажут.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Benchmark] Встроенный while vs макросы vs замыкания
Здравствуйте, eao197, Вы писали:
E>Возможно свет на производительность Scala замеров прольет замечание Jamie Webb о том, что в данном примере JIT вообще не запуститься.
Хм, получается что для функционального программирования JVM вообще не подходит (точнее, очень плохо подходит)?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Benchmark] Встроенный while vs макросы vs замыкания
АХ>>Также можно сказать, что managed Nemerle на .NET очень близок к этим результатам, что не может не радовать . LCR>Голый цикл while? Такие результаты можно экстраполировать как угодно, и они всё равно не будут соответствовать действительности.
Пока я выяснил, что на (C++/C#)(обычный цикл)/Nemerle(макрос) работают приблизительно с одинаковой скоростью, а D даже чуть быстрее.
В то же время Scala в 10 раз медленее. Подозреваю, что это из-за того, что цикл засунут в замыкание.
LCR> Меня вот радует, что относительный провал варианта с замыканиями в Скале всего примерно 2 раза, и это опять же ни о чём не говорит.
Провал в 2 раза только на HotSpot client JVM. На JRockit провал всего в 20%, хотя вообще медленее в 7 раз .
Но дело в том, что даже простой цикл while когда его засунули в замыкание работает на Scala в 10 раз медленее чем на C++/C#/D/Nemerle!
У меня складывается впечатление что из-за особенностей JIT-компиляции в JVM она очень плохо подходит для таких функциональных наворотов. Или же возможно оптимизатор Scala должен быть более агрессивным. Я пробовал флаг "-Xinline", но вылетела ошибка что такого модуля нет .
VD>Знаешь, я тоже не стану читать книгу с монитора. Но код — это не крига которую можно читать страница за страницей. Код связанная структура и без заглядывания в определения элементов на которые ссылается ткущий фрагмент кода ничего понять нельзя. Естественно, что речь идет о больших проектах.
отсюда вопрос — как вообще работают скриптовики с большими проектами?
я только с одним большим проектом дело имел такого рода (пхп), там было 2 человека, которые разбирались досконально, и учили остальных, что к чему
я же не нашел ничего лучшего, как прикрутить дебаг к пхп, и попасти систему на тестовом сайте, сам же прыгал по коду, разбирался с помощью дебаггера, что с чем связано... а как ещё...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: [Benchmark] Встроенный while vs макросы vs замыкания
PI>>a D по скоростным характеристикам аналогичен C ?
АХ>В большинстве простых случаев что-то среднее между C и C++. АХ>В данном тривиальном случае есть предположение что все они практически одинаково себя покажут.
а какие в С++ накладные расходы по сравнению с С, кроме поддержки полиморфизма?
PI>>>а кто ещё? WolfHound? я?
FR>>Давай обойдемся без списков врагов народа
VD> Ты это еао197 расскажи который беззастенчиво занимается составленийм подобных списков.
кстати, про "врагов народа"... а где Oyster исчез, он помнится, крут в nemerle...
Здравствуйте, Klapaucius, Вы писали:
K>Как вы уже все поняли, без подвоха тут не обошлось. И, что мне совсем не понравилось, два опытных немерлиста пропустили ошибку и определили тип функции неверно. K>А корень всех зол в данном случае в том, что типы уточнялись не там где надо, нес па?
Откровенно говоря смысла уточнять типы тут вообще нет. Как и заниматься визуальным контролем. Подобные ошибки отлично отловит компилятор. Не скрипт все же.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
K>Как вы уже все поняли, без подвоха тут не обошлось. И, что мне совсем не понравилось, два опытных немерлиста пропустили ошибку и определили тип функции неверно.
я не волшебник, я только учусь
всего один проект на немерле написал, пробую потихоньку, где функциональный стиль применим, а где не очень,
и пока не тулю его везде, где попало — в моей смеси пока императивное преобладает
так что нечего удивляться, к функциональщине я только привыкаю
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Benchmark] Встроенный while vs макросы vs замыкания на
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Также можно сказать, что managed Nemerle на .NET очень близок к этим результатам, что не может не радовать .
У тебя в замеры включена JIT компиляция, что есть некорректно. Попробуй её исключить, может получится ещё больше порадоваться
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re: [Benchmark] Встроенный while vs макросы vs замыкания на
Андрей Хропов wrote: > Хмм, очень любопытно что JRockit существенно медленнее, а HotSpot > -server вообще нереально хуже(!) в этом случае .
Нужно предварительно "прогреть" циклы, чтобы HotSpot их скомпилировал. У
-server по умолчанию стоит больший чем у -client'а порог компиляции.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: [Benchmark] Встроенный while vs макросы vs замыкания
Lazy Cjow Rhrr wrote: > АХ>А HotSpot -server вообще поразил! > Здесь явно какой-то баг... Завтра на работе попробую погонять.
Это не баг, это фича. Цикл сначала будет очень долгое время выполняться
в interpreted-режиме.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[4]: [Benchmark] Встроенный while vs макросы vs замыкания
PhantomIvan wrote: > АХ>В большинстве простых случаев что-то среднее между C и C++. > АХ>В данном тривиальном случае есть предположение что все они > практически одинаково себя покажут. > а какие в С++ накладные расходы по сравнению с С, кроме поддержки > полиморфизма?
Реализация исключений с помощью sjlj (setjump-longjump), как это сделано
в Винде с SEH.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: [Benchmark] Встроенный while vs макросы vs замыкания
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Андрей Хропов, Вы писали:
АХ>>Также можно сказать, что managed Nemerle на .NET очень близок к этим результатам, что не может не радовать .
IT>У тебя в замеры включена JIT компиляция, что есть некорректно. Попробуй её исключить, может получится ещё больше порадоваться
Ни на что кроме Nemerle-.NET
Macro do-while : было 178 -> стало 125 ms elapsed
не повлияло.
Почти вплотную к D. Видимо это оптимум.
Здравствуйте, IT, Вы писали:
IT>Мат и подонковщина заразны. Небольшое послабление и очень быстро сайт превратится в помойку.
Подонковскую лексику надо контролировать, это точно. Ну уж запрещать, так уж всем! А то товарища VladD2 надо банить за каждое второе сообщение, ибо подонковская лексика в них присутствует в изобилии. А уж намеренно он ее использует или по неграмотности — этот вопрос не должен меня беспокоить. Другое решение, вполне нормальное IMO — выдавать некоторым специальные индульгенции, которые будут означать что-то типа "Данному участнику в силу его убогости разрешается пользоваться подонковской лексикой. Он делает это не со зла, а по незнанию и заранее просит его извинить". Таким образом, форум будет поддерживаться в чистоте и в то же время не будет когнитивного диссонанса, что некоторым можно, а остальным нельзя.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Подонковскую лексику надо контролировать, это точно. Ну уж запрещать, так уж всем! А то товарища VladD2 надо банить за каждое второе сообщение, ибо подонковская лексика в них присутствует в изобилии.
Можно пару примеров сообщений товариша Влада, содержащих подонковскую лексику?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Да, он делает это не специально, а в силу неграмотности. Поэтому я и говорю, что нужна специальная индульгенция. Но выдавать ее нужно только заслуженным людям, уровня создателей сайта.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, PhantomIvan, Вы писали:
PI>к примеру, я кидал снипеты немерле пхп-исту (старому пхписту, которого сейчас насильно пересадили на асп.нет и он страшно ругается),
Странно наоборот радоваться должен.
PI> и после вот такого макрос-поверед снипета: PI>
PI> WriteLine($"Saving entries ($(entries.Length) elements) at path $path");
PI>
PI>старый пхпист воскликнул: "ё, да ведь это же спиж*ено из PHP!" PI>"да", — ответил я, — "и очень удачно, по-мойму, спиж*ено"...
Если мне не изменяет память, в PHP не надо было преред строками ставить '$', обращение к полям классам производилось через фигурные скобки и к тому же оставалась куча ситуаций, где подобный синтаксис был неприменим. Потому, если эта фича и была украдена, то она была украдена с умом, чтобы учесть подводные камни. И введена запись через '$' ещё задолго до PHP, так что в PHP это тоже было украдено. А вообще, не стоит сравнивать Nemerle с динамикой на примере PHP, т.к. у PHP настолько кривой дизайн, что его уместно сравнивать только с самим собой.
PI>>к примеру, я кидал снипеты немерле пхп-исту (старому пхписту, которого сейчас насильно пересадили на асп.нет и он страшно ругается),
K>Странно наоборот радоваться должен.
я же сказал, это старый пхпист: во-первых, он мыслит динамикой (скриптом), во-вторых, к смарти привык (шаблоны к пхп, позволяют гибко разделить код/дизайн), в-третьих, только асп-нет внатуре запутанная технология — некоторые "баги" происходят из ииса, некоторые еще из тысячи разных мест, и ему сначала непонятно что к чему, непонятно как что на основе компонент крутить, что куда кидать (viewstate в пхп не присутствует, например) и т.д.
PI>> и после вот такого макрос-поверед снипета: PI>>
PI>> WriteLine($"Saving entries ($(entries.Length) elements) at path $path");
PI>>
PI>>старый пхпист воскликнул: "ё, да ведь это же спиж*ено из PHP!" PI>>"да", — ответил я, — "и очень удачно, по-мойму, спиж*ено"...
K>Если мне не изменяет память, в PHP не надо было преред строками ставить '$',
ага, достаточно "магические кавычки" поставить K> обращение к полям классам производилось через фигурные скобки и к тому же оставалась куча ситуаций, где подобный синтаксис был неприменим.
ага K> Потому, если эта фича и была украдена, то она была украдена с умом,
а я что сказал? K> чтобы учесть подводные камни.
на самом деле ни фига не украдено, кроме идеи — а "подводных камней" тут нет вовсе K> И введена запись через '$' ещё задолго до PHP, так что в PHP это тоже было украдено.
мобыть, пхп просто самый известный "долларовый" язык K> А вообще, не стоит сравнивать Nemerle с динамикой на примере PHP, т.к. у PHP настолько кривой дизайн, что его уместно сравнивать только с самим собой.
кстати, а какой из языков есть "классическая динамика"?
MS>Другое решение, вполне нормальное IMO — выдавать некоторым специальные индульгенции, которые будут означать что-то типа "Данному участнику в силу его убогости разрешается пользоваться подонковской лексикой. Он делает это не со зла, а по незнанию и заранее просит его извинить".
ага, можно мне такую индульгенцию?
а ещё смайлик такой — типа с бородой и с палочкой? (инвалид умственного труда)