• Заметки дилетанта, или Сказ о том, как Scala-разработчик ПЛИС конфигурировал
    0

    Честно говоря, не берусь сказать, но, может, эта страница чем-то подскажет. Сам я, технически тоже использовал два clock domain (один "умный" и один "высокочастотный"), но связывал их снаружи на диаграмме.

  • Подборка полезностей для программиста под Linux
    +2

    Согласен, с примерами — беда. Это, скорее, точки входа и то, что я знаю «вотпрямщас». По тому же rr я уже давно хотел написать tutorial, но даже непонятно, как подступиться (думаю, там не на одну статью хватит).


    Тот же strace — такое умеет, что просто жуть!

    У ltrace, помнится, вообще man было страшно читать — столько опций.

  • Новые языки программирования незаметно убивают нашу связь с реальностью
    0
    Кому нужен много контроля и низкий уровень — пишут на С.
    Кому нужен максимальный контроль — на asm.

    <сарказм>… а кому нужно ещё больше контроля, пишут на Scala.</сарказм> Я, конечно, понимаю, что это просто DSL, но забавно всё-таки, что функциональный язык оказался в чём-то ближе к железу, чем asm (да, я знаю, что можно "писать процессоры" хоть на Python).

  • Open source: кодоюмор, кодотрюки, НЕ кодобред
    +1

    WooHoo, наверное, хочет сказать, что сравнивать "площадь" (38 попугаев 24 икстерма) и диагональ (24 дюйма) — размерность не сходится.

  • Open source: кодоюмор, кодотрюки, НЕ кодобред
    0

    Да уж, даже говоря про программу размером в 10, байт лучше не употреблять термин самая маленькая. Ну, будем считать, что это была версия под C++ :)

  • Open source: кодоюмор, кодотрюки, НЕ кодобред
    +1
    Шутки шутками, а в одной программе для редактирования ID3-тэгов её лицензия прямо запрещает использовать её в военных целях…

    Ну, тут хоть приблизительно описано, для чего использовать нельзя, хотя и не СПО, конечно, но её использование выглядит не так рискованно.

  • Ослабляем гайки в правилах Хабра
    +2
    Ссылки на сайты опенсорсных и бесплатных продуктов, если на сайте нет платных продуктов-сателлитов. Наличие платной техподдержки и форм донейта на сайтах допускается.

    То есть теперь нельзя дать для удобства ссылку на скачивание Visual Studio Code / Idea Community Edition / ещё чего-то, в чём создан приложенный проект? Не то, чтобы замена ссылки простым упоминанием была большой проблемой, просто в порядке занудства.

  • Фаззинг в стиле 1989 года
    +1

    Правда, боюсь, проблематично "успешно пройти" проверку фаззингом — её, скорее, можно "не завалить" за определённое время под определённым типом тестовых данных. Это же не формальное доказательство.

  • Фаззинг в стиле 1989 года
    +1

    Был The Fuzzing Project с похожими целями, ему, вроде, даже грант от Linux Foundation выдали на это, но конкретно сейчас сайт, похоже, лежит...

  • Профилирование кода с LLVM
    0
    LLVM IR, однако, является платформенно-независимым, так как это только промежуточное представление кода.

    Немного позанудствую: разработчики LLVM пишут, что совсем платформенно-независимый код не получится (препроцессор, размеры типов и т.д.)


    Кстати, эта задача напомнила мне то, с чем столкнулись разработчики mozilla rr (это time-travelling debugger, основанный на полном воспроизведении недетерминированного поведения) — им потребовалось в точности (или почти?) воспроизводить количество инструкций между некоторыми точками выполнения (вероятно, переключениями потоков/процессов) — в итоге их инструмент работает только на достаточно свежих Интеловских процессорах с достаточно стабильными используемыми ими performance counter-ами (были попытки поддержи Ryzen, но чем закончились, не знаю). Ну, то есть стабильность зависит от микроархитектуры, а не конкретного экземпляре процессора. :) Впрочем, здесь уже никакой платформенно-независимостью и не пахнет, конечно.

  • Профилирование кода с LLVM
    +1

    Кстати о птичкахQEMU: насколько мне известно, при указании опции -icount (возможно, ещё с какими-то параметрами) — получаете подсчёт инструкций "из коробки" (вроде, там в каждый translation block добавляется соответствующее изменение счётчика выполненных инструкций и, можно надеяться, исключения тоже обрабатываются корректно). Вот только с user-mode эмуляцией никогда на это не смотрел (я вообще на неё особо не смотрел)… Возможно, к этому счётчику можно как-то прицепиться, правда логика там малость запутанная.


    Кстати, а Valgrind в режиме cachegrind чего-нибудь подобного не умеет?

  • Шесть бесплатных автоматизированных платформ для изучения программирования
    0

    А как же Codeforces? — у него есть и русскоязычная, и международная версия. По крайней мере, когда я там участвовал, они были синхронизированы.


    А на TopCoder есть (были?) соревнования по чему угодно, в том числе "марафонные матчи" — это когда на, скажем, две недели даётся некая оптимизационная задача, предположительно не решающаяся точно, и ты сидишь и совершенствуешь своё решение.

  • Шесть бесплатных автоматизированных платформ для изучения программирования
    0

    Насколько я помню, кроме "традиционных" алгоритмических задач там были задачи/соревнования по функциональному программированию, машинному обучению и т.д. Были даже наборы задач по bash, регуляркам и т.д. В общем, забавный сайт.

  • The Kernel-Bridge Framework: мостик в Ring0
    0

    Честно говоря, вопрос был, скорее, риторический. :) Просто при первом взгляде напомнило описываемое в статье Драйвер компьютерной игры Street Fighter V отключает встроенный механизм защиты Windows, поэтому мне показалось, что было бы полезно описать некие меры предосторожности, которые, вероятно, есть. То есть речь не только о safety, но в большей мере о security.

  • The Kernel-Bridge Framework: мостик в Ring0
    0

    Я правильно понимаю, что это предназначено исключительно для прототипирования и ни в коем случае нельзя оставлять на production?

  • Yew — Rust&WebAssembly-фреймворк для фронтенда
    +1
    Если браузер старый, без поддержки WebAssembly, то потребуется emscripten. Это, грубо говоря, эмулятор WebAssembly для браузера.

    <зануда> Emscripten — это не эмулятор WASM, это LLVM-бекенд для генерации Asm.JS/WASM, JS-рантайм для сгенерированного кода и, видимо, ещё пачка всякого разного (вероятно, включающая и интерпретатор). </зануда>

  • Мой любимый файл в кодовой базе Chromium
    +1

    Напомнило: в коде WebKit видел чудесную строчку:


    Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled();

    Как говорится, "Зачем писать комментарии, если можно понятно называть функции".

  • Комментарии в коде как способ самовыражения
    +4

    Иногда попадается не только в комментариях: например, в документации QEMU


    Lines should be 80 characters; try not to make them longer.
    ...
    Rationale:
     - Some people like to tile their 24" screens with a 6x4 matrix of 80x24
       xterms and use vi in all of them.  The best way to punish them is to 
       let them keep doing it.
    ...

    А в Firefox какое-то время назад были параметры для включения экспериментального и "ваще экспериментального" WebRender:


    gfx.webrender.enabled
    gfx.webrendest.enabled
  • Chisel — (не совсем) новый подход к разработке цифровой логики
    0

    Под связкой C-ассемблер я имел в виду просто два языка программирования разного уровня. То есть не "напишем всё на Чизеле, а потом вручную поправим ниже уровнем". Я имел в виду "что удобно, быстро напишем на Чизеле, что неудобно — допишем на Verilog/VHDL" — я же не предлагаю выкинуть классические HDL-языки и заменить их на Chisel. А вот с количеством ресурсов — это да, остаётся надеяться разве, что компилятор выкинет всё лишнее (как компилятор C вычисляет константные выражения и т.д., образовавшиеся после раскрытия макросов). Ну и на то, что взамен это хотя бы даст то железо (или FPGA-дизайны), которое раньше было сильно сложно сделать (ну или простое, но полезное и много видов) за счёт упрощения процесса разработки.

  • Chisel — (не совсем) новый подход к разработке цифровой логики
    0

    Я нуб и извините, если скажу чушь, но всё же...


    Чтобы не приходилось играть со средой разработки в игру «кто кого умнее».

    Когда я читал книгу Harris&Harris, у меня сложилось впечатление, что на Verilog тоже нужно писать не просто по стандарту, а по идиомам, иначе компилятор не поймёт. В этом смысле язык, в котором бы идиомы явно записывались в коде, был бы, наверное, шагом вперёд (не утверждаю, что это Chisel). Ну и здесь это поведение, во всяком случае, детерминированное, а не какие-то эвристики.


    автоматическое своевольное добавление chisel-ом логики тактовой частоты и ресета мне кажется странной практикой.

    Со своей, программистской, колокольни: ассемблер нагляднее C с точки зрения того, что в итоге получится, и можно, например, в каждую функцию предавать параметры, как в данном случае удобно. Можно договориться о calling convention и аккуратно везде её соблюдать. А можно писать на C, и там нужно исхитриться, чтобы не соблюсти calling convention. Последнее мне кажется более безопасным, хотя и может помешать, например, написанию низкоуровневого кода ядра ОС — ну так на то и ассемблерные вставки и отдельный ассемблерные файлы.

  • Заметки дилетанта, или Сказ о том, как Scala-разработчик ПЛИС конфигурировал
    0

    Насколько я знаю, для некоторых устройств Altera/Intel тоже доступны инструменты, конвертирующие OpenCL (в каком-то смысле, почти C) в дизайн для FPGA.


    Хотя, на самом деле, получилось довольно нетривиально и это интересно.

    Спасибо :) Раз получилось "нетривиально" при не очень большом количестве кода и почти полном отсутствии опыта, значит, возможно, Chisel мог бы дать возможность не-суровым-профессионалам написать что-то осмысленное и относительно близкое к железу (то есть всё же не на С), как в своё время экосистема Arduino многих приобщила к электронике. Впрочем, Chisel выглядит серьёзнее, чем Arduino IDE. :)


    ИМХО, есть несколько путей "оюзерфрендливания" языка:


    • угадывание намерений (не всегда точное) — JavaScript, PHP
    • усложнение выстрела в ногу / упрощение отладки — все те же + Java — там хоть стек-трейс почти всегда будет, а в Java ещё и статическая проверка типов
    • лаконичность и безопасность ценой более запутанной системы типов и, возможно, существенного усложнения некоторых низкоуровневых вещей--- Scala, Rust (?)

    Есть подозрение, что Chisel — это вариант 3.

  • Заметки дилетанта, или Сказ о том, как Scala-разработчик ПЛИС конфигурировал
    0
    Отличный bridging the gap между программистом и железом. Но на мой взгляд, до конкуренции Chisel и HDL — как до до луны пешком.

    О, это было бы как раз интересно: комментарий от человека, хорошо знакомого с классическими HDL о том, почему Chisel не конкурент HDL. Правильно ли я понимаю, что подразумевается примерно то же, что "Java не конкурент C/C++" (то есть, что Chisel — это упрощённое безопасное подмножество, на котором сложнее выстрелить в ногу, но некоторые низкоуровневые вещи выразить существенно сложнее, как и понять, во что оно оттранслируется на самом низком уровне)? Всё-таки Chisel — это просто язык описания, а не попытка автоматически транслировать Scala в Verilog.

  • Заметки дилетанта, или Сказ о том, как Scala-разработчик ПЛИС конфигурировал
    0

    Спасибо! Первая ссылка вообще шикарна! (А вторую я как раз тоже использовал при подготовке статьи.) Но всё равно с ходу не помогло. :) Кстати, автор одной из статей говорил, что на микроконтроллере он PAL так и не завёл, но завёл NTSC.

  • Заметки дилетанта, или Сказ о том, как Scala-разработчик ПЛИС конфигурировал
    +2

    Chisel, вроде, тоже проще некуда при условии, что уже знаешь Scala. Вопрос, на чём мне будет комфортнее писать от случая к случаю. Я при этом не утверждаю, что ответ — Chisel — у меня банально опыта нет для таких сравнений. Но учитывая, что на основной работе мой язык — Scala, то вкусовщина, скорее всего, будет именно на его стороне. Вот что интересно, так это узнать у людей, знакомых как с Verilog, так и с "хипстерской функциональщиной", что безопаснее в плане "не выстрелить в ногу".


    А ещё, помню, натыкался на вопрос на Quora, о том, стоит ли учить Chisel или Verilog для промышленного применения. Ответ был "Verilog учить однозначно — стандарт, остальное — по желанию". И при этом указывалась полезность большого кругозора даже не в плане "профессионально знаю десять языков, поддержу что угодно", а в плане знакомства с мотивациями "а нафига вам ещё один язык понадобился, что плохого/опасного в существующих решениях". Знакомство с Maybe[A] и Either[A, B] по Хаскелю может и при программировании на C++ пригодиться.


    Ну и, гипотетически, если вам нужно что-то очень хитро кастомизировать каждый раз — то в Chisel к вашим услугам вся мощь ФП и экосистемы Java — хоть в БД лезь. Нужно ли это кому-то и насколько это будет удобно — другой вопрос.

  • Копируем текст из буфера обмена на Android девайсы через ADB
    0

    Только там, насколько я помню, буфер будет синхронизироваться постоянно — скопировал пароль, а он на все устройства улетел. :) Ну и там полно других компонентов, не только синхронизация буфера — удалённый доступ к файлам устройства или удалённая клавиатура/тачпад для компьютера, например. Вроде, можно было даже лазить с телефона сразу на планшет за файлами.

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

    Спасибо!

  • habrahabr.ru → habr.com
    +1

    Видимо, неточно выразил мысль: на идею параллельных англоязычных блогов я и сам смотрю с оптимизмом.


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

  • habrahabr.ru → habr.com
    +13

    Сейчас же на Хабре немало переводов не от оригинальных авторов. Может, сделать удобную кнопку "Я хочу сделать официальный перевод этой статьи на английский (или русский), разрешите, пожалуйста". Такие официальные внутренние переводы от сторонних авторов. Многие, наверное, будут только рады.

  • habrahabr.ru → habr.com
    +7

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

  • habrahabr.ru → habr.com
    +1

    Возможно, будет интересно посмотреть на широко известный в узких кругах олимпиадных программистов сайт Codeforces. Он уже давно использует двуязычную модель (ru/en) и, когда я на нём ещё обитал, было ощущение, что он стал чуть ли не популярнее, чем Topcoder. Во всяком случае, так оно изнутри выглядело. :) При этом было немало русскоязычного контента. Мне, например, наиболее интересен вопрос, как быть с комментариями под двуязычной статьёй и как это решено там.

  • «Без Meltdown и Spectre»: Intel перепроектирует свои процессоры
    0

    А мне вот интересно, что могут мне "сделать такого гадкого", если я ставлю все обновления ОС. Верно ли, что Meltdown полностью закрывается, а Spectre частично тоже закрывается и намного сложнее в эксплуатации?

  • Пользователи негодуют, что Chrome сканирует файлы на локальном диске
    0

    Буквально несколько дней назад видел новость про релиз Qubes 4.0 — не оно? Сам, впрочем, не пользовался.

  • Новая микроархитектура процессоров Intel: быстро, но не бесплатно
    0
    Это уже было в Симпсонах

    А мне подумалось про линуксовую опцию ядра isolcpus — насколько я помню, при загрузке прописываешь, и на указанные ядра процессы можно закидывать только явно. И всё это совершенно бесплатно, прошу заметить. Впрочем, без переключения userspace-kernelspace обойтись всё равно не получится…


    А серьёзно, может ли isolcpus каким-то образом защищать от новомодных атак?..

  • Массивы, указатели и другие квантовые явления вокруг нас
    0

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

  • Массивы, указатели и другие квантовые явления вокруг нас
    0
    а я потом долго искал, как с этим боротся

    Можно попробовать использовать Undefined Behavior Sanitizer (есть в Clang и GCC). Много всего ищет (но в процессе выполнения, а не статически), хотя, наверное, не всё — например, с дефолтными настройками вызов функции через указатель с неправильной сигнатурой не определяет (это, вроде, UB):


    #include <stdio.h>
    
    int f(int x) {
        return x + 1;
    }
    
    int main() {
        int (*fun)(int, int) = (int (*)(int, int)) f;
        int x = fun(1, 2);
        printf("%d\n", x);
        return 0;
    }

    $ clang -fsanitize=undefined test.c -o test
    $ ./test
    2

    Подозреваю, что не весь UB можно отловить и в рантайме.

  • Массивы, указатели и другие квантовые явления вокруг нас
    0

    Меня со вчерашнего дня мучал вопрос: а если инварианты нашей программы гарантируют, что один из первых четырёх элементов всегда совпадёт — это тоже UB? (Другой вопрос, зачем нам тогда такая функция. Не, ну может, макрос так удачно развернулся...) Например, в такой функции будет UB? — там внутри функции вообще ничего не гарантируется


    int get_value_at_index(const int *array, size_t index) {
        return array[index];
    }
  • Массивы, указатели и другие квантовые явления вокруг нас
    0
    Причем в случае с массивом компилятор сам понимает, что есть UB и оптимизирует(всегда возвращает true). Интересно почему он не производит аналогичную оптимизацию(например, всегда возвращать 0) в случае:
    if (table[i] == v) return i;

    Я не очень-то стандартовед, но в моём представлении, если за всё время выполнения в программе UB не произойдёт, то она должна отработать по стандарту. Вот если произойдёт, то тогда уже она ничего не обязана (вроде, даже до момента UB).


    Всё-таки хочется верить в добрые намерения компилятора, а не "Ух ты, я нашёл UB, сейчас я им устрою". В данном случае (если я не налажал в философии в предыдущем абзаце) в примерах значение, вообще-то, могло и найтись (может, у нас инварианты такие). Но в "булевском" случае всегда, если нет UB, то возвращаемое значение true. То есть в сужении на случай "нет ни одного UB" функция честно константная. А если мы возвращаем индекс, то без UB у нас есть четыре возможных варианта.


    Или я понимаю неправильно, и в приведённой функции есть UB, даже если логика программы гарантирует, что аргумент найдётся в первых четырёх элементах массива при любом вызове?

  • Минимальный multiboot загрузчик
    0

    Вероятно, я плохо сформулировал свой комментарий. Когда ребята допишут свою ОС, о CSM, вполне возможно, уже и забудут все. А говорил я вообще про сохранение (пока) поддержки CSM в существующих ОС (на случай ещё достаточно мощного железа, но с древней прошивкой), я не имел в виду, что мне нужна поддержка CSM со стороны прошивки. Ну то есть, кому-то она, может, и нужна, но мне не особо. :) Кстати, читал ваш цикл статей про безопасность UEFI и всё думал: "Как же страшно было жить в 2015" — надеюсь, сейчас всё уже не так плохо? :)

  • Минимальный multiboot загрузчик
    0
    Это все нафиг не нужно, простите, и давно уже.

    Начинать в 2018 году учебный проект (который в ближайшие три года, может, и на реальном железе ни разу не запустят) с поддержки BIOS, может, и не имеет смысла (кстати, спасибо за ссылку, где указано, как включить поддержку UEFI в QEMU), но вот выкидывать эту поддержку на свалку из реальных продуктов, ИМХО, преждевременно. У меня, например, совсем недавно появился дома первый компьютер с поддержкой UEFI. Нет, я сидел не за еле живой системой, не тянущей ничего современного (про игры, правда, утверждать не буду) — это был вполне живой ноутбук с мобильным Core i3 первого поколения (2 ядра / 4 потока) и 8 Гб оперативки. Я бы, наверное, и ещё пару лет мог бы за ним поработать, машинка вполне мощная. Однако в нём, вроде, ничего кроме классического BIOS не было.

  • Минимальный multiboot загрузчик
    +2

    "Истинный программист способен написать операционную систему на Rust даже на ассемблере"? Нет, я понимаю, что это первая, подготовительная, часть из большого цикла, но заголовок забавно сочетается с остальным текстом...