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)
Ответ на: комментарий от thegoldone

В JS () => expr всего лишь эквивалент function() { return expr };, просто «меньше синтаксического мусора» и более удобен тем, что захватывает внешний this

fixed

goingUp ★★★★★
()
Ответ на: комментарий от right_security

А то, что показываешь ты/врёшь про сишку - это никакого отношения к «нормально» и сишки не имеет.

Там речь не про Си шла.

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

Ну тогда это будет

Я показал как это будет. Правда это мусор, поэтому в сишке никто такого не сделает. Важно здесь то, что синтаксис этому никак не мешает. А ты утверждал именно это. Это даже лучше твоего мусора выглядит.

Чем это не устраивает?

Я уже отвечал. То, что ты показал - это полнейшая чушь даже с ТЗ логики. Это defer на void, что не имеет смысла.

Тут всё ещё нет возможности подменить возвращаемое значение родительской функции в отложенном вызове.

Чего? Отложенный вызов - это чушь. Это так же не является корректным. Почему использование переменных определено выше, а результат будет ниже?

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

Что такое подменять и чего ты там собрался - показывай на примере. Ты мне пытаешься сообщить о том, что там нету типа возврата? Он есть. Его нет у тебя, а у меня есть. Зачем ты выдаёшь своё за мой - понятия не имею, но это не является корректным.

right_security
()
Ответ на: комментарий от thegoldone

Шла, но ты поплыл и теперь отрицаешь. Ты обвинял си в чём-то. В том, что там какой-то синтаксис не позволяет сделать мусор.

Только вот в чём проблема.

  • Всё что ты говорил про си - чушь. Фантазии твоего невежества.

  • В си это делают не так не потому что твои фантазии про синтаксис, его «плохость» и прочая чушь. А потому что твои фантазии выглядят и работают как мусор. При это являются несогласованным набором бездарных костылей. А в си не хотят такого.

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

В целом когда в дизайн не можется и не такое рождается.

right_security
()
Ответ на: комментарий от goingUp

Там не только в этом проблема, а в том что {} - не являются expr, а они могут там быть.

А так да - нету паскалятины. Куллстори про this - мимо. Там обсуждается синтаксис. Захватывать this не мешает ничего и обычной функции. В рамках синтаксиса это нигде не отображено.

right_security
()
Ответ на: комментарий от thegoldone

Очередные потуги бреда. Я даже не знаю как в них смысл искать.

Обычное дело, это когда {} (любой) наследует родительское пространство имён, но не может в нём создавать новые переменные.

Чего? В функции можно создать переменные? Можно. В блоке можно создать? Можно. К чему это вообще?

И есть вызов функции, когда аргументы копируются фактом передачи.

Чего? К чему это? Что это значит? Что вызов?

Извините, но на фоне этого выражение

На воне чего? Бреда выше? Не - бред фоном не ненужен. Попытайся заменить это на что-то более вразумительное.

[]{} мне кажется излишним.

Кажется чем, кажется куда? Ты мне нормально приведи основания для кажется.

Не кажется ли Вам, что это просто ненужная перегрузка языка доп. конструкциями?

Какими конструкциями? Перегрузка - понятия мусорная. Зачем ты мне навязываешь эту чушь?

По поводу что и зачем - тебе выше сообщили. Эта та же форма записи.

Функции можно дать имя

Ты хоть знаешь что такое выражение? И вообще ты не знаешь ни что такое функция, ни как это работает. У выражения нет имени.

Ты можешь дать имя 2 + 2? Ну вот начни с этого.

присвоить её переменной и использовать во множестве мест, где угодно.

Какой переменной? Функцию? У тебя явно проблемы. Функцию нельзя никуда присвоить.

А []{} так умеет без макро-костылей?

Умеет что? Пиши конкретные примеры. Твои рассуждения слишком бредовые, чтобы понять что-то из них.

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

Я показал как это будет. Правда это мусор, поэтому в сишке никто такого не сделает. Важно здесь то, что синтаксис этому никак не мешает. А ты утверждал именно это. Это даже лучше твоего мусора выглядит.

Синтаксис defer { free(ptr) };:

  1. содержит мусор в виде {}.
  2. требует ещё больше мусора вида defer [ptr]{ free(ptr) }; иначе следи за тем, чтобы ptr не поменялся ниже по коду, вместо нормального defer name(args); или defer (a args) { /* code */ } (args);, что есть привычный вызов функции.

Почему использование переменных определено выше, а результат будет ниже?

Имеется ввиду, что в

