Re[15]: Языковые войны: императивные vs функциональные
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.03.05 06:57
Оценка:
Здравствуйте, Gaperton, Вы писали:
G>Эта... уже наступило. Pentium — суперскалярный процессор, способный выполнять более одной инструкции за такт. Там конвейер длиннющий, и все такое. Лично наблюдал своего коллегу, который год назад решил "оптимизнуть" цикл вставкой на ассемблере . Эх, типа, как в старые добрые времена, на трешке с 4 мегами ОЗУ, размахнись рука, раззудись плечо — компайлер фигню какую-то написал, ща я паправлю... Стало медленнее . Потом он разобрался почему, и догнал по скорости компилятор, а потом выбросил свою вставку за не надобностью.
Я тоже наблюдал не так давно абсолютно аналогичную картину. Все было именно так — биение копытом в грудь, обвинения в адрес тупого компилера, демонстрация заведомо косячного продукта авто-оптимизации, демонстративное написание своего варианта, четыре исправления глюков в самописаном коде, и ужас при сравнении результатов. "Очевидно кривой" код рвал рукоделье на мелкие куски. Я смеялся. Не даром компайл-райтеры свои баксы получают, ох не даром
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Языковые войны: императивные vs функциональные
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.03.05 07:37
Оценка:
Здравствуйте, Gaperton, Вы писали:

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


Q>>Производительность — это одно. Давайте еще и выразительность оценим. Я тут как раз написал эмулятор многотредовости на OCaml с поддержкой самых простых возможностей — pid, имя процесса, приоритет, переключение задач (не вытесняющее ясен пень), fork, exec, wait на произвольном условии и на простейшем спинлоке, kill и фоновый процесс, который читает команды и выполняет их. Все это заняло примерно 180 строк. Было бы интересно посмотреть, как это выглядело бы на С++. + этот эмулятор интегрирован в ocaml top level, т.е. не вырубая эту "OS" можно ее приостановить и добавить новые программы или подрихтовать чего-нибудь, а потом опять вернуться в нее. Но C++ это не светит по определению, поэтому я требовать этого не буду.


G>Я бы тебе показал — как раз готовлю Alpha1 такой фигни на С++ под наш продукт. Но не могу — NDA.


Ну а размер, аля число строк/классов тоже под NDA попадает?
Re[10]: Языковые войны: императивные vs функциональные
От: Gaperton http://gaperton.livejournal.com
Дата: 17.03.05 10:09
Оценка: :)
Здравствуйте, VladD2, Вы писали:

Я тронут таким вниманием к своей персоне с твоей стороны, а также трогательной заботой о моей карьере. Аж скупую слезу вышибло. Тебе совсем делать нехер что-ли, я не пойму? У тебя проблемы какие-то личного характера, Влад?
Re[15]: Языковые войны: императивные vs функциональные
От: GlebZ Россия  
Дата: 17.03.05 11:46
Оценка:
Здравствуйте, Gaperton, Вы писали:

GZ>>+1. И это есть гуд. Но к сожалению мы обитаем в мире PC и меряем все миром PC. Когда настанут времена коммунизма, и на PC можно будет такое сделать, это будет круто. Но до сих пор приходится учитывать не только что нужно делать, но и как это нужно делать.


G>Эта... уже наступило. Pentium — суперскалярный процессор, способный выполнять более одной инструкции за такт. Там конвейер длиннющий, и все такое. Лично наблюдал своего коллегу, который год назад решил "оптимизнуть" цикл вставкой на ассемблере . Эх, типа, как в старые добрые времена, на трешке с 4 мегами ОЗУ, размахнись рука, раззудись плечо — компайлер фигню какую-то написал, ща я паправлю... Стало медленнее . Потом он разобрался почему, и догнал по скорости компилятор, а потом выбросил свою вставку за не надобностью.

Да я собственно не об этом. Конкретный пример. Существует достаточно большой граф объектов. По графу нужно достаточно много раз пройтись для выполнения какой-то операции. Проход по графу и операции осуществляется с помощью виртуальных функций. И все начинает сильно тормозить. Немного танцев с бубном+визитер, функции становятся статическими. Результат улучшился на порядок. И компилятор тут не при чем. Он делал только то, что от него просили.

