LINUX.ORG.RU

Сообщения fsb4000

 

Выпуск LLVM 16

Группа Разработка

Вышла новая версия LLVM. Проект LLVM включает в себя оптимизатор и кодогенератор с LLVM IR во многие процессорные архитектуры, который используется многими проектами для реализации своих языков программирования, а также:

  • компилятор C/C++/Objective-C (Clang);
  • компилятор Fortran (Flang);
  • cтандартную библиотеку для С++ (libc++);
  • отладчик LLDB;
  • линкер LLD;
  • среду исполнения (runtime) для OpenMP;
  • некоторые другие компоненты.

( читать дальше... )

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

 , ,

fsb4000
()

В ожидании GCC 12.1

Группа Разработка

GCC - это набор компиляторов языков программирования от GNU.

Релиз GCC 12.1 ожидается в апреле 2022.

GCC 12 уже является системным компилятором Fedora 36. Также GCC 12 доступен в Red Hat Enterprise Linux в Red Hat Developer Toolset (версии 7) или Red Hat GCC Toolset (версии 8 и 9).

В GCC 12

  • улучшили поддержку OpenMP 5.0

  • реализовали поддержку ADA 2022 (флаг -gnat2022)

  • реализовали некоторые возможности следующего стандарта С: C2X (флаг -std=c2x или -std=gnu2x)

  • реализовали часть возможностей С++23.

Более подробное описание реализованного только про новые возможности компилятора С++ без учёта стандартной библиотеки.

В GCC 12 реализовали часть возможностей C++23. Без указания флага стандарта в g++-12 используется -std=gnu++17, чтобы использовать возможности описываемые далее нужно компилировать с флагами -std=c++23 или -std=gnu++23.

Реализованные возможности C++23:

  1. if consteval

Хотя уже в C++20 появились consteval функции, которые могут выполнятся только во время компиляции и был std::is_constant_evaluated (), но была проблема их совместного использования

#include <type_traits>

int slow (int);
consteval int fast (int n) { return n << 1; }

constexpr int fn (int n)
{
  if (std::is_constant_evaluated ())
    return fast (n); // 'n' is not a constant expression
  else
    return slow (n);
}
constexpr int i = fn (10);

https://godbolt.org/z/Yhbqq6K36

P1938R3 представил if consteval который позволяет использовать consteval функции внутри constexpr:

#include <type_traits>

int slow (int);
consteval int fast (int n) { return n << 1; }

constexpr int fn (int n)
{
  if consteval {
    return fast (n); // OK
  } else {
    return slow (n);
  }
}

constexpr int i = fn (10);

https://godbolt.org/z/Kxs6Wjfq6

Заметьте что if consteval требует {} в отличие от обычного if, и что if consteval может быть в обычной не constexpr функции.

  1. auto(x) GCC 12 реализовал P0849 который позволяет auto каст в prvalue
struct A {};
void f(A&);  // #1
void f(A&&); // #2
A& g();

void h()
{
  f(g()); // calls #1
  f(auto(g())); // calls #2 with a temporary object
}

https://godbolt.org/z/x7hn5GKEx

Заметьте что и auto(x) и auto{x} допустимы, хотя decltype(auto)(x) остаётся неверным.

  1. Non-literal переменные в constexpr функциях GCC 12 реализовал P2242R3, который позволяет non-literal переменным, goto, и меткам быть в constexpr функциях если выполнение во время компиляции не доходит до этих мест.
#include <type_traits>

template<typename T> constexpr bool f() {
  if (std::is_constant_evaluated()) {
    return true;
  } else {
    T t; // OK when T=nonliteral in C++23
    return true;
  }
}
struct nonliteral { nonliteral(); };
static_assert(f<nonliteral>());

https://godbolt.org/z/6xnzM46Ej

constexpr int
foo (int i)
{
  if (i == 0)
    return 42;
  static int a;
  thread_local int t;
  goto label;
label:
  return 0;
}

static_assert(foo(0) == 42);

https://godbolt.org/z/PGsErnE4n

  1. Multidimensional subscript operator GCC 12 реализовал P2128R6
