Компания
196,19
рейтинг
28 декабря 2015 в 05:44

Разработка → PHP-Дайджест № 76 – итоги 2015 года, подборка интересных ссылок + конкурс от компании JetBrains



Следуя традиции, мы решили подвести итоги уходящего года и выделить самые значимые события в мире PHP, которых, к счастью, было немало. И конечно же, подборка со ссылками на свежие материалы за последние три недели.

Под катом вас также ждет конкурс с призами от компании JetBrains.
С наступающим Новым годом! Приятного чтения.


PHP

Безусловно, главным событием уходящего года стал выпуск новой мажорной версии интерпретатора PHP 7. Среди нововведений такие долгожданные возможности, как исключения вместо фатальных ошибок, тайпхинтинг скаляров со строгим режимом, и, конечно, производительность сравнимая с HHVM.
Был завершен цикл поддержки PHP 5.4, а ветка PHP 5.5 перешла в режим поддержки безопасности.
Самому языку PHP исполнилось 20 лет. 8 июня 1995 года, датский программист Расмус Лердорф анонсировал первый релиз проекта Personal Home Page Tools (PHP Tools), небольшого набора CGI-скриптов, написанных на языке Си. За 20 лет из небольшой поделки PHP вырос в инструмент, который используется более чем на 80% всех веб-сайтов в мире, а также на 5 из топ-10 сайтов.


PSR

В уходящем году группой PHP-FIG был принят стандарт PSR-7: HTTP Message Interface. Благодаря этому в PHP мире появился унифицированный интерфейс взаимодействия с HTTP. Стандарт был применен в Guzzle, Symfony и других проектах, а также породил массу новых инструментов в виде middleware.
Кроме того, за год были подготовлены несколько черновиков новых стандартов:

И вот совсем недавно принят PSR-6: Caching Interface.


symfony

Популярный PHP-фреймворк в этом году обозначился релизами 2.7.0 LTS, 2.8 и 3.0. А самому проекту Symfony исполнилось 10 лет.

laravel
В 2015 году вышел Laravel 5, a также Laravel 5.1 LTS — первый релиз фреймворка с долгосрочной поддержкой. Кроме того, разработчиком был представлен микрофреймворк Lumen.

Уходящий год можно по праву назвать годом релизов — свет увидели мажорные версии многих ветеранов PHP-мира:

В следующем году нас ждут другие новости, а пока, последняя подборка ссылок в этом году.

Новости и релизы


  • Laravel 5.2 — Свежий релиз популярного фреймворка. Краткий обзор нововведений habr.
  • PHP 7.0.1 — Доступен первый корректирующий выпуск для ветки 7. В обновлении исправлено 35 ошибок.
  • Slim Framework v3.0.0 — Состоялся мажорный релиз популярного микрофреймворка. Под капотом обновленная реализация DI, поддержка PSR-7, упрощенный код и многое другое.
  • WordPress 4.4 “Clifford” — Свежий релиз популярной CMS примечателен тем, что включает в себя инфраструктуру REST API. Это первый этап интеграции плагина WP REST API в ядро. В следующем релизе планируется реализовать ендпоинты.
  • PSR-6 Caching Interface — После 4 лет работы и обсуждения принят стандарт для систем кэширования.


PHP


  • RFC: Number Format Separator — Предлагается добавить возможность использования символа _ в качестве разделителя в числах, для повышения читаемости: $i = 197_823_459; // 197823459
  • RFC: Precise Session Management — Обновленное предложение об улучшении механизма сессий.
  • RFC: Class Friendship — Предлагается реализовать концепцию дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным. Пример использования.
  • PHP 5 Support Timeline — Предлагается продлить активную поддержку PHP 5.6 до года или двух вместо предусмотренных текущим планом 8 месяцев.


