24 октября 2009

C/C++/Obj-C closures

Не так давно решил таки ознакомиться (никак не мигрировать, боже упаси) на представленный в MacOS X 10.6 GCD, почитал их введение в это дело (ровно одна строчка кода, всё остальное - маркетоидный буллщит), но одна фраза заставила на себя обратить внимание - основной компонент этого GCD - блоки - что-то подозрительно напоминали. И добрался до расшаренной коллегой статьи про реализацию блоков, и понял - ну точно, это ж самые что ни на есть closures, которым скоро 50 лет, их наконец-то добавят и в эти языки... Однако, всё сильнее и сильнее этот лагерь офункционаливается.
Со статьёй крайне рекомендую ознакомиться, а потом по ссылкам в конце. Особенно по первой, там чуть ли не дословно цитируют ruby stdlib и часть парадигм RoR и вообще рубишных фреймворков.
Однако в руби их использование гораздо более синтаксически-слаще...

6 комментариев:

Сёмка Новиков комментирует...

Казалось бы, при чем тут ФП? (:
Клозуры, по большому счету, к фп отношения не имеют, просто так получилось, что впервые они появились в лиспе, потому что тот был сильно динамическим. А дальше в Smalltalk и вперед.

Сёмка Новиков комментирует...

Ну и вообще, переставай уже удивляться, что ObjC/MacOS X так сильно "используют идеологию Ruby", во-первых все как раз наоборот, во-вторых у них общий папа. Папа, кстати, уделывает и Руби и ObjC одной левой до сих пор.

PhoeniX комментирует...

просто офункционаливается тот лагерь не только клозурами - давеча вроде пытались лямбды в сипипи добавить.
Заметь, я не говорил "что ObjC/MacOS X так сильно "используют идеологию Ruby"", я лишь отметил, что в статье в качестве типичных примеров использования клозур приводятся типичные примеры их использования в руби, это раз. И вот то, что наоборот - да ни разу, сам знаешь, что у Матсумото макбук только недавно появился, так что наоборот - нет, общий папа - тоже нет, всё-таки прямыми потомками ни руби ни обжси не являются. Я понял, что ты пытаешься сказать, что у них общие источники для вдохновения, но не путай божий дар с яичницей - никаким макосом в руби не пахнет, и слава богу.
А про папу - если вы такой умный, то почему такой бедный? Как-то даже презентаху смотрел на эту тему - ничего не понял.

Сёмка Новиков комментирует...

>примеров использования клозур приводятся типичные примеры их использования в руби

Которые исторически типичны для Smalltalk'а.

>да ни разу, сам знаешь, что у Матсумото макбук только недавно появился, так что наоборот - нет

Наоборот как раз за счет общего предка я имел в виду.

>прямыми потомками ни руби ни обжси не являются

Ну, эээ, как бы являются оба. Прямой потомок для тебя это использующий конкретный исходный код "папы", что ли?

>А про папу - если вы такой умный, то почему такой бедный? Как-то даже презентаху смотрел на эту тему - ничего не понял.

Ну, наши пилоты, например, учаться на софте написанном на ST. (Гугли "Транзас" если интересно). Я бы вообще не сказал бы, что ST мертв, а уж что он тяжело воспринимается и подавно бы не сказал.

PhoeniX комментирует...

исторически типичны - спорить не буду, не знаю. Прямой потомок - ну да, что-то вроде. А-ля си-сипипи, лисп-схема(наверное; это уже вольный пересказ тебя), паскаль-дельфа итп. В руби же очень много не только от СТ, но и от перла, например, а в обжси почитай всё, кроме мессадж диспатчинга, из си либо своё (Foundation). Они делят со СТ пару идей одного уровня - всё, по-моему.
Нда, а я как-то СТ вокруг себя не наблюдаю. Может он и жив, но сцуко скрытен.

Сёмка Новиков комментирует...

>В руби же очень много не только от СТ, но и от перла

Да кто ж спорит-то. Просто вся OOP часть заинспайрена именно ST.

>а в обжси почитай всё, кроме мессадж диспатчинга, из си либо своё (Foundation). Они делят со СТ пару идей одного уровня - всё, по-моему.

Ты не догоняешь. Весь Smalltalk это три ключевых слова и месседж пассинг. Все, там нету больше ничего. Поэтому ObjC как раз из ST взял почти все, только убрал VM и прочие топ-левел штуки.

>Нда, а я как-то СТ вокруг себя не наблюдаю. Может он и жив, но сцуко скрытен.

Он просто маскируется под руби ((: