The OpenNET Project / Index page

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

Выпуск компилятора языка D 2.110

10.03.2025 16:22

Опубликован релиз DMD 2.110, эталонного компилятора для языка D. Код компилятора распространяется под свободной лицензией BSL (Boost Software License). Поддерживаются системы Linux, Windows, macOS и FreeBSD.

Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков. Язык D также заимствует некоторые возможности динамических языков, полезные для повышения эффективности разработки и обеспечения безопасности. Например, имеется поддержка: ассоциативных массивов, косвенного определения типов, автоматического управления памятью, средств параллельного программирования, шаблонов, компонентов для метапрограммирования. Опционально доступен сборщик мусора. В программах на языке D можно использовать библиотеки на языке C, а также некоторые библиотеки на C++ и Objective-C.

Среди изменений в новом выпуске:

  • При запуске с опцией "-preview=fixImmutableConv" запрещено копирование переменных с типом "const void[]" в переменные с типом "void[]", так как такое копирование в последствии может привести к использованию вне контекста "const".
  • Данные, загруженные через выражение "import", теперь обрабатываются как бинарные строки (hex string) и могут быть неявно преобразованы в массивы значений с типами, отличными от "char". New trait isCOMClass to detect if a type is a COM class
  • Добавлен типаж isCOMClass ("__traits(isCOMClass, Type)") для определения в процессе компиляции, что тип является COM-классом.
  • Значения с типом "bool", отличные от 0 и 1, теперь обрабатываются как небезопасные (не могут использоваться в коде с признаком "@safe").
  • В пакетном менеджере dub обеспечена проверка присутствия файлов "dub.selections.json" в родительских каталогах.


  1. Главная ссылка к новости (https://dlang.org/changelog/2....)
  2. OpenNews: Выпуск компилятора языка D 2.100
  3. OpenNews: Для языка D представлен runtime для программирования микроконтроллеров
  4. OpenNews: В компилятор LDC языка D добавлена поддержка WebAssembly
  5. OpenNews: В состав GCC одобрено включение языка программирования D
  6. OpenNews: Официальный компилятор языка D переведён в разряд свободного ПО
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62854-dlang
Ключевые слова: dlang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (66) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Ivan_83 (ok), 16:32, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    > При запуске с опцией "-preview=fixImmutableConv" запрещено копирование переменных с типом "const void[]" в переменные с типом "void[]", так как такое копирование в последствии может привести к использованию вне контекста "const".

    Опять придётся через memcpy() обходить дурные хотелки компелятора :)

    static inline void *
    deconst_ptr(const void *prt) {
        void *ret;
        memcpy(&ret, &ptr, sizeof(void*));
        return (ret);
    }

     
     
  • 2.5, Аноним (5), 16:57, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Или не использовать опцию -preview=fixImmutableConv.
     
  • 2.16, Аноним (16), 17:55, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > Опять придётся через memcpy() обходить дурные хотелки компелятора :)

    Г*кодерам нет покоя...

     
     
  • 3.18, Ivan_83 (ok), 18:13, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вот именно, мешают своими типами код писать :)
     

  • 1.2, Аноним (-), 16:36, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    >Опубликован релиз DMD 2.110, эталонного компилятора для языка D.

    Господа это единственный компилятор не основанный на LLVM.

    >Код компилятора распространяется под свободной лицензией BSL (Boost Software License).

    Не копилефт. Это разрешиловка-пермиссивка.

    >Поддерживаются системы Linux, Windows, macOS и FreeBSD.

    Windows в этом списке лишний.

     
     
  • 2.17, funny.falcon (?), 17:58, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > Господа это единственный компилятор не основанный на LLVM.

    Go, Ocaml, Haskel, FreePascal…

     
     
  • 3.19, Аноним (19), 18:16, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Спасибо тебе, дорогой
     
     
  • 4.20, Аноним (19), 18:17, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А раст то на llvm или нет ?!?
     
     
  • 5.22, Аноним (22), 18:28, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да
     
  • 3.28, Ан Оним (?), 19:30, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    FPC with an LLVM code generator backend is available on the git main branch
    https://wiki.freepascal.org/LLVM
     
     
  • 4.35, Аноним (22), 20:02, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зачем, если есть без LLVM?
     
  • 4.48, Анонем (?), 20:50, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Will the FPC team, somewhere in the future, adopt the LLVM as the backend on all platforms?
    > No, for various reasons
     
  • 4.55, Bottle (?), 22:14, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ознакомься с Pascal-P5, который соответствует ISO стандарту языка.
     
  • 2.45, Аноним (-), 20:30, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Господа это единственный компилятор не основанный на LLVM.

    Если бы он еще умел оптимизировать хотя бы в половину как LLVM - цены бы ему не было.

    > Не копилефт. Это разрешиловка-пермиссивка.

    Ну так поэтому и написано "под свободной лицензией"

    > Windows в этом списке лишний.

    Без винды оно вообще бы загнулось из-за ненужности.

     
     
  • 3.47, Аноним (47), 20:42, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Для скорости есть LDC/GDC (с LLVM и GCC бэкендами)
     

  • 1.6, Аноним (6), 16:59, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Здесь должна быть дискуссия почему D должен был не допустить такое явление как Раст! Именно Раст заполонил умы опеннетовцев, а должен был D!
     
     
  • 2.8, Аноним (8), 17:10, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Потому что у D не было достаточной поддержки со стороны корпораций.
    Не очень убедительно пиарились.
    Да и у Раст пока позиции крайне слабые. Хайп пройдёт и забудут.
     
     
  • 3.9, Аноним (8), 17:14, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Некоторые маститые кодеры попробовали Раст, и вот что говорят: долго компилируются большие проекты, тащится куча зависимостей, многие вещи слишком сложно выразить на Расте (тогда как на плюсах это делается элементарно).
     
     
  • 4.13, Аноним (16), 17:53, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > многие вещи слишком сложно выразить на Расте (тогда как на плюсах это делается элементарно).

    Ох, лол. Прямо многие? Хоть одну "маститые кодеры" могут привести в пример?

     
     
  • 5.21, Аноним (8), 18:18, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Говорили, что из-за требования постоянно угождать боров чекеру. Ломается производительность труда. Нужно изворачиваться, чтоб даже простые вещи реализовать.

    Но это не моё мнение.

     
  • 4.14, BeLord (ok), 17:54, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Они бы привели примеры этих многих вещей, а то есть умельцы которые технологическими линиями на Перле управляют, а есть кто приложение из 5 окон делает бегемотом-)))
     
     
  • 5.39, Аноним (39), 20:14, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Видели мы код этих "умельцев" на перле…
     
  • 3.10, Аноним (10), 17:20, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потому что D в сравнении с плюсами в итоге не давал значимых преимуществ и при этом был нужен полутора анонимусам. Плюс разные стдлиб и несовместимые, но поддерживаемые DMD1 и DMD2 окончательно убили смысл в D вкладывать усилия.
     
  • 3.15, Аноним (15), 17:55, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Насчёт хайпа и забудут не уверен, стратегия раста - заразить как можно больше проэктов, пока хайп не прошёл. Вокруг Ди тоже хайп какой-никакой был, но на нём не было написано ничего важного, и он действительно помер после хайпа, тихо и незаметно.
     
     
  • 4.23, Аноним (23), 18:32, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > стратегия раста - заразить как можно больше проэктов, пока хайп не прошёл

    Ё-моё, вы посмотрите, "стратегия раста". Оказывается оно живое, у него ещё и какая-то стратегия есть. А ничего что тот раст о котором вы говорите это не раст, а ведущие разработчики этих самых проектов (да-да те самые пр которых выше аноним врём что они де жалуются на долгую компиляцию, зависимости и невыразительность), которые понимают что за языком будущее (на самом деле уже настоящее)?

     
     
  • 5.36, laindono (ok), 20:04, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > они де жалуются на долгую компиляцию

    Два ядра, два гига, посередине SATA (у мажоров, у остальных IDE).

    У меня Рязань 2700, 32 гига рамочки и SSD в M.2. Не особо свежая сборка даже 5 лет назад.

    Небольшая поделка на Bevy, требующая ~500 зависимостей:

        Total lines: 18269497
        (17515535 code, 274975 comments, 478987 blank lines)

    Холодный релизный билд:

        Finished 'release' profile [optimized] target(s) in 3m 42s

    Горячий релизный билд:

        Finished 'release' profile [optimized] target(s) in 11.86s

    И я не закрывал два инстанса Firefox и VScode, чтоб получить циферки получше. И проц/память не разогнанны ибо мне лень.

     
     
  • 6.40, Аноним (39), 20:19, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А что оно делает? У меня простенький привет мир (построчный разбор строк, фильтрация, форматирование вывода), тупо переписал простенький скрипт с питона (с ворохом сишных батареек) на раст, вышло по 50 гб на дебаг и релиз либы, сборка какое-то совершенно неприличное время.
     
  • 6.43, Ivan_83 (ok), 20:26, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Смешно же.

    Чтоб ты понимал у нас на работе продукт за 3-4 минуты собирается, при прогретых кешах.
    А продукт тот включает сборку ISO загрузочного, в процессе оно разворачивает в chroot фрибсд с кучей портов, потом там внутри компеляет фрирдп+ещё С кода раз в 10 больше, потом вот это всё пакует в архивы, подписывает пгп, пакует в исо и выгружает по сети на нфс.
    И где то минута там тратится потому что один кусок проекта достаточно большой и собирается он в один поток.

    Тачка там не особо сильно быстрее твоей, ну проц 5950х да оперативы примерно столько же, естессно там браузер никто не запускает при этом, там просто ещё какие то виртуалки крутятся :)


    Так что раст отстой.

     
     
  • 7.54, laindono (ok), 22:11, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > при прогретых кешах

    Что кеши кешируют? У меня кешированная сборка занимает десяток секунд.

    > Тачка там не особо сильно быстрее твоей, ну проц 5950х

    Проц примерно вдвое быстрее.

    > ещё С кода раз в 10 больше

    Процедурный код на два порядка проще компилировать.

    > И где то минута там тратится потому что один кусок проекта достаточно большой и собирается он в один поток.

    Рекоменду пофиксить.

    Но опять же, сравниваем несравнимое.

     
     
  • 8.70, Ivan_83 (ok), 03:27, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Почти всё собранная ос, исходники портов, собранные порты, ccache Да всё как... текст свёрнут, показать
     
  • 5.41, Ivan_83 (ok), 20:20, 10/03/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 6.46, Аноним (-), 20:40, 10/03/2025 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 5.44, Аноним (15), 20:28, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >"стратегия раста"
    >оно живое, у него ещё и какая-то стратегия есть

    Раст - это не только язык, но и сообщество, и политическая система. Раст всеобъемлющь.

    >ведущие разработчики этих самых проектов
    >понимают что за языком будущее (на самом деле уже настоящее)

    Всё верно, так и есть. Может быть не настоящее, но будущее - точно. Разработчиков с хорошей подготовкой и самодисциплиной на всех не хватит, а код писать надо. Да и мода теперь всё оутсорсить в Индию или Вьетнам какой-нибудь работникам после трехмесячных курсов.

     
     
  • 6.61, Аноним (61), 23:37, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Когда ж да всех вас дойдет, что политизированность ещп никогда ни к чему хорошему не приводила! Раст это эпидемия, от которой надо лечить. Кучка фанатиков, лезущих в чужие монастыри, навязывающие свои хотелки всем подряд. Где политика, там и войны, уже видно как все мировое ит сотбщество разделилось на два лагеря. Кому это нужно, хз, корпам? Это ничем хорошим в итоге не кончится. Профуканное поколение.
     
  • 5.51, Аноним (51), 21:18, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Наверное, если бы у раста не было такой стратегии, то и людей бегающих по репозиториям и требующих срочно переписать всё или хотя бы частями на раст не было?
     
     
  • 6.64, Аноним (23), 00:32, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Только никто по репозиториями не бегает и не требует, свои репозитории переписывают сами авторы. Но да, этой движухи не было бы не будь rust революцией, а будь он посредственностью как какой-нибудь очередной D.
     
     
  • 7.69, Аноним (51), 01:39, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >свои репозитории переписывают сами авторы

    Торвальдс свой проект тоже сам переписывает?

     
  • 4.56, Bottle (?), 22:16, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    D для скриптинга использовали Remedy, те финны, которые Alan Wake и Control сделали.
     
  • 2.26, Аноним (26), 18:36, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    я не стал его юзать из-за сборщика мусора. он как бы был опциональным всегда, но по факту все было завязано на него и ты не мог вроде даже стандартную либу использовать без сборщика мусора.
     
     
  • 3.38, fuggy (ok), 20:13, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот и получается. Возможная замена для Rust. А по факту нужно отключать сборщик мусора и использовать malloc/free без которого возвращаемся к тому что с чего начали. Или читать 10 страница мануала про все режимы работы.
     
  • 3.52, Аноним (39), 21:18, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    2 версия поворот не туда, но чего ещё ожидать от любителей додиеза.
     

  • 1.11, Tita_M (ok), 17:32, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Вопрос к тем кто следит за этим языком: добавили ли в него поддержку борроу чекера уже или ещё нет?
    А то читал несколько лет назад, что рассматривают такую возможность.
     
     
  • 2.25, Аноним (23), 18:35, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Для борроу чекера нужно вводить в синтаксис языка лайфтаймы, а значит ломать совместимость. Никакой из копроязыков на это не пойдёт, добавление борроу чекера останется на уровне балаболии.
     
     
  • 3.42, Аноним (42), 20:22, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Для борроу чекера нужно вводить в синтаксис языка лайфтаймы

    А для написания комментариев нужно вводить тест на слабоумие?

     

  • 1.12, blevakagmail.com (?), 17:47, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Годнота. Круче сишарпа. Жаль не майки
     
     
  • 2.24, Аноним (22), 18:34, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А где же их Verona?
     
  • 2.33, Аноним (5), 19:57, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Круче сишарпа.

    В огороде бузина, в Киеве дядька.

     
  • 2.60, Аноним (60), 23:24, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    в сад
     
  • 2.66, 12yoexpert (ok), 01:22, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    с каких пор D это не майки? майки же его и закопали, взяв на работу Александреску
     

  • 1.27, зомбированный (?), 18:56, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А этот компилятор умеет в порты звонить и собирать под ХР ??? Вообще, мне нужен С подобный современный компилятор, который умеет в порты звонить и собирать под ХР!!!
     
     
  • 2.29, Ан Оним (?), 19:37, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Lazarus/FreePascal умеет. Делал такую программу для работы с параллельным портом
     
     
  • 3.30, зомбированный (?), 19:43, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    так Lazarus на Pascalе, а я спрашивал С подобный
     
     
  • 4.31, Ан Оним (?), 19:53, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так Free Pascal и есть С-подобный, в нём есть все С-шные типы данных и способ вызова, из FP можно вызывать С-шные dll'ки для работы с портами.
     
     
  • 5.34, Аноним (22), 20:00, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Синтаксис у него несиподобный.
     
  • 5.49, _kp (ok), 20:51, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, верни указатель в функции на Паскале. Ни как? А вот такие там тараканы. И так там везде.  :(
     
     
  • 6.50, Аноним (50), 21:14, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Синоним типа сделай (а-ля type PChar = ^Char;) и массивы в функции передаются и указатели возвращаются.
     
     
  • 7.59, _kp (ok), 23:18, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Да Вы затейник. Всю проверку типов поделить на их приведение к PChar. ;)
    Там предлагается через var возвращать.
    Так решаемо, но не всегда, и начинается раздутие исходника, и тому подобные идеологические палки в колеса.
    Попросили недавно дописать ПО на Delphi, точнее кусок кода с С++ переписать на него, типа ты же раньше писал на нем... Сделал, но поматерился и поржал от души.

    А уж про словесное недержание в синтаксисе опускаем, это так всем понятно. И не begin'измы, а просто  раздутие исходника дубовыми конструкциями.

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

    По сути о Паскале бы и забыли уже, если б Lazarus и Embarcadero не были кроссплатформенными. Но это не заслуга языка, а заслуги IDE и библиотек.

     
  • 2.32, Аноним (5), 19:56, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё пять лет назад минимум семёрка нужна была.
     
  • 2.37, Аноним (47), 20:10, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Убрали поддержку XP достаточно давно
    Но можно скачать старую версию компилятора попробовать
     
     
  • 3.65, Аноним (-), 01:06, 11/03/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.58, зомбированный (?), 22:48, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На самом деле я этот вопрос задал, чтобы проверить квалификацию системного программирования здешней публики. Ответ очень простой - есть ультра современная IDE, которая умеет свистеть в порты и компилировать как в ХР так и даже в Win3.1 - это безусловный лидер в мультиплатформенном программировании - Embarcadero RAD Studio 12.2
    у меня проги скомпилированные на 7ке в RAD Studio 12.2 отлично запускаются на ХР/98 (в проекте указываешь минимальную версию ОС и всё!)
     
     
  • 3.62, Аноним (62), 23:48, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Реклама - информация, распространенная любым способом, в любой форме и с использованием любых средств, адресованная неопределенному кругу лиц и направленная на привлечение внимания к объекту рекламирования, формирование или поддержание интереса к нему и его продвижение на рынке (Приказ ФАС России от 14.11.2023 N 821/23)


    > отлично запускаются на ХР/98

    киллер фича в 2025 году

     
     
  • 4.67, зомбированный (?), 01:34, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Что ты хочешь сказать этим приказом - так ваобще любую информацию можно назвать рекламой в том числе прогноз погоды на завтра или любую другую абсурдную информацию
    С другой стороны, человека распространяющего информацию, но который НИКАКОЙ выгоды не получает от этого ни прямой, ни косвенной, ни моральной, ну ВАОБЩЕ НИКАКОЙ то такой чел не является рекламодателем, а следовательно ИНФОРМАЦИЯ НЕ ЯВЛЯЕТСЯ РЕКЛАМОЙ, а констатацией факта.
    Реклмой можно назвать распространение информации только если есть материальная выгода (прямо или косвенно). В случае другой мотивации - применяются другие термины...
     
  • 3.63, _kp (ok), 00:28, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/

    > Embarcadero RAD Studio 12.2

    Новшество - похерили С++, везде, кроме Windows. ;)

     
     
  • 4.68, зомбированный (?), 01:36, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В RAD Studio 12.2 C++ отлично работает под Android, iOS, так что не только под Windows
     

  • 1.57, Аноним (47), 22:23, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На удивление один из самых быстрых языков - и даже ГЦ не мешает ему в этом
    По многим бенчмаркам в топе находится

    https://github.com/attractivechaos/plb2 - C, Rust и D практически похожую производительность показывают

    https://github.com/jinyus/related_post_gen - а тут вообще всех уделал

    Что творится?!

     

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



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

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