Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

HN в 2050 году - бескомпромиссная производительность

HN - это Haskell-like Newspeak (разумеется, это backronim).

Соответственно, я вижу HN как смесь Disciple, Agda2, построенную вокруг идеи бескомпромиссной производительности и полной бинарной совместимости с Си и Си++ без маршаллинга на межъязыковой границе. К HN даже не предъявляется требование быть полноценным языком - достаточно, чтобы на нём можно было писать логику. А эффективные контейнеры и Кули-Тьюки c твиддлингом всякие можно писать на С++ и использовать из HN. То есть, HN - это Disciple + Agda2 + Lua.

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

1) Попыткой встать на плечи монстров кодогенерации в виде MSVC и GCC (это нетривиально - почти все предыдущие попытки проваливались с двухкратным замедлением генерированного си по сравнению с ручным)

2) Попыткой сначала достичь бескомпромиссной производительности, а потом пытаться её сохранить, расширяя язык. Обратные попытки (сначала реализовать огромный язык, а потом дописать оптимизаций) - проваливались. У Java ушло более 10 лет, несмотря на поддержку Sun и IBM. Реализация JAFL мне не к лицу, основное направление - сначала догнать Си любой ценой и не отстать от него потом, а не быть в позиции вечно догоняющего с пятикратным отрывом и вечно радужными перспективами.

Для п.1 HN проектируется так, чтобы семантическая пропасть между ним и C++ была узкой и преодолевалась тривиально.

Для достижения п.2 я начал работу над HN с разработки HN0 - минимального варианта HN с бескомпромиссной производительностью, достаточного для того, чтобы я смог применять его в своей повседневной работе.

К HN0 также предъявляется требование возможности реализации одним низкопродуктивным человеком (мной) в разумный срок.

HN0, по сути, вылился в proof-of-concept реализацию http://code.google.com/p/inv/wiki/FoldExample :

We must take this:
foldList l = foldl (\x y -> x * y + c) 4 l where c = 2
and generate this:
inline int foldList(OurList<int> *l)
{
        int c = 2;
        int acc = 4;
        while (l != NULL)
        {
                acc = l->value * acc + c;
                l = l->next;
        }
        return acc;
}
Из HN0 в будущем планируется получить некий низкоуровневый Intermediate Language (транслировать HN -> HN83 -> ... -> HN1 -> HN0 -> C++), но с натяжкой он должен быть юзабелен и для непосредственного использования человеком.

Понятно, что ни о каких массивах ссылок речи в HN быть не может, т.к. это слишком низкоуровневая концепция для того, чтобы быть полезной. Они могут быть в промежуточных языках (HN1, HN2, ...), но уйдут по мере повышения уровня, если окажется возможным при этом сохранить производительность.
Tags: fp, programming
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments