Как стать автором
Поиск
Написать публикацию
Обновить
14
-0.4

Инженегр АСУТП

Отправить сообщение

Собственный софт-процессор на ПЛИС с компилятором языка высокого уровня или Песнь о МышЕ

Время на прочтение17 мин
Количество просмотров9.2K
Собственный софт-процессор на ПЛИС с компилятором языка высокого уровня или Песнь о МышЕ — опыт адаптации компилятора языка высокого уровня к стековому процессорному ядру.

Распространенной проблемой для софт-процессоров является отсутствие средств разработки для них, особенно, если их система команд не является подмножеством команд одного их популярных процессорных ядер. Разработчики в этом случае вынуждены будут решать эту проблему. Прямым её решением является создание компилятора языка ассемблера. Однако в современных реалиях не всегда удобно работать на Ассемблере, так как в процессе развития проекта может изменяться система команд в связи, например, с изменившимися требованиями. Поэтому задача легкой реализации компилятора языка высокого уровня (ЯВУ) для софт-процессора является актуальной.

Компилятор языка Python — Uzh представляется легким и удобным инструментарием для разработки программного обеспечения для софт-процессоров. Инструментарий определения примитивов и макросов как функций целевого языка позволяет критичные места реализовывать на ассемблере процессора. В данной работе рассмотрены основные моменты адаптации компилятора для процессоров стековой архитектуры.
Читать дальше →

Разработка веб-сайта на паскале (backend)

Время на прочтение7 мин
Количество просмотров39K
В этой статье я расскажу о том, зачем, почему и как я начал делать сайты на паскале: Delphi / FPC.
Вероятно, «сайт на паскале» ассоццируется с чем-то вроде:

writeln('Content-type: text/html');

Но нет, всё гораздо интереснее! Впрочем, исходный код реального сайта (почти весь) доступен на GitHub.
Читать дальше →

Самописный таймер в виде функции для промышленного контроллера Simatic S7-1200

Время на прочтение9 мин
Количество просмотров17K
Еще для серии S7-300 и S7-400 под Step 7 классических версий предлагаемых разработчику таймеров вполне хватало — это и стандартные таймеры IEC, реализованные в виде функциональных блоков, и таймеры S5 (которые, к слову, до сих пор существуют для серии S7-1500). Однако в ряде случаев разработчик не применял стандартные инструменты и реализовывал собственные таймеры, чаще всего — в виде функций. Такие таймеры-функции необходимы были при «айтишном» подходе к программированию, в котором оперировали не отдельными экземплярами функциональных блоков технологического оборудования, с соответствующей обвязкой входов и выходов, а массивами структур. Например — массив структуры типа «дискретный вход». Или массив структуры «агрегат». Такой подход к программированию имеет право на существование, поскольку позволяет серьезно экономить рабочую память CPU, но, с другой стороны, делает программный код трудночитаемым. Стороннему программисту и с простым видом программы на LAD разобраться получается далеко не сразу, а про кучи индексов, массивов и функций их обработки — и речи не идет, тут без документации к ППО (и без поллитры, разумеется) вообще никуда.
Читать дальше →

Домашний кинотеатр на Raspberry

Время на прочтение6 мин
Количество просмотров125K
Так случилось, что решил я упростить себе вопрос он-лайн просмотра фильмов, вариант стандартного смарт ТВ меня не устраивал, а постоянно торчащий кабель HDMI для подключения к ноутбуку раздражал. Решение моей проблемы я увидел в приобретении Raspberry Pi 4, который можно аккуратно спрятать за корпусом телевизора.
Читать дальше →

Методы оптимизации LINQ-запросов в C#.NET

Время на прочтение10 мин
Количество просмотров23K

Введение


В этой статье рассматривались некоторые методы оптимизации LINQ-запросов.
Здесь же приведем еще некоторые подходы по оптимизации кода, связанные с LINQ-запросами.
Читать дальше →

Почему на Raspberry Pi4 стоит поставить 64-битную ОС

Время на прочтение4 мин
Количество просмотров58K
image

Одно из преимуществ работы на компанию, занимающуюся производством программ, заключается в том, что вам часто представляется возможность протестировать прототипы нового железа. Однако не в данном случае – я купил себе Raspberry Pi4 потому, что она очень дешёвая!

На Raspberry Pi4 стоит четырёхъядерный ARM Cortex A72, до 4 ГБ памяти и гигабитный порт Ethernet – и всё это всего за $35.

На Raspberry Pi4 есть ОС Raspbian (на основе Debian), и готовая библиотека продуктов, поэтому я вставил в неё SD-карточку, чтобы побыстрее загрузиться. Я искал syslog и заметил, что и ядро, и все пользовательские программы скомпилированы как armv7 – то есть, для 32-битной памяти.