struct S {
  int a[64];
  constexpr S () : a {} {};
  constexpr S (int x, int y, int z) : a {x, y, z} {};
  constexpr int &operator[] () { return a[0]; }
  constexpr int &operator[] (int x) { return a[x]; }
  constexpr int &operator[] (int x, long y) { return a[x + y * 8]; }
};

void g ()
{
  S s;
  s[] = 42;
  s[5] = 36;
  s[3, 4] = 72;
}

https://godbolt.org/z/nnGead631

Заметьте что operator[] сейчас не поддерживает аргументов по умолчанию. Рабочая группа рассматривает CWG2507 , и если она примет предложенное решение проблемы, то в будущем такой код будет валиден:

struct X {
  int a[64];
  constexpr int& operator[](int i = 0) { return a[i]; }
};
  1. elifdef и elifndef В С и С++ #ifdef и #ifndef это синтаксический сахар для #if defined(something) и #if !defined(something). Для вариантов с else не было такого синтаксического сахара. Так что его добавили в С++23(и в С2X) и GCC 12: P2334R1
#ifdef __STDC__
/* ... */
#elifndef __cplusplus
#warning "not ISO C"
#else
/* ... */
#endif

https://godbolt.org/z/z4hbj6M7q

  1. Extended init-statement GCC 12 реализовал P2360R0 где расширяются возможности init-statement (в if, for, switch) позволяя им содержать объявление псевдонимов. На практике это означает что теперь валиден подобный код:
for (using T = int; T e : v)
{
    // use e
}

Также можете ознакомиться с описанием исправлений и новыми предупреждениями в GCC 12 в оригинальной статье

>>> Все изменения GCC 12

 ,

fsb4000
()

Lazarus 2.2

Группа Разработка

Команда разработчиков Lazarus рада сообщить о выпуске Lazarus 2.2 — интегрированной среды разработки для Free Pascal. Этот релиз был собран компилятором FPC 3.2.2.

Список изменений:
http://wiki.lazarus.freepascal.org/Lazarus_2.2.0_release_notes
http://wiki.lazarus.freepascal.org/User_Changes_3.2.2

Эту версию можно скачать на SourceForge:
http://sourceforge.net/projects/lazarus/files/
ftp://ftp.freepascal.org/pub/lazarus/releases/ (для тех, у кого заблокирован sourceforge)

Контрольные суммы: https://www.lazarus-ide.org/index.php?page=checksums#2_2_0

Минимальные требования:

  • FreeBSD/Linux: gtk 2.8 для gtk2, qt4.5 для qt, qt5.6 для qt5, 32 или 64bit;
  • Windows: 2k, XP, Vista, 7, 8, 8.1 и 10, 32 или 64bit;
  • macOS/OS X: Cocoa (64bit) 10.12 - 11.4, Carbon (32bit) 10.5 - 10.14, qt и qt5 (32 или 64bit).

Страница на gitlab: https://gitlab.com/freepascal.org/lazarus/lazarus/-/tree/lazarus_2_2_0.

Если будете самостоятельно собирать x86_64 версию Lazarus из исходников, то рекомендуется собирать IDE с флагами оптимизации:

-O1 или -O2 -OoNoPeepHole, – и не собирать просто с -O2 или -O3, так как найден баг в компиляторе FPC 3.2.2, планируется, что он будет устранён в версии FPC 3.2.4.

Коммит с исправлением: https://gitlab.com/freepascal.org/fpc/source/-/commit/e9d318e7e2f772bf455a92461cd5c229e69858d8

>>> Оригинальная новость

 ,

fsb4000
()

Zig 0.9

Группа Разработка

Спустя 6 месяцев и 2023 коммита от 177 независимых участников вышла новая версия Zig.

Zig – это (кросс)компилятор языков программирования Zig, С++, С, Objective-C, Objective-C++, а также сборочная система для них. Проект разрабатывается под лицензией MIT. Недавно в Zig Core Team вошёл ещё один разработчик на зарплате: Isaac Freund.

