metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-10-28 06:34 pm

Интересное мнение про 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/интерпретаторов питонов/рубей, минимум зависимостей, отсутствие ручной работы с выделением-удалением памяти, нормальные строки, более-менее строгие типы.

[identity profile] sgalitsky.livejournal.com 2011-10-28 06:27 pm (UTC)(link)
чу, утку слышу..
- кстати, мы с Вами пили ранее на брудершафт?

[identity profile] cp-poster.livejournal.com 2011-10-28 06:31 pm (UTC)(link)
Типы наверное будут как в гтк. init_type_system() все дела.

[identity profile] eternal-leave.livejournal.com 2011-10-28 06:38 pm (UTC)(link)
в смысле между жрокитом, ойбиэмской и сано-оракловой жавой? из них емнип только софт под третью обязан работать под первыми двумя

[identity profile] metaclass.livejournal.com 2011-10-28 06:46 pm (UTC)(link)
Ну, в хаскелях-окамлах никаких виртуальных машин и сборщик мусора есть.
И в хаскеле FFI есть и кроссплатформенность и IO с кошерным epoll (до сих пор не могу раскопать, как менеджер IO в GHC на windows устроен).

Забавно то, что в нагрузку хаскель тащит ленивость, чистоту и соответственно IO и прочие монады-трансформеры во все поля.

[identity profile] usovalx.livejournal.com 2011-10-28 06:49 pm (UTC)(link)
Помнится MS нагнули именно за то, что код из-под их машины не работал на остальных. А этим индульгенцию дали?

[identity profile] cp-poster.livejournal.com 2011-10-28 06:50 pm (UTC)(link)
Не пили, но к чему холодные формальности? Куда лучше ламповый срач с тыканьем.

[identity profile] theiced.livejournal.com 2011-10-28 06:58 pm (UTC)(link)
про какую из вещей обосновать что она говно? я вон утром М обосновал что перл говно.

если вы пишете на каком то говне - ваши проблемы, пишите. если при этом вы считаете говно хорошим и красивым - вы опасны для окружающих, сходите в дурку.

[identity profile] sgalitsky.livejournal.com 2011-10-28 07:01 pm (UTC)(link)
извините уж, не распознал сразу в Вас говночерпия ручной работы..

а ты давно хелло.ц компилируешь? аллоцируешь. деаллоцируешь? за ресурсами нервно глазом подергиваешь, кучи двигаешь в разные стороны? чем ты там все занимаешься, - стэком? памятью? программированием? онанизмом сие давно числится.. онанизмом, сиречь, рукоблудием.

[identity profile] metaclass.livejournal.com 2011-10-28 07:02 pm (UTC)(link)
а всякие там openjdk и айседовские чаи?

[identity profile] theiced.livejournal.com 2011-10-28 07:03 pm (UTC)(link)
ах, цэскрестиками. ну сходите исходники буста почитайте. ну или объясните зачем мне язык стандарт которого продаётся за деньги и занимает вроде больше тыщи страниц.

[identity profile] vaddimka.livejournal.com 2011-10-28 07:06 pm (UTC)(link)
ну вот перл, например, мне тоже не нравится :)
писал год на нем, не прижилось, хотя платили неплохо

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

у меня тут пол офиса укушенных, так они на objective-c пишут и тоже от плюсов нос воротят. я пробовал - у меня получается в три раза медленнее чем на плюсах. а на чистых сях - в два раза дольше.

[identity profile] cp-poster.livejournal.com 2011-10-28 07:07 pm (UTC)(link)
Рукоблудие это менять что-то в никак нетипизированном чане помоев питона.

[identity profile] theiced.livejournal.com 2011-10-28 07:08 pm (UTC)(link)
про обжцэ я ша у себя поишу.

[identity profile] vaddimka.livejournal.com 2011-10-28 07:12 pm (UTC)(link)
objective-c хорош для макоебских гуев, у нас просто локально на них зачем-то серверную часть товарищи пишут. и их много. это меня пугает.

[identity profile] theiced.livejournal.com 2011-10-28 07:13 pm (UTC)(link)
(BOOL)isEmptyString:(NSString*)string {
    return string == nil 
    || string == NSNull
    || string == (NSString*)kCFNull
    || [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""];
}


извинте, сразу стрелять, не разговаривая.