С уважением, Gleb.
Re[10]: Языковые войны: императивные vs функциональные
От: mister-AK Россия  
Дата: 17.03.05 11:54
Оценка: :)
Здравствуйте, VladD2, Вы писали:

MA>>Следовательно:

MA>>Gaperton понимает, что тупые работодатели принимают на работу тех кто работает на С++ (мэйнстрим), чтобы платить им стабильно за работу.

VD>По логике тебе большую оценку не поставили бы.


это вряд ли всё нормально у меня на логику по тестам и анализам
12 независимых присяжных поставили бы — учение верно, потому что истино

VD>Если деньги платят всем. То без разницы где ты и кем работаешь. При этом если ты работаешь, то искать тебе уже ничего не нужно. Ведь "Деньги вообще всем платят, кроме безработных.".


Но они же тупые!!! Собственно — то что они не платят всем кто работает, а только тем кто работает на С++ (мэйнстрим) и инкапсулирует их тупость

MA>>Выводы:

MA>>Работодатели тупые.
MA>>Работодатели платят деньги Gaperton, работающему за С++.



VD>Я бы сделал другие выводы:

VD>1. За мэйнстим деньги платят чаще.
эквивалентно "Работодатели платят деньги Gaperton, работающему за С++.", если оговороить, что "мэйнстим = С++"


VD>2. Платят не одинаково.

этот вывод вообще из логики четырех утверждений не следует откуда подробности?

VD>3. Хорошо платят за работу/опыт.

опять же... это уже домыслы хотя.. опыт С++ тяжкий... да, в этом что то есть — подспудное в логике

VD>4. Иногда надо искать проблемы не только в работодателях.

хорошо, но это уже исследование проблематики
Re[15]: Языковые войны: императивные vs функциональные
От: Gaperton http://gaperton.livejournal.com
Дата: 17.03.05 20:07
Оценка:
Здравствуйте, Курилка, Вы писали:

G>>Я бы тебе показал — как раз готовлю Alpha1 такой фигни на С++ под наш продукт. Но не могу — NDA.

К>Ну а размер, аля число строк/классов тоже под NDA попадает?
Не подпадает, но у нас наверняка функционал разный сильно.

Планировщик, задача, +event (примитив синхронизации). Обертку вокруг Win32 fiber-API не считаю.
6 классов
447 + 285 строк в файле, с пустыми и комментариями. Без пустых строк, строк с { и }, и комментариев примерно на 40-50% меньше.

Функционал такой:
— Планировщик в асимптотике делит поровну время на смеси задач построенных на файберах или коллбэках. В случае файберов, в задаче явно обозначены точки, в которых планировщик может ее прервать.
— Он делит время поровну независимо от поведения задач — даже если у конкретной задачи фактический квант времени выполнения сильно отличается от запуска к запуску.
— Планировщик умеет грамотно обходиться с задачами, не использующими весь отпущеный квант времени (пускаются не слишком часто, но с высоким приоритетом).
— Любая операция планировщика выполняется за O(1).
— Накладные издержки на планирование весьма небольшие, и не зависят от количества задач — тоже O(1).
— Примитив синхронизации Event — сложность постановки задачи на ожидание O(1) — это очень быстрая операция. Как и разблокирование. Ожидающая задача целиком исключается из структур планировщика, и не создает абсолютно никакой нагрузки.

Примерно так. Заточен под десятки тысяч "задач".
Re[11]: Языковые войны: императивные vs функциональные
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.03.05 00:47
Оценка: :))
Здравствуйте, Gaperton, Вы писали:

G>Я тронут таким вниманием к своей персоне с твоей стороны, а также трогательной заботой о моей карьере. Аж скупую слезу вышибло.


Я рад что тебя порадовал.

G>Тебе совсем делать нехер что-ли, я не пойму?


Как и тебе. Отдыках по вечерам.

G>У тебя проблемы какие-то личного характера, Влад?


Пока вроде нет. Если появятся, то сразу заведу блог и постараюсь о них расказать столь же живо и весело как это делашь ты.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Языковые войны: императивные vs функциональные
От: Quintanar Россия  
Дата: 18.03.05 13:31
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Функционал такой:

