Ссылки

Проектирование, дизайн систем

Простыми словами про Brewer’s CAP Theorem. «В распределённой системе невозможно обеспечить одновременное выполнение всех трёх условий: корректности, доступности, устойчивости к сбоям узлов.»

«Null-terminated строки - самая большая ошибка в истории программирования»

Пишите код, который легко удалять, а не дополнять (оригинал на английском)

Версионирование

Semantic Versioning

Semantic Versioning vs. Romantic Versioning

On Versioning

На грани юмора и правды жизни

Devil’s Dictionary of Programming

Алгоритмы

Hash Table Denial of Service Attacks, Revisited. См также: SipHash by Daniel J. Bernstein.

Красно-чёрные деревья, предельно понятно

Обзор сбалансированных деревьев

Рандомизированные деревья поиска

2-3 heap

Lock-free массив для случая “один поток добавляет/удаляет, N потоков читают”

Фильтр Блума

Алгоритм Кнута-Морриса-Пратта

Branchfree Saturating Arithmetic

Программирование на ассемблере (FASM)

flat assembler by Tomasz Grysztar

rwasa — http-сервер на FASM. «rwasa is our full-featured, high performance, scalable web server designed to compete with the likes of nginx. It has been built from the ground-up with no externel library dependencies entirely in x86_64 assembly language, and is the result of many years’ experience with high volume web environments.» GPLv3+.

MiniMagAsm — CMS на FASM. The Fresh Artistic License.

AsmBB — форумный движок на FASM. Задействует musl и SQLite. EUPL. Статьи на Хабре: [1], [2].

Fresh IDE — IDE на FASM для FASM. EUPL.

Языки программирования: Си

Primula C Compiler — русские разработчики делают операционную систему на ядре L4, компилятор Си и собственный CPU.

Portable C Compiler — я пробовал разобраться в исходниках, рассчитывал выдернуть оттуда фронт-энд и использовать для анализа и трансформаций кода. Увы, там не исходники, а лапша в худших «хакерских» традициях.

LADSoft CC386 Compiler

LADSoft OrangeC Compiler (Github)

UPS Debugger (C Interpreter) — This is actually a graphical source level debugger for X Window, but it contains a built in C interpreter.

The BD Software C Compiler (BDS C) — исторический компилятор под CP/M, public domain.

OpenWatcom

OpenWatcom v2 fork

Open64 — компилятор для Itanium-а и x86-64.

DeSmet C — старый (под DOS) open source-ный компилятор.

CParser/libFirm — Firm is a C-library that provides a graph-based intermediate representation, optimizations, and assembly code generation suitable for use in compilers. CParser: GCC-compatible C frontend with full C99 support.

neatcc — neatcc implements a large subset of ansi C but lacks features like floating point types, non-integer parameters and struct bitfields.

nwcc — nwcc is a simple C compiler for Unix systems targeting a variety of architectures. Full source code is freely available under the (revised) BSD license.

rcor C compiler

ucc

SmallerC — Smaller C is a simple and small single-pass C compiler, currently supporting most of the C language common between C89/ANSI C and C99 (minus some C89 and plus some C99 features). Currently it generates 16-bit and 32-bit 80386+ assembly code for NASM that can then be assembled and linked into DOS, Windows and Linux programs.

SubC — SubC is a fast and simple public domain compiler for a clean subset of the C programming language.

Еще интересного у автора SubC:

TCC - Tiny C Compiler (Старая домашняя страница — bellard.org/tcc/)

SDCC - Small Device C Compiler — SDCC is a retargettable, optimizing ANSI - C compiler suite that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, etc.), Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8.

Fail-Safe C — Fail-Safe C is a memory-safe implementation of the full ANSI C language. More precisely, it detects and disallows all unsafe operations, yet conforming to the full ANSI C standard (including casts and unions) and even supporting many “dirty tricks” common in many existing programs which do not strictly conform to the standard.

Cyclone — Си-подобный язык, благодаря суровой системе типов ловящий множество классов ошибок во время компиляции.

Cilk — Си-подобный язык, предназначенный для паралелльного многопоточного программирования.

Языки программирования: Tcl

Jim is an opensource small-footprint implementation of the Tcl programming language. Увы, но классическая реализация Tcl — типичный пример bloatware. Jim решает эту проблему.

Lil — встраиваемый Tcl-подобный язык. (Примечание: ссылка долхая. У меня где-то была копия репозитория. Найти бы…)

partcl:

~600 lines of "pedantic" C99 code
No external dependencies
Good test coverage
Can be extended with custom Tcl commands
Runs well on bare metal embedded MCUs (~10k of flash is required)
MIT License

Языки программирования: Скриптовые мини-языки (в основном, встраиваемые)

Duktape — компактный встраиваемый движок JavaScript. “Код Duktape занимает около 200 Кб и потребляет всего 46kB ОЗУ, а в режиме низкого потребления памяти 22kB ОЗУ. Подобная особенность позволяет использовать Duktape на встраиваемых системах, укомплектованных 256kB Flash и 96kB ОЗУ.”

Lua — начиная с версии 5.3 Lua поддерживает 64-разрядную целочисленную арифметику и зачатки UTF8.

LuaJIT — а LuaJIT по-прежнему поддерживает лишь 5.1, зато исполняет код с фантастической скоростью.

wren — Language with a bytecode compiler that can run on computers with only a few kB of RAM. (by darius)

tusl — A scripting language for extending C programs; recognizably Forth-like, but definitely not Forth. (by darius)

req — a programmable calculator using rewrite rules. (by darius)

NSP is the complete object-based scripting language written in just a few thousand lines of ANSI C. It’s portable, thread-safe, flexible, embeddable, expandable and easy to understand (as a language and as an API).

aime is a simple, C like programming language and an application embeddable interpreter.

execline is a (non-interactive) scripting language, like sh ; but its syntax is quite different from a traditional shell syntax.

Языки программирования: Прочее (экспериментальные, перспективные и т.п.)

occ is a small programming language with a clear and concise syntax that compiles to C99.

Seed7. Очень интересный проект. Собственные конструкции языка описаны с использованием его же собственного подмножества типов. Фактически, 90% того, что принято считать «языком», здесь представляет собой стандартную библиотеку, завёрнутую в синтаксических сахар благодаря расширяемому синтаксису. Подход правильный, как мне представляется. На мой взгляд, транслятор идеального статически типизированного языка должен сводиться к интерпретатору языка типов, а компиляция целевой программы — к выполнению вывода типов над исходным кодом.

Zig is a system programming language which prioritizes optimality, safety, and readability.

Terra is a low-level system programming language that is embedded in and meta-programmed by the Lua programming language.

Felix — An advanced high performance statically typed scripting language.

Io — Гомоиконность, ООП на прототипах, ВСЁ в программе является посылкой сообщения (в т.ч. встроенные примитивы).

Ioke — основан на идеях Io. Проект не развивается.

Red s a next-gen programming language, strongly inspired by REBOL. Main features are:

Homoiconic (Red is its own meta-language and own data-format)
Functional, imperative, reactive and symbolic programming
Prototype-based object support
Gradual and multi-typing
Macros system
Rich set of built-in datatypes (50+)
Both statically and JIT-compiled to native code
Cross-compilation done right.
Produces executables of less than 1MB, with no dependencies.
Concurrency and parallelism strong support (actors, parallel collections)
Low-level system programming abilities through the built-in Red/System DSL
Powerful PEG parser DSL
Cross-platform native GUI system, with a UI DSL and drawing DSL.
Bridging to the JVM
High-level scripting and REPL console included
Highly embeddable
Low memory footprint, garbage collected
Single-file (~1MB) contains whole toolchain, standard library and REPL.
No install, no setup
Fun guaranteed. ;-)

Разработка юзерспейса Linux со товарищи

heirloom.sourceforge.net

www.landley.net/toybox/

tools.suckless.org/sbase

tools.suckless.org/ubase

www.fefe.de/embutils/

github.com/darius/ung

vdev — «Представлен новый проект vdev (virtual device filesystem), нацеленный на разработку менеджера файлов-устройств, выступающего в роли кросс-платформенной и не зависящей от систем инициализации альтернативы udev и devfs. Работа vdev изначально тестируется не только в Linux, но и во FreeBSD и OpenBSD.»

Инит и/или супервизор

cinit

runit

s6

qinit

epoch

without-systemd.org

Unix Shell

Filenames and Pathnames in Shell: How to do it Correctly

POSIX shell tricks

Библиотеки алгоритмов, системные библиотеки

plibsys

Библиотеки для работы с изображениями

libpng — кодек PNG.

libjpeg-turbo — кодек JPEG.

openjpeg — кодек JPEG 2000.

bpg — «Fabrice Bellard представил новый свободный формат упаковки изображений BPG (Better Portable Graphics), нацеленный на замену формата JPEG, обеспечивая более оптимальные характеристики качества картинки и результирующего размера файла.»

Библиотеки виджетов, тулкиты

Little Forms is an open source minimalistic GUI widget library written in plain C. It currently supports Windows and X11 backends.

Nuklear — встраиваемая библиотека для создания пользовательских интерфейсов. Не имеет никаких зависимостей (чистый C89). Есть примеры встраивания для WinAPI, X11, SDL, Allegro, GLFW, OpenGL, DirectX. Небольшой размер (порядка 15 тысяч строк кода). Public Domain. (Также: статья на Хабре.)

Agar is a cross-platform GUI toolkit. Agar provides a base framework and a collection of GUI widgets from which GUI applications can be built. Agar can be styled and themed using a CSS-style engine.

TekUI is a small, freestanding and portable graphical user interface (GUI) toolkit written in Lua and C.

Трёхмерная графика

steps3d — огромное количество информации по 3D графике.

Дизайн графического интерфейса пользователя

My Ideal OS — статья содержит несколько интересных частных идей улучшения GUI.

Операционные системы

HelenOS — довольно активно разрабатывающаяся микроядерная система.

Персоналии

EWONTFIX — Rich Felker, разработчик Musl.

asm32 — John Found, разработчик из Болгарии, пишущий на FASM.

transl-gunsmoker.ru — переводы на русский статей Реймонда Чена и других авторов из мира Windows.

Daniel J. Bernstein

Michael Cardell Widerkrantz

Свободный софт для проприетарных OC (DOS, Windows)

BTTR Software — свободный софт для DOS.

Ретрокомпьютинг, Downgrade

fdd5-25.net — «С ноября 2000 года данный проект рассказывает о нашей прикладной философии жизни - Довнгрейд. Сайт посвящен необыкновеннымм техническим решениям на базе морально устаревших технологий (x86, DOS, Win32, MSX и т.д), а так же контркультуре альтернативной обществу массового потребления. Наш ресурс содержит более 700 архивов софта, документов, тысячи тематических статей и материалов.»

Железные призраки прошлого

old-dos.ru и old-dos.ru/wiki

old-hard.ru

ПК-ностальгия

linux-distros.com

WinWorld

ArchiveOS

nostalgy.net.ru

GUI Gallery at toastytech.com

8 bit

z80.info — огромное количество информации по программированию под Z80.

z80.eu — компиляторы под Z80 и разная информация.

z88dk.org — SDK под 100 разных машин/ОС/архитектур семейства Z80.

ZX Spectrum Next — клон Спектрума на современной элементной базе.

Библиотека электронных газет и журналов для ZX Spectrum

retroprogramming.com — блог о программировании под ZX Spectrum.

Fuse - the Free Unix Spectrum Emulator — эмулятор ZX Spectrum и частично совместимых с ним клонов для Linux, BSD, macOS, Haiku, AmigaOS, Windows, Android…

ZEsarUX - ZX Second-Emulator And Released for UniX — еще один.

Электроника, радиотехника

Виртуальный музей и справочник «Отечественная Радиотехника 20 Века»

Разное

Unlicense — шаблон для передачи программного обеспечения в общественное достояние. Сайт также содержит список ПО, переданного в общественное достояние с помощью Unlicense или иным способом.

Мировоззрение

«Дао Пуха»

«Дао Дэ Цзин»

Кодо Саваки, «Тебе» (без ссылки; не смог найти в сети полную копию)

Экхарт Толле

Марк Аврелий, «Размышления»