В новой версии:

  • Появилась поддержка Objective-C, Objective-C++.

  • Улучшилась поддержка WebAssembly, RISC-V, Haiku.

  • Добавлены платформы ARM64 Windows и Solaris/Illumos.

  • Различные фиксы для уже поддерживаемых платформ.

  • В CI добавлены тесты скорости работы компилятора (подробнее). Теперь после каждого коммита видно, как меняется время парсинга, компиляции, анализа, а также сколько используется памяти. Это помогает оперативно находить регрессии и устранять их. Как пример, в Pull Request, который добавил Allocgate, забыли сделать free. Все тесты проходили, но на графике было видно увеличение потребления памяти, что помогло найти и исправить эту ошибку.

  • Одним из самых важных изменений языка является введение понятия Address Spaces. Теперь отдельным переменным можно указывать, где им создаваться (за счёт генерации компилятором специализированных инструкций эта функциональность полезна для встраиваемого оборудования и графических процессоров):

    pub const will_be_placed_in_flash: i32 addrspace(.flash) = 123;
    
    pub fn readFlash(ptr: *addrspace(.flash) i32) i32 {
       return ptr.*;
    }
    
  • Реализация компилятора Zig на Zig (self-hosted) готова на 44%.

  • Обновлены сторонние компоненты:

    • LLVM 13;
    • musl 1.2.2;
    • glibc 2.34;
    • mingw-w64 9.0.0.
  • Множество изменений в стандартной библиотеке (подробнее).

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

 

fsb4000
()

Cppcheck 2.5

Группа Разработка

Вышла новая версия статического анализатора для С и С++.

В новой версии:

В парсере:

  • различные исправления;
  • теперь поддерживаются все возможности c++11, c++14, c++17;
  • частичная поддержка с++20.

Также анализатор теперь:

  • знает больше об API;
  • показывает меньше ненужных предупреждений;
  • находит больше багов;
  • исправлены вылеты и ложные срабатывания в Misra.

Добавлены новые проверки:

  • подозрительное присваивание контейнера/итератора в условии;
  • повторное пробрасывание текущего исключения с помощью throw;.

Примеры кода, которые демонстрируют новые проверки:

void f(std::string s) {
  if (s = "123") {
  }
}
Assignment in condition should probably be comparison
void func1(const bool flag) { try{ if(!flag) throw; } catch (int&) { ; } }
Rethrowing current exception with 'throw;', it seems there is no current exception to rethrow.
If there is no current exception this calls std::terminate(). More: https://isocpp.org/wiki/faq/exceptions#throw-without-an-object

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

 , , ,

fsb4000
()

Zig 0.8

Группа Разработка

После 7 месяцев работы и 2711 коммитов вышла новая версия Zig: 0.8

Zig это:

  • Современный компилятор С

  • Современный компилятор С++

  • Компилятор языка Zig

  • Сборочная система для C, C++, языка Zig

  • (Планируется) Пакетный менеджер для С, C++, языка Zig

Zig разрабатывается под лицензией MIT: https://github.com/ziglang/zig/blob/master/LICENSE

Язык Zig – это язык общего назначения, который старается быть простым. Нет макросов, скрытых аллокаций, скрытого потока управления.

( читать дальше... )

Полный список изменений: https://ziglang.org/download/0.8.0/release-notes.html

>>> Официальный сайт

 , ,

fsb4000
()

Состоялся выпуск FPC 3.2.2

Группа Разработка

20 мая 2021 года состоялся выпуск FPC 3.2.2!

FPC – это свободный (GNU GPL 2) компилятор Паскаля.

Со времени выхода FPC 3.2 прошёл почти 1 год. (Версия 3.2.0 вышла 19 июня 2020.)

Новые возможности:

  1. Поддержка сборки программ под новые маки на ARM64 (macOS/AArch64).

  2. Сохранение ссылок на методы записей в переменные (совместимость с Delphi).

program test;

{$Mode Delphi}

type R = record
    var X: Integer;
    function Foo: Integer;
end;

function R.Foo: Integer;
begin
    result := X
end;

var    F: function : Integer of object;
    Z: R = (X:42);
