LINUX.ORG.RU

Bun v1.1.30

 bun, , , ,

Bun v1.1.30

0

3

Тихо и незаметно была опубликована новая стабильная версия Bun – 1.1.30.

Bun – это среда выполнения ECMAScript / JavaScript, по многим параметрам аналогичная nodejs. В основе Bun используется JavaScriptCore от Apple, но сам Bun как и многие его модули написан на языке zig. Bun старается быть максимально совместимым с nodejs по опциям командной строки, поддерживает модули ECMAScript (ESM) и CommonJS. Управление пакетами npm и поддержка typescript встроены прямо в приложение как нативный код, и программы на typescript могут исполняться напрямую интерпретатором без предварительной конфигурации.

Однако Bun не является лишь «копией» nodejs по своим возможностям. Помимо более быстрой работы в ряде сценариев (начиная прямо с запуска приложения) и почти полной поддержки доступного в nodejs API, Bun предоставляет широкие возможности для приложений на сервере – от работы с файлами до трансформации HTML-дерева (HTMLRewriter), модулем транспиляции typescript (Bun.Transpiler), встроенной работе с базами данных sqlite, модулей для взаимодействия с нативными библиотеками платформы через API яызка Си – ffi, встроенный инструментарий тестирования и множество других возможностей.

Кроме того, в экспериментальном режиме Bun поддерживает интеграцию с кодом на Си через прозрачный вызов tcc:

hello.c:

	int hello()
	{
	  return 42;
	}

hello.js:

	import { cc } from "bun:ffi";
	import source from "./hello.c" with { type: "file" };

	const {
	  symbols: { hello },
	} = cc({
	  source,
	  symbols: {
	    hello: {
	      args: [],
	      returns: "int",
	    },
	  },
	});

	console.log("What is the answer to the universe?", hello());


$ bun hello.js
What is the answer to the universe? 42

В этом релизе среди прочего был добавлен парсер CSS на основе LightningCSS который специально для этого был переписан с таких legacy-технологий как rust на zig, что позволило прозрачно интегрировать css и typescript, и теперь можно импортировать css-файл напрямую в модуль typescript:

index.ts:
	import "./style.css";
	import Component from "./MyComponent.tsx";

	// ... rest of your app

style.css:
	/* результат сборки: */
	/* style.css */
	.hello {
	  background: red;
	}

	/* MyComponent.css */
	.MyComponent {
	  color: green;
	}

Bun позволяет собрать всё приложение со всеми ресурсами в единый исполняемый файл.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 5)

Zig, Nim, Hare и еще есть ODIN. Язык продолающий традиции императивно процедурного программирования основаный на идеях из 80х.

https://odin-lang.org/docs/faq/

The language borrows heavily from (in order of philosophy and impact): Pascal, C, Go, Oberon-2, Newsqueak, GLSL.

Niklaus Wirth and Rob Pike have been the programming language design idols throughout this project.

https://github.com/odin-lang/Odin/blob/master/examples/demo/demo.odin

// Range-based for loop
// The basic for loop
for j := 0; j < 10; j += 1 {
fmt.println(j)
}
// can also be written
for j in 0..<10 {
fmt.println(j)
}
for j in 0..=9 {
fmt.println(j)
}

Уже плото используется в генерации графики. Мне этот язык понравился больше других своей понятностью.


https://odin-lang.org/docs/faq/

… we do not consider it as good engineering practice to consume a resource lavishly just because it happens to be cheap

Niklaus Wirth, Project Oberon

Increasingly, people seem to interpret complexity as sophistication, which is baffling – the incomprehensible should cause suspicion, not admiration. Possibly this results from the mistaken belief that using a mysterious device confers [extra] power on the user.

Niklaus Wirth
lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)

Закопать живьём эту дрянь

Hertz ★★★★★
()
Ответ на: комментарий от sarumeister
Emitted print Function
pub fn print(self: *Writer, arg0: []const u8, arg1: i32) !void {
    try self.write("here is a string: '");
    try self.printValue(arg0);
    try self.write("' here is a number: ");
    try self.printValue(arg1);
    try self.write("\n");
    try self.flush();
}

И чуть выше генерирующий макрос.

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

