LINUX.ORG.RU

Убийца ли C язык C3?

 , ,


3

8

В честь сегодняшнего пре-релиза (0.2.4).

C3 (GitHub) - очередной «убийца» C на базе LLVM. Потихоньку разрабатывается шведским программистом (одна штука).

Ключевые особенности:

  • компилятор написан на C
  • поддержка LLVM 12-15 (насколько мне известно, ни один из конкурентов этого не может (привет, Odin, Zig и т.д и т.п.))
  • полная C-ABI совместимость
  • модули - нет хидерам!
  • дженерики
  • макросы, но не как в C
  • слайсы
  • контракты
  • compile time and runtime reflection (плохопереводимая игра слов)
  • SIMD «из коробки»
  • и многое другое!

Из недостатков - практически спартанская стандартная библиотека, но так как реализованы ещё не все запланированные возможности, то в этом есть смысл.

macro int factorial($n)
{
        $if ($n == 0):
                return 1;
        $else:
                return $n * factorial($n - 1);
        $endif;
}

extern fn void printf(char *fmt, ...);

fn void main()
{
        int x = factorial(12);
        printf("12! = %d\n", x);
}
★★★★

Последнее исправление: dataman (всего исправлений: 1)

Ответ на: комментарий от LINUX-ORG-RU

Это я выбрал неудачный пример. :) Вот, например, векторы:

extern fn void printf(char*, ...);

fn void main()
{
    float[<3>] v1 = { 1, 2, 3 };
    float[<3>] v2 = { 4, 5, 6 };
    float[<3>] v3 = v1 * v2;

    foreach (i, a : v1)
    {
        printf("v1[%d]: %f\n", i, a);
    }
    foreach (i, a : v2)
    {
        printf("v2[%d]: %f\n", i, a);
    }
    foreach (i, a : v3)
    {
        printf("v3[%d]: %f\n", i, a);
    }
}
dataman ★★★★
() автор топика
Ответ на: комментарий от dataman

Ну нинаю, сишка с удобствами. Стоит ли оно того хз. Умножать вектора весело конечно, но если надо в ином порядке то один фиг делать функцию. foreach тоже да удобно, но при желании он реализуется и в сишке, да не универсально будет, но оно и надо то местами. Зайдёт тем кто именно стремится и рыбку съесть и на … и сишкой пользоваться дальше и избавится от ручного труда (который опять же только в определённых случаях будет избавлен)

Ну пусть будет, посмотрим как оно будет или тихо сгинет в небытие =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ну нинаю, сишка с удобствами.

Неудобств тоже хватает. Например, невозможно скомпилировать файл true.c3, т.к. имя зарезервировано. Или члены enum должны быть ТАКИМИ.

Пока не могу переубедить автора в том, что это плохой дизайн.

dataman ★★★★
() автор топика
Ответ на: комментарий от Crocodoom

Тут есть нюансы: ограниченный встроенный ассемблер. Пока нельзя в/из него передавать/получать параметры/значения.

К примеру, в Zig он полноценный и syscall им и реализован.

А в Odin есть и ассемблер и встроенная функция syscall.

dataman ★★★★
() автор топика

нет. языки, плохо выглядящие эстетически (например, использующие знаки $ и % рядом с альфонумериком), могут иногда жить долго, но в конце концов загибаются, потому что их неэстетичность снижает продуктивность программистов, которые имеют дело с этим кодом. в случае же с новым языком, шанса взлететь нет. в отличии от php в своё время, никаких киллерфич по сравнению с любым c++, rust-ом или go.

caryoscelus
()
Ответ на: комментарий от snake266

Такие:

module gen <Type>;

fn Type mult(Type x)
{
    return x * x;
}

fn Type addMult(Type x, Type a, Type b)
{
    return x * a + b;
}

module test;

define intMult = gen::mult<int>;
define doubleAddMult = gen::addMult<double>;

fn int getIt(int i)
{
    return intMult(i) + 1;
}

fn double getIt2(double i)
{
    return doubleAddMult(i, 2, 3);
}
dataman ★★★★
() автор топика
Ответ на: комментарий от eternal_sorrow

очевидно векторное.

очевидно жеж, что покомпонентное произведение, в духе векторных процессоров. а то он умрет считать векторное произведение для векторов размерности тыща… и вообще не его это дело.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от Psilocybe

В чем смысл такое в язык тащить?

Если LLVM предоставляет такие возможности, почему бы их не использовать?

SIMD есть и в Odin и в Zig, да и в C++20 включили. Очевидно, фича востребованная.

dataman ★★★★
() автор топика