Проектирование, дизайн систем
Простыми словами про Brewer’s CAP Theorem. «В распределённой системе невозможно обеспечить одновременное выполнение всех трёх условий: корректности, доступности, устойчивости к сбоям узлов.»
«Null-terminated строки - самая большая ошибка в истории программирования»
Пишите код, который легко удалять, а не дополнять (оригинал на английском)
Версионирование
Semantic Versioning vs. Romantic Versioning
На грани юмора и правды жизни
Devil’s Dictionary of Programming
Алгоритмы
Hash Table Denial of Service Attacks, Revisited. См также: SipHash by Daniel J. Bernstein.
Красно-чёрные деревья, предельно понятно
Обзор сбалансированных деревьев
Рандомизированные деревья поиска
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 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.
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.
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:
- Книга Practical Compiler Construction
- T3X is a lightweight procedural language with backends for the 8086 (EXE), 386, Alpha, and the Tcode Machine. It features modules, objects, a full optimizing compiler, and a set of tools for manipulating Tcode. The Tcode port of the 8.1.7b compiler works fine on 64-bit systems. Development of T3X ceased in 2004. Version 6.8 of the compiler is described in the book “Lightweight Compiler Techniques” (above).
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-подобный язык. (Примечание: ссылка долхая. У меня где-то была копия репозитория. Найти бы…)
~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 со товарищи
vdev — «Представлен новый проект vdev (virtual device filesystem), нацеленный на разработку менеджера файлов-устройств, выступающего в роли кросс-платформенной и не зависящей от систем инициализации альтернативы udev и devfs. Работа vdev изначально тестируется не только в Linux, но и во FreeBSD и OpenBSD.»
Инит и/или супервизор
Unix Shell
Filenames and Pathnames in Shell: How to do it Correctly
Библиотеки алгоритмов, системные библиотеки
Библиотеки для работы с изображениями
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.
Свободный софт для проприетарных OC (DOS, Windows)
BTTR Software — свободный софт для DOS.
Ретрокомпьютинг, Downgrade
fdd5-25.net — «С ноября 2000 года данный проект рассказывает о нашей прикладной философии жизни - Довнгрейд. Сайт посвящен необыкновеннымм техническим решениям на базе морально устаревших технологий (x86, DOS, Win32, MSX и т.д), а так же контркультуре альтернативной обществу массового потребления. Наш ресурс содержит более 700 архивов софта, документов, тысячи тематических статей и материалов.»
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 или иным способом.
Мировоззрение
Кодо Саваки, «Тебе» (без ссылки; не смог найти в сети полную копию)