perl -e "%a = {1 => 2, 3 => 4}; print '' . %a;"
1/8


ну и вот. идиоматический цэскрестиками. прямо из буста

  template
[Error: Irreparable invalid markup ('<lt;>') in entry. Owner must fix manually. Raw contents below.]

<pre>
(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>

[identity profile] sgalitsky.livejournal.com 2011-10-28 07:13 pm (UTC)(link)
рукоблудие - менять что-то, для того никак не созданное. бывает и хуже.
например, лезть руками, из жопы выросшими, бабе там ровнять, сообразно дурному вкусу.
а ты кто - хирург? или хер его знает кто?

[identity profile] theiced.livejournal.com 2011-10-28 07:15 pm (UTC)(link)
ещё раз. крестики.

  template<
    typename R,
    BOOST_SIGNALS_TEMPLATE_PARMS
    BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
    typename Combiner,
    typename Group,
    typename GroupCompare,
    typename SlotFunction
  >
  typename BOOST_SIGNALS_SIGNAL<
             R, BOOST_SIGNALS_TEMPLATE_ARGS
             BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
             Combiner, Group, GroupCompare, SlotFunction>::result_type
  BOOST_SIGNALS_SIGNAL<
    R, BOOST_SIGNALS_TEMPLATE_ARGS
    BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
    Combiner, Group, GroupCompare, SlotFunction
  >::operator()(BOOST_SIGNALS_PARMS) const
  {
    // Notify the slot handling code that we are making a call
    BOOST_SIGNALS_NAMESPACE::detail::call_notification notification(this->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 > 0

    call_bound_slot f(&args);

    typedef typename call_bound_slot::result_type call_result_type;
    optional<call_result_type> cache;

    // Let the combiner call the slots via a pair of input iterators
    return combiner()(slot_call_iterator(notification.impl->slots_.begin(),
                                         impl->slots_.end(), f, cache),
                      slot_call_iterator(notification.impl->slots_.end(),
                                         impl->slots_.end(), f, cache));
  }
} // namespace boost


[identity profile] theiced.livejournal.com 2011-10-28 07:15 pm (UTC)(link)
перл

perl -e "%a = {1 => 2, 3 => 4}; print '' . %a;"
1/8

[identity profile] theiced.livejournal.com 2011-10-28 07:16 pm (UTC)(link)
обжцэ.

(BOOL)isEmptyString:(NSString*)string {
return string == nil 
|| string == NSNull
|| string == (NSString*)kCFNull
|| [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""];
}

[identity profile] theiced.livejournal.com 2011-10-28 07:20 pm (UTC)(link)
обжцэ плох абсолютно для всего (как и цэскрестикми). тот же хаскель вполне себе хорошо для мелких задачек класса дёрнуть-страничку-попарсить-насрать-в-базу.

[identity profile] permea-kra.livejournal.com 2011-10-28 07:38 pm (UTC)(link)
Хуй с ним, что он тысячу страниц. Вы мне скажите, сколько компиляторов его полностью поддерживают ?

[identity profile] permea-kra.livejournal.com 2011-10-28 07:42 pm (UTC)(link)
В хаскеле очень даже есть виртуальная машина. То, что код для неё вкомпилирован в бинарник, сути дела не меняет =).

[identity profile] gds.livejournal.com 2011-10-28 07:44 pm (UTC)(link)
сокращу до минимума: "посмотрите на ад C++". Там что ни копнёшь -- везде сотона и ональные черти, и всё это очень таки сложно.

[identity profile] sheep2k.livejournal.com 2011-10-28 08:19 pm (UTC)(link)
Пишу на С++ и Qt и не страдаю от осознания того, что C++ - это мега-говно и позапрошлый век :-) Используя кутешные объекты можно даже про освобождение памяти не думать особо. И не тольео ГУЙ, можно и сервисы/демоны писать.
Работает вообще везде, по слухам, даже на Raspberry PI и прочих кофеварках.

Много раз пытался освоить питон/руби и прочую хренотень, но я такой тупой, что нормально ничего написать не получилось. Всегда кончалось тем, что в сердцах всё сносил нахрен и писал на Qt :-)

[identity profile] cp-poster.livejournal.com 2011-10-28 08:23 pm (UTC)(link)
Классно.

Page 2 of 7