LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Часть твоих претензий к текстовому программированию уже решили авторы других языков программирования.

Например в том примере на F# я не разу не написал тип явно, лишь let и один раз let mutable, но все типы были известны на этапе компиляции.

Всё благодаря алгоритму Хиндли — Милнера: https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2

Так же там не было и ; , это тоже есть в различных языках, например в Kotlin и Swift тоже ; не нужна

Самый заметный профит тут в том, что мне не нужно объявлять переменную result и вручную обращаться к ней.

С таким тоже постарались побороться текстовые языки. Если имя переменной не нужно для комментирования кода(иногда специально разбивают выражение на несколько чтобы было ясно что вообще происходит), то во многих языках есть приёмы типа:

Chaining и функции расширения(например такое можно сделать в Kotlin)

    i
     .do_smth1()
     .do_smth2()
     .do_smth3()
     .do_smth4()
     //...

или range нотация в C++

auto f(Input i)
{
   i
    | do_smth1
    | do_smth2
    | do_smth3
}

или оператор pipe в F#

    i
     |> do_smth1
     |> do_smth2
     |> do_smth3

На С тоже можно было бы избежать наименование переменной если добавить ещё одну функцию unwrap, которая может быть полезна и есть с похожим смыслом в других языках


not_null_void_ptr unwrap(void* arg)
{
    if (arg == NULL)
    {
        abort();
    }
    return arg;
}

not_null_void_ptr my_malloc(size_t size)
{
    return unwrap(malloc(size));
}

Но приём f(g(h(x))) который можно использовать в С менее нагляден, чем похожие приёмы для других языков программирования.

Исходная версия fsb4000, :

Часть твоих претензий к текстовому программированию уже решили авторы других языков программирования.

Например в том примере на F# я не разу не написал тип явно, лишь let и один раз let mutable, но все типы были известны на этапе компиляции.

Всё благодаря алгоритму Хиндли — Милнера: https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2

Так же там не было и ; , это тоже есть в различных языках, например в Kotlin и Swift тоже ; не нужна

Самый заметный профит тут в том, что мне не нужно объявлять переменную result и вручную обращаться к ней.

С таким тоже постарались побороться текстовые языки. Если имя переменной не нужно для комментирования кода(иногда специально разбивают выражение на несколько чтобы было ясно что вообще происходит), то во многих языках есть приёмы типа:

Chaining и функции расширения(например такое можно сделать в Kotlin)

    i
     .do_smth1()
     .do_smth2()
     .do_smth3()
     .do_smth4()
     //...

или range нотация в C++

auto f(Input i)
{
   i
    | do_smth1
    | do_smth2
    | do_smth3
}

или оператор pipe в F#

    i
     |> do_smth1
     |> do_smth2
     |> do_smth3

На С тоже можно было бы избежать наименование переменной если добавить ещё одну функцию unwrap, которая может быть полезна и есть с похожим смыслом в других языках


not_null_void_ptr unwrap(void* arg)
{
    if (arg == NULL)
    {
        abort();
    }
    return arg;
}

not_null_void_ptr my_malloc(size_t size)
{
    return unwrap(my_malloc(size));
}

Но приём f(g(h(x))) который можно использовать в С менее нагляден, чем похожие приёмы для других языков программирования.