begin
    // Сейчас компилируется
    // в 3.2.0 : 'Error: Incompatible types'
    F := Z.Foo;
    if F() <> 42 then
      Halt(1);
end.
  1. Юнит для MySQL теперь поддерживает MySQL 8.0.

  2. У класса TThread появилось поле TThread.NameThreadForDebugging (совместимость с Delphi).

>>> Список изменений, которые могут нарушить обратную совместимость

>>> Скачать

>>> Официальный сайт

 , ,

fsb4000
()

Rust 1.49

Группа Разработка

Опубликован релиз 1.49 языка программирования Rust.

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

( читать дальше... )

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

 

fsb4000
()

Redox OS 0.6.0

Группа Open Source

Redox — UNIX-подобная операционная система с открытым исходным кодом, написанная на Rust.

Изменения в 0.6:

  • Переписан менеджер памяти rmm. Это устранило утечки памяти в ядре, которые стали серьёзной проблемой с предыдущим менеджером памяти. Также поддержка многоядерных процессоров стала стабильней.

  • Многие вещи от студентов Redox OS Summer of Code были включены в этот релиз. Включая работы по ptrace, strace, gdb, disk partitioning, logging, io_uring и т.д.

  • Переработана стандартная библиотека С relibc для обеспечения большей совместимости с приложениями.

  • Новый формат пакетов pkgar, который быстрее чем старый формат tar.

  • Обновлена коллекция с примерами пакетов: cookbook

  • Много времени к подготовке к этому выпуску было потрачено на адаптацию кода к ломающим изменениям в Rust Nightlies, где был изменён дизайн макроса asm. Также другие проблемы удерживали разработчиков от выпуска. Они надеются что новые версии теперь будут выходить чаще. (Предыдущий выпуск 0.5 был: 24 марта 2019 г.)

Скриншот из VirtualBox: https://i.imgur.com/QqylHXj.png

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

 ,

fsb4000
()

.NET Conf 2020. Бесплатная конференция, 10-12 ноября

Группа Конференции и встречи

Выходит .NET 5 и будет трёхдневная конференция. Можно будет задать свои вопросы спикерам(https://www.dotnetconf.net/speakers)

Кому интересно, можно посмотреть название конкретных докладов: https://www.dotnetconf.net/agenda

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

 , ,

fsb4000
()

Вышел Kotlin 1.4

Группа Разработка

Вот что вошло в Kotlin 1.4.0:

В Kotlin 1.4 много нового:

Улучшения стандартной библиотеки:

Основное направление работы над стандартной библиотекой Kotlin — улучшение единообразия как на разных платформах, так и между самими операциями. В этом выпуске в стандартную библиотеку добавлены новые операторы коллекций, улучшения делегированных свойств, реализация двунаправленной очереди ArrayDeque и многое другое.

Кроме того, больше не нужно объявлять зависимость от stdlib в проектах Gradle-Kotlin, независимо от того, разрабатываете ли вы под одну платформу или создаете мультиплатформенный проект. Начиная с Kotlin 1.4.0, эта зависимость добавляется по умолчанию.

Продолжена работа и над другими частями экосистемы Kotlin:

Подробности

Приглашаем всех желающих на четырехдневную онлайн-конференцию, посвященную Kotlin 1.4!

Мероприятие будет транслироваться 12–15 октября. Бесплатная регистрация по ссылке: https://kotlinlang.org/lp/event-14#registration

>>> Подробности на сайте JetBrains на русском

 

fsb4000
()

Free Pascal 3.2.0

Группа Разработка

Состоялся выпуск FPC 3.2.0!

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

Со времени выхода FPC 3.0 прошло 5 лет, так что рекомендуется обновиться как можно скорее.

Новые возможности: https://wiki.freepascal.org/FPC_New_Features_3.2.0

Список изменений в которых может нарушиться обратная совместимость: https://wiki.freepascal.org/User_Changes_3.2.0

Список новых поддерживаемых платформ: https://wiki.freepascal.org/FPC_New_Features_3.2.0#New_compiler_targets

Скачать: https://www.freepascal.org/download.html

>>> Официальный сайт

 , ,

fsb4000
()

RSS подписка на новые темы