Компілятори, інтерпретатори… Скільки їм посвещено книг і проектів! Баста, набридло!
А ось сунешся в область аналізу природних мов, і ніякої інформації! А все якось дуже складно, незрозуміло і не універсально.
Була в мене ідея створити середньовічну лінгвістичну новелу. Щоб можна було розмовляти з персонажами на якому-небудь стародавньому природному або вигаданому мовою. На Латині наприклад? І на Квенья. І щоб вони розуміли. А чому б і ні?

Читати далі →

Media Portal 2 — це відкрите програмне забезпечення класу медіа-центр, який дозволяє дивитися відео, фотографії, слухати музику і багато іншого. Для нас, розробників статичного аналізатора PVS-Studio, це ще одна можливість перевірити цікавий проект, розповісти людям (і розробникам в тому числі) про знайдені помилки і, в свою чергу, ще раз показати можливості нашого аналізатора.

<img src=«www.viva64.com/media/images/content/b/0481_Media_Portal/image1.png» alt=«Picture » 9"/>

Читати далі →

Я тільки що закінчив серію змін в коді браузера Chrome, яка зменшила розмір його бінарника під Windows приблизно на 1 мегабайт, перенесла близько 500 КВ з read/write сегмента в read-only, а також зменшила споживання оперативної пам'яті загалом приблизно на 200 KB на кожен процес Chrome. Дивовижне полягає в тому, що конкретно дана серія змін складалася виключно з видалення і додавання ключового слова const в деяких місцях коду. Так, компілятори — дивні.

Ця задача виникла, коли я писав документацію для деяких утиліт, які я використовую для дослідження регресій коду, пов'язаних із збільшенням розміру скомпільованих бінарників під Windows. Я запустив утиліту, скопіював у документацію її висновок та почав його описувати, коли помітив щось дивне: кілька великих глобальних об'єктів, які згідно архітектурі повинні були бути константними, чомусь знаходилися в сегменті read/write даних. Скорочена версія того висновку утиліти показана нижче:

image

Більшість виконуваних форматів мають як мінімум два сегмента даних — один для read/write об'єктів і ще один для read-only. Якщо у вас є константные дані, такі, наприклад, як kBrotliDictionary, то їх буде логічно помістити в read-only сегмент, який є сегментом «2» в бінарники Chrome під Windows. Однак деякі константные дані, такі як unigram_table, device::UsbIds::vendors_ blink::serializedCharacterData були в секції «3», тобто read/write сегменті.

image

Читати далі →

Портування — справа тонка: перевірка Far Manager під Linux

Одним з популярних файлових менеджерів в середовищі Microsoft Windows, Far Manager, прийняв естафету у Norton Commander, створеної ще для DOS. Far Manager дозволяє полегшити роботу з файловою системою (створення, редагування, перегляд, копіювання, переміщення, пошук, видалення файлів), а також розширює стандартний функціонал (робота з мережею, архівами, резервними копіями тощо). Нещодавно була проведена робота по портированию Far Manager на Linux, і на поточний момент була випущена альфа-версія. Команда PVS-Studio не могла обійти стороною цю подію і вирішила перевірити якість адаптованого коду.
<img src=«habrastorage.org/getpro/habr/post_images/653/5ce/b44/6535ceb440001a72c4d871694d28f6c9.png» alt=«Picture » 24" />

Читати далі →

Чорна магія метапрограммирования: як працюють макроси в Rust 1.15

минулій статті ми познайомилися з однією з найцікавіших можливостей мови Rust — процедурними макросами.
Як і обіцяв, сьогодні я розповім про те, як писати такі макроси самостійно і в чому їх принципова відмінність від сумнозвісних макросів препроцесора C/C++.
Але спочатку пройдемося по релізу 1.15 і поговоримо про інші нововведення, оскільки для багатьох вони виявилися не менш затребувані.
Читати далі →

Інкрементальний аналіз в PVS-Studio: тепер і на складальному сервері


Введення
При впровадженні статичного аналізатора в існуючий процес розробки, команда може зіткнутися з певними труднощами. Наприклад, дуже корисно перевіряти змінений код перед тим, як він потрапить в систему контролю версій. Однак, виконання статичного аналізу в цьому випадку може вимагати досить тривалого часу, особливо на проектах з великою кодовою базою. У цій статті ми розглянемо режим інкрементального аналізу в статичному аналізаторі PVS-Studio, що дозволяє перевіряти тільки змінені файли, що значно скорочує час, необхідний для аналізу коду. Отже, розробники зможуть використовувати статичний аналіз так часто, як це необхідно, і мінімізувати ризики потрапляння код, що містить помилку, систему контролю версій. Приводом для написання статті стало, по-перше, бажання ще раз розповісти про такий корисної функції нашого аналізатора, а по-друге, той факт, що ми повністю переписали механізм інкрементального аналізу і додали підтримку цього режиму у версію нашого аналізатора для командного рядка.

Читати далі →

Процедурні макроси в Rust 1.15

Хлопці, здійснилося! Після довгих шести тижнів очікування нарешті вийшла версія Rust 1.15 з блекджек і процедурними макросами.
На мою нескромному думку, це самий значний реліз, після епічного 1.0. Серед безлічі смачних речей в цьому релізі були стабілізовані процедурні макроси, підривають мозок своєю могутністю, зручністю і безпекою.
А що ж це дає простим смертним? Практично безкоштовну [де]серіалізацію, зручний інтерфейс до БД, інтуїтивний веб фреймворк, виводяться конструктори і багато чого ще.
Так, якщо ви все ще не дісталися до цієї мови, то зараз саме час спробувати, тим більше, що тепер встановити компілятор і оточення стало можна одним рядком:
curl https://sh.rustup.rs -sSf | sh

Втім, про все по порядку.
Читати далі →

Засоби програмування PIC-контролерів

Введення
PIC-контролерів залишаються популярними в тих випадках, коли потрібно створити недорогу компактну систему з низьким енергоспоживанням, не предъявляющую високих вимог щодо її управління. Ці контролери дозволяють замінити апаратну логіку гнучкими програмними засобами, які взаємодіють із зовнішніми пристроями через хороші порти.

Мініатюрні PIC контролери гарні для побудови перетворювачів інтерфейсів послідовної передачі даних для реалізації функцій «прийом – обробка – передача даних» і нескладних регуляторів систем автоматичного управління.

Компанія Microchip поширює MPLAB — безкоштовну інтегровану середу редагування і відладки програм, яка записує двійкові файли у мікроконтролери PIC через програматори.

Взаємодія MPLAB і Matlab/Simulink дозволяє розробляти програми для PIC-контролерів в середовищі Simulink — графічного моделювання й аналізу динамічних систем. У цій роботі розглядаються засоби програмування PIC контролерів: MPLAB, Matlab/Simulink і програматор PIC-KIT3 в наступних розділах.

• Характеристики мініатюрного PIC контролера PIC12F629
• Інтегрована середовище розробки MPLAB IDE
• Підключення Matlab/Simulink до MPLAB
• Підключення програматора PIC-KIT3

Читати далі →

Як працювати з JIT

enter image description here
У деяких внутрішніх системах для швидкого пошуку за великим бітовому масиву ми в Badoo використовуємо JIT. Це дуже цікава і не найвідоміша тема. І, щоб виправити таку прикру ситуацію, я перевів корисну статтю Елая Бендерски про те, що таке JIT і як його використовувати.
Читати далі →