The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз набора компиляторов GCC 15

25.04.2025 22:30

После года разработки опубликован релиз свободного набора компиляторов GCC 15.1, первый значительный выпуск в новой ветке GCC 15.x. В соответствии со схемой нумерации выпусков, версия 15.0 использовалась в процессе разработки, а незадолго до выхода GCC 15.1 уже ответвилась ветка GCC 16.0, на базе которой будет сформирован следующий значительный релиз GCC 16.1.

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

  • При компиляции программ на языке C по умолчанию задействован стандарт С23 (обзор изменений) с расширениями GNU ("-std=gnu23"). Ранее по умолчанию использовался стандарт C17 - "-std=gnu17"). Изменение потенциально может привести к проблемам при сборке существующих проектов из-за включения константы nullptr, типа _BitInt(n) и ключевых слов bool, true и false, которые могут конфликтовать с заданными в приложениях одноимёнными идентификаторами.
  • Реализованы возможности стандарта C23:
    • Директива "#embed", предназначенная для встраивания в код бинарных ресурсов.
    • Атрибут "unsequenced", сигнализирующий, что результат не зависит от порядка выполнения.
    • Атрибут "reproducible", указывающий, что функция всегда возвращает один и тот же результат при одинаковых входных данных, т.е. не зависит от иных факторов.
  • Реализованы элементы будущего стандарта C2Y (-std=c2y и -std=gnu2y):
    • Возможность объявления переменных в операторе "if", например, "if (int x = get ()) {...}".
    • Поддержка присвоения имён циклам для того, чтобы ссылаться на них в коде.
      
         outer: for (int i = 0; i < IK; ++ i) {
           switch (i) {
             case 1:
               break;       // jumps to CONT1
             case 2:
               break outer; // jumps to CONT2
           }
           // CONT1
         }
         // CONT2
      
      
    • Поддержка указания диапазонов целых значений в выражениях "case", например, "case 1 ... 10:".
    • Суффиксы "i" и "j" для обозначения мнимой части в комплексных числах.
    • Возможность использования операторов "++" и "--" с комплексными числами.
    • Конструкция "_Generic(type, expr1, expr2, ...)" для выбора выражения на основе типа операнда.
    • Поддержка обращения к байтовым массивам как к другим типам объектов, таким как структуры и объединения.
    • Поддержка применения оператора "alignof" к неполным массивам (объявленным без указания размера, например, "int a[]").
    • Добавлен новый синтаксис для восьмеричных, шестнадцатеричных и универсальных escape-последовательностей символов. Вместо "\u", "\x" и "\nnn" - предложены последовательности "\u{}", "\o{}" и "\x{}", в которых можно указывать произвольное число цифр.
    • Встроенные функции "__builtin_stdc_rotate_left" и "__builtin_stdc_rotate_right".
    • Разрешены операции с нулевой длиной на указателях NULL (например, "sizeof(*p)").
  • В фронтэнде для языка C++ реализованы возможности, развиваемые для будущего стандарта C++26:
    • Вариативный оператор "friend" ("friend Ts...").
    • Возможность использования ключевого слова "constexpr" с разновидностью оператора "new" (placement new) для размещения объекта в заранее выделенной памяти во время компиляции.
    • Вывод ошибки при удалении указателя на неполный тип.
    • Объявлен устаревшим синтаксис определения вариативных параметров с многоточием без предшествующей запятой (например, когда указывается "void e(int...)" вместо "void e(int, ...)").
    • Индексирование пакета параметров в шаблонах.
    • Атрибуты для структурированных привязок;
    • Синтаксис '= delete("причина")';
    • Включение "@", "$" и "`" в базовый набор символов.
    • Запрещено использование макросов для объявления модулей.
    • Возможность применения структурированного связывания (structured binding) в качестве условия в операторах if и switch.
    • Прекращена поддержка прямого сравнения массивов (например, "int arr1[5]; int arr2[5]; bool same = arr1 == arr2").
    • Механизм "#embed" для встраивания бинарных ресурсов.
    • Объявлен устаревшим шаблонный класс is_trivial.
  • Добавлены возможности C++23:
    • Запрет некоторых применений директивы "export" и разрешение использования "export {}".
    • Поддержка продления времени жизни временных объектов в циклах "for", перебирающих диапазоны.
  • В библиотеке libstdc++ реализована экспериментальная поддержка модулей std и std.compat.
  • Использование инициализатора "{0}" для объединений в коде на C и C++ теперь не гарантирует очистку всего содержимого, а приводит к обнулению первого элемента объединения. Для очистки всего объединения следует использовать выражение "{}", определённое в спецификации C23, или указать опцию "-fzero-init-padding-bits=unions" для восстановления старого поведения.
  • Реализована поддержка атрибута "musttail" ([[gnu::musttail]] и [[clang::musttail]]) для гарантированных хвостовых вызовов. Атрибут применяется к выражениям return, в которых осуществляется рекурсивный вызов текущей функции, и гарантирует, что такой вызов будет использовать хвостовую рекурсию, при которой не выделяется дополнительная память в стеке (исключает риск исчерпания памяти при очень большом числе вызовов).
  • Реализована поддержка атрибута flag_enum ([[gnu::flag_enum]] и [[clang::flag_enum]]), применяемого к перечислениям для индикации, что содержимое используются в битовых операциях (исключает вывод предупреждения в режиме "-Wswitch").
  • Добавлена поддержка атрибута "counted_by", через который можно указать поле в структуре с гибким массивом, определяющим число элементов. Атрибут может использоваться для повышения эффективности проверок выхода за границу буфера.
  • Для функций добавлен атрибут "nonnull_if_nonzero", определяющий, что некоторые параметры функции с указателями могут принимать значение NULL, только если другой параметр равен нулю.
  • Разрешено использовать расширенные ассемблерные вставки "asm (....)" вне функций. В ассемблерных вставках разрешено перезаписывать память в красной зоне стека (область на вершине стека).
  • Компиляция кода на C++ ускорена благодаря улучшенному хэшированию шаблонов.
  • Добавлены новые оптимизации. Реализована поддержка векторизации циклов, в которых имеется код для преждевременного выхода (например, через вызов break или return), даже если подобные циклы манипулируют динамически выделяемыми массивами или буферами, размер которых неизвестен на этапе компиляции. При указании опции "-O2" включена векторизация некоторых легко векторизируемых циклов, для которых отсутствуют сведения о количестве итераций (tripcount).
  • Добавлен режим инкрементальной оптимизации на этапе связывания (LTO, Link-Time Optimization), существенно сокращающий время перекомпиляции при использовании LTO в ситуациях, когда внесены незначительные изменения в код (отредактирована одна функция). Для включения инкрементального режима предложена опция "-flto-incremental".
  • Улучшена компиляция очень больших входных файлов. Реализовано отслеживание номеров столбцов, превышающих 4096. Повышена точность указания местоположения ошибок и предупреждений в очень больших файлах.
  • В статическом анализаторе повышена наглядность отчётов при диагностике проблем. Например, обеспечено выделение места возникновения проблемы символом "⚠️", изменена компоновка вывода при ошибках в шаблонах C++, добавлены подсказки для упрощения перехода на стандарт C23, переработана цветовая схема. Добавлена возможность вывода диагностики в формате Sarif (-fdiagnostics-format=sarif-file).
  • Реализована библиотека libgdiagnostics, позволяющая интегрировать в свои проекты возможности GCC, связанные с оформление диагностических сообщений (например, можно задействовать средства цитирования, подсветки, подсказок по исправлению, вывода в формате SARIF).
  • Добавлена утилита sarif-replay для просмотра файлов в формате SARIF, основанном на JSON и применяемом для сохранения результатов статического анализа и сведений о предупреждениях и ошибках.
  • Добавлено предупреждение "-Wanalyzer-undefined-behavior-ptrdiff", выводимое при наличии операций вычитания с указателями, ссылающимися на разные участки памяти.
  • Добавлены предупреждения "-Wtrailing-whitespace" и "-Wleading-whitespace" для выявления остаточных пробелов в конце строк и лишних пробелов начале строк.
  • Добавлено предупреждение "-Wheader-guard" для информирования о проблемах в макросах защиты заголовочных файлов, предотвращающих повторное включение заголовочного файла.
  • Фронтэнд для языка D обновлён до версии 2.111.0.
  • Во фронтэнд для языка Fortran добавлена поддержка беззнаковых целых чисел.
  • В состав включён компилятор для языка COBOL - gcobol, поддерживающий платформы x86-64 и AArch64, и не рассчитанный на использование на 32-разрядных системах. Компилятор реализует спецификацию ISO/IEC 1989:2023 и проходит большую часть тестов NIST CCVS/85.
  • Продолжена реализация стандартов OpenMP 5.0, 5.1, 5.2 и 6.0 (Open Multi-Processing), определяющих API и способы применения методов параллельного программирования на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD). Добавлена поддержка метадиректив и конструкций tile, unroll, interop и dispatch. Для некоторых GPU AMD и NVIDIA добавлена поддержка унифицированной разделяемой памяти (включается через указание unified_shared_memory в директиве "requires"). Добавлена поддержка выражения "self_maps".
  • В бэкенд для архитектуры AArch64 добавлена поддержка платформы MinGW (aarch64-w64-mingw32). Реализовано более 20 расширений ARM8 и улучшена поддержка расширения ACLE (Arm C Language Extensions). Внесены многочисленные улучшения в генератор кода. Добавлена поддержка CPU:
    • Apple A12 (apple-a12)
    • Apple M1 (apple-m1)
    • Apple M2 (apple-m2)
    • Apple M3 (apple-m3)
    • Arm Cortex-A520AE (cortex-a520ae)
    • Arm Cortex-A720AE (cortex-a720ae)
    • Arm Cortex-A725 (cortex-a725)
    • Arm Cortex-R82AE (cortex-r82ae)
    • Arm Cortex-X925 (cortex-x925)
    • Arm Neoverse N3 (neoverse-n3)
    • Arm Neoverse V3 (neoverse-v3)
    • Arm Neoverse V3AE (neoverse-v3ae)
    • FUJITSU-MONAKA (fujitsu-monaka)
    • NVIDIA Grace (grace)
    • NVIDIA Olympus (olympus)
    • Qualcomm Oryon-1 (oryon-1)
  • В бэкенде генерации кода для GPU AMD Radeon (GCN) реализована поддержка библиотеки libstdc++ и добавлена экспериментальная поддержка генерации кода для серий устройств gfx9-generic, gfx10-3-generic и gfx11-generic.
  • В бэкенд для архитектуры x86 добавлена поддержка расширений архитектуры набора команд Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Добавлена поддержка CPU Intel Diamond Rapids. Удалена поддержка оптимизаций и расширений для CPU Intel Xeon Phi Knights Landing и Knights Mill.
  • Расширены возможности бэкендов для платформ LoongArch и AVR.
  • Удалена поддержка целевой архитектуры nios2, применяемой в процессорах Nios II. Объявлена устаревшей и будет удалена в следующем значительном выпуске поддержка ABI ILP32 (-mabi=ilp32) в порте для AArch64.


  1. Главная ссылка к новости (https://gcc.gnu.org/pipermail/...)
  2. OpenNews: Релиз набора компиляторов LLVM 20
  3. OpenNews: На базе Clang для языка Си реализован режим проверки границ буферов
  4. OpenNews: Для GCC подготовлены патчи для сборки универсальных исполняемых файлов
  5. OpenNews: Релиз набора компиляторов GCC 14
  6. OpenNews: GCC 15 будет использовать стандарт C23 по умолчанию
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63141-gcc
Ключевые слова: gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (127) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 22:42, 25/04/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     

  • 1.2, Аноним (-), 22:46, 25/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Слушайте, а что с GNU Pascal случилось? Почему компилятор никак не развивается? Почему всякое непотребство типа Modula-2 (вообще кто-то слышал что то об этом языке?) или Objective-C поддерживаются, а Паскаль нет?
     
     
  • 2.6, Аноним (6), 23:07, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    почти все одиночки сидят на freepascal + lazarus, в некоторых корпорациях еще Delphi используется, но там лицензия от 3500 $


    GNU Pascal как бы не нужен никому

     
     
  • 3.9, Аноним (-), 23:16, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Delphi много где используется в бизнес сегменте (не путать с серверами и ынтерпрайзом). А вот free pascal редкостное днище, которое даже до турбопаскаля 90-х не дотягивает даже по качеству документации, впечатление что сделано тяп-ляп неорганизованной толпой людей.
     
     
  • 4.11, Аноним (11), 23:18, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Delphi — это такой же паскаль, как Visaul Basic по сравнению с изначальным бейсиком.
     
     
  • 5.17, Аноним (-), 23:23, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не уверен, что до сих пор где-то что-то живо написанное на обычном бейсике, а вот visual basic 6 живее всех живых, в том же бизнесе или в производственной среде. По крайней мере, vb6 скорее жив, чем мёртв.
     
     
  • 6.70, Аноним (70), 08:09, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И в этом плане тоже.
     
  • 6.96, Смузихлеб забывший пароль (?), 12:44, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    если какое-то древнее барахло кто-то как-то допиливает чтобы хоть как-то продолжало работать ибо денег сделать новое нет - это не значит что оно живее всех живых

    даже игоры на VB на винде запускать - то ещё удовольствие. То одной библиотеки не хватает, то - другой. Пока всё перепробуешь - желание играть исчезнет )

     
     
  • 7.104, Аноним (70), 14:13, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вот когда работает и не трогают, потому что оно работает — в результате деньги и есть.
     
  • 7.117, Аноним (117), 15:17, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Просто умные люди не переписывают софт ради переписывания. Есть задача, она выполняется. Хотя кто-то и телефоны покупает каждый год, обогащая корпорастов.
     
     
  • 8.122, Аноним (70), 15:24, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Покупка телефона тоже решает некоторые задачи, просто у бизнеса задачи другие ... текст свёрнут, показать
     
  • 4.33, Аноним (33), 00:44, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дельфи и живёт в бизнесе потому что у него есть коммерческая поддержка. В гнутом виде никому не необходим.
     
     
  • 5.95, Смузихлеб забывший пароль (?), 12:43, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    делфи там живёт, т.к в своё время был весьма популярен и на нём много всего было сделано, что не желающие тратить лишнюю копейку предпочитают поддерживать и допиливать кое-как нежели разработать новый продукт на новых технологиях
     
  • 2.43, Аноним (43), 01:30, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Слушайте, а что с GNU Pascal случилось?

    Пpoтуxло, зaвoнялoсь и испортилось, как и весь Пaскaль. На нём даже в шкoлaх никто уже не пишет. Место этому языку на пoмoйкe. Даже пoкoйный Niklaus Wirth сделал ставку на Обepoн, а не на Пaскaль.

     
     
  • 3.132, MinimumProfit (?), 16:43, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну не совсем на помойке, скорее в зале славы музея. Канонический Pascal - это история, язык-демонстрация технологии структурного программирования, технология, которая вывела из кризиса  индустрию программирования в 70-х годах.

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

    Oberon - это уже другое время, другие компьютеры, другие технологии.

     
  • 3.135, MinimumProfit (?), 16:46, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Давайте посмотрим на последний рейтинг Tiobe (https://www.tiobe.com/tiobe-index/)

    В нём Delphi/Pascal за год поднялся с 11-го места на 9-е по популярности, между прочим обойдя PHP, Ada, Rust.

     
  • 2.55, Маняним (?), 03:07, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Modula-2 (вообще кто-то слышал что то об этом языке?)

    Так это и есть улучшенная версия паскаля)

     
  • 2.86, Аноним (86), 10:47, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Почему компилятор никак не развивается?

    А что тебе не хватает в гну-паскале?

     
  • 2.106, Аноним (106), 14:21, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > всякое непотребство типа Modula-2 (вообще кто-то слышал что то об этом языке?)

    По этому, как вы изволили выразиться, "непотребству" книхку издавались ещё до появления интернетов.

     
  • 2.127, MinimumProfit (?), 16:32, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    GNU Pascal заглох, потому что не было фреймворков и библиотек для него, а для Free Pascal'я - есть, Lazarus, QtPas и много всяких на github.
     

  • 1.3, Аноним (3), 23:02, 25/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Поддержка указания диапазонов целых значений в выражениях "case"

    Скоро так и Паскаль догонят!

     
     
  • 2.50, Маняним (?), 02:48, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Как язык паскаль возможно лучшее что создано. Но то что он ушёл в обучение сыграло злую шутку.
     
     
  • 3.75, Тот_Самый_Анонимус_ (?), 08:21, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Как язык паскаль возможно лучшее что создано.

    Отвратительный язык, заточенный под англ. Это просто убого использовать операторные скобки и некоторые операции (целочисленное деление, остаток, логические операции) в виде слов.

    Он был создан для обучения. А то что он ушёл в реальную разработку — ошибка.

     
     
  • 4.91, User (??), 11:48, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В юникоде столько закорючек, а они английские слова используют, н-негодяи!
     
     
  • 5.93, Тот_Самый_Анонимус_ (?), 12:12, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Дело не в английских словах. Мы используем латиницу и эллиницу в математике и физике, и даже в Таблице Менделеева. И в программировании это тоже не плохо.

    А плохо чрезмерное загрязнение ЯП ненужными словами.

    С точки зрения живого языка then нужен для if, но с точки зрения формального языка — нет. Ведь Паскаль не брезгует символом + для обозначения сложения, а для матлогики зачем-то понадобились слова.

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

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

     
     
  • 6.112, User (??), 15:08, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    (&(рефлекторно)(лиспанул))
    Что значит "загрязнение" и "ненужными"? Во те ещё времена действовал лозунг "программирование - вторая грамотность!" и предполагалось, что этот самый кот (которого ещё и порядково меньше было) будут читать и писать не специально обученные машинисты, ой, "программисты" - а вот конечные пользователи, желающие добиться от железки чего-нибудь полезного. В этом плане максимальная близость к естественноиу языку и минимальная неожиданность считалась благом.
    Наивнве были дiды, да. Кто только на эти грабли не наступал - от sql до 1с в результате пользователям всё, окромя чятжпт "сложна!", а программисты готовы любые закорюки учить, лишь бы "ни как у магглов!", ага.
    Сейчас и вовсе - зайлайтинг-фолдинг-форматтеры-линтеры почти что угодно читаемым делают.

    Если пасквиль за что и не любить - так за строки. Впрочем, до сишников по к-ву проблем хорошо так не допрыгнули. Процедуры/функции в принципе логичны - не надо, не пользуйся, да? Массивы, кнешн, кривые - но ок.
    Любой язык есть за что не любить - но право, на фоне победителя баттла паскаль б-жественно хорош, но индустрия печально знаменита выбором самых мегакривейших решений - теперь вот живём с этим.

     
     
  • 7.123, Тот_Самый_Анонимус_ (?), 15:24, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Что значит "загрязнение" и "ненужными"? Во те ещё времена действовал лозунг "программирование - вторая грамотность!" и предполагалось, что этот самый кот (которого ещё и порядково меньше было) будут читать и писать не специально обученные машинисты, ой, "программисты" - а вот конечные пользователи, желающие добиться от железки чего-нибудь полезного.

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

    >В этом плане максимальная близость к естественноиу языку и минимальная неожиданность считалась благом

    Я про то и говорю. Для меня англ — неестественный язык. И за то ругаю Паскаль. ЯП — это в первую очередь про математику, и, как в математике, вполне хорошо использовать систему знаков для действий, а слова оставить для имён переменных и функций.

     
  • 6.116, Аноним (117), 15:16, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > ненужными словами

    Да ты ещё язык Ada не видел. Кстати моё мнение, что слова гораздо лучше закорючек сишных, более наглядно. Тем более ты их целиком не пишешь, за тебя их вставляет твоя IDEшка.

     
     
  • 7.125, Тот_Самый_Анонимус_ (?), 15:28, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >что слова гораздо лучше закорючек сишных, более наглядно

    Я уже писал выше.

    1. Если слова лучше, то откажитесь от использования математических знаков: они тоже закорючки. Будьте последовательны до конца.
    2. Слова воспринимаются как команды. Без begin и end код смотрится лучше (субъективно, конечно же). Чем меньше служебных слов, тем лучше.

     
     
  • 8.137, MinimumProfit (?), 16:58, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Математическая нотация с её минимализмом ненадёжна где-то поставил лишнюю точку... текст свёрнут, показать
     

  • 1.7, Аноним (7), 23:10, 25/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Поддержка присвоения имён циклам для того, чтобы ссылаться на них в коде.

    зачем, если есть goto?

     
     
  • 2.10, Аноним (11), 23:17, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Только хотел написать, что они goto переизобрели.
     
     
  • 3.13, Аноним (7), 23:19, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    так у них с логикой проблемы, метка то после цикла должна быть :) а то у них выход из цикла означает начать его заново.
     
  • 3.14, Аноним (-), 23:19, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    К хорошему всегда возвращаются. Никогда не понимал отказа от goto, ведь это крайне удобная вещь, с которой можно писать очень оптимизированный код, а не раздувать его ради простой функциональности на 100500 строк.
     
     
  • 4.16, Аноним (7), 23:23, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Никогда не понимал отказа от goto,

    так вам не на С надо писать, а на асм. В Си чисто по религии goto (фактически асмовский jump) быть не должно.

     
     
  • 5.18, Аноним (-), 23:27, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    С jmp, jnz/jne можно очень красивый код писать. А рилигия в программировании, как и любые догмы, скорее вредны. Нужно всегда отталкиваться от целесообразности и конкретных требований\пожеланий к проекту.
     
     
  • 6.21, Аноним (7), 23:59, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > С jmp, jnz/jne можно очень красивый код писать.

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

     
  • 6.26, Аноним (11), 00:27, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В 8080 была такая замечательная вещь — CALL по условию/RET по условию. Количество джампов сокращало в разы.
     
     
  • 7.28, Аноним (28), 00:33, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так это же стек затрагивало, а значит уже сильно медленнее.
     
     
  • 8.31, Аноним (11), 00:42, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    j условие метка ret метка 8212 10 10 тактов r условие 8212 5 11 такт... текст свёрнут, показать
     
  • 7.45, Аноним (45), 02:09, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Прикинь, в ARM почти любая инструкция может быть исполнена по условию.
     
     
  • 8.46, Аноним (46), 02:24, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    У армов конечно, как и у ириски - очень вкусные инструкции, но лично меня всегда... текст свёрнут, показать
     
  • 8.49, Маняним (?), 02:46, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Но почему тогда армы до сих пор годятся только для телефонов Сколько там уже пр... текст свёрнут, показать
     
     
  • 9.56, Аноним (46), 03:33, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Помнится были даже смарты на интеле И всякие мини планшеты, тоже на интеле, у... текст свёрнут, показать
     
     
  • 10.61, Аноним (11), 06:25, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Почему не совсем планшеты Вполне полноценные планшеты на андроиде были, у самог... текст свёрнут, показать
     
  • 9.57, Котик Биба (?), 03:41, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для тебя вся техника Apple и ноуты на Snapdragon какая-то шутка ... текст свёрнут, показать
     
     
  • 10.58, Аноним (28), 04:14, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И не только для него Ты ж не будешь спорить, что там телефонный процессор SoC ... текст свёрнут, показать
     
     
  • 11.71, Аноним (70), 08:10, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И что в нём телефонного ... текст свёрнут, показать
     
  • 11.98, blkkid (?), 13:35, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    я, конечно, многое на этом сайте видела, но называть семейство процессоров, где ... текст свёрнут, показать
     
     
  • 12.114, Аноним (117), 15:12, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Teбe бы бopщи варить, а не с серьезными людьми дискутировать на темы, в которых ... текст свёрнут, показать
     
     
  • 13.124, Аноним (70), 15:26, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Серьёзные люди, называющие десктопный процессор телефонным 8230 ну ладно ... текст свёрнут, показать
     
  • 9.110, Аноним (106), 14:36, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну шо вам на это сказать Вот сколько уже пророчат вендекапeц, а он, всё ещё не ... текст свёрнут, показать
     
     
  • 10.115, Аноним (117), 15:14, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дистрохопинг с периодическими возвращениями на Windows 11 от безнадёги, не означ... текст свёрнут, показать
     
     
  • 11.140, Аноним (106), 17:20, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Gentoo c конца 2004 Венда на локалхосте в качестве десктопа никогда не использо... текст свёрнут, показать
     
  • 8.54, Аноним (54), 03:00, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Могла быть, лет 10 назад В ARMv8 биты предикации выкинули, а в Thumb их никогда... текст свёрнут, показать
     
  • 8.60, Аноним (11), 06:15, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вы мне прямо глаза открыли Вообще это не исключительная особенность ARM А в... текст свёрнут, показать
     
  • 4.22, Аноним (106), 00:07, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А надёжность?
    "В своей следующей работе Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность."
     
     
  • 5.38, Аноним (38), 01:19, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А надёжность?
    > "В своей следующей работе Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность."

    И сел со своей войной против goto в лужу.
    Более подходящего способа для управления ресурсами в Си чем goto нет.

    После такого его невозможно воспринимать всерьез.

     
     
  • 6.92, User (??), 11:52, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Си невозможно принимать всерьёз? Ну, это вы, конечно, погорячилась - но что-то определённо есть
     
  • 5.59, Аноним (59), 05:01, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    1. Не очень понимаю, на что он намекает. Для кода без развилок и циклов проверить формальную корректность ещё проще. Он предлагает выкинуть развилки и циклы?
    2. Там, где требуется проверять формальную корректность, goto можно не использовать.
    3. Сейчас бы хвастаться отсутствием goto в языке с поддержкой исключений. goto хотя бы из функции не выходит, тогда как исключения прошивают весь стек вызовов.
     
     
  • 6.108, Аноним (106), 14:26, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >goto хотя бы из функции не выходит

    Да ну, шо вы говорите? Вы можете метку впендюрить куда угодно в пределах файла.

     
  • 3.15, Аноним (7), 23:21, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    конечно надо же сделать как в расте Ё тут пятиэтажный мат Named loops als... большой текст свёрнут, показать
     
     
  • 4.53, Аноним (54), 02:53, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Выдыхай. Эту фичу тру-UNIX деды придумали для Limbo тридцоть лет назад, оттуда ее позаимствовали в Go и Rust. Одобрено ЪUNIXЪ-Омниссией с 1995, проверено временем.
     
     
  • 5.109, Аноним (7), 14:32, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Эту фичу тру-UNIX деды придумали для Limbo тридцоть лет назад

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

     
  • 2.12, Аноним (7), 23:18, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    for (int i = 0; i < n; ++ i) {
      for (int j = 0; j < n; ++ j) {
        if (something (i, j))
          goto end;
      }
    }
    end:

    С goto куда интуитивно, чем пихать лейбл в начало оператора for (даблфейспалм). По логике меток, вы возвращаетесь и начинаете циклы заново, а не выходите из него вовсе.

    тог уж так надо было так писать, куда интуитивно чем в начале.

    for () { } : for-end-identifier;

     
     
  • 3.19, Аноним (-), 23:37, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тут много зависит от тимлида :) Если упёртый и аргументы в пользу goto не принимает, то придётся в функцию оборачивать и делать ретёрны.
     
     
  • 4.20, Аноним (7), 23:56, 25/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    из таких вложенных циклов я обычно выхожу устанавливая в максимальное значение инкрементируемую переменную.

    for (int i = 0; i < n; ++ i) {
      for (int j = 0; j < n; ++ j) {
        if (something (i, j))
          i = n;
          break;
      }
    }

     
     
  • 5.24, Аноним (28), 00:21, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Красиво, но фактически это тоже костыль, может быть даже похлеще goto, потому что всё равно оно вернётся и оценит i < 0 и только потом выйдет из цикла.
     
     
  • 6.30, Аноним (7), 00:34, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > может быть даже похлеще goto

    да мне и for не нужен будет если я буду использовать goto :)

     
  • 5.68, Аноним (68), 07:27, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А потом узнаете про промахи кэша при таких выходах, и что вложенные циклы вообще не нужны, нисколько, никогда.
     
     
  • 6.111, Аноним (7), 14:42, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > и что вложенные циклы вообще не нужны, нисколько, никогда.

    ну это что такое?

     
  • 3.103, Аноним (-), 14:12, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    При чём здесь логика меток Это логика оператора break лол, какая разница, что ... большой текст свёрнут, показать
     
     
  • 4.113, Аноним (117), 15:09, 26/04/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.126, Аноним (7), 15:34, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    потому-что запись вида end это метка в том же самом C для оператора goto И изм... большой текст свёрнут, показать
     

  • 1.8, Аноним (8), 23:12, 25/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >Директива "#embed", предназначенная для встраивания в код

    ~/.ssh/github

     
     
  • 2.47, Аноним (46), 02:28, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот Вы смеетесь, а эмбед это вообще чуть ли не самое крутое, что ввели в язык.
    Понятно что можно всякое нехорошее с ним делать, но и крутые штуки, типа встраивания ресурсов в технодемки, делать тоже можно и нужно.
     
     
  • 3.69, Аноним (68), 07:29, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Чо не сделают, лишь бы xxd не использовать. Все бы им в комбайны превращать.
     
     
  • 4.76, Аноним (70), 08:32, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Что не сделают, лишь бы костыли не использовать.
     
  • 4.120, Аноним (117), 15:21, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > xxd

    За это нужно кacтрировать, дабы не плодил дефектного потомства, и гнать из профессии ccaными тpяпками.

     
  • 3.107, Аноним (-), 14:24, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нехорошее можно и без embed сделать. Всё, что делается embed'ом можно сделать и без него. Можно например вызвать из Makefile утилиту, которая сделает из содержимого /home объектный файл или сишный сорец, а потом прилинковать это к проекту. Делов-то.

    Либо ты доверяешь сорцам и их системе сборки, либо не доверяешь им и каким-то образом огораживаешься от возможных атак. #embed в этом ничего не меняет.

     

  • 1.27, Аноним (-), 00:28, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > компилятор для языка COBOL

    Очень актуальное, а главное своевременно решение. П.С. А кто-то видел живьём вообще этот КОБОЛ? А то рассказывают про банки и прочий энтерпрайз, но кого не спросишь, делают выпученные глаза.

     
     
  • 2.29, Аноним (28), 00:34, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > А кто-то видел живьём вообще этот КОБОЛ?

    Нет

     
  • 2.32, abi (?), 00:43, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Да, видел живьём Fico Blaze Advisor в отечественном банке.
     
  • 2.34, Аноним (33), 00:46, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А что то от этого изменится?
     
  • 2.35, Аноним (11), 01:00, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Пойдите на работу в банк и прочий энтерпрайз, увидите… а, для этого кобол для начала надо изучить.
     
     
  • 3.41, Chlen22sm (?), 01:25, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Пойдите на работу в банк и прочий энтерпрайз, увидите…

    Это я удачно зашёл. Докладываю вам из глубин банков и прочих ынтерпрайзов... вижу java, кое-где c# и даже go, но не cobol. Лол.

     
     
  • 4.72, Аноним (70), 08:11, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В РФ? Тут, к счастью, такого слоя легаси не успело нарасти (за неимением самих банков).
     
  • 2.97, Аноним (97), 12:56, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    SAP ABAP это кобол. Правда, не гну.
     
     
  • 3.118, Аноним (117), 15:19, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > SAP

    Так оно мертво уже лет 10 как. Разве нет?

     
  • 2.136, Аноним (106), 16:47, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >А кто-то видел живьём вообще этот КОБОЛ?

    Вот вам свежачёк-с https://github.com/meyfa/CobolCraft

     
  • 2.138, MinimumProfit (?), 17:05, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Cobol в Tiobe на 20-м месте, даже поднимается
     

  • 1.36, cheburnator9000 (ok), 01:14, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Возможность объявления переменных в операторе "if", например, "if (int x = get ()) {...}".

    Ничего не понял это же прямо сейчас уже доступно нет??

    https://godbolt.org/z/bPKqvsood в данном случае if это просто проверка либо на 0, либо можно использовать и для nulltpr.

     
     
  • 2.64, Аноним (64), 06:50, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вы кинули код на C++, тогда как речь про Си.

    На Си такого синтаксиса нет.

     
  • 2.67, Сишник (?), 07:25, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Сейчас доступно в C++, а в статье речь о том, что это добавили в C.
     

  • 1.37, Аноним (37), 01:17, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Опять придется инструкции по сборке пакетов переписывать.
     
     
  • 2.128, Аноним (106), 16:33, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    LFS ?
     

  • 1.51, Маняним (?), 02:49, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как всегда в попсовых дистрах появится лет через 5?
     
     
  • 2.65, Аноним (64), 06:51, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В Дебиан 13 точно не попадет, потому что тулчейн для сборки, где GCC играет ключевую роль, заморожен от 15-го марта :)

    Будет в Дебиан 14, или более новая версия, если до заморозки успеет выйти 16-ая версия.

     
     
  • 3.129, Аноним (106), 16:35, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не гентупроблемы ;)
     
  • 2.66, Аноним (-), 07:09, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В Fedora 42 уже есть
     

  • 1.62, Аноним (62), 06:28, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    □ Атрибут "unsequenced", сигнализирующий, что результат не зависит от порядка выполнения.
    □ Атрибут "reproducible", указывающий, что функция всегда возвращает один и тот же результат при одинаковых входных данных, т.е. не зависит от иных факторов.
    □ Возможность объявления переменных в операторе "if", например, "if (int x = get ()) {...}".
    □ Поддержка присвоения имён циклам для того, чтобы ссылаться на них в коде.

    Гляжу на всё это и понимаю, что видел это в Nim. Авторы языка используют все конструкции из новых стандартов Си.

     
     
  • 2.74, Аноним (-), 08:17, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Гляжу на всё это и понимаю, что видел это в Nim. Авторы
    > языка используют все конструкции из новых стандартов Си.

    Только сам он - какой-то ужастик, типа помеси сишки с питоном, очень сомнительное счастье.

     
  • 2.87, 12yoexpert (ok), 10:47, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    у автора nim больше гибкости в этом плане, он пилит архитектуру и код практически в одно лицо
     

  • 1.73, Аноним (-), 08:15, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Директива "#embed", предназначенная для встраивания в код бинарных ресурсов.

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

    А гнутое расширение case 1..5 и проч они не хотят в новый стандарт взять?

     
     
  • 2.81, Аноним (81), 10:03, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Действительно, теперь ещё линуксовые бинари деблобировать из-за всяких утаистов (вероятно, нарушающих лицензии).
     
     
  • 3.101, Аноним (101), 14:00, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Действительно, теперь ещё линуксовые бинари деблобировать из-за всяких утаистов (вероятно, нарушающих лицензии).

    когда из всей фразы понял только "гну"

     

  • 1.78, Амонин (?), 09:20, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    import std; для с++ все ещё не завезли или я чего-то упускаю?
     
     
  • 2.85, 12yoexpert (ok), 10:43, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    сейчас проверю. только подожди чуть-чуть, у меня gentoo
     

  • 1.79, Аноним (79), 09:25, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В общем тенденция такова: какой-нибудь С50 (вопреки всем обещаниям!) начнёт таки всё больше и больше превращаться в С++, в то время как С++50 начнёт всё больше и больше превращаться в Раст. В общем делайте выводы сами!
     
     
  • 2.84, Аноним (86), 10:39, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >какой-нибудь С50 (вопреки всем обещаниям!) начнёт таки всё больше и больше превращаться в С++

    Скорее в golang. Встраивание бинарных ресурсов, объявление переменных при if-операторе, defer, etc.

     
  • 2.130, Аноним (106), 16:37, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Уже сделали - Rust ненужен.
     

  • 1.82, 12yoexpert (ok), 10:30, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    уже можно начинать читать учебники по 23 плюсам, или всё ещё половина стандарта не поддерживается?

    вроде страничку с поддержкой они обновили, и про попоболь с import std  там ни слова

    https://gcc.gnu.org/projects/cxx-status.html#cxx26

     
     
  • 2.99, Аноним (79), 13:49, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    да какой там 23, они 20 ещё полностью не реализовали! Полностью реализован только 17 стандрат
     
     
  • 3.102, Аноним (79), 14:03, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    и то вроде только в clang полность реализован 17 стандарт, в gcc даже он не полностью реализован!!!
     

  • 1.90, Аноним (90), 11:32, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Читаешь все это безобразие и понимаешь, какая же С/С++ мощь. Не для средних умов!
     
     
  • 2.100, Аноним (79), 13:51, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >>  какая же С/С++ мощь <<

    Такая мощь, что сам создатель С++ начал плакать о том, что на С++ осуществляются какие-то таи нападки и его срочно нужно защитить:)

     

  • 1.94, Аноним (94), 12:29, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а под via c7 он оптимизировать код умеет?
     
     
  • 2.105, Аноним (70), 14:19, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Даже под C3 умеет (14 версия, по крайней мере).
     
  • 2.119, Аноним (117), 15:20, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Простите, но такая оптимизация как мёртвому припарки. Для старого железа - старый софт.
     
     
  • 3.133, Аноним (-), 16:45, 26/04/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.131, Аноним (106), 16:40, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А этот VIA C7 лучше C2D ?
     
     
  • 3.134, Аноним (-), 16:46, 26/04/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.121, Аноним (121), 15:24, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    C++23 эт хорошо. Но когда уже доделают С++20?
     
     
  • 2.139, MinimumProfit (?), 17:08, 26/04/2025 [^] [^^] [^^^] [ответить]  
  • +/
    конкретно что не работает из C++20 ?
     

  • 1.141, Аноним (106), 17:33, 26/04/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Фронтэнд для языка D обновлён до версии 2.111.0.

    А что там с Гошкой, какой версии эталонного сейчас (GCC 15.1) соответствует gccgo?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру