Minoru 05.01.2011 21:24 netbook

Почему-то с тех пор, как познакомился с основами функционального программирования, мне стало совершенно лень делать многие вещи на Си. Например, сейчас я пытаюсь написать сортирующую сеть, и мне совершенно лень выделять память под массив id'шников нитей, а потом выдумывать, как бы так поудобнее каждой нити передать не одно число, а пару (в POSIX Threads нити можно передать только один параметр типа void*). В то же время, я недостаточно хорошо знаю Haskell или любой другой язык (в данном случае самым удачным выбором видится Erlang), чтобы написать на нём.
Впрочем, я все равно не представляю — опять-таки, из-за недостатка знаний, — как мне синхронизировать доступ к сортируемому массиву (т.е. я не знаю, как в Haskell/Erlang/etc юзать STM или мьютексы) и как вообще его организовать в условиях чистой функциональности (глобальных переменных-то нет, да и менять свои аргументы функция не может).
В общем, печаль. Может, пора спать? :)

1. eurekafag 05.01.2011 21:24 10075933491294263635427156

Но ведь Си не нужен!

2. Minorueurekafag /1 05.01.2011 21:25 netbook

Си — няшка. Не слышал ни об одном императивном языке, который был бы круче старого доброго чистого Си.

3. 0xd34df00d 05.01.2011 21:25 Azoth_primary

Посмотри на окамль или хацкель :3

4. 0xd34df00deurekafag /1 05.01.2011 21:26

Ты прав.

5. 0xd34df00dMinoru /2 05.01.2011 21:26

А ты неправ.

6. Minoru0xd34df00d /3 05.01.2011 21:26 netbook

Собственно, Haskell я немного (в пределах материала первых 7.68 глав RWH) знаю. Но этого мало.

7. Minoru0xd34df00d /5 05.01.2011 21:27 netbook

Эх, была не была… Почему это не прав?

8. eurekafagMinoru /7 05.01.2011 21:31 10075933491294263635427156

Может, потому что ты мудак?

9. Minorueurekafag /8 05.01.2011 21:33 netbook

А может, ты поищешь какие-то более обоснованные аргументы?

10. 0xd34df00dMinoru /6 05.01.2011 21:34 Azoth_primary

Я бы здесь map/reduce тупо захуячил.
Впрочем, надо сесть с карандашиком и повспоминать про эти сети.

11. 0xd34df00dMinoru /7 05.01.2011 21:34 Azoth_primary

Потому что ты сейчас имеешь геморрой с этим всем низкоуровневым говном. А на плюсцах у меня есть куча примитивов, существенно облегчающих жизнь.

12. Minoru0xd34df00d /10 05.01.2011 21:37 netbook

По-моему, map/reduce здесь ни при чём вообще. Задача и так легко распараллеливается — просто выделяем под каждый компаратор по нити и ждём, пока все они завершатся.

13. 0xd34df00dMinoru /12 05.01.2011 21:37 Azoth_primary

Окей, нарисуй однослойную сеть, которая бы корректно сортировала.

14. eurekafagMinoru /9 05.01.2011 21:39 10075933491294263635427156

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

15. Minoru0xd34df00d /11 05.01.2011 21:39 netbook

Мне не нравится ООП. Возможно, это из-за того, что я его на сравнительно малых (притом, учебных) задачах применял, но мне кажется, что оно только усложняет жизнь. А все эти примитивы наверняка потребуют от меня юзать классы и объекты.

16. 0xd34df00dMinoru /15 05.01.2011 21:40 Azoth_primary

> Мне не нравится ООП.
Это такой офигенный аргумент, что мне даже нечем возразить, кроме как намекнуть на его офигенность.

17. Minoru0xd34df00d /13 05.01.2011 21:40 netbook

«Однослойную»? Я про эти сети только Википедию и читал, и там ни разу слово layer не используется.

18. 0xd34df00dMinoru /17 05.01.2011 21:41 Azoth_primary

Хорошо. Посмотри на картинку еще раз. Видишь, выход одного компаратора подключается на другой?

19. Minoru0xd34df00d /18 05.01.2011 21:42 netbook

Выход*ы*. Да, вижу.

20. Minoru0xd34df00d /18 05.01.2011 21:44 netbook

Или нет, таки выход — от компаратора к компаратору же. Таки пора спать :)

21. 0xd34df00dMinoru /19 05.01.2011 21:44 Azoth_primary

Ну, тем более. Я тут тебе почти алгоритм расписал а, оказывается, на вики все уже есть: http://en.wikipedia.org/wiki/Bitonic_sor... глянь сюда. Неплохо ложится на этакий map/reduce, вроде.

22. Minoru0xd34df00d /21 05.01.2011 22:12 netbook

Почитал (здесь гораздо подробнее написано: http://www.iti.fh-flensburg.de/lang/algo... )
Оказалось, что я таки не совсем правильно понимал map/reduce. Теперь я, кажется, этот недочёт исправил, но теперь я не понимаю другого — чем MapReduce отличается от обыкновенной рекурсии? Что там такого Гугл особенного сделал, что аж целый фреймворк получился?

23. 0xd34df00dMinoru /22 05.01.2011 22:13 Azoth_primary

Тем, что это такой особый вид рекурсии, с двумя явно выделенными частями.
Олсо, это все описано в Кормене, я по нему в свое время ботал.

24. Minoru0xd34df00d /23 05.01.2011 22:14 netbook

Чёрт, сколько же полезной литературы я ещё не прочёл… Спасибо за объяснения!

25. 0xd34df00dMinoru /24 05.01.2011 22:16 Azoth_primary

Это все == сортирующие сети и битоническая сортировка, в частности. Мапредьюс там едва ли есть.

Do you really want to delete ?