G>- Планировщик в асимптотике делит поровну время на смеси задач построенных на файберах или коллбэках. В случае файберов, в задаче явно обозначены точки, в которых планировщик может ее прервать.
G>- Он делит время поровну независимо от поведения задач — даже если у конкретной задачи фактический квант времени выполнения сильно отличается от запуска к запуску.
G>- Планировщик умеет грамотно обходиться с задачами, не использующими весь отпущеный квант времени (пускаются не слишком часто, но с высоким приоритетом).
G>- Любая операция планировщика выполняется за O(1).
G>- Накладные издержки на планирование весьма небольшие, и не зависят от количества задач — тоже O(1).
G>- Примитив синхронизации Event — сложность постановки задачи на ожидание O(1) — это очень быстрая операция. Как и разблокирование. Ожидающая задача целиком исключается из структур планировщика, и не создает абсолютно никакой нагрузки.

Не, у меня планировщик самый примитивный — на основе списка и wait_queue напрямую не реализованы, но все это не так сложно добавить, если взять очередь с ассимптотикой добавить/взять O(1). Вместо фиберов — CPS функции.
Но самое главное, когда я это писал, я еще раз ощутил, что такое нормальный язык — за все время написания у меня была всего одна рантайм ошибка с exception'ом и всего несколько логических ошибок. Правилом было, когда функция начинала работать без ошибок сразу же. И это учитывая, что я писал буквально наугад, поскольку сам плохо понимаю, как нужно писать используя CPS.
Re[11]: Языковые войны: императивные vs функциональные
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.05 03:34
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Наоборот как раз бывает. Оптимизированная реализация алогритмов на С

C>выглядят ужасно.

Оптимизации вне зависимости от языка очень часто выглядят намного хуже чем чистые алгоритмы и темболее код который специально пытались написать понятным и компактным.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Языковые войны: императивные vs функциональные
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.05 03:34
Оценка: 1 (1)
Здравствуйте, alexeiz, Вы писали:

A>Конечно, если хочешь показать, что на OCaml'е можно лучше написать, пожалуйста. Возьми любую (не совсем тривиальную) задачу с этого сайта и вперед. Только не забудь привести свой код. Посмотрим, как красиво он будет выглядеть.


Да фиг с ней с нетривиальной. Меня вот интересут можно ли примитивную быструю сортировку реализовать эффективно в функцональном стиле. Конечно используя копирование списков и рекурсию можно выразить этот алгоритм элегантно и кратко. Но при этом:
1. Просисходит копирование данных, что на больших объемах может выйти боком.
2. В качестве медианы (среднего значения) берется самый первый элемент, что снизит скорость на заранее отсортированных списках.

На ИЯ я могу как модифицировать список по месту, так и брать медиану из середины списка.

Вот и интересно, могут ли что-то оптимизаторы ФЯ противопоставить грубой силе?
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Языковые войны: императивные vs функциональные
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.05 03:34
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>alexeiz пишет:


>>> Наоборот как раз бывает. Оптимизированная реализация алогритмов на С

>>> выглядят ужасно.
>> Вопрос в том, чем будет эта реализация на ФЯ, если на C она ужасна.

C>А вот на ФЯ оно обычно проще выглядит.


Это если без оптимизаций. Да и обычно — это "проще" упирается в использование тех или иных фич языка (вроде лист-компрехеншенов) кторые в общем-то к ФЯ отношение имеют очень отдаленное. Тот же лист-компрехеншен есть и в Питоне.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Языковые войны: императивные vs функциональные
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.05 03:34
Оценка:
Здравствуйте, Gaperton, Вы писали:

Здорово! Человек говорит о 10-кратном отстовании, а ему в ответ.

G...7-8%. Главное, что не вдвое медленее — это уже реально заметно.



Здается мне, что есть случаи когда Окамл предоставляет оптимизацию аналогичную С++-ным рукопашным. Тогда все ОК. А если вопрос упирается в неэффективность функциональных паттернов, то тут уже нужен супер умный оптимизатор. И вот тут вознкикают очень большие сомнения. В общем, без серьезного анализа, и кучи тестов утверждения о том что Окамл стаит по скорости между С и С++ звучат неубедительно.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Языковые войны: императивные vs функциональные
От: Cyberax Марс  
Дата: 20.03.05 09:09
Оценка:
VladD2 пишет:

> Да фиг с ней с нетривиальной. Меня вот интересут можно ли примитивную