В комптайме информация о типах известна, и вот так будет обработана. zig-postgres

Настоящий программист может писать на Фортране шаблонах Си++ на любом языке.

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

fmt.println(j)

Выглядит нелогичным: это что, перегрузка функции? И кто пишет перегруженные функции — скандинавские боги? На контрасте: в зиге аргументы фиксированы, первым аргументом форматная строка, вторым аргументом анонимный кортеж.

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

какая у него ниша?

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

Для программирования в общих целях: можно делать особые аллокаторы, где вместо free() будут noop, а весь участок особождается при выходе из скоупа. Приложения могут быть очень быстрыми. Я пробовал одну сложную задачу из AoC, там A* по графу, и без аллокаций, на ограниченной арене, код вышел быстрее чем с C++ STL. Зиг как С++-компиллятор весьма недурен, я проверял вплоть до лямбд; и умельцы им заменяют CMakeLists.txt.

Для сетевых вещей как мне кажется можно и Go. Недавно на ютубе был выложен один синтетический тест вебсерверов, и реализация на зиге обогнала Actix и Go. По потреблению памяти так в разы.

Вокруг геймдева есть целый фреймворк Machengine. Клонируешь, компиллируешь, нравится.

Имхо еще от выгорания помогает, клевый такой.

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

Это макрос в Лисп-понимании. И одна из причин нелюбви лиспов (вторая после скобочек).

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

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

Но это не макрос в Си-понимании, бич препроцессора.

Они обещают без макросов, а не без препроцессора.

Вообше, такое впечатление что рекламные тексты для Zig писали люди которые ничего в нём не понимают.

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

А hare? От выгорания хочется что-то низкоуровневое, но не такое переусложнённое, как rust и кресты.

Зиг простой, кривая обучения чуть сложнее чем у Go. Туториал ziglings-org можно за три вечера закончить. Про Hare не знаю. Вот мне для решения задач в AoC нужны контейнеры. В С++ я делаю using NodesMap = std::map<std::string, Node>; В зиге делаю const NodesMap = StringHashMap(Node); А в Hare будет как?

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

В С++ я делаю using NodesMap = std::map<std::string, Node>; В зиге делаю const NodesMap = StringHashMap(Node); А в Hare будет как?

Также как и в чистом Cи: как напишите так и будет. Планируемый размер Hare 1.5МБ, в нем нет даже реализации HashTables.

https://harelang.org/documentation/faq.html#so-i-need-to-implement-hash-tables-myself

Zig - аналог C++ c STL.
Hare - аналог языка Си.

P.S. Hare is also designed to be stable for the long-term: when we’re done with Hare 1.0, the language syntax and semantics will freeze and it can be depended upon indefinitely.

P.P.S. Will we be writing Hare in 2099? (with Drew DeVault)

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

Также как и в чистом Cи: как напишите так и будет.

Zig - аналог C++ c STL.

Hare - аналог языка Си.

Черный пиар. Зиг по сложности не выше Си, и это однозначно. Там просто работа с типами и сигнатура такая:

pub fn StringHashMap(comptime V: type) type { ... }

Синтаксис отличается от Си как сейчас принято, не парсить методом спирали.

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

все эти зиги хары и прочие микроязыки….

как вообще это использовать если там нет банального дебаггера?

отлаживаться тестами и принтами?

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

А в си++ есть дебаггер, умеющий останавливаться на строках шаблона и показывать значения stl контейнеров?

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

не знаю что там в крестах тем более в atl/stl

последние 6 лет я програмулькирую на жяве за деньги

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

Какие-нибудь gdb и strace? Я ими всё дебажил, даже скриптоту. По-нормальному баги должны отлавливаться тестами, остальное — логированием (всякие там http запросы например). Когда надо лезть в дебаггер, это обычно означает что код совсем говно.

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

Выглядит как самая адекватная попытка залезть в крестовый стек. Nim и haxe вышли так себе, слишком много собственных особенностей.

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

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

добавил бы и инструментацию но ВМ у них нет так что ок

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

Есть универсальные инструменты — stracy, например. И разве их не пишут каждый раз ручками под свои специфические нужды?

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

все эти зиги хары и прочие микроязыки….

