- PVSM.RU - https://www.pvsm.ru -
Каталог программных конструкций, языков и API, которые неожиданно являются полными по Тьюрингу; последствия этого для безопасности и надёжности. Приложение: сколько компьютеров в вашем компьютере?
Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. — Десятое правило Гринспена
Полнота по Тьюрингу [1] (Turing-completeness, TC) — это свойство системы при некотором простом представлении ввода и вывода реализовать любую вычислимую функцию.
Тьюринг-полнота — фундаментальное понятие в информатике. Она помогает ответить на многие ключевые вопросы, например, почему невозможно создание идеальной антивирусной программы. Но в то же время она является поразительно распространённым явлением. Казалось бы, компьютерной системе трудно достичь такой универсальности, чтобы выполнять любую программу, но получается наоборот: трудно написать полезную систему, которая немедленно не обратится в полную по Тьюрингу. Оказывается, что даже небольшой контроль над входными данными и преобразованием их в результат, как правило, позволяет создать тьюринг-полную систему. Это может быть забавным, полезным (хотя обычно нет [2]), вредным или чрезвычайно небезопасным и настоящим подарком для хакера (см. о «теоретико-языковой безопасности» [3], которая изучает методы взлома «странных машин»1 [4]). Удивительные примеры такого поведения напоминают нам о том, что полнота по Тьюрингу таится повсюду, а защитить систему чрезвычайно сложно.
«Слишком мощные» языки программирования тоже могут спровоцировать неприятные DoS-атаки. Фаззер [5] afl [6] нашёл в OpenBSD [7] такой roff [8], что способен на генерацию бесконечного цикла [9], злоупотребляя некоторыми правилами подстановки строк.
Вероятно, эти неожиданные примеры тьюринг-полных систем лучше рассматривать как подмножество «обнаруженных» или «найденных» эзотерических языков программирования [10]. Так что эктраординарно минималистичный по своей сути FRACTRAN [11] не считается2 [12]Malbolge [13] (где написание тривиальной программы займёт годы), потому что это специально разработанные эзотерические ЯП. Также не входит в наше подмножество игра «Жизнь» [14], потому что вопросы о тьюринг-полноте появились сразу после её выхода, и признание её полной по Тьюрингу не стало сюрпризом. А учитывая сложность сетей с маршрутизацией и коммутацией пакетов неудивительно, что на этих сетях можно построить клеточный автомат [15] или программировать логические схемы [16], а планирование/валидация авиабилетов — не только NP-трудная и даже EXPSPACE-трудная задача, но и вовсе неразрешимая [17] (из-за сложных правил авиакомпаний).
Многие конфигурации, специальные языки, инструменты или сложные игры, как выясняется, нарушают правило наименьшей власти [18] и «случайно становятся полными по Тьюрингу» [19], как шаблоны MediaWiki [20], sed или многократное повторение команд regexp/find-replace [21] в редакторе. Вообще, любая форма замены строк [22] или шаблонирования, или компиляции на лету с высокой вероятностью является тьюринг-полной системой сама или при повторении, так как они часто поддерживают лямбда-исчисление [23] или переписывание термов [24] языка или метки, например, эзотерические языки "/// [25]" или Thue [26].
XSLT [27], Infinite Minesweeper [28], Dwarf [29] Fortress [30]3 [31]Minecraft [32], Ant [33], Transport Tycoon [34], шаблоны C++ [35] и обобщения Java [36], ДНК-вычисления [37] и так далее — всё это полные по Тьюрингу системы, и это тоже не удивительно. Многие игры поддерживают скрипты для упрощения разработки и пользовательских модов. Поэтому сделать игру тьюринг-полной элементарно: достаточно включить синтаксис для вызова более известных языков, таких как Perl.
Полнота по Тьюрингу может просто быть малоизвестной частью стандартного формата. Наверное, в наше время многие не знают, что TrueType и многие шрифты — это программы PostScript на стековых машинах, похожие на метаданные ELF и отладочную информацию DWARF [38]. Или что некоторые музыкальные форматы [39] выходят за рамки MIDI [40], поддерживают скрипты и нуждаются в интерпретации. Если знать о тьюринг-полноте шрифтов, то уже не удивляет полнота по Тюрингу документов TeX, что естественно вызывает многие серьёзные и интересные уязвимости в безопасности шрифтов и медиа, такие как BLEND [41] или Linux-эксплоиты SNES [42] и NES [43]. В других форматах вроде PDF просто ужасное количество уязвимостей4 [44]домино [45]5 [46], не считаются, поскольку нам уже давно известно, как работают механические компьютеры.
С другой стороны, направление исследований компьютерной безопасности под названием «странные машины» (weird machines) часто выявляет поистине поразительные тьюринг-полные системы. Причём у разных людей они вызывают удивление в разной степени: одним кажется необычным то, что других не удивляет.
mov является полной по Тьюрингу системой [55]: безобидная на первый взгляд ассемблерная инструкция mov, которая переносит данные между CPU и RAM, позволяет реализовать компьютер с одной инструкцией [56] на триггер-транспортной архитектуре TTA [57]. На таком компьютере можно играть в Doom [58] (в качестве бонуса: и на инструкциях xor тоже).printf из POSIX, в опции %n, как и в других библиотечных функциях C (Карлини и др., 2015 [69]). Отсюда и «интерпретатор printbf-Brainfuck в printf [70].Возможно, следующие системы случайно окажутся тьюринг-полными:
Некоторые увязают в спорах о странных машинах или о том, насколько «большим» станет агент ИИ: будет создан один такой, два, десять или миллионы. Неважно, поскольку это просто организационный вопрос. На самом деле важны входы и выходы системы: насколько работоспособна система в целом и какие ресурсы потребляет? Никого не волнует, если Google работает на 50 суперкомпьютерах, 50 000 мейнфреймах, 5 миллионах серверов, 50 млн встроенных/мобильных процессоров или на сочетании всего перечисленного [100]. Неважно, что Google использует разнообразные чипы: от самодельных «тензорных процессоров» до уникальных кремниевых процессоров (Intel реализует их на чипах на процессоры Xeon для ряда крупнейших клиентов), FPGA, GPU, CPU до ещё более экзотического оборудования вроде квантовых компьютеров D-Wave [101]. Важно только, чтобы она сохраняла конкурентоспособность и могла предоставлять услуги за умеренную плату. В конце концов, сегодня суперкомпьютер выглядит обычно как большое количество серверов в стойках с огромным количеством GPU и необычно высокоскоростными соединениями InfiniBand. То есть суперкомпьютер не так уж сильно отличается от дата-центра, как можно подумать. Любое из перечисленного оборудования может поддерживать многочисленные странные машины в зависимости от своей внутренней динамики и связности.
Аналогично, любую систему ИИ можно реализовать в виде одной гигантской нейронной сети или множества отдельных нейросетей, работающих асинхронно, или как гетерогенный набор микросервисов, или как «общество разума» и так далее. Всё это не особенно важно. С точки зрения сложности или рисков, не так важно, как именно организована система, пока она работает. Систему можно увидеть на многих уровнях, каждый из которых одинаково недействителен сам по себе, но полезен для разных целей в общей системе.
Вот пример плохо определённого вопроса: сколько компьютеров сейчас у вас в карманах и на столе? Сколько компьютеров в вашем «компьютере»? Думаете, только один? Давайте посмотрим внимательнее.
Речь идёт не только о CPU: в наше время транзисторы и процессорные ядра настолько дёшевы, что теперь часто имеет смысл выделять отдельные ядра на задачи реального времени, для повышения производительности, для безопасности, чтобы избежать нагрузки на основную ОС, для совместимости со старой архитектурой или существующего программным пакетом. Просто потому что DSP или ядро быстрее запрограммировать, чем создать специализированный ASIC, или потому что это самое простое из возможных решений. Кроме того, многие из этих компонентов могут использоваться в качестве вычислительных элементов, даже если они не предназначены или вообще скрывают эту функциональность.
Итак:
«Удивительно, как много разнородных ядер процессора интегрированы в Intel Silvermont Moorefield SoC (ANN): x86, ARC, LMT, 8051, Audio DSP, каждый на своей прошивке и с поддержкой интерфейса JTAG
Эти чипы управления или отладки могут «случайно» остаться активированными на устройствах после продажи, как встроенный ARM в Via C3 CPU [111].
Так что в обычном смартфоне или настольном компьютере будет от пятнадцати до нескольких тысяч компьютеров в смысле тьюринг-полных устройств. Каждое из них можно запрограммировать, оно обладает достаточной мощностью для запуска многих программ и может быть использовано злоумышленником для наблюдения, эксфильтрации или атак на остальную часть системы.
Здесь нет ничего необычного в историческом контексте, ведь даже самые первые мейнфреймы обычно включали в себя несколько компьютеров, где основной компьютер выполняет пакетную обработку, о вспомогательные компьютеры обеспечивают высокоскоростные операции ввода/вывода, которые в противном случае помешают основной машине своими прерываниями.
На практике же, кроме сообщества информационой безопасности (поскольку все эти компьютеры небезопасны и, следовательно, полезны для АНБ и вирусописателей), всем остальным пользователям всё равно, что под капотом наших компьютеров скрываются безумно сложные системы, которые более точно рассматривать как пёстрый зверинец из сотен компьютеров, неловко связанных друг с другом (непонятно, «сеть — это компьютер» или «компьютер — это сеть»...?). Пользователь воспринимает и использует это как один компьютер.
model DSL [131], либо вызвать PL/SQL [132] и т.д.
Вот некоторая литература о странных машинах:
↑ [140]
плавающей точкой с округлением до нуля [141] для кодирования потенциально тьюринг-полного поведения (для RNN), но это незаметно в нормальной работе, что одновременно является случайным тьюринг-полным поведением и наглядным примером безопасного языка. ↑ [142]
четыре потенциальных способа [143] создания логических вентилей: жидкости, механизмы часового механизма, минные тележки и логические вентили существ/животных с участием дверей и датчиков давления. ↑ [144]
можно играть в Breakout [145] (потому что PDF включает собственное странное подмножество JavaScript). Официальная программа просмотра Adobe PDF поддерживает функциональность вплоть до трёхмерного САПР. ↑ [146]
логические вентили из домино [147] на Think Math и демо 4-битного сумматора из костяшек домино [148]. ↑ [149]
Автор: m1rko
Источник [150]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ii/298885
Ссылки в тексте:
[1] Полнота по Тьюрингу: https://en.wikipedia.org/wiki/Turing_completeness
[2] обычно нет: https://en.wikipedia.org/wiki/Turing%20tarpit
[3] «теоретико-языковой безопасности»: http://langsec.org/
[4] 1: #1
[5] Фаззер: https://en.wikipedia.org/wiki/fuzz%20tester
[6] afl: http://lcamtuf.coredump.cx/afl/
[7] OpenBSD: https://en.wikipedia.org/wiki/OpenBSD
[8] roff: https://en.wikipedia.org/wiki/roff
[9] бесконечного цикла: http://undeadly.org/cgi?action=article&sid=20150619071929
[10] эзотерических языков программирования: https://en.wikipedia.org/wiki/esoteric%20programming%20language
[11] FRACTRAN: https://en.wikipedia.org/wiki/FRACTRAN
[12] 2: #2
[13] Malbolge: https://en.wikipedia.org/wiki/Malbolge
[14] игра «Жизнь»: https://en.wikipedia.org/wiki/Conway%27s%20Game%20of%20Life
[15] построить клеточный автомат: https://pdfs.semanticscholar.org/3069/80183fea8f0e6af98f520d8c8968f11c8eb1.pdf
[16] логические схемы: http://inl.info.ucl.ac.be/system/files/main_2.pdf
[17] NP-трудная и даже EXPSPACE-трудная задача, но и вовсе неразрешимая: http://www.demarcken.org/carl/papers/ITA-software-travel-complexity/ITA-software-travel-complexity.pdf
[18] правило наименьшей власти: https://en.wikipedia.org/wiki/Rule%20of%20least%20power
[19] «случайно становятся полными по Тьюрингу»: http://beza1e1.tuxen.de/articles/accidentally_turing_complete.html
[20] шаблоны MediaWiki: https://web.archive.org/web/20131027001211/http://mentalpolyphonics.com/posts/wikimedia-proves-greenspuns-tenth-law
[21] многократное повторение команд regexp/find-replace: https://github.com/Tegmen/RegEx-BrainF-Interpreter/
[22] замены строк: https://en.wikipedia.org/wiki/Markov%20algorithm
[23] лямбда-исчисление: https://en.wikipedia.org/wiki/lambda%20calculus
[24] переписывание термов: https://en.wikipedia.org/wiki/term-rewriting
[25] ///: https://esolangs.org/wiki////
[26] Thue: https://esolangs.org/wiki/Thue
[27] XSLT: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.71.8846&rep=rep1&type=pdf
[28] Infinite Minesweeper: http://for.mat.bham.ac.uk/R.W.Kaye/minesw/minesw.htm#infinite%20minesweeper
[29] Dwarf: http://dwarffortresswiki.org/index.php/User:BaronW#The_Almighty_Dwarven_Calculator
[30] Fortress: http://mkv25.net/dfma/map-8269
[31] 3: #3
[32] Minecraft: http://gaming.stackexchange.com/a/20220
[33] Ant: https://en.wikipedia.org/wiki/Apache%20Ant
[34] Transport Tycoon: http://www.tt-forums.net/viewtopic.php?f=29&t=37902&sid=75000c8f5f3b17f607335077dad6ce94&view=print
[35] шаблоны C++: https://en.wikipedia.org/wiki/Template%20%28C%2B%2B%29
[36] обобщения Java: http://arxiv.org/abs/1605.05274
[37] ДНК-вычисления: https://en.wikipedia.org/wiki/DNA%20computing
[38] метаданные ELF и отладочную информацию DWARF: http://kristerw.blogspot.com/2016/01/more-turing-completeness-in-surprising.html
[39] некоторые музыкальные форматы: https://en.wikipedia.org/wiki/NES%20Sound%20Format
[40] MIDI: https://en.wikipedia.org/wiki/MIDI
[41] BLEND: http://googleprojectzero.blogspot.com/2015/07/one-font-vulnerability-to-rule-them-all.html
[42] SNES: https://scarybeastsecurity.blogspot.com/2016/12/redux-compromising-linux-using-snes.html
[43] NES: https://scarybeastsecurity.blogspot.com/2016/11/0day-exploit-compromising-linux-desktop.html
[44] 4: #4
[45] домино: https://en.wikipedia.org/wiki/Domino%20computer
[46] 5: #5
[47] Арифметика Пеано: https://en.wikipedia.org/wiki/Peano%20arithmetic
[48] арифметика Пресбургера: https://en.wikipedia.org/wiki/Presburger%20arithmetic
[49] Плитки Вана: https://en.wikipedia.org/wiki/Wang%20tiles
[50] MMU: https://en.wikipedia.org/wiki/Memory%20management%20unit
[51] выполнять произвольные вычисления на MMU с помощью исключений page-faults: https://github.com/jbangert/trapcc#readme
[52] комментарии: https://news.ycombinator.com/item?id=5261598
[53] научная работа: http://0b4af6cdc2f0c5998459-c0245c5c937c5dedcca3f1764ecc9b2f.r43.cf2.rackcdn.com/12061-woot13-bangert.pdf
[54] компьютер с одной инструкцией: https://en.wikipedia.org/wiki/One_instruction_set_computer#Subtract_and_branch_if_less_than_or_equal_to_zero
[55] mov является полной по Тьюрингу системой: http://www.cl.cam.ac.uk/~sd601/papers/mov.pdf
[56] компьютер с одной инструкцией: https://en.wikipedia.org/wiki/one%20instruction%20set%20computer
[57] триггер-транспортной архитектуре TTA: https://en.wikipedia.org/wiki/Transport%20triggered%20architecture
[58] играть в Doom: https://github.com/xoreaxeaxeax/movfuscator/tree/master/validation/doom
[59] «x86 — тьюринг-полный набор без регистров».: http://mainisusuallyafunction.blogspot.com.es/2014/02/x86-is-turing-complete-with-no-registers.html
[60] libc: https://en.wikipedia.org/wiki/libc
[61] «Геометрию невинной плоти на кости: return-into-libc без вызовов функций (на x86)»: http://cseweb.ucsd.edu/~hovav/papers/s07.html
[62] «О выразительности атак return-into-libc»: https://pdfs.semanticscholar.org/3a34/baf9434f8d785bfe34f69c0a5e2f0b13f6c7.pdf
[63] Pokemon Yellow: https://en.wikipedia.org/wiki/Pokemon%20Yellow
[64] «Полный хак управления Pokemon Yellow»: http://aurellem.org/vba-clojure/html/total-control.html
[65] спидрана: https://en.wikipedia.org/wiki/speedrun
[66] Super Mario World: http://tasvideos.org/4156S.html
[67] произвольную игру типа «Змейки» или «Понга»: http://hackaday.com/2014/01/10/teaching-mario-to-play-pong-and-snake-through-innumerable-exploits/
[68] от Super Game Boy к SNES и к произвольному коду, такому как IRC: http://arstechnica.com/gaming/2015/01/pokemon-plays-twitch-how-a-robot-got-irc-running-on-an-unmodified-snes/
[69] Карлини и др., 2015: https://nebelwelt.net/publications/files/15SEC.pdf
[70] «интерпретатор printbf-Brainfuck в printf: https://github.com/HexHive/printbf
[71] доставила Blizzard много проблем: http://0xeb.net/wp-content/uploads/2018/02/StarCraft_EUD_Emulator.pdf
[72] Braid: https://en.wikipedia.org/wiki/Braid%20%28video%20game%29
[73] тьюринг-полной: https://arxiv.org/abs/1412.0784
[74] становится эзотерическим языком: http://programmers.stackexchange.com/a/136179
[75] Choon: https://web.archive.org/web/20160719132722/http://www.stephensykes.com/choon/choon.html
[76] допускают программирование через логические вентили, следовательно, представляют тьюринг-полную систему: http://eprints.uwe.ac.uk/15848/6/ScarleXbox.pdf
[77] Magic: the Gathering: https://en.wikipedia.org/wiki/Magic%3A%20the%20Gathering
[78] тьюринг-полная система: http://www.toothycat.net/~hologram/Turing/
[79] CSS: https://en.wikipedia.org/wiki/CSS
[80] можно: https://github.com/elitheeli/stupid-machines#readme
[81] закодировать: http://my-codeworks.com/blog/2015/css3-proven-to-be-turing-complete
[82] Правило 110: https://en.wikipedia.org/wiki/Rule%20110
[83] Microsoft PowerPoint: https://en.wikipedia.org/wiki/Microsoft%20PowerPoint
[84] Вильденхайн, 2017: https://www.andrew.cmu.edu/user/twildenh/PowerPointTM/Paper.pdf
[85] видео: https://www.youtube.com/watch?v=uNjxe8ShM-8
[86] PPT: http://tomwildenhain.com/PowerPointTM/PowerPointTM.pptx
[87] SVG: https://en.wikipedia.org/wiki/Scalable%20Vector%20Graphics
[88] возможность открытия сетевых сокетов: https://www.w3.org/TR/2004/WD-SVG12-20040510/#rawsocket
[89] Unicode: https://en.wikipedia.org/wiki/Unicode
[90] Николас Сериот: http://seriot.ch/resources/talks_papers/20171027_brainfuck_dominos.pdf
[91] двунаправленные алгоритмы Unicode: https://www.unicode.org/reports/tr9/
[92] приведения регистра: https://www.w3.org/International/wiki/Case_folding
[93] Внутриплатформенный эффект: https://en.wikipedia.org/wiki/Inner-platform%20effect
[94] 1: https://news.ycombinator.com/item?id=10318729
[95] 2: https://news.ycombinator.com/item?id=6577671
[96] Accidentally Quadratic: https://accidentallyquadratic.tumblr.com/
[97] «Кодирующие машины»: https://www.teamten.com/lawrence/writings/coding-machines/
[98] «Размышления о делегации доверия»: https://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf
[99] «Состязательное перепрограммирование нейронных сетей»: https://arxiv.org/abs/1806.11146
[100] сочетании всего перечисленного: https://herbsutter.com/welcome-to-the-jungle/
[101] D-Wave: https://en.wikipedia.org/wiki/D-Wave
[102] JVM для программирования: http://www.slideshare.net/codeblue_jp/igor-skochinsky-enpub
[103] Руан, 2014: https://link.springer.com/book/10.1007/978-1-4302-6572-6
[104] SGX: https://en.wikipedia.org/wiki/Software%20Guard%20Extensions
[105] Platform Security Processor: https://en.wikipedia.org/wiki/AMD%20Platform%20Security%20Processor
[106] Android TEE: https://googleprojectzero.blogspot.com/2017/07/trust-issues-exploiting-trustzone-tees.html
[107] DSP: https://en.wikipedia.org/wiki/Digital%20signal%20processor
[108] h.264: https://en.wikipedia.org/wiki/h.264
[109] Apple A9: https://en.wikipedia.org/wiki/Apple%20A9
[110] Марк Ермолов: https://twitter.com/_markel___/status/982364102449393668
[111] Via C3 CPU: https://github.com/xoreaxeaxeax/rosenbridge
[112] «современный смартфон содержит от 8 до 14 процессоров ARM, один из которых — процессор приложений (под управлением Android или iOS), а другой — процессор для стека полосы частот (baseband stack)»: https://www.theregister.co.uk/2013/03/07/baseband_processor_mobile_hack_threat/
[113] DMA: https://en.wikipedia.org/wiki/Direct%20memory%20access
[114] Wake-on-LAN: https://en.wikipedia.org/wiki/Wake-on-LAN
[115] netboot: https://en.wikipedia.org/wiki/netboot
[116] baseband-процессор: https://en.wikipedia.org/wiki/baseband%20processor
[117] вроде L4: http://boston.conman.org/2013/01/22.2
[118] SIM-карты: https://en.wikipedia.org/wiki/Subscriber%20identity%20module
[119] смарт-карты: https://en.wikipedia.org/wiki/smart%20cards
[120] Java Card: https://en.wikipedia.org/wiki/Java%20Card
[121] дьявол кроется в деталях…: https://googleprojectzero.blogspot.com/2017/04/over-air-exploiting-broadcoms-wi-fi_11.html
[122] WatchOS: https://en.wikipedia.org/wiki/WatchOS
[123] тотально функциональное программирование: https://en.wikipedia.org/wiki/total%20functional%20programming
[124] теоремой Гёделя о неполноте: https://en.wikipedia.org/wiki/Godel%27s%20incompleteness%20theorems
[125] теоремой Райса: https://en.wikipedia.org/wiki/Rice%27s%20theorem
[126] побочных эффектов: https://en.wikipedia.org/wiki/Side%20effect%20%28computer%20science%29
[127] оптимизатора: https://en.wikipedia.org/wiki/query%20optimizer
[128] градиентный спуск для моделей машинного обучения: https://ai.googleblog.com/2018/07/machine-learning-in-google-bigquery.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FgJZg+%28Google+AI+Blog%29
[129] некоторые расширения SQL делают его тьюринг-полным: http://assets.en.oreilly.com/1/event/27/High%20Performance%20SQL%20with%20PostgreSQL%20Presentation.pdf
[130] циклическую систему тегов: https://en.wikipedia.org/wiki/cyclic%20tag%20system
[131] model DSL: http://blog.schauderhaft.de/2009/06/18/building-a-turing-engine-in-oracle-sql-using-the-model-clause/
[132] PL/SQL: https://en.wikipedia.org/wiki/PL%2FSQL
[133] «Программирование эксплоитов: от переполнений буфера до странных машин и теории вычислений»: http://langsec.org/papers/Bratus.pdf
[134] «Проблема остановки в безопасности сетевого стека»: https://www.usenix.org/legacy/publications/login/2011-12/openpdfs/Sassaman.pdf
[135] «Странная машина Page-Fault: уроки вычислений без инструкций»: https://www.usenix.org/system/files/tech-schedule/woot13-papers-archive.zip
[136] «Странные машины в ELF: фокус на недооценённые метаданные»: http://www.cs.dartmouth.edu/~sergey/wm/woot13-shapiro.pdf
[137] «Ориентированное на прерывания программирование багдоров: минималистический подход к внедрение багдоров в прошивки встроенных систем»: http://tcipg.org/sites/default/files/papers/2014_q3_tfs1.pdf
[138] «Странные машины в доказательном коде»: https://www.ieee-security.org/TC/SPW2014/papers/5103a209.PDF
[139] «Сигналы цикловой синхронизации — возвращение к портируемому шеллкоду»: http://www.syssec-project.eu/m/page-media/3/sp14_srop.pdf
[140] ↑: #1_1
[141] плавающей точкой с округлением до нуля: https://blog.openai.com/nonlinear-computation-in-linear-networks/
[142] ↑: #2_2
[143] четыре потенциальных способа: http://dwarffortresswiki.org/index.php/DF2014:Computing
[144] ↑: #3_3
[145] можно играть в Breakout: https://rawgit.com/osnr/horrifying-pdf-experiments/master/breakout.pdf
[146] ↑: #4_4
[147] логические вентили из домино: http://think-maths.co.uk/sites/default/files/downloads/think_maths_domino_computer_worksheets.pdf
[148] демо 4-битного сумматора из костяшек домино: https://www.youtube.com/watch?v=OpLU__bhu2w
[149] ↑: #5_5
[150] Источник: https://habr.com/post/429602/?utm_source=habrahabr&utm_medium=rss&utm_campaign=429602
Нажмите здесь для печати.