fn some() {
    let a = 10;
    defer fn() {
        // здесь есть доступ к переменной 'a'
    } ();

    let b = 20; // а эта переменная в блоке выше не доступна

}

Пространство имён блока отложенной функции не наследует переменные из родительского пространства имён определённые ниже. А только те, что определены выше неё.

Что такое подменять и чего ты там собрался - показывай на примере. Ты мне пытаешься сообщить о том, что там нету типа возврата? Он есть. Его нет у тебя, а у меня есть. Зачем ты выдаёшь своё за мой - понятия не имею, но это не является корректным.

Когда в отложенном вызове есть возможность подменить возвращаемое значение родительской функции. Вот пример https://go.dev/play/p/QPvOXWSbvjZ (там есть кнопка Run). И как такое сделать в С++?

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

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

    defer fn() {
        // здесь есть доступ к переменной 'a'
    } ();

Содержит мусор в виде {}, fn, (), () - оправдания.

Пространство имён блока отложенной функции не наследует переменные из родительского пространства имён определённые ниже. А только те, что определены выше неё.

Зачем ты мне это пишешь? К чему, зачем? Тебе уже сообщили, что у тебя проблема - у тебя там мусорное () - это не является отложенным вызовов.

Когда в отложенном вызове есть возможность подменить возвращаемое значение родительской функции.

Это не подмена возвращаемого значения, а мусор. Просто изменение переменной.

И как такое сделать в С++?

Какое такое? Там нет того чего ты заявляешь.

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

Чего? В функции можно создать переменные? Можно. В блоке можно создать? Можно. К чему это вообще?

Чего? К чему это? Что это значит? Что вызов?

К тому, что всякие «захваты»

[a = b, c, &d] {}

дополнительный синтаксический мусор. О чём речь изначально.

Ты хоть знаешь что такое выражение? И вообще ты не знаешь ни что такое функция, ни как это работает. У выражения нет имени.

Так а какое мне дело до академической терминологии. У меня есть блок кода, куда я что-то передаю и который что-то делает. Функция. Зачем мне ещё одна такая же сущность. Пусть компилятор разбирается что там функция, а что выражение, мне нет до этого дела. Это его работа, а не моя.

Ты можешь дать имя 2 + 2? Ну вот начни с этого..

Получается, что отложенный вызов выражения обрекает перепечатывать его 100 раз, если оно используется 100 раз? Отличные новости. Ну так это же фигня бесполезная без макро-костылей.

Какой переменной? Функцию? У тебя явно проблемы. Функцию нельзя никуда присвоить.

int name(int a) { return a + 1; };

int (*keep)(int) = name;

Упс, присвоил.

thegoldone ★★
()
Ответ на: комментарий от right_security

Содержит мусор в виде {}, fn, (), () - оправдания.

Использование уже существующей конструкции, вместо введения новой «специальной». А то что она, как Вы выразились «мусорная», ну так это отдельная тема.

Просто изменение переменной.

Просто изменение возвращаемого значения.

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

К тому, что всякие «захваты»

Чего ты несёшь? Какие захваты? Откуда ты их взял? В твоей мусорной скриптухи они ненужны. Это для нормальных языков.

дополнительный синтаксический мусор. О чём речь изначально.

Ты решил и дальше позорится?

Так а какое мне дело до академической терминологии. У меня есть блок кода, куда я что-то передаю и который что-то делает. Функция. Зачем мне ещё одна такая же сущность. Пусть компилятор разбирается что там функция, а что выражение, мне нет до этого дела. Это его работа, а не моя.

Нет, меня мало волнуют твои оправдания. Тебе сообщили, что выражение не имеет имени. Всё.

Показывай имя, либо выпиливайся из треда.

Получается, что отложенный вызов выражения обрекает перепечатывать его 100 раз, если оно используется 100 раз? Отличные новости. Ну так это же фигня бесполезная без макро-костылей.

Чего? Очередные рандомно-сгенерированные потки бреда. Какой вызов, какие 100раз, перепечатывать что?

Упс, присвоил.

Ты решил опять опозорится? Это не функция. Никакого присваивания там нет, если только твоё невежество.

right_security
()
Ответ на: комментарий от thegoldone

Использование уже существующей конструкции, вместо введения новой «специальной». А то что она, как Вы выразились «мусорная», ну так это отдельная тема.

Не, съезжание с темы - мимо. Мне нужны оправдания. Ты утверждал, что в в си {} проблема. У тебя как минимум та же проблема, а ещё вместе с ней 3 другие.