как вообще это использовать если там нет банального дебаггера?

В смысле нет дебаггера? Нормальный дебаггер у зига (под винду cppvsdbg, под линукс/макось dwarf). И компиляция под разные таргеты одним бинарником. На godbold.org есть компиляторы как ванильного Zig, так и Zig C++

В начале лета копилот Codeium.ai выкатил поддержку.

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

Там строки конкатенируются через специальный оператор

В пыхе кстати тоже

>>> "1".(1)
=> "11"
>>> "1"+1
=> 2
goingUp ★★★★★
()
Ответ на: комментарий от Gentooshnik

Это вообще не должно быть никакой операцией, вы чё прикалываетесь что-ли? Кто вам даст в продакшн базе создавать какие-то таблицы? Пишите SQL скрипты, собирайте подписи руководства и идите на поклон к администратору Базы Данных.

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

Ну лучше, чем у него на главной странице я не отвечу.

Hare is a systems programming language designed to be simple, stable, and robust. Hare uses a static type system, manual memory management, and a minimal runtime. It is well-suited to writing operating systems, system tools, compilers, networking software, and other low-level, high performance tasks.

Мне он понравился своми подходом. Опять же лучше почитать https://harelang.org/documentation/faq.html

Hare is also designed to be stable for the long-term: when we’re done with Hare 1.0, the language syntax and semantics will freeze and it can be depended upon indefinitely.

Вот это большой плюс. Не понимаю, зачем менять языки. К примеру меня полностью устраивает ANSI C, но зачем-то ему лепят новые стандарты. И так с каждым языком. Надо один раз сделать хорошо и всё.

Hare is a language that most of its experienced users should be able to understand in its entirety: it’s feasible that one person can read and understand the entire compiler, for example.

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

Hare is self-contained – it does not depend on libc

Это считаю большим плюсом, libc это отвратительное изделие. Когда компилятор С заменяет мой цикл на memcpy, мне хочется ругаться (да, я в курсе про флаги, это не суть).

Hare should feel comfortable for C users, but with most of the warts fixed. It has namespaces, much better error handling, first-class UTF-8 support, many quality-of-life features, and a much better standard library.

Собственно всё тут написано. Я люблю C, но у него многовато недостатков, а недавно я выяснил, что стандартописатели идут вообще не туда.

Omitting generics (and similar features) in Hare is a deliberate design choice which simplifies the language considerably and is more aligned with its design roots in C.

Вот это прямо в цель. Ненавижу генерики. Они портят каждый язык.

So I need to implement hash tables myself? Indeed.

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

https://harelang.org/blog/2023-11-08-100-year-language/

Вот ещё эта журнальная запись мне импонирует, рекомедую её прочитать, если описанное выше заинтересовало. Язык, цель которого - оставаться применимым через 100 лет, быть скучным и консервативным. Конечно я не верю, что у него получится, но сама цель похвальна.

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

Пишут то на нём что? Выглядит как штука для микродевайсов. Даже никакого управления зависимостями нет, предлагает их через make в обход пм глобально вкрячивать. И вот это уже очень плохо.

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

high performance tasks

И бенчмарки есть? Потому что оптимизатор у него примитивный.
$ hare build -R hello.ha
$ stat hello

Size: 322984 // 121272 после strip

Hare is self-contained – it does not depend on libc

Это считаю большим плюсом, libc это отвратительное изделие.

Myrddin уже давным-давно умеет.

Ненавижу генерики. Они портят каждый язык.

Лучше их иметь, чем не иметь. Никто же не заставляет их использовать, если не нравятся.

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

Про известные программы я пока не слышал, на практике применять я бы его не стал пока. Но вообще его делает широко известный в узких кругах Drew De Vault, так что может wayland перепишет, хе-хе.

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

Лучше их иметь, чем не иметь. Никто же не заставляет их использовать, если не нравятся.

