Системне програмування – Низькорівневе програмування
Низькорівневе програмування
Все підряд
Запис під час читання в postgresql: скандали, інтриги, розслідування

При постійній роботі зі статистикою на запити постгресу ми почали помічати деякі аномалії. Я поліз розбиратися, заодно вкотре захопився зрозумілістю вихідного коду постгресу.
Під катом невелика розповідь про неочевидну поведінку postgresql.
Випуск Rust 1.16
Команда Rust рада подати випуск Rust 1.16.0. Rust - це системна мова програмування, націлена на безпеку, швидкість і паралельне виконання коду.
Якщо у вас встановлена попередня версія Rust, для оновлення достатньо виконати:
Якщо у вас ще не встановлено Rust, то ви можете встановити rustup c відповідної сторінки нашого веб-сайту та ознайомитися з детальною приміткою до випуску 1.16.0 на GitHub.
Що увійшло до стабільної версії 1.16.0
Найбільшим доповненням у Rust 1.16 є команда cargo check. Ця нова підкоманда здебільшого має прискорити процес розробки.
Що вона робить? Повернімося трохи назад і поговоримо про те, як rustc компілює ваш код. Компіляція відбувається у кілька "проходів". Це означає, що компілятор виконує безліч різних етапів, перш ніж з вихідного коду буде створено бінарний файл. Ви можете побачити кожен з цих етапів (і скільки часу і пам'яті вони займають) передавши компілятор параметр -Z time-passes (тільки для nightly):
Винятки у Windows x64. Як це працює. Частина 3
Спираючись наматеріал, описаний у першій та другій частинах цієї статті, ми продовжимо обговорення теми обробки винятків у Windows x64.
Описуваний матеріал вимагає знання базових понять, таких, як пролог, епілог, кадр функції та розуміння базових процесів, таких, як дії прологу та епілогу, передача параметрів функції та повернення результату функції. Якщо читач не знайомий з переліченим вище, перед прочитанням рекомендується ознайомитися з матеріалом з першої частини цієї статті. Також, якщо читач не знайомий зі структурами PE образу, які задіяні у процесі обробки виключення, тоді перед прочитанням також рекомендується ознайомитися з матеріалом з другої частини цієї статті.
Position-independent code (PIC) у бібліотеках, що розділяються.

Вітання. Мене звуть Марко, і я системний програміст у Badoo. Я дуже люблю досконально розбиратися в тому, як працюють ті чи інші речі, і тонкощі роботи бібліотек, що розділяються, в Linux не виняток. Я уявляю вам переклад саме такого розбору. Приємного читання.
Рекомендуємо

Як легко заощадити на покупці потужних VPS на SSD

Міграція та Disaster Recovery, знаємо навіщо це потрібно і як це працює в #CloudМТS

Скромний стартап у великій корпорації: як створювали Тінькофф Інвестиції
Астерік і не тільки. Віртуальні файлові системи Крок назад чи два вперед?
Описуючи участь у проекті з модернізації VoIP оператора зв'язку Частина 1 та Частина 2, одним із завдань, що випало з поля зору, було створення уніфікованого інструменту для візуалізації та моніторингу роботи сервера Asterisk. По суті, після виходу з цього проекту, нав'язлива ідея привести відображення інформації Asterisk до більшзручному виду вилилася в проект створення прототипу уніфікованої віртуальної файлової системи, що поєднує можливості всіх розрізнених інструментів, доступних в Asterisk.
Думаю, що багато адміністраторів, які мали справу з Asterisk, часто дивувалися тій кількості різних команд, за допомогою яких з Asterisk можна отримувати дані. Йтиметься про облікові записи для абонентських пристроїв, користувачів для автентифікації, канали, а також про нестандартне застосування віртуальних файлових систем.
Ставимо мережі - ловимо роботів

Винятки у Windows x64. Як це працює. Частина 2
Експеримент: шукаємо int i = 0xDEADBEEF у дампі фізичної пам'яті

MIPSfpga та внутрішньосхемне налагодження
Документи, ПЗ та конфігураційні файли, що постачаються у складі пакету MIPSfpga, передбачають застосування Bus Bluster як апаратного налагоджувача. Стаття містить інструкції з використання цієї мети практично будь-якого USB-UART адаптера, побудованого на мікросхемі FTDI з підтримкою MPSSE (FT232H, FT2232H, FT4232H, FT2232D). Коротко описується інтеграція середовища розробки Visual Studio Code та GNU GDB.
Усі конфігураційні файли, що описуються у статті, а також частина документації доступні на github.
Елементи системи

Там додамо const, звідси видалимо const…
- Блог компанії Інфопульс Україна,
- C++,
- Visual Studio,
- Компілятори,
- Системне програмування
- Переклад
- Tutorial
Я тільки-но закінчив серію змін у коді браузера Chrome, яка зменшила розмір його бінарника під Windows приблизно на 1 мегабайт, перенесла близько 500 КB з read/write сегмента в read-only, а такожзменшила споживання оперативної пам'яті загалом приблизно на 200 KB за кожен процес Chrome. Дивне полягає в тому, що ця серія змін складалася виключно з видалення і додавання ключового слова const в деяких місцях коду. Так, компілятори дивні.
Ця задача виникла, коли я писав документацію для деяких утиліт, які я використовую для дослідження регресій коду, пов'язаних із збільшенням розміру скомпілованих бінарників під Windows. Я запустив утиліту, скопіював у документацію її висновок і почав його описувати, коли помітив щось дивне: кілька великих глобальних об'єктів, які згідно з архітектурою мали бути константними, чомусь знаходилися в сегменті read/write даних. Скорочена версія цього висновку утиліти показана нижче:
Більшість форматів, що виконуються, мають як мінімум два сегменти даних — один для read/write об'єктів і ще один для read-only. Якщо у вас є константні дані, такі, наприклад, як kBrotliDictionary, їх буде логічно помістити в read-only сегмент, який є сегментом «2» в бінарнику Chrome під Windows. Однак деякі константні дані, такі якunigram_table,device::UsbIds::vendors_таblink::serializedCharacterDataбули в секції «3», тобто в read /write сегменті.