The OpenNET Project / Index page

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

28.02.2015 00:09  Новая версия набора компиляторов LLVM 3.6

Представлен релиз проекта LLVM 3.6 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Улучшения в Clang 3.6:

  • Применяемый по умолчанию режим языка Си изменён с C99 с расширениями GNU на C11 с расширениями GNU;
  • Добавлена экспериментальная поддержка некоторых элементов будущего стандарта C++1z (C++17), в том числе выражения Fold, символьного литерала u8, краткого определения вложенных пространств имён (namespace A::B { ... } вместо namespace A { namespace B { ... } }), атрибутов для пространств имён;
  • Добавлена поддержка стандартного C11-заголовка stdatomic.h;
  • Встроенный макрос __has_attribute больше не выполняет проверку атрибутов с учётом различных синтаксисов (GNU, C++11, __declspec и т.п.) и ограничивается только запросом атрибутов в стиле GNU. Для запросов атрибутов в стилях C++11 и __declspec следует использовать отдельные макросы __has_cpp_attribute и __has_declspec_attribute;
  • В утилите clang-format обеспечена возможность форматирования кода на языке Java;
  • Средства диагностики расширены возможностями по выявлению новых типов ошибок. Реализован механизм умной корректировки опечаток;
  • Изменена логика установки макроса __EXCEPTIONS, который теперь привязывается к включению исключений как для C++, так и для Objective-C. Для надёжной проверки включения исключений для C++ следует кроме проверки __EXCEPTIONS также проверять и __has_feature(cxx_exceptions);
  • Добавлены новые директивы "#pragma unroll" и "#pragma nounroll", позволяющие управлять оптимизацией по развёртыванию циклов;
  • Значительно улучшена поддержка платформы Windows. Достигнут уровня самопересборки (self host) в окружении msvc на x86 и x64 системах Windows. Кроме исключений, поддержка Microsoft C++ ABI более-менее полностью реализована;
  • Продолжена реализация поддержки OpenMP, добавлены дополнительные семантики pragma, определённые в стандарте OpenMP 3.1. Runtime-библиотека OpenMP адаптирована для архитектур ARM и PowerPC. Улучшена совместимость с GCC 4.9;

