Pull to refresh
546
-5

Довожу здравый смысл до абсурда

Send message

Поговорим об оптимизирующих компиляторах. Сказ второй: Доминирование

Level of difficulty Medium
Reading time 10 min
Views 9K

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

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

Причаститься
Total votes 49: ↑49 and ↓0 +49
Comments 18

Пишем трассировщик лучей для ZX Spectrum

Level of difficulty Easy
Reading time 16 min
Views 20K

Я люблю трассировщики лучей и даже посвятил им половину своей книги. Менее известна моя любовь к ZX Spectrum — домашнему компьютеру 1982 года, с которым я вырос и с которого начался мой интерес к графике и программированию. По современным стандартам эта машина столь смехотворно слаба (и даже по стандартам 1980-х), поэтому возникает неизбежный вопрос: в какой степени удастся портировать трассировщик лучей из книги Computer Graphics from Scratch на ZX Spectrum?

В ZX Spectrum установлен процессор Z80 на 3,5 МГц (в тысячу раз медленнее, чем современные компьютеры), который не может умножать числа (!!!), и 48 КБ ОЗУ (в миллион раз меньше); он имеет графический режим 256x176 (примерно в двести раз меньше современного разрешения), способный отображать 15 цветов (в миллион раз меньше, к тому же с довольно необычными особенностями). Интересная машина для графического приложения, активно задействующего CPU!

Я планирую реализовать его на Sinclair BASIC — встроенном языке программирования Spectrum. Это не просто BASIC, а древний, очень ограниченный диалект BASIC. Например, единственные структуры управления в нём — это FOR и IF (а у IF нет ELSE и даже ENDIF); все переменные глобальны; не существует вызовов функций, только GO TO и GO SUB; и так далее. Кроме того, он интерпретируемый, то есть сверхмедленный. Но, по крайней мере, он реализует программное умножение! Если мне нужна будет производительность, то я всегда могу переписать трассировщик на ассемблере.

Я настроил минимально необходимую среду: код на BASIC я пишу в VS Code, компилирую его с помощью BAS2TAP и запускаю в эмуляторе FUSE. Благодаря этому скорость итераций оказалась достаточно высокой.

Читать далее
Total votes 142: ↑141 and ↓1 +140
Comments 85

Из пушек по воробьям. Генерация и решение лабиринта не самым обычным способом

Level of difficulty Medium
Reading time 19 min
Views 4.5K

На уходящей неделе мне попалась симпатичная, хоть и не новая мини‑серия статей на Дзен‑канале @zdgzdgzdg про процедурную генерацию лабиринта методом «коллапса волновой функции». Пока я читал эти статьи и знакомился с кодом, меня осенило: ведь это же вычисления в комонаде, погружённые в монаду! Я не издеваюсь, действительно, речь идёт о композиции двух паттернов функционального программирования: комонады Zipper, превращающей локальные правила в глобальное состояние, и монады Random, позволяющей генерировать случайные объекты.

И вот, в качестве баловства на выходных, я решил реализовать этот «квантовый» алгоритм генерации лабиринтов на Haskell, используя и комонады и монады, и вообще, ни в чëм себе не отказывая. И хотя язык программирования Haskell нужен не только для извращений, но именно для них он подходит идеально!

Читать далее
Total votes 38: ↑38 and ↓0 +38
Comments 7

Мой вам подарок к Новому году или как наконец запустил то, что надо было давно запустить…

Level of difficulty Medium
Reading time 6 min
Views 38K

КДПВ


Немножко истории


Начну с истории вопроса.


Очень давно я написал Fresh IDE – навороченнoe IDE для программирования на ассемблере, а точнее на FlatAssembler.


Fresh IDE долгие годы меня полностью устраивал, поэтому я с перерывами выпустил 2 главные версии и начал просто его использовать, время от времени внося какие-то исправления и изредка новые функции.


Когда перешел полностью на Linux, оказалось, что Fresh IDE прекрасно работает под WINE, и я продолжил им пользоваться без угрызений совести. В процессе даже удалось исправить несколько багов WINE (вот, вот и вот).


Как бы то ни было, но я начал писать библиотеку для переносимости ассемблерных программ между Linux и Windows (и KolibriOS). Одновременно с этим задумался и над тем, чтобы сделать Fresh IDE переносимым. Из-за архитектуры библиотеки, огромная часть кода уже и так была переносимой. А точнее все, что не касалось GUI. К сожалению, GUI был полностью написан на Win32 API и его нельзя просто так перенести на другие платформы.


Поэтому и пришлось начинать все сначала. И третья версия Fresh IDE писалась почти с нуля.

Читать дальше →
Total votes 267: ↑267 and ↓0 +267
Comments 95

Пишем компилятор C в 500 строках Python

Level of difficulty Medium
Reading time 20 min
Views 12K

Несколько месяцев назад, закончив пост об SDF-пончике, я поставил перед собой задачу написать компилятор C в 500 строках Python1. Насколько сложна эта задача? Оказалось, что довольно сложна, даже после отказа от достаточно большого количества возможностей. Но в то же время она была довольно интересной, а результат оказался на удивление функциональным и вполне простым для понимания!

Кода слишком много, чтобы подробно объяснять его в посте2, поэтому я просто вкратце расскажу о принятых мной решениях, об аспектах, которые пришлось вырезать, и об общей архитектуре компилятора, коснувшись самого главного в каждой из частей. Надеюсь, после прочтения поста код станет для вас доступнее!
Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Comments 6

Как работает усилитель звуковой частоты

Reading time 7 min
Views 225K

Введение


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

Усилитель звуковой частоты или усилитель низкой частоты, что бы разобраться как он всё таки работает и зачем там так много всяких транзисторов, резисторов и конденсаторов, нужно понять как работает каждый элемент и попробовать узнать как эти элементы устроены. Для того что бы собрать примитивный усилитель нам понадобятся три вида электронных элементов: резисторы, конденсаторы и конечно транзисторы.
Читать дальше →
Total votes 100: ↑94 and ↓6 +88
Comments 41

Каково это — быть операционной системой?

Level of difficulty Easy
Reading time 4 min
Views 16K

Pier-Luc Brault придумал забавную игру, которая превращает вас в... операционную систему. Некий пользователь загружает нас процессами, которые нужно распределять по свободным CPU. Если мы будем плохо справляться с задачей, пользователь выйдет из себя и перезагрузит нас. Game over.  

Читать далее
Total votes 46: ↑45 and ↓1 +44
Comments 8

Определение области коллизии

Level of difficulty Medium
Reading time 15 min
Views 6.6K

Поиск контактных точек коллизии

Одна из важных тем при разработке своего физического движка - нахождение контактных точек. Применение этим данным масса - от определения центра удара, до построения градиента приложенных сил.

Давайте же посмотрим как это сделать!

Поехали
Total votes 48: ↑48 and ↓0 +48
Comments 13

Можно ли сложить N чисел типа double наиболее точно?

Reading time 13 min
Views 27K

В предыдущих сериях…


Прошлая статья рассказала о двух способах сложения двух двоичных чисел с плавающей запятой без потери точности. Чтобы добиться этого, мы представили сумму c=a+b в виде двух чисел (s,t)=a+b, причём таких, что s — наиболее близкое к a+b точно-представимое число, а t=(a+b)-s — это отсекаемая в результате округления часть, составляющая точную погрешность. У читателей был вопрос: а можно ли достаточно точно сложить массив чисел типа double? Оказывается, можно! Но только, вероятно, не всегда и не абсолютно… и не алгоритмом Кэхэна, который тогда вспоминали в комментариях. За подробностями прошу под кат, где мы и найдём приложение тому, о чём я рассказал в прошлый раз.


Total votes 76: ↑76 and ↓0 +76
Comments 45

Действующий процессор на 13 микросхемах стандартной логики

Level of difficulty Medium
Reading time 7 min
Views 20K


Привет, Хабр! Для меня было просто невозможно пройти мимо этого схемотехнического чуда. Горстка деталей на небольшой двусторонней плате выполняет команды машинного языка и выводит результат в виде двоичного кода!

Действующая модель называется "TD4 CPU", является проектом с открытыми исходниками, реально работает и позволяет понять устройство и принцип работы процессора.
Читать дальше →
Total votes 111: ↑110 and ↓1 +109
Comments 53

Введение в балансировку роторов

Level of difficulty Easy
Reading time 16 min
Views 14K

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

*Цапфа (нем. Zapfen "цапфа, шейка, шип, втулка, стержень") — часть вала или оси, на которой находится опора (подшипник). Цапфа, находящаяся на краю вала, называется шип, в средней части вала — шейка. Концевая цапфа, воспринимающая осевые нагрузки, — пята.

Читать далее
Total votes 33: ↑33 and ↓0 +33
Comments 41

Идеи для тех, кто хочет собрать свои часы

Level of difficulty Medium
Reading time 8 min
Views 18K
Картинка twizz.ru

Каждый самодельщик рано или поздно приходит к тому, что ему вот прямо сейчас необходимо создать свои часы. Зачем, почему — никто не знает. Если вы пришли к такому же пониманию, «их есть у меня». А именно — собственный хит-парад самодельных часов, которые позволят как комплексно прокачать скиллы в сборке, программировании и т. д., так и украсят любой дом своим присутствием.

В этой статье умышленно будут обойдены вниманием известные проекты часов, изготовленные из радиоламп или вращающейся линейки светодиодов, установленной на диске вышедшего из строя старого HDD, так как мы постараемся остановиться на более неизвестных и эффектных экземплярах, и если известные проекты и будут затронуты, то совсем чуть-чуть :-)
Читать дальше →
Total votes 85: ↑79 and ↓6 +73
Comments 31

Использование GitHub в обучении студентов. Автоматизация проверок. Часть I

Reading time 3 min
Views 4.5K

В конце декабря 2020 года я написал несколько статей на Хабре по своему опыту использования GitHub в обучении студентов (ссылки на них будут в конце сей статьи).

Сегодня же хочу рассказать об автоматизации проверки кода студентов. Примеры будут про C#, т.к. это мой основной язык, на котором я преподаю программирование.

Для меня при обучении программированию важно, чтобы студенты умели не только правильно решать задания, но и красиво писать код. В обучении и проверки заданий я использую EditorConfig, dotnet cli и GitHub Actions. Но обо всём по порядку.

Читать далее
Total votes 9: ↑9 and ↓0 +9
Comments 0

Использование GitHub в обучении студентов. Автоматизация проверок. Часть II

Reading time 2 min
Views 4.4K

Это продолжение статьи про автоматизацию проверок работ студентов (первая часть).

Сегодня продолжу рассказывать про автоматизацию проверок работ студентов: проверку правильности решения (прохождение unit-тестов). И пока ещё примеры будут связаны с C#.

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

Читать далее
Total votes 11: ↑10 and ↓1 +9
Comments 2

Дизерпанк — статья о дизеринге изображений, которую мне хотелось бы прочитать

Reading time 18 min
Views 25K

Мне всегда нравилась визуальная эстетика дизеринга (dithering, псевдотонирование, псевдосмешение цветов), но я не знал о том, как он применяется. Поэтому я провёл кое-какие изыскания. Эта статья может содержать отголоски ностальгии, но в ней не будет никаких следов Лены.

Читать далее
Total votes 147: ↑147 and ↓0 +147
Comments 26

Как оформить серию коммитов Git, чтобы её приняли в любой проект

Reading time 8 min
Views 29K

Добрый день, коллеги! Доказывать, что нужно использовать систему контроля версий, уже давно не нужно. И Git занял тут лидирующую позицию, стремительно вытеснив SVN. Но это инструмент, а инструментом нужно уметь пользоваться, чтобы добиться лучших результатов. Как топором, один человек сможет просто срубить дерево а другой из этого дерева сможет сделать великолепную скульптуру. Так и с помощью Git, один человек сможет просто не потерять результаты своего труда за день, а другие смогут организовать совместную работу над проектом нескольких сотен человек. Да так, что о любой строчке кода можно будет и через пять лет сказать, откуда она взялась и для чего нужна.

Постараюсь рассказать для начинающих и не очень разработчиков, как оформлять свои коммиты, чтобы их максимально быстро и без претензий принимали в любые проекты, как опенсорсные так и коммерческие.

Читать далее
Total votes 59: ↑56 and ↓3 +53
Comments 30

Разбираем алгоритмы компьютерной графики. Часть 4 – Анимация «Салют»

Reading time 7 min
Views 8.4K

Еще немного в копилку красивых эффектов и алгоритмов.

Вы в своей жизни наверняка видели салют, когда в ночном небе взрывает огненный шар и от него во все стороны медленно разлетаются огни.

Давайте попробуем проанализировать то, что мы с вами видим с точки зрения физики и программирования.

Читать далее
Total votes 44: ↑43 and ↓1 +42
Comments 7

Примеры ассемблерного кода для ZX Spectrum

Reading time 6 min
Views 20K

Я не буду делать длинное вступление. Один знакомый хакер однажды сказал, что 10 строк кода могут быть понятнее и интереснее, чем 1000 слов объяснений. Все эти примеры написаны на ассемблере для архитектуры Z80 и запускаются на ретро-компьютере ZX Spectrum 48k.

Что внутри?
Total votes 48: ↑48 and ↓0 +48
Comments 29

CS50`s Introduction to Game Development с русскими субтитрами — Лекция 0. Pong

Reading time 1 min
Views 5.7K

Посмотрела все лекции гарвардского курса по разработке игр и так вдохновилась, что захотела перевести их на русский. Изначально хотела просто добавить субтитры к оригинальному видео, но, к сожалению, на Youtube эту функцию убрали, поэтому пришлось загружать заново.

Читать далее
Total votes 10: ↑10 and ↓0 +10
Comments 0

Information

Rating
Does not participate
Registered
Activity