Я знаю, что Raspberry Pi4 поддерживает 64 бита, поэтому я не захотел запускать на ней 32-битную ОС. Я взял другую карту памяти и поставил на неё Debian. Debian, не содержащий ничего лишнего, скомпилированный как aarch64 – что означает 64-битную память.
Читать дальше →

Задумчивая Авалония

Время на прочтение4 мин
Количество просмотров8.1K
В AvaloniaUI, как и в любом другом качественном инструменте куча возможностей. Но к сожалению, в отличие от веба для нее не сделали (пока что) в большом количестве различные анимации загрузок и прочих специфических штук.
В данной статье я хочу еще немного познакомить вас со стилизацией Авалонии, с ее анимациями и показать на примере, как можно сделать простенькое окно загрузки.

Читать дальше →

Как собрать нативную библиотеку для Android

Время на прочтение10 мин
Количество просмотров9.1K

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


image

Читать дальше →

Вывод информации об исключениях перед аварийным выходом

Время на прочтение5 мин
Количество просмотров4.1K

Зачем и для чего


Во время разработки не всегда всё бывает гладко. Бывают проблемы, которые не всплывают на тестах, а уже после релиза. Для таких случаев мы сделали небольшую систему отлова исключений и внутренних ошибок.

Читать дальше →

Про утечку памяти в одном серверном приложении

Время на прочтение14 мин
Количество просмотров18K


Прочитав данную заметку вы узнаете, через что пришлось пройти после неожиданно возникшей утечки памяти серверного приложения в ОС FreeBSD. Какие современные средства обнаружения подобных проблем существуют в данной среде и почему самое мощное из них может оказаться совершенно бесполезным в кривых руках.
Читать дальше →

Topleaked: инструмент ловли утечек памяти

Время на прочтение8 мин
Количество просмотров7.4K
image

История, как это часто бывает, началась с того, что упал один из сервисов на сервере. Точнее процесс был убит мониторингом за превышение использования памяти. Запас должен был быть многократным, а значит у нас утечка памяти.
Есть полный дамп памяти с отладочной информацией, есть логи, но воспроизвести не получается. То ли утечка безумно медленная, то ли сценарий зависит от погоды на Марсе. Словом, очередной баг, который не воспроизводится тестами, но встречается в дикой природе. Остаётся единственная реальная зацепка — дамп памяти.

Читать дальше →

Почему Rust лидирует в TechEmpower Framework Benchmark

Время на прочтение11 мин
Количество просмотров29K

Вообще-то смотреть какого цвета потроха у Rust я не собирался. Ковырнул хобби-проект на Go, пошел на GitHub посмотреть состояние fasthttp: развивается ли? Ну хотя бы поддерживается? Вспрокрастинулось. Пошел, посмотрел где fasthttp сидит в бенчмарках TechEmpower. Смотрю: а там fasthttp едва показывает половину того, что удаётся лидеру — какому-то actix на каком-то Rust. Какая боль.


Здесь бы мне сложить ручки, стукнуть головой в пол (трижды) и закричать: "Алилуйя, воистину Rust — истинный бог, как слеп я был раньше!". Но то ли ручки не сложились, то ли лоб пожалел… Вместо этого полез в код тестов, написанных на Go и actix-web тестов на Rust. Чтобы разобраться.


Через пару часов узнал:


  1. почему Rust-фреймворк actix-web занимает первые позиции во всех тестах TechEmpower,
  2. как в Java заводится Script.

Сейчас всё расскажу по порядку.

Читать дальше →

WPF DataGrid. Борьба за Template

Время на прочтение4 мин
Количество просмотров20K
Всем привет!

Надеюсь, своей статьей я внесу ясность в вопросе связки XML представления DataGrid с его кодовым собратом. Для этого лучше всего использовать конкретный пример.
Читать дальше →

Запускаем игру на C# в MS-DOS

Время на прочтение2 мин
Количество просмотров14K
Меня всегда раздражало, что я не могу запустить 64-битную игру на C# под MS-DOS. Сегодня я это исправил.


Автоматная модель управления программ

Время на прочтение9 мин
Количество просмотров5.6K

1. Введение


В [1] был дан ответ на вопрос, что считать автоматным программированием (АП), но не была подробно описана модель конечного автомата (КА) в качестве модели управления автоматных программ. При этом понятно, что чистый абстрактный автомат на эту роль не годится, т.к. ограничен числом каналов. Но и структурная модель автомата, как и соответствующая ей теория структурных автоматов, не позволяют пока дать ответ по выбору модели автомата.

