Во всем мире активно применяется текстовый формат CSV (Comma Separated Value – значения, разделенные запятыми) и многие программы умеют работать с этим форматом. Да, формат прост, легко читается человеком и без проблем парсится, но что если, за такую простоту и наличие библиотек во всех языках программирования, мы получаем кучу различных проблем, а иногда и багов? Что если нужен такой же формат табличных данных, но данные должны быть в бинарном виде?
Читать далееРубрика: Программирование
Предотвращение запуска более одного экземпляра приложения
В некоторых ситуациях возникает необходимость предотвратить запуск более одного экземпляра приложения. Это может быть полезно для защиты от нежелательного поведения, конкуренции за ресурсы, нарушения логики работы и других подобных проблем. Для решения этой задачи можно использовать системные API Windows или POSIX.
Читать далееРеализация PolymurHash на D
В этой статье мы представим свою попытку реализации интересного алгоритма хэширования PolymurHash. Этот алгоритм представляет собой хэш-функцию с очень низкой вероятностью коллизии, а из-за малого размера хэша и некоторых ухищрений создателей такая функция подойдет для реализации хэш-таблиц.
Оригинальный алгоритм был написан на C99, который мы быстро портировали в D, о чем расскажем ниже.
Читать далееПарсим дыхательные формулы
В прошлой статье мы рассказали про придуманную нами систему обозначений для дыхательных “движений” и в ней мы показали интересную систему, которая не связана с программированием и D. На самом деле – эта система изначально задумывалась и как средство написания “программ для мозга” (с некоторыми доработками, если захотите, то расскажем подробнее отдельно), и как набор символов, который можно быстро разобрать с помощью тривиального скрипта.
И о том, как сделать разбор без библиотек, кроме стандартной и пойдет речь далее…
Читать далееТип Option в D
Иногда, находишь нечто довольно удобное, даже в том, что тебе кардинально не нравится. Так было и со мной, поскольку работая над некоторым проектом, я осознал, что мне нужно нечто такое чего нет в D, но встроено в Rust. Он мне по некоторым причинам не нравится, в частности, тем что из-за его прихода был уничтожен проект на D, но тем не менее в Rust есть здравые идеи.
Одной из такой идей, был тип, который позволяет в зависимости от ситуации или хранить некоторое значение, или показывать отсутствие этого значения. Называются такие типы обычно или Maybe, или в случае Rust, Option. Данные типы позволяют преодолеть некоторые концептуальные проблемы и могут в целом сделать код чище.
В этой статье мы реализуем свой вариант типа Option и я немного расскажу о том, чем это может быть полезно вам.
Читать далееПерцептивный хэш в ppmformats
В этой статье мы рассмотрим, как можно реализовать алгоритм перцептивного хэширования на языке программирования D, используя библиотеку ppmformats для работы с PPM изображениями. Также мы покажем каждый шаг алгоритма и объясним, как он работает и как можно использовать этот вид хэширования на практике.
Читать далееПростой пример использования inline assembler в D
Сегодня мы попробуем применить один из интересных инструментов, встроенных в D, а именно про встроенный (или как еще его называют inline) ассемблер. Поскольку D – системный язык программирования, то его создали встроили в него ассемблер для осуществления прямого взаимодействия с системой и оборудованием. Более того, ассемблер является частью спецификации самого D, что не может не радовать.
Читать далееПишем утилиту xd. Часть II
В первой части мы рассмотрели работу базового алгоритма xd и даже сделали большую часть ее реализации, но не сделали обработку аргументов утилиты и некоторый другой функционал. В этой части мы восполним пробелы и завершим создание утилиты, добавив ряд функций и некоторых улучшений.
Читать далееВзаимодействие между процессами: именованные каналы
Взаимодействие между процессами – ключевая часть многих современных приложений. Один из способов реализовать это взаимодействие – использование именованных каналов. В Windows именованные каналы представляют собой специализированный механизм IPC (Inter-Process Communication), который могут быть использованы для асинхронного или синхронного обмена данными между сервером и клиентами. В POSIX-совместимых системах аналогичная функциональность достигается через такие механизмы, как FIFO (first-in, first-out) файлы, которые предоставляют однонаправленный канал для передачи данных.
Читать далееИспользование утилиты redo со скриптами на D
Мы уже рассказывали про простую утилиту для сборки ваших проектов под названием redo. Также мы делали несколько версий данной утилиты – одна из которых написана на чистом D, а вторая – на BetterC. В этой статье покажем, как можно применять утилиту redo и писать для нее скрипты на D.
Данная статья предназначена для пользователей Linux, работа в Windows и WSL не гарантируется!
Читать далее