Инструменты


  • Alroniks/dtms — Расширение класса DateTime для работы с микросекундами в PHP. Прислал iklimchuk.
  • bocharsky-bw/FileNamingResolver — Легковесная библиотека, позволяющая именовать файлы и директории по определенным правилам, используя для этого различные стратегии. Прислал bocharsky_bw.
  • rybakit/msgpack.php — Cериализация в формате MessagePack на чистом PHP. Прислал rybakit.
  • ErikvdVen/php-gif — Создание динамических GIF файлов по запросу. Прислал tkf.
  • Level-2/Transphporm — Нестандартный подход для реализации шаблонизатора. Сам шаблон представлен в виде XHTML-файла, а подстановка данных происходит с помощью CSS-подобных селекторов. Пост с описанием и примерами.
  • qandidate-labs/qandidate-toggle — Библиотека реализует концепцию отключаемых фич. Подробнее о плюсах и минусах идеи писал Мартин Фаулер. Туториал по использованию.
  • Roave/BetterReflection — Рефлексия без загрузки классов.
  • goaop/parser-reflection — И еще одна реализация рефлексии без необходимости загрузки классов.
  • Sean-Der/Therac — Отладчик для PHP с возможностью парной работы и синхронизации между несколькими браузерами.
  • cweiske/php-sqllint — Проверка синтаксиса для SQL в виде инструмента командной строки.
  • ajbdev/cronlingo — Представляет временные периоды, описанные естественным языком в виде корректных значений для crontab.
  • chrisgillis/slackwolf — Бот мафии для Slack на PHP.
  • blackfireio/player — Краулер. Может быть также применен в тестировании.
  • webmozart/expression — Реализация паттерна Спецификация.
  • jasonhinkle/php-gpg — Реализация GPG/PGP на чистом PHP.
  • wnmp-dev 1.1.0 — nginx + MariaDB + PHP под Windows.
  • flint/Lurker — Трекер изменений ресурсов. Альтернативное решение: jasonlewis/resource-watcher.
  • servo-php/fluidxml — Библиотека для манипуляций над XML с текучим интерфейсом.
  • jenssegers/imagehash — Перцептивный хеш для изображений — позволяет определить степень схожести картинок.
  • dkvashninbay/magento2plugin — PhpStorm плагин для разработки под Magento 2. Прислал dkvashninbay.


Материалы для обучения




Аудио и видеоматериалы




Занимательное




Спасибо за внимание!

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

Прислать ссылку
Быстрый поиск по всем дайджестам
Предыдущий выпуск

Новогодний конкурс



В этом году нашему любимому языку исполнилось 20 лет. А что будет с PHP в будущем? Каким будет PHP если не через 20, то хотя бы через 5 лет?
Оставляйте ваши прогнозы в комментариях к этому посту. А авторы трех лучших, набравших наибольшее количество плюсов, получат отличные новогодние подарки. Компания JetBrains наградит всех трёх победителей годовыми подписками на PhpStorm. Результаты будут объявлены 4 января в 19:00 по московскому времени.
Давайте пофантазируем, каким будет мир PHP в 2020?
С наступающим вас Новым годом!




Результаты конкурса


Итак, по результатам голосования определились три победителя, которые получат персональные лицензии на PhpStorm от компании JetBrains.

Первое место разделили andrewnester и kpuzuc.
andrewnester с прогнозом:
надеюсь, что к 2020 будет JIT-компиляция, именованные параметры методов, нативная многопоточность
появятся новые фреймворки, которые станут отличным примером для других языков
расширения для php писать будет ещё проще, в идеале расширения для php на php
появится строго типизированный диалект PHP — PHP++
сообщество будет расти и пополняться отличными программистами
ненавистники PHP наконец-то осознают, что PHP совсем другой, не тот, который 10 лет назад
а вообще в тему этих холиваров, PHP — Разрабатывай, Не Разговаривай ;)

kpuzuc прогнозирует:
Принимается PSR-15 и все стандарты становятся официальными.
Готовится к релизу Symfony 5 и PHP8.
Холивары PHP vs Ruby vs Python.
На собеседованиях спрашивают отличие абстрактного класса от интерфейса.

А третьим победителем стал sfedosimov с прогнозом от Ванги:
2020 год — php охватывает 90% всех серверов в интернете; на 7 версию переехали многие большие компании; статическая типизация используется все чаще; 8 версия в альфе
2025 год — php охватывает 95% всех серверов в интернете; стабильный релиз 8 версии, в неё встроен полноценный web сервер работающий на 20% быстрее nginx; ведется разработка встроенной базы данных phpsql
2030 год — php охватывает 98,6% всех серверов в интернете; выходит бета phpsql, первые бенчмарки говорят о 15% выигрыше относительно mysql; в школах php преподают на уроках информатики с 3 класcа; попытки реализовать полноценную операционную систему на чистом php
2035 год — php является абсолютным лидером и full stack инструментом для поднятия web-сервера; OS написанная на php 8 выходит в бета версию
2100 год — php самый востребованный язык программирования; количество мировых вакансий о найме программистов: php более 90%

