• GraalVM: смешались в кучу C и Scala

    • Tutorial

    Не знаю, как на вас, а на меня в последнее время производят сильное впечатление статьи про новые Java-технологии — Graal, Truffle и все-все-все. Выглядит так, как будто раньше ты придумал язык, написал интерпретатор, порадовался какой язык хороший и погрустил, какой медленный, написал к нему нативный компилятор и/или JIT, а ведь нужен ещё отладчик… LLVM есть, и на том спасибо. После прочтения этой статьи сложилось (несколько гротескное) впечатление, что после написания интерпретатора специального вида работу можно, в принципе, и завершать. Ощущение, что теперь кнопка "Сделать зашибись" стала доступна и программистам-компиляторщикам. Нет, конечно, JIT-языки медленно стартуют, им нужно время на прогрев. Но, в конце концов, время и квалификация программиста тоже не бесплатные — в каком бы мире информационных технологий мы бы жили, если бы до сих пор писали всё на ассемблере? Нет, может, всё бы, конечно, и летало (это если программист грамотно инструкции разложил), но вот насчёт суммарной сложности активно используемых программ у меня есть некоторые сомнения...


    В общем, я прекрасно понимаю, что в дилемме «затраченное программистом время vs идеальность полученного продукта ("ручная работа")» границу можно двигать до скончания веков, поэтому давайте сегодня просто попробуем воспользоваться традиционной библиотекой SQLite без подгрузки нативного кода в чистом виде. Будем использовать уже готовую truffle-реализацию языка для LLVM IR, зовущуюся Sulong.

    Читать дальше →
    • +17
    • 3,1k
    • 1
  • Реверсим «Нейроманта». Часть 2: Рендерим шрифт



      Привет, ты читаешь продолжение статьи, посвящённой реверс-инжинирингу «Нейроманта» — видеоигры, выпущенной компанией Interplay Productions в 1988 году по мотивам одноимённого романа Уильяма Гибсона. И, если ты не видел первую часть, то рекомендую начать с неё, там я рассказываю о своей мотивации и делюсь первыми результатами.


      Реверсим «Нейроманта». Часть 1: Спрайты

      А мы продолжаем буквально с того же места, на котором остановились в прошлый раз.

      Читать дальше →
      • +31
      • 4,5k
      • 4
    • Использование файлов-последовательностей ядра Linux

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

        Рассмотрим тему использования файлов-последовательностей в ядре Linux. Такие файлы считаются самым удобным механизмом для печати из режима ядра. Но на практике использовать их правильно гораздо сложнее, чем можно об этом подумать.

        В сети доступно множество материалов по этой теме. Самый лучший – это исходники самого ядра с достаточно подробными комментариями. Проблема этого источника информации в его объёме. Если не знать в точности, что искать, то лучше, имея лишь ограниченное время, и не пробовать. У меня, когда возник интерес к теме, Google нашёл несколько на первый взгляд отличных источников информации: известную книгу The Linux Kernel Module Programming Guide и серию статей Роба Дея (Rob Day) по нужной теме. Источники не новые, но весьма солидные.
        Читать дальше →
        • +20
        • 5,8k
        • 4
      • О вечном. Переборные алгоритмы: перестановки

          Перестановки. Они везде. Мы постоянно что-нибудь переставляем: посуду на столе, мебель в комнате, разные аксессуары в багажнике автомобиля; нам никуда не деться от перестановок, они занимают огромную часть нашего рабочего времени:

          image

          Подозреваю, что вам уже стало скучно на вступлении, потому что оно, вероятно, напоминает
          Читать дальше →
          • –7
          • 2,1k
          • 8
        • Иногда ответ не «42»

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

            Сама задача — получить число 0x17 самым внезапным образом.


            Внимание! Данный пост оскорбляет чувство прекрасного и практики программирования на C. Читайте, воспринимайте и комментируйте на свой страх и риск.

            Talk is cheap. Show me the code.
          • Особенности настройки и запуска PVS-Studio в Docker на примере кода Azure Service Fabric


              Технологии контейнеризации активно используются для сборки и тестирования программного обеспечения. С появлением PVS-Studio для Linux, пользователям стала доступна возможность добавить статический анализ к другим методам тестирования своего проекта на этой платформе, в том числе в Docker. В статье будут описаны особенности работы с анализатором PVS-Studio в Docker, которые повысят качество анализа и удобство использования. А также будут приведены ошибки, найденные в проекте Azure Service Fabric.
              Читать дальше →
              • +24
              • 1,9k
              • 9
            • Ой, у вас баннер убежал!

              Ну. И что?
              Реклама
            • Почему "=" означает присваивание?

              • Перевод
              Давайте посмотрим на следующий код:

              a = 1
              a = a + 1
              print(a)

              В среде ФП часто критикуют данный момент императивного программирования: «Как так может быть, что a = a + 1? Это всё равно что сказать „1 = 2“. В мутабельном присваивании нет смысла».

              Здесь мы наблюдаем несовпадение обозначения: «равно» должно обозначать «равенство», когда на практике оно обозначает «присвоить». Я согласен с этой критикой и считаю, что это неудачная нотация. Но также мне известно, что в некоторых языках вместо a = a + 1 пишут выражение a := a + 1. Почему же эта запись не является нормой?

              На этот вопрос обычно отвечают «потому что так сделано в C». Но это похоже на перекладывание ответственности на кого-то другого: кто из нас знает, почему так сделано в C? Давайте разбираться вместе!

              Большая четвёрка


              В начале 1960-ых существовало четыре доминирующих высокоуровневых языка: COBOL, FORTRAN II, ALGOL-60, и LISP. В то время, программисты разбивали присваивание на два класса: инициализацию (initialization) — когда вы впервые определяете переменную, и переприсвоение (reassignment) — когда вы вы изменяется значение существующей переменной.
              Читать дальше →
            • Релиз CLion 2018.1: новые возможности из С++17, поддержка WSL, CMake Install, плагин для Rust и многое другое

                Привет, Хабр!

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

                image

                Cначала очень коротко о главном. В этот релиз вошли:

                • Поддержка языка C++
                  • Поддержка возможности C++17: structured binding
                  • Поддержка возможности C++17: операторы if и switch с инициализаторами
                  • Множество баг-фиксов и улучшений

                • Возможность использовать файлы конфигурации Clang-Tidy в CLion, а также настраивать опции для проверок из Clang-Tidy в интерфейсе CLion
                • Улучшения для пользователей Windows
                  • Компилятор Microsoft Visual C++ включен по умолчанию
                  • Поддержка подсистемы WSL

                • CMake и не только
                  • Вызов из IDE CMake Install
                  • Шаблоны для создания файлов CMakeLists.txt
                  • Возможность открыть файл или папку без проектной модели CMake

                • Экспериментальная поддержка hex view в отладчике
                • Улучшения редактора:
                  • “Хлебные крошки” (breadcrumbs) для C/C++
                  • Действие Unwrap
                  • Сворачивание управляющих конструкций

                • Поддержка новых языков в CLion: Objective-C / Objective-C++, Rust, Fortran

                Можно прямо сейчас скачать бесплатную 30-дневную версию с нашего сайта и попробовать новые возможности. Для этого мы даже подготовили специальный небольшой демо-проект. А ниже поговорим об улучшениях более подробно.
                Читать дальше →
              • Обнаруживаем целочисленные константные выражения в макросе [вместе с Линусом]

                • Перевод
                Вашему вниманию предлагается перевод недавнего письма по поводу неоднозначной идеи из рассылки Linux Kernel Mailing List, вызвавшей традиционную реакцию Линуса Торвальдса. Необходимые для понимания пояснения предоставлены в конце поста.

                Письмо

                Отправитель: Мартин Уэкер
                Дата: Tue, 20 Mar 2018 22:13:35 +0000
                Тема: Обнаружение целочисленных константных выражений в макросе
                Здравствуй Линус,

                У меня появилась идея:

                Тест для целочисленных константных выражений, который возвращает само целочисленное константное выражение (integer constant expression, ICE), которое должно подходить для передачи в __builtin_choose_expr, и выглядит следующим образом:

                #define ICE_P(x) (sizeof(int) == sizeof(*(1 ? ((void*)((x) * 0l)) : (int*)1)))

                Кстати, в этом выражении само x не вычисляется в gcc, хотя это и не гарантируется стандартом (я не проверял этот факт в старых версиях gcc.)

                Ответ Линуса Торвальдса

                Отправитель: Линус Торвальдс <>
                Дата: Tue, 20 Mar 2018 16:08:30 -0700
                Тема: Re: Обнаружение целочисленных константных выражений в макросе
                On Tue, Mar 20, 2018 at 3:13 PM, Мартин Уэкер
                <Martin.Uecker@med.uni-goettingen.de> написал:
                У меня появилась идея:
                Нет, это не «идея».
                Это либо работа гения, либо напрочь больного на голову.
                До конца пока не уверен, поэтому не могу сказать с точностью.
                Читать дальше →
              • Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel

                  Баг в яблокеНовая версия PVS-Studio 6.23 работает под управлением macOS и позволяет проверять проекты, написанные на языке C и C++. К этому событию наша команда решила приурочить проверку XNU Kernel.

                  PVS-Studio для macOS


                  С выходом версии анализатора для macOS, PVS-Studio можно смело называть кроссплатформенным статическим анализатором кода для C и C++.
                  Читать дальше →
                Самое читаемое