• Поведения — behaviours Erlang-е

    Добрый день.

    Пара слов о себе сначала. Я пишу на Erlang-е около 10 лет и приветствую появившиеся в последнее время схемы и диаграммы. Но я помню какой переворот в моем коде вызвало применение поведений, и думаю что это интересная тема для сложных продуктов.

    Зачем нужны поведения? Поведение — суть определение интерфейса. Установка контракта между вызывающей стороной и имплементацией. Ну и все что из этого вытекает в случаях обычного определения интерфейса класса. Только в этом случае мы определяем интерфейс модуля.

    Модуль может выполнять больше, чем одно поведение, но надо аккуратно смотреть, чтобы поведения не пересекались.

    Если поведения декларируют функцию, совпадающую по имени и количеству параметров, то при компиляции появляется логичное предупреждение conflicting behaviours.

    Синтаксическая сторона очень проста. Я положу код для примера и потом продолжу описание.
    Читать дальше →
  • Ещё большее ускорение WebAssembly: новый потоковый и многоуровневый компилятор в Firefox

    • Перевод
    Оба авторе: Лин Кларк — разработчик в группе Mozilla Developer Relations. Занимается JavaScript, WebAssembly, Rust и Servo, а также рисует комиксы о коде.

    Люди называют WebAssembly фактором, меняющим правила игры, потому что эта технология ускоряет выполнение кода в вебе. Некоторые из ускорений уже реализованы, а другие появятся позже.

    Одна из техник — потоковая компиляция, когда браузер компилирует код во время его загрузки. До настоящего времени эта технология рассматривалась лишь как потенциальный вариант ускорения. Но с выпуском Firefox 58 она станет реальностью.

    Firefox 58 также включает в себя двухуровневый компилятор. Новый базовый компилятор компилирует код в 10–15 раз быстрее, чем оптимизирующий компилятор.

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



    На десктопе мы компилируем 30-60 МБ кода WebAssembly в секунду. Это быстрее, чем сеть доставляет пакеты.
    Читать дальше →
  • Отчёт c St. Petersburg Scala MeetUp 2017.3

      Пятого декабря в Санкт-Петербурге прошёл третий митап Scala разработчиков. Юзер-группа встречается раз в 2-3 месяца, в гостях у какой-либо из компаний — активных участников сообщества, использующих язык Scala или смежные ему технологии. На этот раз, площадкой проведения был выбран офис компании JetBrains на Васильевском острове. В нём ведёт свою деятельность команда разработчиков Scala plugin для сред IntelliJ IDEA и Android Studio.

      imageВ программе митапа были три выступления наших коллег:

      1. Андрей Сугак (JetBrains) рассказал о результатах своей дипломной работы: инструменте Мутационного тестирования проектов на языке Scala;
      2. Илья Кириллов (СПБГУ) представил недавно появившийся build tool CBT;
      3. Сергей Рублев (eLama) дал ряд практических примеров использования библиотеки Slick.

      Подробности выступлений и видеоматериалы под катом…
      Читать дальше →
    • Rust: качаем ленту и парсим JSON

      • Перевод
      • Tutorial

      Я покажу вам, как написать небольшую программу, которая скачивает ленту(feed) в формате JSON, парсит и выводит список заметок на консоль в форматированном виде.


      У нас все вылилось в очень лаконичный код. Как? Смотрите под катом.

      Читать дальше →
      • +30
      • 5,1k
      • 7
    • Грузите апельсины бочках. Релизы в Golang проектах

        Данная статья является продолжением инструментальной темы, затронутой в прошлой публикации. Сегодня мы постараемся разобраться со сборкой релизов Golang приложений в виде единого исполняемого файла, включающего ресурсные зависимости, и вопросом оптимизации размера итоговой сборки. Также рассмотрим процесс построения рабочего окружения отвечающего следующим требованиям:


        1. Переносимость. Окружение должно быть легко воспроизводимо на различных машинах.
        2. Изолированность. Окружение не должно влиять на версии установленных библиотек и программ на машине разработчика.
        3. Гибкость. Окружение должно позволять собирать релизы для различных версий Golang и Linux (разные версии дистрибутивов и glibc).
        4. Повторяемость. Не должно быть магии и тайных знаний, то есть все шаги сборки проекта и зависимостей должны быть описаны кодом.
        Читать дальше →
      • Как вместить property в один байт?

        Вступление


        Многие языки программирования имеют такой инструмент, как properties: C#, Python, Kotlin, Ruby и т.д. Этот инструмент позволяет вызывать какой-то метод класса при обращении к его "полю". В стандартном C++ их нет если хотите узнать, как можно их реализовать, прошу под кат.

        Читать дальше →
      • Выразительный Kotlin. Extensions

        • Tutorial
        Никто не любит повторяемый код. Тем не менее, существуют конструкции, которые прижились и укореннились в программировании довольно давно, не смотря на эту самую повторяемость.
        Есть такая часто используемая конструкция биндинга данных в android:

        fun bindCell1(view: View, data: Data) {
            view.cell1_text.setText(data.titleId)
            view.cell1_icon.setImageResource(data.icon)
        }

        Очевидный метод, у которого есть одна очень досаждающая мне неряшливость — каждый раз необходимо указывать ссылки view. и data. Каждая строка содержит 10 символов, которые очевидны.
        Читать дальше →
      • Бег в мешках с завязанными глазами спиной вперед

          Какой язык программирования самый быстрый — не всегда практичный, но крайне любопытный вопрос. Сайт benchmarksgame как раз об этом. Суть проекта в сравнении скорости языков программирования на ряде типовых задач. Надо сказать, что результаты не всегда предсказуемы. Что, если JavaScript такой же быстрый, как и C? Это же скандал!

          Гордость и предубеждение


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

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

          Но цифрам все равно нельзя верить, и вот почему.


          Читать дальше →
        • GopherCon Russia 2018: конференция пройдет 17 марта в Москве

            image

            Всем привет!

            Радостная новость для всех, кто любит Go — в России будет свой GopherCon с докладами и докладчиками :)

            17 марта в Москве выступят Brad Fitzpatrick и Дмитрий Вьюков из Google, Jessie Frazelle из Microsoft и не только. В программе уже 11 отборных выступлений, о которых мы подробно расскажем под катом, а до 20 января еще можно предложить свой доклад в CFP.

            Будет два параллельных потока, синхронный перевод в обе стороны в главном зале, огненное афтепати, крутые активности от наших партнеров (привет вам от Gett, JetBrains и Google). Ждем 400 участников, присоединяйтесь и вы!

            Итак, что в программе:
            Читать дальше →
            • +38
            • 3,8k
            • 5