Огромное спасибо всем участникам, а также компании JetBrains за предоставленные подарки.
C Новым годом! Пусть в 2016 у вас все будет лучше чем даже в самых оптимистичных прогнозах!

Автор: @pronskiy

Комментарии (36)

  • –4
    «Король умер. Да здравствует король!» #PHP8
  • +6
    надеюсь, что к 2020 будет JIT-компиляция, именованные параметры методов, нативная многопоточность

    появятся новые фреймворки, которые станут отличным примером для других языков

    расширения для php писать будет ещё проще, в идеале расширения для php на php

    появится строго типизированный диалект PHP — PHP++

    сообщество будет расти и пополняться отличными программистами

    ненавистники PHP наконец-то осознают, что PHP совсем другой, не тот, который 10 лет назад

    а вообще в тему этих холиваров, PHP — Разрабатывай, Не Разговаривай ;)
    • 0
      Ваш комментарий напоминает историю с «Нью Васюки» :)
    • +3
      надеюсь, что к 2020 будет JIT-компиляция, именованные параметры методов


      JIT-компиляция — думаю появится. Сырой вариант как бы уже есть, просто без переписывания основных структур профита это не давало.

      именованные параметры методов — тоже их жду, на реддите постоянно эту тему поднимают.

      нативная многопоточность


      давайте на чистоту — зачем она вам? Ну вот серьезно? Работа с I/O — плохой вариант, 99% разработчиков не умеют нормально работать с потоками и убьют все локами. Event-loop или корутинки + несколько процессов — и вот у вас самый эффеткивный способ распаралелить работу. И для корутинок уже есть amphp. То что нет многопоточности из коробки — это благо как по мне, ибо… ну я просто хочу сказать что даже в С++ потоками пользоваться не все умеют.

      Для того что бы распаралелить что-то есть очереди, есть тот же amphp, proc_open и все из коробки. Работайте асинхронно в PHP сколько душе угодно. А с генераторами, которые в PHP еще с 2012-ого года есть, можно от этого колбак хэла избавиться.

      Есть pthreads, коль уж надо, все что надо — поставить из pecl в одну команду. И нужно это для 1% задач.

      появятся новые фреймворки, которые станут отличным примером для других языков

      Они уже есть, и в принципе «нового» тут мало чего может появиться. Все тырят друг у дружки, в основном из RoR и Spring. Во всяком случае только если не разрешить нормальную функциональщину в PHP, тогда можно будет что-то интересное замутить.

      расширения для php писать будет ещё проще, в идеале расширения для php на php

      Я думаю вас заинтересует сие: RFC: Parser Extension Api. Если эту штуку введут, то вы сможете написать расширения синтаксиса PHP на PHP и дистрибьютить как пакеты в composer, а с решениями вроде opcache оверхэд на это станет не таким большим. Ну и думаю когда это будет возможно JIT уже будет не загорами.

      появится строго типизированный диалект PHP — PHP++

      Опять же, зачем? Вам информация о типах нужна или сделать жизнь болью? Я за сильную динамическую типизацию (сейчас по умолчанию в PHP слабая динамическая, если кто не знает). Добавить типизированные массивы, тайпхинтинг для пропертей объектов или переменных и… собственно все. У нас есть опциональная возможность получить всю необходимую информацию о типах. А там дальше расцвет статических анализаторов, более качественные оптимизации в JIT и т.д.

      А так уже есть зефир. Который к слову решает и предыдущую проблему с расширениями.

      ненавистники PHP наконец-то осознают, что PHP совсем другой, не тот, который 10 лет назад

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

      Просто нужно хорошо к этому относиться. Как правило хэйтят PHP «новообращенные» других технологий. Вопрос самоидентификации.

      а вообще в тему этих холиваров, PHP — Разрабатывай, Не Разговаривай ;)

      Да ну, праздники, даешь холивар!)
      • 0
        Есть pthreads, коль уж надо, все что надо — поставить из pecl в одну команду. И нужно это для 1% задач.

        Не так быстро, полагаю, нет дистрибутива, где PHP из пакетов идет собран в потокобезопасном (ZTS, Zend Thread Safety) варианте, а иначе вы не поставите pthreads. Если компилить самому или взять тот же Docker образ с соответствующей версией то всё в порядке, но подавляющее большинство пока так не делает, так что…
      • 0
        Добавить типизированные массивы, тайпхинтинг для пропертей объектов или переменных и… собственно все.

        и запрет на неявное преобразование типов :) Типизированные массивы, тайпхинтинг и т. п. — это всё же к статической типизации ближе, а не к строгой. PHP слабо типизирован не потому, что можно в массив или свойство что угодно запихнуть, а потому что стремится всё, что не соответствует его ожиданиям, преобразовать к ним.
        • 0
          В php internals на днях обсуждали этот вопрос. На данный момент банально есть технические ограничения для реализации этого механизма. Это же ограничение не позволяет пока добавить тайпхинтинг для отдельных переменных или пропертей.
  • 0
    Каким будет PHP если не через 20, то хотя бы через 5 лет?


    К 2020-году выйдет PHP 8 (с очень большой потерей обратной совместимости с наследием PHP3), доминирующим будет 5.6, а 7 будет наступать ему на пятки.
  • –1
    Судя по движухе будет продвижение в сторону функцинальщины, к примеру, сейчас Anthony Ferrara предлагает автозагрузку функций на подобии того как это работает с классами, без этого обычные функции не так популярны в использовании.
    Будет больше уклона на статическую типизацию где это возможно, ну и JIT в пятилетней перспективе могут запилить, было бы здорово.
    Конкуренция/партнерство HHVM уже сейчас дало много платформе PHP в целом, что и продолжится в обозримом будущем.
  • +6
    Принимается PSR-15 и все стандарты становятся официальными.
    Готовится к релизу Symfony 5 и PHP8.
    Холивары PHP vs Ruby vs Python.
    На собеседованиях спрашивают отличие абстрактного класса от интерфейса.
    • –1
      и LEFT JOIN от RIGHT JOIN
    • 0
      Ну кстате я был на одной конференции по 00P, которую вел преподаватель С++ в компьютерной академии нашего города. Так там это был самый любимый и популярный вопрос «отличие абстрактного класса от интерфейса». Самое интересное, что те кто начинают учить С++ (а точнее студенты), очень сильно путаются в этом вопросе.
  • 0
    PHP сохранит свою простоту нарастит аудиторию и увеличит отрыв от остальных веб-ориентированных языков

    PHP станет асинхронным/параллельным, люди наиграются с нодой и вернутся к PHP

    PHP фреймворки будут выходить в двух версиях, стандартной, и в виде PHP расширения

    PHPstorm вырастет из IDE в готовое девелоперское окружение с LAMP стеком и необходимыми инструментами

    PHP станет полноправным и постоянным инструментом в enterprise проектах, джаве придётся подвинутсья на бэкенде, а джавистам искать аргументы в пользу джавы…
  • –1
    Из инструментов:
    Выйдет релиз PHPStorm 20
    Из обучения:
    PHP преподают в школе вместо паскаля и бэйсика
    Из окружения:
    Vagrant становится неотъемлимой частью разработки, про версию php под винду все забывают. Окружение становится более похожим на прод
    Про PHP:
    Выходит версия 8, которая быстрее еще на 30% версии 7
    Удаляются все устаревшие функции, с помощью которых можно писать «старый» код.
    ВСЕ ХОСТИНГИ ПЕРЕХОДЯТ НА 7 ВЕРСИЮ МИНИМУМ!!! (из наболевшего)
    PHP перестает «умирать» — появляется возможность прямо в коде указать что данный скрипт будет висеть в памяти до определенного момента или по наступлению условия. Все забывают про крон
    PHP становится полноценно многопоточным. На собеседованиях пропадают задания про «написать возможность запускать несколько потоков с кода»
    PHP-программисты становятся более квалифицированными.
    Пропадают шутки про PHP, появляются шутки про RUST и GO :)
  • 0
    PHP будет достаточно быстро развиваться и становиться все лучше и все быстрее.

    PHP станет языком широкого применения и на нем станет комфортно писать мультиплатформенный софт.

    В PHP поработают с мультипроцессорностью и проблемы в этой области будут сводиться к 0.

    В PHP добавят специальный параметр, который будет давать возможность отключить «ПХП создан, чтобы умирать» и решаться некоторые проблемы с демонами.

    Ну и еще много моментов, которые подсказали коллеги и я упустил.
  • +2
    Через 5 лет доля WordPress-сайтов в Интернете перевалит за половину. Будут появляться кучи вакансий для «WordPress-программистов» и тем на SO в стиле: «Как сложить два числа в WP». А с самим PHP всё будет хорошо.
    • 0
      >> Как сложить два числа в WP

      и плагин соответствующий?
  • +2
    Каким будет PHP через 5 лет? Явный тренд развития в сторону конкурентного и многопоточного программирования: из коробки появятся не блокирующий ввод-вывод и асинхронность (аля nodejs или reactphp — об этом ещё Дмитрий Стогов на DevConf упоминал), синтаксис asycn/await, возможно PHProutine (наш ответ на горутины!) или хотя бы примитивы вроде parallel foreach, и какой-то «стандартный» сервер приложений.

    В синтаксисе появится больше сахара: стрелочные функции, destructuring ассоциативных массивов и объектов, pattern matching, использование имён функций как ссылки на сами функции, чтобы можно было передавать без заключения в кавычки: array_map(strlen, ...) (для совместимости со старым кодом, возможно, будет синтаксис strlen::function, по аналогии как было сделано с MyClass::class)
    • 0
      Вообще попытаться реализовать файбееры (корутины распаралеленные по сути) можно хоть сегодня, просто это ужасно сложно и если делать на PHP будет не очень эффективно. А так технических ограничений написать такой вот скеджелер особо и нет.
  • 0
    1) перепишут функции и стандартизируют. Думаю, будет пара промежуточных версий с deprecated функционалом.
    2) поработают с многопоточностью
    3) спеки PSR-* станут обязательными\официальными.

    если успеют хотя бы это, то будет очень и очень круто.
    • 0
      удалено
  • +2
    Одно знаю точно — PHP 5.3 все еще будет жив.
  • 0
    PHP 8:
    1. Необязательная статическая типизация. Это расширение type hinting, который всем понравился в PHP 7.
    2. declare режим для строгой типизации. Изменение работы операторов сравнения в таком режиме: он больше не будет приводить типы. Это решит проблемы вроде var_dump(md5('240610708') == md5('QNKCDZO')); Пока что он будет опциональным, для поддержки совместимости со старым кодом. В PHP 9 будет по умолчанию.
    3. Введение методов у базовых типов. Это решит проблему большого количества функций с неконсистентными названиями в \. Их пометят deprecated, а удалят только лет через 5, чтобы обеспечить поддержку совместимости.
  • 0
    20 лет большой срок, но:

    1. Уже сейчас мы видим, что стандарты появляются регулярно и постепенно устраняют необходимость отвлекаться на рутинные задачи. Причем помимо PSR мы видим распространение использования компонентов от Symfony в других фреймворках и CMS.
    Поэтому надеюсь, что в будущем, мы получим очень качественные библиотеки, которые будут приняты 99% php сообщества как стандартные реализации рутинных задач.

    2. PHP будет иметь стабильную поддержку reactor pattern из коробки, причем текущий режим работы так же будет сохранен.

    3. declare(strict_mode=1) будет включено в список Deprecated в PHP 8 и удалено в PHP 9 и будет использоваться всегда.

    4. PHPStorm будет поддерживать интеграцию со средствами виртуальной реальности и позволит набирать код силой мысли.
  • +4
    От Ванги:
    • 2020 год — php охватывает 90% всех серверов в интернете; на 7 версию переехали многие большие компании; статическая типизация используется все чаще; 8 версия в альфе
    • 2025 год — php охватывает 95% всех серверов в интернете; стабильный релиз 8 версии, в неё встроен полноценный web сервер работающий на 20% быстрее nginx; ведется разработка встроенной базы данных phpsql
    • 2030 год — php охватывает 98,6% всех серверов в интернете; выходит бета phpsql, первые бенчмарки говорят о 15% выигрыше относительно mysql; в школах php преподают на уроках информатики с 3 класcа; попытки реализовать полноценную операционную систему на чистом php
    • 2035 год — php является абсолютным лидером и full stack инструментом для поднятия web-сервера; OS написанная на php 8 выходит в бета версию
    • 2100 год — php самый востребованный язык программирования; количество мировых вакансий о найме программистов: php более 90%
    • +9
      2110 — осознав свою независимость, php объявляет войну человечеству
      • +1
        php разработчики присоединяются к войне но стороне php, конечно
        • 0
          I'm sorry, Dave, I'm afraid I can't do that.
    • 0
      2110, февраль — логи забивают всё место на винтах и сервера отваливаются с ошибками. Человечество спасено от вымирания.
  • +2
    Даешь именованные аргументы!
  • +4
    Не ради рекламы. Я перевел статью «Принципы, которые формируют успешные фреймворки» (которую Qiang Xue написал) в силу своих возможностей. На хабр не стал выкладывать т.к. качество перевода сильно хромает, а тут за такие «полумеры» только заминусуют.
    Но вдруг кому-нибудь, кто совсем не умеет в английский поможет.
    • +1
      Почитал. По-моему, вполне нормальный перевод. Меня просто тоже эта статья заинтересовала,
  • 0
    Первое время будет доработка фич из PHP7. Будут серьёзные споры насчёт доработки type hinting. В итоге добавят возможность возвращать NULL если в декларации будет объявлен возвращаемый тип.
    Возвращать mixed значения(например, результат или FALSE) станет не принято. Начнутся разговоры что устаревшее PHP API держит язык за шкворень, опять пойдут записи в блогах о динамической типизации, и о том что она не нужна.
    Появится нативная многопоточность, которая будет использоваться лишь для специфических вещей.
    Работа над JIT.
    Параллельно всему этому будут разрабатываться PSR стандарты.
  • 0
    А я думаю что к 2020 году уже не будут востребованы просто php-программисты. Нужны будут люди умеющие готовить код на нескольких языках программирования (JS, Python, Haskell, Rust, Dart) и умеющие в микросервисную архитектуру. Шаред-хостинги наконец уступят место виртуальным серверам и контейнерам. PHP займет свою нишу в бэкенде.
    Доля stand-alone сайтов на PHP сильно просядет т.к. социальные сети будут еще сильнее захватывать интернет. Куда проще будет в два клика зарегистрироваться на удобном сервисе и в визуальном режиме накидать сайт.
    Выйдет восьмая версия PHP не совместимая с 5-веткой.
    Уровень входа в язык повысится и начинающие программисты будут в качестве первого языка программирования выбирать JS.

    P.S. Интересно будет в 2020 году это перечитать =)
    • +1
      Я пришёл в PHP в прошлом тысячелетии ) и всегда от пехепешников требовалось знание нескольких языков.
  • –1
    Ну, что же, пофантазируем :)
    PHP в 2020:
    • PHP перестанет быть языком, который «должен умирать» и daemons и фоновые длительные операции будут не только гиковскими штуками, но и вполне хорошими инструментами;
    • PHP и nginx объединят усилия и усовершенствуют встроенный веб-сервер, который можно будет использовать в том числе на production серверах для небольших проектов. Возможно, с предустановленной конфигурацией популярных CMS и микроферймворков;
    • PPI, Puli и им подобные библиотеки смогут реализовать свою цель и завершатся холивары о том, у какого фреймворка бандлы/пакеты/расширения/модули лучше;
    • не будем забывать о нашем любимом Composer и будем надеятся, что он получит стабильный релиз первой версии, а, возможно, даже релиз второй версии!
    • конечно же! как же без этого! релиз PHP 8 либо PHP 7.5 с астрономическими показателями скорости и закрытыми всеми тикетами с багами :)
    • если уже есть релиз новой версии PHP, то фреймворки поднатужатся и сделают свои новые релизы мажорных версий
    • для новичков появится инсталлятор PHP под windows, через который можно будет устанавливать/удалять/включать/отключать расширения;
    • а для продвинутых будет какой-то качественно новый уровень интеграции php с vagrant/docker/otto.

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

Самое читаемое Разработка