> быструю сортировку реализовать эффективно в функцональном стиле.
> Конечно используя копирование списков и рекурсию можно выразить этот
> алгоритм элегантно и кратко. Но при этом:
> 1. Просисходит копирование данных, что на больших объемах может выйти
> боком.

Копирование данных в ФЯ — дешовая операция, так как реального
копирования не происходит. Все данные же неизменяемые, так что просто
копируются указатели на них.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[13]: Языковые войны: императивные vs функциональные
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 20.03.05 09:23
Оценка:
VladD2 пишет:
> используя копирование списков и рекурсию можно выразить этот алгоритм
> элегантно и кратко. Но при этом:
> 1. Просисходит копирование данных, что на больших объемах может выйти боком.

Не происходит.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[11]: Языковые войны: императивные vs функциональные
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.03.05 12:06
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Я тронут таким вниманием к своей персоне с твоей стороны, а также трогательной заботой о моей карьере. Аж скупую слезу вышибло. Тебе совсем делать нехер что-ли, я не пойму? У тебя проблемы какие-то личного характера, Влад?


С подобным в личную почту
... << RSDN@Home 1.1.4 beta 4 rev. 365>>
AVK Blog
Re[14]: Языковые войны: императивные vs функциональные
От: prVovik Россия  
Дата: 20.03.05 12:37
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Копирование данных в ФЯ — дешовая операция, так как реального

C>копирования не происходит. Все данные же неизменяемые, так что просто
C>копируются указатели на них.

Если копирование бесплатно, то изменение дорого.

Это мне напомнило анекдот:

Приехал один человек в гости к своему другу-кавказцу. Едут из аэропорта. Доезжают до светофора — не нем красный свет. Кавказец на это внимание не обращает — едет дальше. Гость спрашивает у него:
-- как же ш так, красный свет ведь!
-- я джигит! мнэ можно на красный ехат.

Доезжают до следующего светофора — на нем зеленый свет. Кавказец по тормозам. Гость недоумевает:
-- дак зеленый же! Можно же ехать!
-- Ага, а вдруг справа другой джигит вылетит?

... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re: Языковые войны: императивные vs функциональные
От: Gaperton http://gaperton.livejournal.com
Дата: 20.03.05 12:46
Оценка: :)
Здравствуйте, Gaperton, Вы писали:

Да... Опять началось, блин Я протестую — мало того, что была порезана дискуссия, к которой и только к которой относился этот пост, ему было присвоенно название, не соответствующее содержанию подветки.

Чтобы ни у кого не создалось ложного впечатления от вырванного из контекста письма ), зацитирую себя — из этой же ветки, на всякий случай, в попытке остановить очередной виток бестолкового флейма.

Эти языки (с компиляторами) я привел не потому, что считаю что "они во сто раз круче мэйнстрима и императивных языков" (вообще в этот спор ввязываться не хотел), а потому, что это — известные мне академические проекты, у которых приличная производительность. Кстати, Lisp и OCaml являются в равной степени и императивными языками, из них чистый ФЯ только Clean.

Re[15]: Языковые войны: императивные vs функциональные
От: Cyberax Марс  
Дата: 20.03.05 13:08
Оценка:
prVovik пишет:

> C>Копирование данных в ФЯ — дешовая операция, так как реального

> C>копирования не происходит. Все данные же неизменяемые, так что просто
> C>копируются указатели на них.
> Если копирование бесплатно, то изменение дорого.

В ФЯ изменение — это нежелательная операция, а в некоторых ФЯ вообще
запрещенная.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[16]: Языковые войны: императивные vs функциональные
От: prVovik Россия  
Дата: 20.03.05 13:20
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В ФЯ изменение — это нежелательная операция, а в некоторых ФЯ вообще

C>запрещенная.
В том то и дело. Поэтому изменения должны быть копирующими
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[17]: Языковые войны: императивные vs функциональные
От: Cyberax Марс  
Дата: 20.03.05 13:29
Оценка: :)
prVovik пишет:

> C>В ФЯ изменение — это нежелательная операция, а в некоторых ФЯ вообще

> C>запрещенная.
> В том то и дело. Поэтому изменения должны быть *копирующими*

Не поэтому, а для того, чтобы сохранялась ссылочная целостность.
Легкость копирования — приятный побочный продукт.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.