С таким подходом можно C++ брать, там всё можно иметь и никто не заставляет, пока на работу не устроишься (:

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

А что в нём хорошего? Я на макось свои хелло-ворлды продолжаю на Obj C писать, меня Swift не впечатлил, а после того, как я увидел примеры из двух совсем не извращенских строчек, которые компилятор роняют в ошибку by design, вряд ли вообще когда-либо впечатлит. Похоже, что его спроектировали люди, которые просто не обладают нужной квалификацией для создания языков программирования.

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

А что в нём хорошего?

ARC, async/await, optionals, extensions, pattern matching, overflow operators, перегрузка операторов…

люди, которые просто не обладают нужной квалификацией для создания языков программирования

Это Латтнер-то?

dataman ★★★★★
()
Ответ на: комментарий от ya-betmen

вдруг у тебя просто домашняя страничка на ноде

В ноде нет домашних страниц и каких либо web технологий, там голый JS VM с плюсовыми либами для системного программирования.

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

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

Зачем нужен zig - для меня загадка

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

Автор зига как я понял ровно из такой среды, ему понравился раст как язык но не понравилась концепция анальной привязки сборщик+пакетник+ide+бароучекер+конфигуратор и все это приколочено к llvm и несовместимо с системными c/c++ либами.

Я могу представить зачем кому-то кому нравится rust (лично мне не нравится ни тот не другой), брать zig и писать на нем - его можно в блокноте настрочить и просто скомпилировать слинковав с openssl/libsdl. А на расте изобрели супер-модерновое крутое поделие которое не может текущей кодовой базой пользоваться оно пишет на все свой велосипед.

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

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

Свифт - это яблочный JVM-based суррогат.

Когда то давно на макоси была своя обвязка для джавы для более тесно интеграции в систему как в андройде, в макоси вроде даже формат бинарных файлов java binary, родного у них или небыло изначально или они его выкинули. Большинство приложений для макоси писались на джаве.

Но пришел оракл и сказал что после нет больше джавы кроме openjdk а в openjdk вроде как есть какой то Native Api для прокидывания функций, но его то ли не хватает для тонкой интеграции, то ли оракл запретил из коробки таскать неванильную и вообще вроде скачивать заставлял. Так что пришлось рожать язык тоже не от хорошей жизни. Хотя говнецо то еще, да.

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

Я, как человек, который пишет в эмбед немного, могу с уверенностью утверждать, что используются ровно те языки, под которые дают SDK. Сегодня это C и C++. Никакого Раста и Зига там нет и быть не может, никто тебе не даст писать непойми на чём. Производитель чипа говорит как ты должен писать и ты повинуешься.

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

99% индустрии пишут по SDK, часто используя отвратительные IDE, которые могут ещё и под винду онли работать. И SDK пишут под ту же аудиторию, которая знает C и делает вид, что знает C++. Nordic написали вон на С++ новый SDK, так чуть не обанкротились, и сейчас на кучу проектов тянут старый сишный SDK, ибо привычно. Какой Rust. Нет просто такой опции.

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

Мало что понял, зачем пересобирать libstd? C++ не тянет за собой ничего. Ну исключения отключить, конечно, а так вроде ничего не мешает на C++ писать со всеми фичами и нулевым рандаймом. Или я ошибаюсь? Я вот на C пишу и у меня libc как бы тоже на контролере нет, ибо одна реализация printf-а будет весить больше, чем вся моя прошивка. Ну нет и нет, и не надо. memcpy есть и слава богу. И про C++ порой задумываюсь, namespace-ов тех же мне слегка не хватает, например.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 3)
Ответ на: комментарий от ac130kz

Я использовал в одном небольшом проекте несколько версий Bun назад. Всё работает, разрабатывать чуть проще, чем в NodeJS. В бинарники собираются, но не всё, сценарий с mjml* модулем не собрался тогда.

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

Следить за этим в языке, где все передаваемые пользователям данные - это строки… Считаю своим долгом напомнить откуда растут у такого поведения ноги:

// Online Java Compiler
// Use this editor to write, compile and run your Java code online

class HelloWorld {
    public static void main(String[] args) {
        System.out.println(1 + "1");
    }
}
java -cp /tmp/OBptxGvoLq/HelloWorld
11

=== Code Execution Successful ===
rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от Pm7vLB

В монге же вроде вообще никакой схемы нет. К ней это рассуждение не применимо. Хотя я не понимаю, как этим вообще можно пользоваться, но может и можно, всерьёз не пробовал.

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

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