Основные новшества LLVM 3.6:

  • В состав включен набор биндингов для обеспечения поддержки развиваемого компанией Google языка программирования Go, который позиционируется как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Принятый код основан на наработках проекта LLVM Go, разработчики которого согласились перелицензировать код под лицензией LLVM и предложили свою работу для включения в основной состав LLVM. Включение биндингов в состав LLVM является необходимым условием дальнейшей интеграции в LLVM фронтэнда с компилятором для языка Go (llgo), который построен с использованием данных биндингов.
  • Проект LLVMLinux достиг уровня, при котором возможна пересборка ядра Linux штатным компилятором Clang c применением к ядру небольшого числа патчей. В новом выпуске добавлены опции "-mabicalls" "-mno-abicalls", устранены проблем с совместимостью inline-ассемблера LLVM и GCC, во встроенный ассемблер добавлена поддержка директив, используемых в коде ядра Linux;
  • Поддержка интеграции LLVM IR в обычные объектные файлы. В частности, биткод теперь может быть размещён внутри специальной секции .llvmbc в составе обычных объектных файлов ELF, COFF и Mach-O;
  • Требования к минимально поддерживаемой версии Python повышены до выпуска 2.7;
  • Удалён код старого JIT-компилятора, всем пользователям рекомендуется перейти на MCJIT;
  • Прекращена поддержка платформы AuroraUX;
  • Реализована возможность преобразования доступного в MSVC вызова __vectorcall в вызов x86_vectorcallcc;
  • Добавлен новый экспериментальный механизм для описания точек сохранения (safepoint) в сборщике мусора;
  • Отмечен прогресс в реализации проекта Portable Computing Language OpenCL (PoCL), в рамках которого ведётся разработка полностью открытой реализации стандарта OpenCL, независимой от производителей графических ускорителей. PoCL позволит разработчикам не задумываться об особенностях той или иной реализации стандарта и использовать предоставляемые компилятором оптимизации вместо применения специфических для каждой платформы техник ручной оптимизации. PoCL реализован по модульному принципу, позволяющему использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;

Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:

  • KLEE - символьный анализатор и генератор тестовых наборов;
  • Runtime-библиотека compiler-rt;
  • llvm-mc - автогенератор ассемблера, дизассемблера и других связанных с машинным кодом компонентов на основе описаний параметров LLVM-совместимых платформ.
  • Реализация функционального языка программирования Pure;
  • LDC - компилятор для языка D;
  • Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
  • Виртуальные машины для Ruby: Rubinius и MacRuby;
  • LLVM-Lua
  • FlashCCompiler - средство для компиляции кода на языке Си в вид, пригодный для выполнения в виртуальной машине Adobe Flash;
  • LLDB - новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; показывает крайне высокое быстродействие при отладке программ большого размера;
  • emscripten - компилятор биткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype;
  • sparse-llvm - бэкенд, нацеленный на создание Си-компилятора, способного собирать ядро Linux.
  • Portable OpenCL - открытая и независимая реализация стандарта OpenCL;
  • CUDA Compiler - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran;
  • Julia - открытый динамический язык программирования, использующий наработки проекта LLVM.
  • Jade (Just-in-time Adaptive Decoder Engine) - универсальный движок для декодирования видео, использующий LLVM для JIT-компиляции адаптивных конфигураций декодера видео, определённых комитетом MPEG Reconfigurable Video Coding (RVC);
  • PNaCl (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры;
  • PoCL (Portable Computing Language OpenCL) - реализация стандарта OpenCL, независимая от производителей графических ускорителей и позволяющая использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;
  • Likely - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA.
  • LibBeauty - инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll);
  • McSema - фреймворк для преобразования машинного кода в биткод LLVM;
  • Swift - основанный на LLVM язык программирования, развиваемый компанией Apple;
  • FTL (Fourth Tier LLVM) - JIT-компилятор для движка WebKit;


  1. Главная ссылка к новости (http://lists.cs.uiuc.edu/piper...)
Лицензия: CC-BY
Тип: Интересно / Программы
Ключевые слова: llvm, clang
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, iZEN, 01:01, 28/02/2015 [ответить] [смотреть все]
  • –18 +/
    Неужели сишники признали существование символьных переменных Ну надо же Не про... весь текст скрыт [показать]
     
     
  • 2.2, Аноним, 01:21, 28/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    О чем ты, изя Char в большинстве реализаций и был по факту u8 Правда в некотор... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.9, BratSinot, 10:06, 28/02/2015 [^] [ответить] [смотреть все]  
  • –6 +/
    Вы дурак, батенька u8 это UTF-8 Он может быть 1, либо 2 байта, в зависимости о... весь текст скрыт [показать]
     
     
  • 4.11, Нанобот, 10:51, 28/02/2015 [^] [ответить] [смотреть все]  
  • –3 +/
    жесть си-шники небось специально это придумали, чтобы все путались например, в... весь текст скрыт [показать]
     
     
  • 5.15, BratSinot, 12:06, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    Пусть выкидывают и используют силу C99, в виде stdint h и всяких int32_t, uint32... весь текст скрыт [показать]
     
     
  • 6.28, Аноним, 14:58, 28/02/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    Ты почитай какие гарантии на них даются и потом подумай - хочешь ли ты получить ... весь текст скрыт [показать]
     
     
  • 7.31, Аноним, 15:28, 28/02/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    uint32_t даёт _ровно_ 32 бита, по стандарту Если система не может дать ровно 32... весь текст скрыт [показать]
     
  • 5.27, Аноним, 14:56, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    Вообще-то это местечковый , но весьма популярный у сишников typedef И на само... весь текст скрыт [показать]
     
  • 4.12, Аноним, 11:02, 28/02/2015 [^] [ответить] [смотреть все]  
  • +12 +/
    Разговор трёх идиотов, каждый отстаивает собственный набор заблуждений.

    Как дело обстоит на самом деле:

    Во-первых, utf-8 может быть от одного до 4 байтов (в теории - до 6, но применительно к юникоду - только до 4), а вовсе не "1 либо 2".

    Во-вторых, в C и C++ есть 4 символьных типа и 5 символьных/строковых литералов.

    Типы: char (1 байт, существует с древних времён), wchar_t (широкий символ системно-специфичного размера в неопределённой кодировке, существует с древних времён), char16_t (16-битный широкий символ, UTF-16 если явно не указано обратное, появился недавно), char32_t (32-битный широкий символ, UTF-32 если явно не указано обратное, появился недавно).

    Строковые литералы: "строка" (строка типа char*, в том виде, как представлена в исходниках, без перекодирования), L"строка" (строка типа wchar_t*, перекодируется при компиляции из кодировки исходников в системно-специфичную "широкую" кодировку), u"строка" (строка типа char16_t*, перекодируется при компиляции, появилась недавно), U"строка" (строка типа char32_t*, перекодируется при компиляции, появилась недавно), u8"строка" (строка типа char*, перекодируется из кодировки исходников в UTF-8 и может включать юникодные escape-последовательности, в остальном идентична первому варианту, появилась недавно).

    Символьные литералы: 'символ', L'символ', u'символ', U'символ' - как для строк, но генерирует одиночный символ. u8'символ' - до сих пор не существовал, планируется ввести в будущем стандарте. Это тип char, перекодируется из кодировки исходников в UTF-8; если результат не влезает в char, то это ошибка компиляции (в отличие от соответствующего строкового литерала, где каждый символ имеет полное право занимать несколько char'ов в строке).

     
     
  • 5.14, BratSinot, 12:05, 28/02/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    Насчет размера до 6 не знал, каюсь Тогда непонятно нафига нужны UTF-16 и UTF-32... весь текст скрыт [показать]
     
     
  • 6.17, ананим.orig, 12:38, 28/02/2015 [^] [ответить] [смотреть все]  
  • +4 +/
    Utf-16 и -32 8212 имеют фиксированный размер Придуманы ДО utf8 В последне... весь текст скрыт [показать]
     
     
  • 7.19, ананим.orig, 12:57, 28/02/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    зыж А вообще, читайте маны если есть линух там даже по-русски, подробно и, что... весь текст скрыт [показать]
     
  • 7.37, Crazy Alex, 17:19, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    А вот не надо путать UCS-2 и UTF-16 Первый - фиксированного размера, но не все ... весь текст скрыт [показать]
     
     
  • 8.38, ананим.orig, 18:52, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    Да не путаю я Просто в контексте обсуждения это не имеет смысла, тк utf-16 име... весь текст скрыт [показать]
     
     
  • 9.50, Crazy Alex, 16:54, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    если на практике это же и максимум - эт UCS-2 UTF-16 - кодировка с переменно... весь текст скрыт [показать]
     
     
  • 10.54, ананим.orig, 18:20, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    171 на практике 187 UCS-2 и UTF-16 8212 это одно и тоже в 99, 9 случае... весь текст скрыт [показать]
     
  • 8.43, амаима, 01:15, 01/03/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Обе они переменного размера или 2 или 4 байта UCS-2 does not describe a data ... весь текст скрыт [показать]
     
     
  • 9.51, Crazy Alex, 16:55, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    Ну правильно - в UCS-2 весь современный юникод не влезает Называется пользуйте... весь текст скрыт [показать]
     
  • 6.18, Аноним, 12:44, 28/02/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    UTF-32 нужна потому, что в ней все символы занимают ровно по 32 бита Т е utf32... весь текст скрыт [показать]
     
     
  • 7.25, Аноним, 14:52, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    А еще для работы с ним не надо переписывать программы ... весь текст скрыт [показать]
     
     
  • 8.33, щщзы, 15:56, 28/02/2015 [^] [ответить] [смотреть все]  
  • +2 +/
    Всё зависит от того, что вы делаете в программе Иногда - надо Как только встаё... весь текст скрыт [показать]
     
     
  • 9.44, Аноним, 01:32, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    Но большнство кода системного, утилит, большинства либ - править не пришлось и... весь текст скрыт [показать]
     
  • 7.35, Stax, 16:26, 28/02/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    Ну, не надо так зарубать UTF-16 - это основное и рекомендованное представление ... весь текст скрыт [показать]
     
     
  • 8.36, Аноним, 17:11, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    В Python используется не UTF-16, а wchar_t, который, между прочим, в винде UTF-1... весь текст скрыт [показать]
     
     
  • 9.41, ананим.orig, 19:46, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    ну в доках так wchar_t 8212 это целочисленный тип с объёмом, достаточным для... весь текст скрыт [показать]
     
  • 8.40, ананим.orig, 19:15, 28/02/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    А пруфом не поделитесь А то основное достоинство utf-16 8212 совместимость с... весь текст скрыт [показать]
     
  • 5.21, ананим.orig, 14:37, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    вообще-то уже в стандарте C 11 8212 http en cppreference com w cpp langua... весь текст скрыт [показать]
     
     
  • 6.22, Аноним, 14:45, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    Перечитайте внимательно то, что я написал _Строковый_ литерал u8 строка я отнё... весь текст скрыт [показать]
     
     
  • 7.30, ананим.orig, 15:11, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    А, да-да-да. Сори.
     
  • 6.23, ананим.orig, 14:45, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    зыж а да, пример главное -std c11 не забывать... весь текст скрыт [показать]
     
     
  • 7.45, Аноним, 01:33, 01/03/2015 [^] [ответить] [смотреть все]  
  • –2 +/
    В свежих компилерах сам врубится Вон у шланга говорят уже Ну и у gcc будет, ку... весь текст скрыт [показать]
     
     
  • 8.48, ананим.orig, 14:41, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    Нафиг не нужно Автоматом врубать это я буду, когда овер 50 ПО это будет требов... весь текст скрыт [показать]
     
     
  • 9.49, Аноним, 15:40, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    В новости - о символьном литерале, которого ещё нет в стандартах, а приведённый ... весь текст скрыт [показать]
     
  • 4.13, suki, 11:06, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    В иероглифах 3-4 байта на символ.
     
  • 4.20, Аноним, 12:59, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    Символ в UTF-8 может и 6 байт занимать
     
     
  • 5.32, Аноним, 15:53, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    5 и 6 байт могут только теоретически метод кодирования позволяет , практически ... весь текст скрыт [показать]
     
     
  • 6.52, Crazy Alex, 16:59, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    А практически - если я увижу в коде, что он закладывается на то, что UTF8-символ... весь текст скрыт [показать]
     
     
  • 7.67, Аноним, 22:37, 02/03/2015 [^] [ответить] [смотреть все]  
  • +/
    В таком случае советую обратить внимание на следующее UCS-2 способна представит... весь текст скрыт [показать]
     
  • 6.59, Аноним, 22:16, 01/03/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    Что ты, вихрь Ты кантонский диалект видал ... весь текст скрыт [показать]
     
     
  • 7.63, КО, 12:50, 02/03/2015 [^] [ответить] [смотреть все]  
  • +/
    Укладывался он спокойно Вот, когда начали цветные смайлики кодировать ... весь текст скрыт [показать]
     
  • 4.24, Аноним, 14:51, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    У сишников u8 сроду означало unsigned integer, 8 битов ... весь текст скрыт [показать]
     
  • 4.26, Аноним, 14:53, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    А японцы с их закорючками не в курсе - там и все 4 бывает ... весь текст скрыт [показать]
     
  • 2.5, Аноним, 02:17, 28/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Господи, насколько же ты безграмотен.
     
  • 2.7, Аноним, 07:42, 28/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    char и wchar_t?
     
     
  • 3.10, BratSinot, 10:07, 28/02/2015 [^] [ответить] [смотреть все]  
  • –2 +/
    char всегда 1 байт, wchar_t всегда 2, а u8 это литерал u8 СтрокаASD ... весь текст скрыт [показать]
     
     
  • 4.16, Аноним, 12:07, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    > wchar_t всегда 2

    Нет, не всегда.

     
  • 4.29, Аноним, 15:00, 28/02/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Это не так Стандарт определяет что не менее 1 байта Поэтому бывали чудесатые... весь текст скрыт [показать]
     
     
  • 5.66, Анонимко, 15:07, 02/03/2015 [^] [ответить] [смотреть все]  
  • +/
    char всегда один байт. Другое дело один байт не всегда 8 бит.
     
  • 4.34, щщзы, 16:11, 28/02/2015 [^] [ответить] [смотреть все]  
  • +/
    по первой части - в зависимости от того, как определите байт как 8 бит или как ... весь текст скрыт [показать]
     
  • 1.3, Аноним, 01:41, 28/02/2015 [ответить] [смотреть все]  
  • –2 +/
    круто
    Цианогенмод когда на это попробует перейти?
     
     
  • 2.8, Andrey Mitrofanov, 09:12, 28/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Как тольто узнает что 1 это круто , 2 уже надо переходить, так сразу, задрав ... весь текст скрыт [показать] [показать ветку]
     
  • 1.39, anonymous, 19:07, 28/02/2015 [ответить] [смотреть все]  
  • –2 +/
    > Применяемый по умолчанию режим языка Си изменён с C99 с расширениями GNU на C11 с расширениями GNU;
    > с расширениями

    А вот за такое бить нужно смертным боем.

     
     
  • 2.46, Аноним, 01:37, 01/03/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Так живых компилеров С по сути есть два Шланг и гцц Остальные где-то в - т... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.47, бот от мс, 13:53, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    Да ладно забила пилят вон вовсю С 11 14 в новой студии http www visualstudi... весь текст скрыт [показать]
     
     
  • 4.53, Crazy Alex, 17:01, 01/03/2015 [^] [ответить] [смотреть все]  
  • +/
    C и С не различаешь Бывает Они не сподобились даже C99 под WinPhone сделать ... весь текст скрыт [показать]
     
  • 2.55, Аноним, 18:48, 01/03/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Во-первых, за что именно C11 или расширения GNU Во-вторых, аргументируй Про G... весь текст скрыт [показать] [показать ветку]
     
  • 1.42, Аноним, 23:53, 28/02/2015 [ответить] [смотреть все]  
  • +4 +/
    Виртуальная машина - это виртуальная машина, - серьезно ответил программист, вст... весь текст скрыт [показать]
     
  • 1.62, Петруччо, 12:37, 02/03/2015 [ответить] [смотреть все]  
  • +/
    Значительно улучшена поддержка платформы Windows. Достигнут уровня самопересборки (self host) в окружении msvc на x86 и x64 системах Windows. Кроме исключений, поддержка Microsoft C++ ABI более-менее полностью реализована;

    Наконец-то будут нормально собранные программы, и можно будет опять переходить на Windows!

     
     
  • 2.64, Andrey Mitrofanov, 13:08, 02/03/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    > Наконец-то будут нормально собранные программы, и можно будет опять переходить на Windows!

    Не. Я бы посмотрел, как Эппле сдюжит тащить тот майкросовтовский "багаж". Ну, скажем 3-4 мажорнызх релиза этой их винды. Нельзя _так торопиться-то.

     
  • 2.65, Crazy Alex, 14:54, 02/03/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Иди, болезный. Иди. Лесом, затем полем.
     
  • 1.68, iZEN, 19:24, 02/05/2017 [ответить] [смотреть все]  
  • +/
    Ну вот и всё. Светлая память. R.I.P.

    - Nuke llvm36/clang36 - Obsolete and unmaintained upstream

    http://www.freshports.org/devel/llvm36/
    http://www.freshports.org/lang/clang36/

     

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


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor