LINUX.ORG.RU

c3c 0.7.6

 c3, , , ,


1

5

4 октября состоялся выпуск 0.7.6 кроссплатформенного компилятора и стандартной библиотеки языка программирования C3.

C3 – это эволюция, а не революция: язык, похожий на C, для программистов, которые любят C.
C3 – это язык программирования, основанный на синтаксисе и семантике языка C, с целью его развития при сохранении привычности для программистов C.
Благодаря полной ABI-совместимости с C, можно без труда смешивать C и C3 в одном проекте. В качестве демонстрации, vkQuake был скомпилирован с небольшой частью кода, преобразованной в C3 и скомпилированной с помощью компилятора c3c.

Компилятор написан на языке C с использованием фреймворка LLVM (поддерживаются версии 17-22) и распространяется по лицензии GNU LGPL.
Стандартная библиотека распространяется по лицензии MIT.

Основные изменения:

  • Добавлена compile-time функция lengthof().
  • Добавлена поддержка документирующих комментариев к отдельным членам структур, определениям ошибок и значениям перечислений.
  • В $defined теперь можно использовать $alignof, $offsetof и $nameof.
  • Вывод общих параметров lhs -> rhs, например List{int} x = list::NOHEAP.
  • Объединение generic- и обычных пространств имён модулей.
  • env::PROJECT_VERSION теперь возвращает версию в project.json.
  • Теперь работает сравнение слайсов и массивов пользовательских типов, реализующих оператор ==.
  • Добавлены опции оптимизации loop-vectorize, slp-vectorize, unroll-loops и merge-functions.
  • Добавлен вывод времени выполнения $exec при использовании опции -vv.
  • Добавлен оператор +++=.
  • Другие исправления ошибок и улучшения стандартной библиотеки.

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

★★★★★

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

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

Возможность состоит в том, чтобы быть придатком к компилятору Эппла?

Для вещей очень важен относительный масштаб.

Вон FreePascal на собственном бэке живет. Потому он фигура. Он сам по себе создаёт ценность для своих пользователей.

Rust может себе позволить жить на чужом бэке. Zig - тоже может попытаться.

А когда ты C3, и у тебя даже внятной идеи языка нет, это воспринимается чисто как лаба.

Какой-нибудь FASM или С-- смотрятся солиднее. Там авторская работа. Штучный продукт.

Когда ты не Эппл и не Гугл, то единственное, что тебя может выделить - идея и смелость.

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

Мир не ограничен:

The current version of QBE can target amd64 (linux and osx), arm64, and riscv64.

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

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

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

Нет. Дело оказалось в недостаточном экранировании путей. Если путь содержит пробелы или спецсимволы, то CMake не заботиться о экранировании таких случаев.

Проблема в этом коде в файле CMakeLists.txt:

if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
    # We are inside of a git repository so rebuilding the hash every time something changes.
    add_custom_command(
            OUTPUT "${CMAKE_BINARY_DIR}/git_hash.h"
            COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/git_hash.cmake"
            DEPENDS "${CMAKE_CURRENT_LIST_DIR}/.git")
else()
    # We are NOT inside of a git repository. Building the has only once.
    add_custom_command(
            OUTPUT "${CMAKE_BINARY_DIR}/git_hash.h"
            COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/git_hash.cmake"
    )
endif()

В результате работы получаем вызов cmake -P <путь без экранирования>.

Если поменять двойные кавычки на одинарные, то это исправит проблему, но я не большой знакток CMake скорее всего нужно использовать file(TO_CMAKE_PATH ... или что-то подобное…

В целом собралось.

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