Good news, everyone, зиг как раз кейс интеропа с Си и C++. И граница интеропа сильно размыта. Это один из вопросов, который будет возникать: где оставить исходники на С/C++, а где делать новый код на новом языке.

Например, этот код даст тебе инстанс структуры с винапи и си-типами данных, :

const win = @cImport({
    @cDefine("WIN32_LEAN_AND_MEAN", "1");
    @cInclude("Windows.h");
});
usingnamespace win;

Декларирование вручную (?HANDLE и тд значит nullable):

extern "user32" fn MessageBoxA(hWnd: ?HANDLE, lpText: ?LPCSTR, lpCaption: ?LPCSTR, uType: UINT) callconv(.Stdcall) c_int;

Если пропустить usingnamespace win; то надо будет ?win.HANDLE, ?win.LPCSTR, win.UINT. Это логично.

Буквально, импортируешь себе хидер как инстанс некой структуры, на шаге компилляции добавляешь либы из SDK твоего производителя. Компиляция этого кода

export fn WinMain(hInstance: HINSTANCE, hPrevInstace: HINSTANCE, lpCmdLine: PWSTR, nCmdShow: INT) callconv(.Stdcall) INT {
    MessageBoxA(null, "Hello", "title", 0);
}

даст программу для виндовз. Когда я пробовал, были понты с build.zig; без build.zig скомпиллировать и слинковать в режиме без текстовой консоли — получилось.

sarumeister
()

Фига себе, пельмень на лого.

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

Страшно далеки вы от народа. Интероп с C есть даже у джавы. Есть у этого zig интероп с examples от nordic, написанных на пятиэтажных Makefile, с кучей define-ов и двадцатиэтажных макросов? Сомневаюсь. Ответит ли вам что-то осмысленное служба поддержки nordic, когда ваша программа не заработает и вы спросите у них помощь? Сомневаюсь. Поддерживается ли этот zig в Segger Embedded Studio? Сомневаюсь.

Я даже на gcc 10 не могу обновиться, ибо gcc 9 это последний благословленный компилятор, а на 10 уже вылезают ошибки в коде библиотек. Поддерживает zig bug-to-bug совместимость с gcc 9?

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

Страшно далеки вы от народа. Интероп с C есть даже у джавы.

У джавы ffi а не интероп. Зиг вполне себе компилятор для Си и для С++. Проблема в другом, в «gcc». Дебажный код зиг выдает своими силами, релизный код поручает llvm-бэкенду. Думаю, если в Segger Embedded Studio gcc, какой-нибудь особый, какой я видел в Atmel Studio, то да, без вариантов.

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

Зиг вполне себе компилятор для Си и для С++. Проблема в другом, в «gcc». Дебажный код зиг выдает своими силами

Особо не слежу, но разве arocc уже умеет компилировать C++?

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

Заблуждение насчет схемы, просто она более гибкая и современная, чем слегка уже устаревшие RDBMS - в MongoDB есть всё, что и в них - внешние ключи, индексы, collations, транзакции, ограничения на значения и т.п., но немного по-другому, разумеется. Некоторые мигрируют, например, c Postgres, когда нужна скорость в обработке данных с большим количеством связей. В конце концов, с ней - монгой - просто приятнее работать по причине, которую описал выше.

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

Про arocc впервые услышал. Зиг компиллирует С++. Я вроде упоминал, что по работе один С++ проект перевел на компиляцию зигом, чтобы получилось без зависимости к рантайму.

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

Зиг компиллирует С++.

Я про это:

Дебажный код зиг выдает своими силами

Значит, не своими, а используя libclang.

Про arocc впервые услышал.

Началось с https://github.com/ziglang/zig/issues/16268 – upstream Aro and use it for translate-c instead of clang

Сейчас arocc интегрирован в Zig.

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

Значит, не своими, а используя libclang.

Дебажный код из MIR в исполняемый файл целевой архитектуры — своими силами, и со своими фичами. Релизный код из MIR в исполняемый файл целевой архитектуры — силами LLVM из-за его хороших оптимизаций.

Фронт компилятора для С и [modern] С++ наверняка libclang.

sarumeister
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.