Интересное мнение про Haskell
http://neugierig.org/software/blog/2011/10/why-not-haskell.html
http://www.reddit.com/r/programming/comments/lfm1k/why_not_haskell/
У меня на данный момент с хаскелем забавный мозговой тупик: не совсем понимаю, как писать идиоматический код.
Т.е. например, разговор с девайсом по RS232 я могу написать в лоб, со сплошным IO, могу оформить с кошерными iteratees (хотя от типов и там и в coroutines глаза кровоточат), по идее, если покопаться, можно придумать еще несколько способов "красиво, строго, надежно" оформить разговор по известному протоколу, но в итоге то, что подразумевает повторное использование и статические гарантии, выглядит как ад из типов, а то что понятно - выглядит точно так же, как эта самая программа написанная на другом языке, с точностью до синтаксиса )
Вообще, от софта хочется простого: кроссплатформенность(винда/линукс), никаких JRE/Mono/CLI/интерпретаторов питонов/рубей, минимум зависимостей, отсутствие ручной работы с выделением-удалением памяти, нормальные строки, более-менее строгие типы.
http://www.reddit.com/r/programming/comments/lfm1k/why_not_haskell/
У меня на данный момент с хаскелем забавный мозговой тупик: не совсем понимаю, как писать идиоматический код.
Т.е. например, разговор с девайсом по RS232 я могу написать в лоб, со сплошным IO, могу оформить с кошерными iteratees (хотя от типов и там и в coroutines глаза кровоточат), по идее, если покопаться, можно придумать еще несколько способов "красиво, строго, надежно" оформить разговор по известному протоколу, но в итоге то, что подразумевает повторное использование и статические гарантии, выглядит как ад из типов, а то что понятно - выглядит точно так же, как эта самая программа написанная на другом языке, с точностью до синтаксиса )
Вообще, от софта хочется простого: кроссплатформенность(винда/линукс), никаких JRE/Mono/CLI/интерпретаторов питонов/рубей, минимум зависимостей, отсутствие ручной работы с выделением-удалением памяти, нормальные строки, более-менее строгие типы.
no subject
писал год на нем, не прижилось, хотя платили неплохо
в любой вещи есть свои недостатки, поэтому я и говорю про YMMV. для каких-то задач плюсы годятся, для каких-то не очень.
у меня тут пол офиса укушенных, так они на objective-c пишут и тоже от плюсов нос воротят. я пробовал - у меня получается в три раза медленнее чем на плюсах. а на чистых сях - в два раза дольше.
no subject
no subject
no subject
no subject
Если уж хочется чего-то правильного -- тогда ерлангъ
PS Кстати может и правда, давайте ребе метаклассу еролангъ присоветуем
no subject
no subject
Есть подозрение (хотя лучше бы сделать бенчмарки), что Эрланговые решения окажутся на этих графиках не впереди планеты всей, тем более если отдаваться будет что-нибудь сложнее hello world.
BTW сейчас пытаюсь изобразить для нового проекта решение на Warp/Yesod, правда оно не совсем "традиционный" веб (на что в основном Yesod рассчитан), а REST/XML бэкэнд.
no subject
Оно будет их хоть и медленно, жевать тысячами
no subject
Другое дело, что в Эрланге инфраструктура для обеспечения этой многозадачности шире и проработанней (ибо осн. задача).
А так и ежу понятно, что инструмент надо подбирать под задачу.
no subject
(no subject)
no subject
извинте, сразу стрелять, не разговаривая.
ну и вот. идиоматический цэскрестиками. прямо из буста
(BOOL)isEmptyString:(NSString*)string {
return string == nil
|| string == NSNull
|| string == (NSString*)kCFNull
|| [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""];
}
</pre>
извинте, сразу стрелять, не разговаривая.
<pre>
perl -e "%a = {1 => 2, 3 => 4}; print '' . %a;"
1/8
</pre>
ну и вот. идиоматический цэскрестиками. прямо из буста
<pre>
template<lt;
typename R,
BOOST_SIGNALS_TEMPLATE_PARMS
BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
typename Combiner,
typename Group,
typename GroupCompare,
typename SlotFunction
>gt;
typename BOOST_SIGNALS_SIGNAL<lt;
R, BOOST_SIGNALS_TEMPLATE_ARGS
BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
Combiner, Group, GroupCompare, SlotFunction>gt;::result_type
BOOST_SIGNALS_SIGNAL<lt;
R, BOOST_SIGNALS_TEMPLATE_ARGS
BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
Combiner, Group, GroupCompare, SlotFunction
>gt;::operator()(BOOST_SIGNALS_PARMS) const
{
// Notify the slot handling code that we are making a call
BOOST_SIGNALS_NAMESPACE::detail::call_notification notification(this->gt;impl);
// Construct a function object that will call the underlying slots
// with the given arguments.
#if BOOST_SIGNALS_NUM_ARGS == 0
BOOST_SIGNALS_ARGS_STRUCT_INST args;
#else
BOOST_SIGNALS_ARGS_STRUCT_INST args(BOOST_SIGNALS_ARGS);
#endif // BOOST_SIGNALS_NUM_ARGS >gt; 0
call_bound_slot f(&args);
typedef typename call_bound_slot::result_type call_result_type;
optional<lt;call_result_type>gt; cache;
// Let the combiner call the slots via a pair of input iterators
return combiner()(slot_call_iterator(notification.impl->gt;slots_.begin(),
impl->gt;slots_.end(), f, cache),
slot_call_iterator(notification.impl->gt;slots_.end(),
impl->gt;slots_.end(), f, cache));
}
} // namespace boost
</pre>
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
(no subject)
(no subject)
no subject
no subject
Кстати, когда читал -- дажэ не припомнил, чтобы я до этого это как-то знал. То есть мне это было не нужно. То есть пример какой-то совсем безсмысленный.
no subject
%a = {1 => 2, 3 => 4};
и решил его вывести что бы проверить что я его сделал правильно
print 'my hash is ' . %a;
внезапно. ну вот вполне себе живой юзкейс. да вообще там бай "дизайн" пиздецов на каждом шагу. array flatten, блеать. убивать убивать убивать.
(no subject)
(no subject)
no subject
no subject
Та же хрень с Obj-C. Там есть грабли, но при наличии опыта маковские гуи пишутся удобно и просто, без напряжения серого вещества, если просто следовать примерам из мануалов. И все. Желания фанатично тащить этот язык в другие области не возникало и вряд ли возникнет.
no subject