• Комитет по стандартизации С++ срывает с себя оковы

    • Перевод
    Радикальная перемена в подходе к обновлениям и дополнениям в Стандарте C++ случилась на недавней встрече WG21, — или, скорее, это было изменение, которое «висело в воздухе» вот уже в течении нескольких последних встреч, и теперь наконец было обсуждено комитетом и задокументировано. Внимание читателей должны привлечь два ключевых пункта в самом начале документа «С++: планы на стабильность, скорость и реализацию языка» (C++ Stability, Velocity, and Deployment Plans [R2])":

    • Является C++ языком, в котором есть новые потрясающие возможности?
    • Известен ли C++ как язык, славящийся своей отличной стабильностью в течение долгого периода времени?

    За ними следует следующее предложение (которое было согласовано на собрании): «Комитет должен быть готов рассмотреть дизайн/качество предложений даже в том случае, если эти предложения могут стать причиной изменения поведения языка или ошибки компиляции уже существующего кода».

    Позади нас — 30 лет совместимости C++/C (ну хорошо, в последние 15 лет были по мелочи небольшие случаи, когда мы упирались в края и «заигрывали» с нею). Это замечательное достижение, за которое мы в течение вот уже более 30 лет благодарим Бьярна Страуструпа и 64 встречи, проведенные комитетом по стандартизации (Том Плум и Билл Плагер занимали их место в этом нелегком деле в промежуток между WG14 и WG21).
    Читать дальше →
  • Go: Хороший, плохой, злой

    • Перевод

    У Go есть некоторые замечательные свойства, которым посвящён раздел «Хороший». Но когда речь заходит о применении этого языка не для создания API или сетевых серверов (для чего он и был разработан), а для реализации бизнес-логики, то я считаю Gо слишком неуклюжим и неудобным. Хотя даже в рамках сетевого программирования найдётся немало подводных камней как в архитектуре языка, так и в реализации, что делает Go опасным, несмотря на его кажущуюся простоту.

    Читать дальше →
  • Прогулка по быстрому, безопасному и почти законченному веб-сервису на Rust

    Оригинал статьи


    В течение многих лет у меня было стойкое недоверие к интерпретируемым языкам. Они быстрые и работать с ними приятно, но хороши они только для работы на небольших системах, если же у вас быстрорастущий проект их привлекательность быстро улетучивается. Создание большого приложения на Ruby или JavaScript (или множестве других языков) — это бесконечный сизифов труд — вы решаете одну проблему только для того, чтобы другая тут же скатилась на вас с горы. И совершенно неважно сколько тестов вы напишете или насколько хороша ваша команда, любая новая разработка создаст мириаду ошибок, исправление которых займет месяцы или годы.


    Основная проблема кроется в пограничных условиях. Программисты делают все возможное для написания и тестирования “happy path”, но человеческий фактор мешает нам видеть проблему со всех сторон и особенно края и углы, которые причиняют наибольшие проблемы пока программа используется.


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

    Читать дальше →
  • Выпуск Rust 1.25

    • Перевод

    Команда Rust рада сообщить о новой версии Rust: 1.25.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


    Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


    $ rustup update stable

    Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.25.0 можно ознакомиться на GitHub.


    Что вошло в стабильную версию 1.25.0


    Несколько последних выпусков были незначительными, но Rust 1.25 содержит много
    нововведений! Во-первых: мы обновили LLVM с 4-ой версии до 6-ой. Обновление
    влечёт ряд изменений, наиболее важное из которых — поддержка AVR.

    Читать дальше →
    • +36
    • 6,6k
    • 9
  • Rust: зачем нужны макросы

    • Перевод

    Как-то я сказал своему коллеге, что в Rust имеются макросы, ему показалось, что это плохо. Раньше у меня была такая же реакция, но Rust показал мне, что макросы не обязательно плохи.


    Где и как их уместно применять? Смотрите под катом.

    Читать дальше →
  • Краткая история Rust: от хобби до самого популярного ЯП по данным StackOverflow

      Rust — это язык системного программирования, создатели которого уделили внимание трем вещам: параллелизму, скорости и безопасности. И хотя Rust считается молодым языком программирования — его первая стабильная версия вышла в 2015 году — он разрабатывается уже более десяти лет.

      Сегодня мы бы хотели заглянуть в прошлое и рассказать историю языка Rust, показать, как изменились его функции и возможности за время разработки и привести конкретные примеры внедрения этого ЯП на практике.

      Читать дальше →
    • SFINAE — это просто

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

        Здравствуйте, коллеги.
        Хочу рассказать о SFINAE, интересном и очень полезном (к сожалению*) механизме языка C++, который, однако, может представляться неподготовленному человеку весьма мозгоразрывающим. В действительности принцип его использования достаточно прост и ясен, будучи сформулирован в виде нескольких чётких положений. Эта заметка рассчитана на читателей, обладающих базовыми знаниями о шаблонах в C++ и знакомых, хотя бы шапочно, с C++11.
        * Почему к сожалению? Хотя использование SFINAE — интересный и красивый приём, переросший в широко используемую идиому языка, гораздо лучше было бы иметь средства, явно описывающие работу с типами.
        Читать дальше →
      • Флаги в аргументах функций

        • Перевод
        Вы когда-нибудь сталкивались с таким кодом?

        process(true, false);

        Эта функция, судя по названию, что-то обрабатывает (process). Но что означают параметры? Какой параметр здесь true, а какой false? По вызывающему коду об этом нельзя судить.

        Нам придется заглянуть в объявление функции, которое дает подсказку:

        void process(bool withValidation,
                     bool withNewEngine);

        Очевидно, автор использует два параметра типа bool как флаги (toggles). Реализация функции может быть похожа на это:

        void process(bool withValidation,
                     bool withNewEngine)
        {
          if (withValidation)  // используется 1-й флаг
            validate(); // % подтвердить
         
          do_something_toggle_independent_1
         
          if (withNewEngine)   // используется 2-й флаг
            do_something_new();
          else
            do_something_old();
         
          do_something_toggle_independent_2();
        }

        Назначение флагов очевидно, поскольку каждый из них имеет осмысленное название. Проблема возникает в вызывающем коде.
        Читать дальше →
      • Пробрасываем вызовы Steam API из Wine в GNU/Linux и обратно с помощью Nim

          У игроков на платформе GNU/Linux множество проблем. Одна из них — необходимость устанавливать отдельный клиент Steam для каждой Windows игры из Steam. Ситуация усугубляется необходимостью установки ещё и родного клиента Steam для портированных и кроссплатформенных игр.

          Но что если найти способ использовать один клиент для всех игр? За основу можно взять родной клиент, а игры для Windows пусть обращаются к нему так же как, например, к OpenGL или звуковой подсистеме GNU/Linux — средствами Wine. О реализации такого подхода и пойдёт речь далее.

          Читать дальше →
        • Обзорная лекция и запуск 2-й части курса по разработке веб-сервисов на Go


            У нас две хорошие новости.


            На Coursera мы запустили 2-ю часть онлайн-курса по разработке веб-сервисов на Go.
            А 2-го марта в офисе проведем обзорную лекцию, на которой расскажем, почему вам стоит попробовать Go.


            Под катом подробности.

            Читать дальше →
            • +23
            • 7,9k
            • 1