Вычисление CRC32 от строки

Иногда для самых разных целей требуется вычислить контрольную сумму строки. Одним из алгоритмов её вычисления является Cyclic redundancy check (CRC) или Циклический избыточный код. CRC является практическим приложением помехоустойчивого кодирования, основанном на определённых математических свойствах циклического кода. Мы не будем останавливаться на математических подробностях, а просто напишем на D алгоритм CRC32. Читать далее →

Подробнее

Автоматическое добавление сеттеров и геттеров

Очень часто программисту необходимо добавить в класс сеттеры и/или геттеры. Иногда их бывает много, поэтому добавлять их вручную крайне лень! Поэтому, мы будем делать это автоматически с помощью «шаблонной магии». При этом, следует учесть, что поля класса/структуры должны быть строго типизированы, иначе ничего не получится, ну да это и к лучшему. Читать далее →

Подробнее

VBA и DLL на D

Для правильной работы проверьте путь до M2DLL.DLL в Declare VBA Excel!

Так получилось, что пришлось мне срочно заняться одной задачей на Excel. Проблема была в том, что нужно было выбирать информацию из большого текстового файла по определенным критериям и вставлять её в Excel. Сразу пришла мысль использовать VBA и при помощи него написать функцию, которая будет выдавать мне строку с информацией.

А почему бы не написать DLL, подумал я, ведь раньше я уже пытался писать DLL для VBA на C++. DLL это быстро, это интересно и позволяет отвлечься от каждодневной рутины. Но, так как я давно уже всё делаю на D, то и DLL решил писать на D. В качестве путеводителя по дебрям VBA я использовал замечательную книгу Брюса Мак-Кинни «Крепкий орешек 4 visual basic» 1996 года выпуска. Книга исключительно интересная и занимательная и ни сколько не потеряла своей актуальности. Читать далее →

Подробнее

«Мир проводов» в D

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

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

Подробнее

Добавление своей языковой конструкции в D

Существует ряд языков программирования (ЯП), синтаксис которых либо допускает введение конструкций, определяемых пользователем; либо разрешает переопределение (доопределение) существующих элементов языка. Такого рода языки делают программирование еще более приятным и интересным, позволяя реализовывать идеи из любого ЯП. Не знаю, как вам, а мне порой хочется иметь в своем любимом языке некоторые элементы, взятые из какого-то другого ЯП. Изучение других ЯП очень стимулирует, а к некоторым вещам просто возникает привычка, от которой никуда не денешься. Хотелось бы, чтобы у D была расширяемость синтаксиса, но, к сожалению, ее нет… Читать далее →

Подробнее

Слово о iota и enumerate

Может быть Вы помните о том, с чего наш блог начинался… Вначале был уникальный язык программирования под названием Icon, которым мы увлекались некоторое время назад. Он пленил нас своей простотой и продуманностью, а также своей сверхвысокоуровневостью и необычной концепцией генераторов. Чуть позже мы познакомились с D, который пошел гораздо дальше, воплотив в жизнь концепцию диапазонов.

Именно о некоторых интересных алгоритмах над диапазонами (в основном, над числовыми) сегодня и поговорим.

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

Подробнее

Автоматизация компиляции и запуска QtE5-приложений в Windows

Библиотека QtE5 очень удобная и нужная вещь, но иногда требуется добиться того, чтобы из некоторой среды разработки или какого-либо редактора можно было легко и быстро скомпилировать
QtE5-приложение. Дело обычно осложняется еще и тем, что после компиляции такого приложения, саму программу просто так не запустить требуется набор dll-файлов и картинок, которые распространяются вместе с QtE5. Естественно, сразу возникает вариант копирования всех нужных файлов QtE5 в какую-нибудь уединенную папку, однако, постоянное перемещение исполняемых файлов в нее может весьма быстро надоесть… Читать далее →

Подробнее

Простая консольная программа для ведения списка задач (todo)

В этой статье я расскажу о том, как однажды я написал небольшую консольную программку для ведения списка задач почти полностью в функциональном стиле (за исключением использования переменных и некоторых приемов из ООП). К сожалению, в статье помимо полезных практических приемов будут и некоторые отрицательные примеры, в частности, некоторое дублирование кода и нерациональное использование функций стандартной библиотеки. Также в этой скромной публикации я покажу с чего я начал функциональное проектирование программы (будет показан пример кода на одном из функциональных языков), нестандартное использование одного файла из состава библиотеки QtE5, одну интересную библиотеку для раскрашивания сообщений в командной строке, а также я сделаю небольшое резюме о полученном в ходе работы над этой программкой todo опыте. Читать далее →

Подробнее