Вот тебе нужно оправдываться за а) двойные стандарты, б) почему мусор не является мусором, хотя определение то же.

Просто изменение возвращаемого значения.

Нет, никакого возвращаемого значения там нет. Это твои фантазии. Что там есть тебе сообщили.

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

Чего ты несёшь? Какие захваты? Откуда ты их взял? В твоей мусорной скриптухи они ненужны. Это для нормальных языков.

Ты решил и дальше позорится?

Захваты и есть мусор.

Нет, меня мало волнуют твои оправдания. Тебе сообщили, что выражение не имеет имени. Всё.

Показывай имя, либо выпиливайся из треда.

Чего? Очередные рандомно-сгенерированные потки бреда. Какой вызов, какие 100раз, перепечатывать что?

Ну так о чём и речь. Вы верно подтверждаете мои слова. Большое спасибо. В мусорных языках добавляют мусорные выражения, чтобы потом решать возникающие с ними проблемы мусорными макро-костылями.

Ты решил опять опозорится? Это не функция. Никакого присваивания там нет, если только твоё невежество.

Я могу сколько угодно давать функциям имена, и присваивать их переменным. Это правда.

thegoldone ★★
()
Ответ на: комментарий от right_security

Не, съезжание с темы - мимо. Мне нужны оправдания. Ты утверждал, что в в си {} проблема. У тебя как минимум та же проблема, а ещё вместе с ней 3 другие.

Вот тебе нужно оправдываться за а) двойные стандарты, б) почему мусор не является мусором, хотя определение то же.

Это просто:

  1. Примите тот факт, что выражение вида []{} – ненужный мусор.
  2. Используйте вместо него функции и их вызовы.

Т.о. исключение мусорной конструкции сводит всё к двум моментам:

  1. Как выглядит function defenition.
  2. Как выглядит function call.

Отсекая лишнее.

thegoldone ★★
()
Ответ на: комментарий от right_security

Нет, никакого возвращаемого значения там нет. Это твои фантазии. Что там есть тебе сообщили.

Так или иначе, возвращаемое значение при этом меняется. Мне жаль Вас огорчать, но это так. Извините.

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

Ты меня совсем утомил своим невежеством. Давай поиграем в игру. Вот есть код на сишке:


int fd = open();

defer { close(fd); }

Твоя задача написать это же на своём ненужном мусоре.

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

Ты меня совсем утомил

Извините.

Твоя задача написать это же на своём ненужном мусоре.

Нужно просто выкинуть {}.

int fd = open();
defer close(fd);

При этом, дальше по функции, переменную fd можно изменять как угодно, на сам вызов close(fd) это никак не повлияет.

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

Нужно просто выкинуть {}.

Код в студию.

А потом пример из ссылки defer {if(x) close(fd); }

При этом, дальше по функции, переменную fd можно изменять как угодно,

А теперь мне ненужно это поведение. Код так же в студию

на сам вызов close(fd) это никак не повлияет.

Это чушь. Это логически неверный мусор. На каком основании функция вызванная не вызывается? defer-параша переопределяет семантику языка?

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

Код в студию.

Да, он в примере выше.

А потом пример из ссылки defer {if(x) close(fd); }

defer fn(int fd) { if (x) close(fd) } (fd);

А теперь мне ненужно это поведение. Код так же в студию

defer fn() { if (x) close(fd) } ();

Это чушь. Это логически неверный мусор. На каком основании функция вызванная не вызывается? defer-параша переопределяет семантику языка?

Это отложенный вызов. В итоге функция вызывается. Аргументы передаются при этом сразу. Это для удобства сделано, на семантику языка начхать, язык служит человеку.

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

defer fn(int fd) { if (x) close(fd) } (fd);

Что за убожество? Что за мусорное (), fn, (), fd - оправдывайся.

defer fn() { if (x) close(fd) } ();

Такое же убожество.

Это отложенный вызов.

Это мусор, а не отложенный вызов. На каком основании это вызов - где это указано?

В итоге функция вызывается. Аргументы передаются при этом сразу.

Мне ненужно объяснять как работает этот мусор - я и без тебя знаю. Тебя спрашивают почему он такой жалкий, ничтожный и дырявый?

Это для удобства сделано, на семантику языка начхать, язык служит человеку.

Не, ты выше рассказывал про иное. А теперь вдруг методичку поменял?

То вдруг синтаксис должен быть везде одинаковый, выдавал за преимущество то что в твоём мусоре «обычная функция».