Проблема начинается с того, что среди множества работ по теории конечных автоматов (ТКА) мало дающих определение модели структурного конечного автомата (СКА). Правда, можно понять, что структурный автомат — это [структурная] схема из элементарных автоматов (функциональных элементов), реализующая модель абстрактного автомата [2]. Напомним, что в соответствии с теорией все начинается с создания модели устройства в форме абстрактного автомата, а затем ставится задача синтеза цифровой схемы, которая его реализует [3].

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

Правда, тут же закономерен вопрос — зачем еще один и довольно необычный «автоматный инструментарий»? На этот вопрос мы и попробуем ответить, дав определение модели [вложенного] автоматного управления, рассмотрев также ее преимущества по сравнению с обычной моделью программирования.
Читать дальше →

Чем программирование сегодня отличается от программирования 20 лет назад?

Время на прочтение4 мин
Количество просмотров87K


Я увидел этот вопрос на Quora и начал писать ответ. Но ответ получился слишком большим, так что я превратил его в эту статью.


Вот часть изменений в случайном порядке, которые я заметил в программировании за последние 20 лет:


  • Многие концепции, которые были лишь теоретическими 20 лет назад, сегодня широко применяются на практике. Например, такие функциональные парадигмы как неизменяемость объектов, хвостовая рекурсия, ленивые коллекции, сопоставление с шаблоном, функции первого класса и взгляд свысока на тех, кто всё это не использует.
  • «Десктопным приложением» многие неиронично называют упакованный браузер со страницей по умолчанию и без адресной строки.
Читать дальше →

Замеряем производительность с помощью BenchmarkDotNet

Время на прочтение6 мин
Количество просмотров37K
imageДобрый день. Неделю назад я в третий раз применил библиотеку для создания\запуска .NET бенчмарков BenchmarkDotNet. Библиотека оказалась достаточно удобной, но практически не освещенной на хабре, что я сейчас и исправлю.

Под бенчмарком я подразумеваю измерение времени выполнения метода(ов). Для начала представим процесс написания бенчмарка руками. Создаем тестируемый метод, выбираем Release билд, создаем «замеряющий» метод, в нем собираем мусор, ставим StopWatch в начале и в конце, запускаем прогрев, запускаем тестируемый метод. Если тестируемый метод выполняется быстрее одного «тика» StopWatch, запускаем тестируемый метод много раз (пусть будет миллион), делим суммарное время на миллион, получаем результат (при этом нужно не забыть вычесть из суммарного времени время «холостого» прогона цикла на миллион операций).

А ведь это еще не все!

ChaiScript — скриптовый язык для C++

Время на прочтение21 мин
Количество просмотров15K
Когда возникает потребность внедрить скриптовый язык в проект на C++, первым делом большинство людей вспоминает Lua. В этой статье его не будет, я расскажу о другом, не менее удобном и легком в освоении языке под названием ChaiScript.

image
Читать дальше →

Создание упаковщика x86_64 ELF файлов под linux

Время на прочтение13 мин
Количество просмотров6.5K

Введение


В данном посте будет описано создание простого упаковщика исполняемых файлов под linux x86_64. Предполагается, что читатель знаком с языком программирования си, языком ассемблера для архитектуры x86_64 и с устройством ELF файлов. В целях обеспечения ясности из приведённого в статье кода была убрана обработка ошибок и не были показаны реализации некоторых функций, с полным кодом можно ознакомится перейдя по ссылкам на github (загрузчик, упаковщик).

Идея состоит в следующем — мы передаём упаковщику ELF файл, на выходе получаем новый со следующей структурой:
ELF заголовок
Заголовок программы
Сегмент с кодом Загрузчик упакованных ELF файлов
Упакованный ELF файл
256 байт случайных данных
Читать дальше →

Перенос Quake 3 на Rust

Время на прочтение9 мин
Количество просмотров40K

Наша команда Immunant любит Rust и активно работает над C2Rust — фреймворком миграции, берущим на себя всю рутину миграции на Rust. Мы стремимся автоматически вносить в преобразованный код на Rust улучшения безопасности и помогать программисту делать это самому, когда не справляется фреймворк. Однако в первую очередь нам нужно создать надёжный транслятор, позволяющий пользователям приступить к работе с Rust. Тестирование на мелких CLI-программах потихоньку устаревает, поэтому мы решили перенести на Rust игру Quake 3. Спустя пару дней мы, скорее всего, стали первыми, кому удалось сыграть в Quake3 на Rust!

Подготовка: исходники Quake 3


Изучив исходный код оригинального Quake 3 и различных форков, мы остановились на ioquake3. Это созданный сообществом форк Quake 3, который до сих пор поддерживается и собирается на современных платформах.

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность