Pull to refresh

Дональд Кнут: про ассемблер, транслятор и грамотное программирование

Reading time9 min
Views24K
"Literate programming (грамотное программирование) — отношение к компьютерным программам, как к литературе: компьютерная программа пишется не столько для компьютера, сколько для людей, чтобы люди могли ее прочитать. И поскольку я пишу программы, то я, в некотором роде, учитель."

image


«Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.»
Total votes 32: ↑29 and ↓3+26
Comments7

Эзотерический язык, транслирующийся в шаблоны C++

Reading time23 min
Views20K
КПДВ с примерами кода Шаблоны C++ — полный по Тьюрингу язык, на котором можно писать compile-time программы. Только вот синтаксис рассчитан на описание параметризованных типов и слабо приспособлен к ясному выражению чего-то более сложного. В этой статье рассмотрим, как типы и шаблоны становятся значениями и функциями, а также узнаем, к чему привела попытка автора создать свой функциональный язык, транслирующийся в шаблоны C++. Для прочтения текста знания в области функционального программирования почти не требуются.
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments10

Стековая машина на моноидах

Reading time32 min
Views15K

Не так давно на Хабре появилась отличная и вдохновляющая статья про компиляторы и стековые машины. В ней показывается путь от простой реализации исполнителя байт-кода ко всё более и более эффективным версиям. Мне захотелось показать на примере разработки стековой машины, как это можно сделать Haskell-way.


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


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

Читать дальше →
Total votes 49: ↑49 and ↓0+49
Comments28

Новый язык программирования Mash

Reading time6 min
Views48K
На протяжении нескольких лет я пробовал свои силы в разработке своего языка программирования. Мне хотелось создать на мой взгляд максимально простой, полнофункциональный и удобный язык.

В этой статье я хочу осветить основные этапы своей работы и для начала описать созданный концепт языка и его первую реализацию над которой сейчас работаю.
Читать дальше →
Total votes 86: ↑70 and ↓16+54
Comments201

Pyastra — транслятор кода на языке Python в ассемблер для архитектуры PIC

Reading time2 min
Views4.7K
Pyastra — это транслятор кода на языке Python в ассемблер. Он принимает исходный файл, написанный на Python и, если код не содержит ошибок, то генерирует ассемблерный файл, который вы можете скомпилировать в HEX-файл, используя ваш любимый PIC ассемблер (gpasm, mpasm или другие, совместимые с ними).
Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments10

JIT-компилятор Python в 300 строк

Reading time11 min
Views30K

Может ли студент второго курса написать JIT - компилятор Питона, конкурирующий по производительности с промышленным решением? С учётом того, что он это сделает за две недели за зачёт по программированию.

Как оказалось, может, но с нюансами.

Читать далее
Total votes 138: ↑137 and ↓1+136
Comments37

Техникум: Распознавание Вещественного Числа из Строчки

Level of difficultyEasy
Reading time9 min
Views4.2K

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

Потом часто надо анализировать текстовые логи с SD-карты. Надо выхватывать вещественные числа из CSV файлов для дальнейших расчетов.

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

В этом тексте я представил решение этой задачи.

Читать далее
Total votes 25: ↑18 and ↓7+11
Comments87

Трансляция графических HANA Calculation View в SQL, или как переехать так, чтобы ничего не поменялось

Level of difficultyHard
Reading time11 min
Views2.8K

Повинуясь всеобщей тенденции и следуя духу времени, мы в Норникеле переводим расчёты нашего хранилища на уровень БД. Так мы ускоряем обработку данных и формирование отчётности, да и система работает стабильнее.

Но пока мы оптимизируем и переносим "классический" код в базу, запрашиваемые заказчиком алгоритмы усложняются, а обрабатываемых данных становится больше. Чтобы склонить чашу весов на нашу сторону в этом извечном противостоянии мы решили применить новый метод!

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

Assembler для Brainfuck

Reading time3 min
Views22K
Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments12

Мост из мира .NET в мир JavaScript

Reading time5 min
Views6.8K
Хочу поделиться интересной находкой — Bridge.net. Если в двух словах, это фреймворк, позволяющий транслировать C# код в JavaScript. Идея, которая движет командой разработчиков очень проста и понятна — транслировать логику настолько идентично, насколько это возможно. Что радует, если вспомнить все различия и специфику этих языков.


Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments9

Ещё один способ использования python в браузере (и не только)

Reading time2 min
Views11K

Весной 2020 года я впервые попробовал себя в разработке сайтов бэкенд я писал на питоне а на фронте пришлось использовать js и он вызвал у меня отторжение(тут надо уточнить, что я не считаю js ужасным языком, просто он мне не понравился). Не долго думая я начал писать транслятор с питона в явускрипт(а если бы погуглил то нашел бы это https://brython.info/, https://www.transcrypt.org/). об этом трансляторе и пойдет речь.

Читать далее
Total votes 26: ↑15 and ↓11+4
Comments26

Как работают Android-приложения в Windows 11? Разбор

Reading time7 min
Views25K
Мы все очень ждали презентации Windows 11, но как-то нам ее подпортили. Незадолго до презентации слили рабочий билд и поэтому во время ивента ничего по-настоящему нового мы не увидели. Кроме одной вещи: Android-приложения на винде!

Вот это было действительно неожиданно. И мы даже успели немного порадоваться, но потом сразу возникли вопросы. А зачем это нужно и как это вообще будет работать?


Ведь не так давно Microsoft сильно облажались со своей Windows на архитектуре ARM, в которой очень плохо работали x86-приложения. А если у них ничего не получилось тогда, то по какой причине получится сделать фактически тоже самое сейчас, но только наоборот?

Разбираясь в этих вопросах мы буквально прозрели. И поняли, что на самом деле у Microsoft очень далеко идущие планы.
Читать дальше →
Total votes 25: ↑17 and ↓8+9
Comments25