А теперь когда тебя поймали на вранье - ты начал это отрицать. И уже неважно, что там дырявый мусор нелогичный. И работает не так как обычная функция.

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

И работает не так как обычная функция.

Низкоуровневая возня не интересует.

void finialize(int fd) {
    close(fd);
    puts("file closed");
}


void read() {
    int fd = open();
    defer finialize(fd);

    // stuff

}

Может он работает и не как обычная функция, на каком-то низком уровне. Но обращаться я могу с этим как с обычной функцией.

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

Т.е. за мусор ты не ответил и слился? Типичная история.

Может он работает и не как обычная функция, на каком-то низком уровне. Но обращаться я могу с этим как с обычной функцией.

Дело не на «низком уровне», а на уровне базовой логики/семантики языка.

finialize(fd) - вызов функции, в языка есть только инплейс-евал. Твой костыль нарушает это поведение.

И ладно бы я бы мог ещё понять мазы, но ты ведь говорил, что это плохо. Что плохо, когда defer меняет поведение/синтаксис. Либо «Это другое»?

Здесь тоже можно фиксировать слив.

right_security
()
Ответ на: комментарий от thegoldone

Это отложенный вызов. В итоге функция вызывается. Аргументы передаются при этом сразу. Это для удобства сделано, на семантику языка начхать, язык служит человеку.

не. это перегиб.

defer определяет statement(ну если действовать в традициях сиподобных язычков), который должен быть выполнен по выходу из текущего блока.

блок {…} это тоже стейтмент и называется блок стейментов.

то есть логично иметь правило

defer statement

куда подходит и

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

defer fun1(…)

Нет - это является логической шизой, о чём я выше говори.

А так же вызов функции не является стейтментом. Ты перепутал, в очередной раз, декларацию переменно/символа и вызов функции.

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

А так же вызов функции не является стейтментом.

вызов функции, не возвращающей результат(то есть процедуры) - это чистейший стейтмент. самый стейтмент из стейментов. это даже один из исторически первейших стейтментов.

выражением, является вызов функции возвращающей результат, если конечно результат не игнорится(если это позволительно в языке, как в си).

alysnix ★★★
()

Паскаля и Си хватит всем!

saahriktu ★★★★★
()
Ответ на: комментарий от thegoldone

В JS () => expr всего лишь эквивалент function() { expr };, просто «стильный модный и молодёжный».

Нихера это не эквивалент.

crutch_master ★★★★★
()
Ответ на: комментарий от goingUp

Это 2 принципиально разных объявления функции.
function можно не использовать как переменную, стрелку можно использовать только как переменную, она существует только в том контексте, где её создали. Это не «удобнее, моднее и молодёжнее». То, что сделали стрелку не значит, что стали вдруг не нужны функции, которым можно менять контекст.

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

Это 2 принципиально разных объявления функции. function можно не использовать как переменную, стрелку можно использовать только как переменную, она существует только в том контексте, где её создали. Это не «удобнее, моднее и молодёжнее». То, что сделали стрелку не значит, что стали вдруг не нужны функции, которым можно менять контекст.

В JS существует сразу два языка. Если Вы начнёте их смешивать, то Вас обвинят в говнокодерстве, и будут правы. Поэтому различия старого JS и нового (стильного, модного и молодёжного) скорее тема для флейма, но не для реального случая. Потому что старый JS умирает. Его в целях археологии стоит изучать.

Отличия function() от () =>, var от let, prototype от class, и так далее. Это всё уже не имеет значения. Кто-то в современном мире разрешит объявлять переменную через var, а не через let?

thegoldone ★★
()
Ответ на: комментарий от right_security

Т.е. за мусор ты не ответил и слился? Типичная история.

Просто выражению вида []{} не может быть присвоено имя. И оно не может быть переиспользовано в другой функции. Без макросов. В этом суть моего негодования.

Введена новая конструкция. И она решает поставленные задачи. Но переиспользовать её нельзя. А значит копи-пастить каждый раз (точнее использовать макросы). Ну разве но отстой?

thegoldone ★★
()
Ответ на: комментарий от alysnix

то есть логично иметь правило

defer statement

куда подходит и

defer fun1(…) и defer {…..}

Но у этого statement появляется необходимость взаимодействовать с контекстом текущей функции. Иногда. И замораживать часть переменных (аргументов) на момент defer. Так, чтобы дальнейшее их изменение не влияло на сам statement.

А так же, наоборот, позволить им изменяться.

