The OpenNET Project / Index page

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

Обзор изменений в языке Си за последние 13 лет

26.06.2012 09:10

Дэнни Калев (Danny Kalev), бывший член комитета по утверждению стандартов C++, предложивший множество улучшений, вошедших в последние стандарты по языкам Си и Си++, опубликовал статью с обзором нововведений, вошедших в стандарт C11 (ISO / IEC 9899:2011), а также оценкой общих тенденций развития языка Си за последние 13 лет с момента выхода предыдущего стандарта C99.

Рассмотрены такие возможности, как средства для обеспечения многопоточности, анонимные структуры и объединения, _Generic, _Noreturn, управление выравниванием выделяемой памяти (aligned_alloc), поддержка Unicode, статические утверждения (Static assertions), средства для проверки допустимых границ и диапазонов значений, удаление функции gets() и новый интерфейс fopen().

  1. Главная ссылка к новости (http://blog.smartbear.com/soft...)
  2. OpenNews: Опубликован новый международный стандарт для языка Си (C1X/C11)
  3. OpenNews: Спецификация C++0X принята в качестве международного стандарта C++11
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/34184-gcc
Ключевые слова: gcc, c11, c99
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (68) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, c0rax (ok), 09:14, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вопрос не по теме:
    Что посоветуете хорошее почитать по Си, на русском?
     
     
  • 2.5, meequz (ok), 09:56, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если для совсем новичков, то "Андрей Богатырев. Руководство полного идиота по программированию (на языке Си)". Объясняет самые основы, зато реально простым языком.
     
     
  • 3.8, Ваня (??), 11:38, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • –9 +/
    Спасибо, но я скорее приобрету "Руководство умного человека по программированию (на языке Си)", т.к. не ожидаю услышать от "полных идиотов" умных мыслей.
     
     
  • 4.17, Аноним (-), 12:32, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не нужно так тянуть с изучением Си. Долгие поиски даже самой лучшей книги только навредят вам, потеряете время. Вы могли бы уже давно знать его
     
  • 4.21, Аноним (-), 12:50, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Спасибо, но я скорее приобрету "Руководство умного человека по программированию (на языке
    > Си)", т.к. не ожидаю услышать от "полных идиотов" умных мыслей.

    Приобретайте и читайте. Может, хоть тогда до вас дойдёт, что однобитный float — это бред.

     
     
  • 5.29, arisu (ok), 18:14, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Приобретайте и читайте. Может, хоть тогда до вас дойдёт, что однобитный float
    > — это бред.

    не дойдёт: для этого недостаточно умной книги, нужен ещё и умный читатель.

     
  • 5.36, Аноним (-), 20:47, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Приобретайте и читайте. Может, хоть тогда до вас дойдёт, что однобитный float

    А еще у него там девятибитные структуры. При том он напрочь не понимает как это работает :)


     
  • 2.7, Аноним (-), 10:17, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    С. Прата. Язык программирования си. Лекции и упражнения. 5-е издание.
     
     
  • 3.22, zomg (?), 12:52, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    +1 за Стивен Прата. Отличная книга.
     
  • 3.49, mauser (??), 00:31, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Учил по этой книге. Правда по оригиналу. Очень подробно все описано.
     
  • 3.54, Анонимас (?), 14:26, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > С. Прата. Язык программирования си. Лекции и упражнения. 5-е издание.

    А её где-то достать можно? В интернетах только по С++. В городских магазинах вообще не слышали о таком.

     
     
  • 4.59, Аноним (-), 11:08, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> С. Прата. Язык программирования си. Лекции и упражнения. 5-е издание.
    > А её где-то достать можно? В интернетах только по С++. В городских
    > магазинах вообще не слышали о таком.

    Я покупал месяца 2 назад в читай-городе. Хочу отсканировать и выложить в инет, т.к. сам очень долго искал. Писал им в издательство - их не волнует. Как возьму сканер - займусь.

     
  • 2.13, Аноним (-), 12:13, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >Что посоветуете хорошее почитать по Си

    K&R

     
     
  • 3.19, BratSinot (?), 12:36, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Он скорее как справочник и вроде по C89.
     
  • 3.50, Ян Злобин (ok), 07:39, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > K&R

    Поддерживаю - читать надо первоисточники.

     
  • 2.31, Аноним (-), 18:19, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    K&R в переводе Штаркмана (изд. Невский Диалект). Перевод Бродового (изд. Вильямс) не рекомендую - переведено Промтом, причёсано надмозгом, как и большинство книжек этого издательства.
     
  • 2.45, игорьтонет (?), 22:15, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    http://c.learncodethehardway.org/book/
    Про это кто-нибудь может что сказать?
    Читал его книгу, только по питону. Вроде недурно.
     
     
  • 3.46, arisu (ok), 22:30, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    книгу не читал, но если человек укушен гвидобейсиком — лучше никаких его книг не читать.
     
     
  • 4.68, Аноним (-), 21:56, 29/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > книгу не читал, но если человек укушен гвидобейсиком — лучше никаких его
    > книг не читать.

    Почему?)

     
     
  • 5.69, arisu (ok), 22:05, 29/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    потому что человек укушен гвидобейсиком. этого достаточно, чтобы держаться подальше.
     
     
  • 6.70, Ы (?), 22:41, 29/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    arisu как обычно usira ...
     
     
  • 7.71, arisu (ok), 22:47, 29/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    я, видать, спать тебе не даю. всё беспокою. get a life, что ли.
     
  • 2.57, Аноним (-), 23:51, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Мне понравилась книжка Подбельского и Фомина "Программирование на языке Си". Все четко изложено, чувствуется математическое образование авторов. Читать ее в 15 лет было сущее удовольствие
     

  • 1.2, noize (ok), 09:17, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    кёрниган и ритчи - язык программирования Си, второе издание(в третьем есть проблемы с переводом)
     
  • 1.3, Аноним (-), 09:35, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как-то негусто для 13и лет эволюции...
     
     
  • 2.4, Аноним (-), 09:45, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Это потому что Си идеален. И при этом жив.
    Как TeX.
     
     
  • 3.10, dq0s4y71 (??), 12:06, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Си не идеален, но он - хороший инструмент для своей области. А в том, что он не повторяет участь монстра С++, не вижу ничего плохого. Для некоторых языков "развитие", по-моему, стало уже самоцелью.
     
  • 2.6, bircoph (ok), 10:15, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Уж простите, что не напихали 100500 никому особо не нужных, зато новых фич, ломающих всё на свете.
    Это стабильный, надёжный, промышленный язык. Ему много изменений и не нужно. Он не идеален, но уже близок к идеалу.
     
  • 2.37, Аноним (-), 20:48, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как-то негусто для 13и лет эволюции...

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

     
     
  • 3.58, chinarulezzz (ok), 00:04, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Как-то с 70-х прошлого века пыжились, пыжились, но так и не родили
    > язык для системного программирования который был бы лучше.

    modula-2, oberon... Сишники от них хватают бугурт, но языки совершеннее.

     
     
  • 4.60, arisu (ok), 12:02, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > modula-2, oberon… Сишники от них хватают бугурт, но языки совершеннее.

    унылее. потому что ограничений больше.

    на всякий случай: я не сказал «хуже».

     
     
  • 5.62, chinarulezzz (ok), 12:07, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > унылее. потому что ограничений больше.

    глядя на количество ошибок в генном коде Си-программистов - строгость языка оправдана.

    > на всякий случай: я не сказал «хуже».

    Естественно. Хуже - Си.

     
     
  • 6.63, arisu (ok), 12:11, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Естественно. Хуже — Си.

    угу. красное хуже зелёного.

    так, на всякий случай: я лично очень люблю Component Pascal. думаю, ты знаешь, что это.

     
     
  • 7.64, chinarulezzz (ok), 12:20, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > угу. красное хуже зелёного.

    если надо проезжать мимо светофора - то да.

    > так, на всякий случай: я лично очень люблю Component Pascal. думаю, ты
    > знаешь, что это.

    Знаю, но не использовал ни разу. Ты как используешь и где? :)

     
     
  • 8.65, arisu (ok), 12:30, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    к сожалению, никак не использую, потому что BCB под пингвинусы так и не портиров... текст свёрнут, показать
     
     
  • 9.66, chinarulezzz (ok), 12:44, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    больше 8 лет назад юникод ну, ему простительно Freepascal хороший инструм... текст свёрнут, показать
     
     
  • 10.67, arisu (ok), 12:53, 28/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    не простительно поддержка юникода была заявлена изначально, даже в report е CHA... текст свёрнут, показать
     

  • 1.9, RM (?), 11:51, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Советую почитать "Аргументы против Си" Питера Мойлана (1993)
     
     
  • 2.14, dq0s4y71 (??), 12:19, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Там главный аргумент против Си - плохие программисты на Си. Хотя, кое с чем можно и согласиться.
     
  • 2.38, Аноним (-), 20:49, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Советую почитать "Аргументы против Си" Питера Мойлана (1993)

    В си можно долго кидаться какашками, но на его замену в системном программировании все-равно ничего лучше нет.

     
     
  • 3.42, arisu (ok), 20:53, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > В си можно долго кидаться какашками, но на его замену в системном
    > программировании все-равно ничего лучше нет.

    это смотря по каким критериям. вообще-то этот уродец рулит по трём основным причинам:
    а) за столько лет компиляторы более-менее научились его оптимизировать — относительно неплохо;
    б) много, ОЧЕНЬ МНОГО всякого написано на си (и это одна из главных причин);
    в) компилятор си — опять же потому, что столько лет уже — есть практически под всё.

    но это никак не значит, что си — лучший. не самый плохой — это да.

     
     
  • 4.47, Аноним (-), 23:12, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > а) за столько лет компиляторы более-менее научились его оптимизировать — относительно неплохо;
    > б) много, ОЧЕНЬ МНОГО всякого написано на си (и это одна из главных причин);

    Фортран же

     
     
  • 5.48, arisu (ok), 23:45, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Фортран же

    он тоже до сих пор жив примерно по тем же причинам.

     
  • 4.52, dq0s4y71 (??), 12:44, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > а) за столько лет компиляторы более-менее научились его оптимизировать — относительно неплохо;

    Компиляторы научились оптимизировать не "его", а промежуточное представление, которое генерится Си франт-эндом. Оптимизатору, как правило, вообще пофигу, на каком языке был написан исходный код. Так что, "относительно неплохо" оптимизируется всё, что может давать выхлоп на вход данного конкретного оптимизатора.

    > б) много, ОЧЕНЬ МНОГО всякого написано на си (и это одна из главных причин);

    Ну, это вообще не аргумент. ОЧЕНЬ МНОГО всякого написано на Перле, но почему-то это не стало помехой для создания новых скриптовых языков и новых программ на этих языках, которые успешно конкурируют с перловскими, в том числе в тех областях, для которых Перл изначально создавался.

    > в) компилятор си — опять же потому, что столько лет уже — есть практически под всё.

    Ну, любую систему нужно чем-то собирать, а операционки промышленного уровня на Питоне не пишут :) Так что, получается, если есть операционка, то под неё, скорее всего, уже есть сишный компилятор.

     
     
  • 5.55, arisu (ok), 15:55, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Компиляторы научились оптимизировать не «его», а промежуточное представление, которое
    > генерится Си франт-эндом. Оптимизатору, как правило, вообще пофигу, на каком языке
    > был написан исходный код. Так что, «относительно неплохо» оптимизируется всё, что
    > может давать выхлоп на вход данного конкретного оптимизатора.

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

    > Ну, это вообще не аргумент.

    обалдеть.

    > ОЧЕНЬ МНОГО всякого написано на Перле, но

    при чём тут перл?

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

     
  • 3.51, RM (?), 11:51, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Аргументы таки, заметь. Для системного программирования применяй немодный язык Модула-2.
    http://kronos.ru/about/koltashev
     
     
  • 4.53, dq0s4y71 (??), 13:11, 27/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > работы по созданию рабочей станции на базе процессора Кронос с Модула-ориентированной системой команд

    Ха! Если процессор специально под Модулу разрабатывался, то неудивительно, что она лучше всего подходила для его программирования! Они, небось, ещё и свой собственный компилятор для этого делали.

    Но самое интересное, что когда процессор поменялся и система команд стала другой, то им ничего не оставалось делать, кроме как конвертировать старые Модула-программы в Си!

    > Изюминкой этого проекта стало создание кросс-системы, сохранившей все пользовательские интерфейсы первой КСП, в том числе в части системы тестирования и отладки, но получавшей исполнимый код, через конвертацию Модула-программ в Си с последующим получением исполнимого кода с помощью КСП на языке ANSI Cи, поставленной разработчиком БЦВМ.
    > В проекте использовалась БЦВМ производства немецкой фирмы Астриум с системой команд MIL-1750A-STD и операционная система разработчика БЦВМ – MOSES-2.

    Насколько был надёжен такой вот конвертированный из Модулы сишный код - вопрос открытый.

     

  • 1.12, iZEN (ok), 12:08, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Стринги появились что ли?
     
     
  • 2.15, dq0s4y71 (??), 12:21, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +13 +/
    Настоящим мужчинам стринги не нужны! ;)
     

  • 1.16, Аноним (-), 12:22, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > The new keyword _Generic declares a generic expression that translates into type-dependent "specializations."

    Блин ну нафига это? Как потом код читать? Видишь cbrt(v), а это на самом деле cbrtf...

     
     
  • 2.26, Андрей (??), 14:45, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А если хочешь потестить код с разными точностями, то так
    #define FP float
    //#define FP double
    //#define FP quad
    ...
    FP calc(FP arg1, FP arg2)

    делать плохо?

    В С++ обощения доведены до ужаса. Но в С, кажись, ещё всё в порядке.

     
     
  • 3.30, arisu (ok), 18:17, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > В С++ обощения доведены до ужаса. Но в С, кажись, ещё всё
    > в порядке.

    за ключевые слова типа "_Abc" надо было расстреливать весь комитет.

    да, кстати: не #define FP, а



    #ifdef I_HAVE_NO_DIGITS
    typedef float MyFloat;
    #elsif I_HAVE_A_LITTLE_DIGIT
    typedef double MyFloat;
    #elsif I_HAVE_ALOT_OF_DIGITS
    typedef quad MyFloat;
    #else
    # error i'm dumb!
    #endif

    MyFloat calc (...)


    так страшнее.

     
     
  • 4.39, Аноним (-), 20:51, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > так страшнее.

    А чего тут страшного? Вроде логичная и прямолинейная конструкция :)

     
     
  • 5.43, arisu (ok), 20:54, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> так страшнее.
    > А чего тут страшного? Вроде логичная и прямолинейная конструкция :)

    букав больше.

     

  • 1.18, Аноним (-), 12:36, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Кто-нибудь пробовал Ceylon? Это близкий к С язык с некоторыми улучшениями, позволяющими избегать большинство ошибок, вроде кривых указателей и переполнений массивов. Есть (отключаемые) рантайм-проверки
     
     
  • 2.20, Анон (?), 12:41, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Java Virtual Machine? Не нужно. Нет, кому-то, может, и нужно, но как замена C совершенно непригодно.
     
     
  • 3.23, Аноним (-), 14:12, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Виноват, я имел в виду Cyclone :( . На вики есть статья про него, интересная штука. Имхо, обсуждение истории развития С без знакомства с Cyclone будет неполным
     
  • 2.32, arisu (ok), 18:19, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    я немножко о нём читал. прикола не понял. си — это такой навороченый макроассемблер. если надо писать что-то, где подобный макроассемблер неудобен — есть другие языки. на крайний случай можно написать на си VM и остальное — на ней. к библиотекам это тоже относится, от них не требуется быть написаными на си, достаточно интерфейсов для си.
     
     
  • 3.35, Аноним (-), 20:41, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > си — это такой навороченый макроассемблер. если надо писать что-то, где подобный макроассемблер неудобен — есть другие языки

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

     
  • 3.40, Аноним (-), 20:53, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > от них не требуется быть написаными на си, достаточно интерфейсов для си.

    Только вот если они не написаны на си - работа с ними превращается в порно. Из-за нестыковок типов данных там и тут и прочая. Да и на чем еще писать всякие полезные и быстрые алгоритмы?

     
     
  • 4.44, arisu (ok), 20:56, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Только вот если они не написаны на си — работа с ними
    > превращается в порно. Из-за нестыковок типов данных там и тут и
    > прочая.

    мнэ… зачем ты пропустил слово «интерфейсы»? одна из задач грамотного интерфейса — заниматься рутиной типа конвертирования типов и ты пы.

    > Да и на чем еще писать всякие полезные и быстрые алгоритмы?

    на чём угодно.

     

  • 1.24, Kodirr (?), 14:29, 26/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Си - это высокоуровневый ассемблер, кому он интересен в мэйнстриме?
    Пора бы уже D изучать и применять, а они всё труп тыкают...
     
     
  • 2.25, Аноним (-), 14:43, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Си - это высокоуровневый ассемблер, кому он интересен в мэйнстриме?

    Тем, кому нужен именно высокоуровневый ассемблер. Машинный код как таковой некросплатформеннен, языки же более высокого уровня, чем Си, гораздо хуже приспособлены для системного программирования.
    > Пора бы уже D изучать и применять, а они всё труп тыкают...

    Разработчики операционных систем уже спешат выбрасывать гигабайты готового кода на Си и переписывать всё на D.

     
  • 2.27, dq0s4y71 (??), 14:51, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ну да, D всем очень интересен "в мэйнстриме" :)
     
  • 2.28, Куяврик (?), 15:45, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ждём от тебя ядра, переписанного на D. К сентябрю осилишь?
     
  • 2.33, arisu (ok), 18:20, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    изучай. применяй. тебе кто-то запрещает?
     
  • 2.34, YetAnotherOnanym (?), 18:29, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вы про Ди Женьцзе? Или про принцессу Ди?
     
  • 2.41, Аноним (-), 20:53, 26/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Си - это высокоуровневый ассемблер, кому он интересен в мэйнстриме?

    Правильно - сотри свою операционку. Мы как раз отдохнем от одного быдлокодирра. А вот как перепишете на D, так и приходите.

     

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



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

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