Остальные необходимые свойства defer пока опущу. И вопрос в том, как передать внутрь statement всё это . Придумать новую синтаксическую конструкцию, или использовать существующую.

Объявление функции, как в языках со сборщиком мусора внутри существующей функции сомнительно. Потому что управление памятью не позволит её использовать после выхода из родительской функции.

И поэтому предложенный мной вариант, использовать синтаксис функции и её вызов – тоже отстой, если говорить по честному.

И ещё есть момент со statement. Его переиспользование в других функциях.

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

Что ты несёшь? Никакому выражению не может бы присвоено имя. Это базовое свойство этой реальности.

В любом случае - показывай мне пример каким образом ты хочешь «присваивать имя выражению» - что это вообще такое.

Но переиспользовать её нельзя. А значит копи-пастить каждый раз (точнее использовать макросы). Ну разве но отстой?

Показывай пример. Куда нельзя, кого нельзя. Какие макросы. Что ты несёшь?

right_security
()
Ответ на: комментарий от thegoldone

Отличия function() от () =>, var от let, prototype от class, и так далее. Это всё уже не имеет значения. Кто-то в современном мире разрешит объявлять переменную через var, а не через let?

Эти срыватели покровов со знаниями уровня школы. Перепутал всё. У этих конструкций в принципе разная семантика. Т.е. одно заменить на другое нельзя.

Нельзя объявить переменную через let с семантикой var и наоборот.

Нельзя использовать стрелочку с семантикой function и наоборот.

Что он там собрался искать в «prototype от class» я даже представить не могу.

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

В любом случае - показывай мне пример каким образом ты хочешь «присваивать имя выражению» - что это вообще такое.

Так я просто использую функции, а у них есть имена, или нет имён. У меня нет проблем с этим.

thegoldone ★★
()
Ответ на: комментарий от right_security

Эти срыватели покровов со знаниями уровня школы. Перепутал всё. У этих конструкций в принципе разная семантика. Т.е. одно заменить на другое нельзя.

Речь не об этом. Похеру разная семантика или нет у них. Это не имеет значения. Вы в любом случае будете всё определять через var и function. Или через let и () =>. И вариантов тут нет.

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

Вы в любом случае будете всё определять через var и function. Или через let и () =>

Кто вы? Твои голоса в голове?

И вариантов тут нет.

В твоих фантазиях да. А вот в реальности всё наоборот - нет вариант использовать что-то одно.

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

В твоих фантазиях да. А вот в реальности всё наоборот - нет вариант использовать что-то одно.

Говнокод не в счёт.

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

Показывай. Ссылкой, а лучше пасти сюда. Но, судя по всему, ты уже потерялся и теперь сливаешься. Потому как нет никакой проблемы показать.

right_security
()
Ответ на: комментарий от thegoldone

В JS существует сразу два языка. Если Вы начнёте их смешивать, то Вас обвинят в говнокодерстве, и будут правы.

Нет никакого старого и нового жс. Это мантры хипсторов-говножоров. Есть разные возможности и отличия в поведении того и другого.

Кто-то в современном мире разрешит объявлять переменную через var, а не через let?

Тому, кому нужно на ходу переобявлять переменную. Как ты сделаешь mixin без function? Какой нахер class? Кому он нужен, кроме перекатов с жабки/сисярпа и их конченого ооп? Если им нравится жрать говно, пусть жрут, это не значит, что так надо, так современно и правильно. Жс даёт возможности в отличии от их недоязычков, где за них решили, как им надо.

Это всё уже не имеет значения

Еще скажи, что промисы и колбеки - это не нужно, раз есть async/await, лол.

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

Так если подумать, require херово сделан.
Потому что может надо быть или упасть, или ограничить параметр, если он вылазит или еще что-то сделать. А это - один частный случай. Лучше, чтобы аннотации можно было программировать и подсовывать функциям.

crutch_master ★★★★★
()
29 декабря 2022 г.
21 апреля 2023 г.
Ответ на: комментарий от dataman

Пока есть символы @ и $, не взлетит, увы. Слишком напоминает скриптоту, а скрипткиддисам такой уровень недоступен. Так что сразу 2 пласта пользователей мимо.

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

Пока есть символы @ и $, не взлетит

Так они только для макросов, вместо всяких comptime (Zig), consteval, constexpr…

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

На первый взгляд выглядит как что-то интересное.

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

Если возможно, то пожалуй мне было бы потенциально интересно. Если же фичи ЯП гвоздями прибиты к LLVM, то ненужно.

wandrien ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.