{"id":12131,"date":"2022-10-05T13:37:46","date_gmt":"2022-10-05T11:37:46","guid":{"rendered":"http:\/\/www.soeren-in-norwegen.net\/blog\/?p=12131"},"modified":"2022-08-30T13:19:04","modified_gmt":"2022-08-30T11:19:04","slug":"can-it-run-doom-einfuehrung","status":"publish","type":"post","link":"http:\/\/www.soeren-in-norwegen.net\/blog\/2022\/10\/can-it-run-doom-einfuehrung\/","title":{"rendered":"Can it run Doom? \u2026 Einfuehrung"},"content":{"rendered":"<p>Neulich stolperte ich ueber <a href=\"https:\/\/www.gwern.net\/Turing-complete\" target=\"_blank\" rel=\"noopener\">einen Artikel<\/a> in dem der Autor Systeme vorstellte, die ueberraschend Turing-vollstaendig sind. Einige davon waren extrem technische Sachen (wie zum Beispiel das geschickte Rumschieben von Arbeitsspeicher). Andere Beispiele sind (mehr oder weniger) weithin bekannt (bspw. Computerspiele wie Minecraft oder <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dwarf_Fortress\" target=\"_blank\" rel=\"noopener\">Dwarf Fortress<\/a> oder natuerlich die meisten (aber nicht alle) Programmiersprachen).<br \/>\nUnd dann waren da ein paar Beispiele die ich so cool fand, dass ich die Idee dieses Artikels <del>klaue<\/del> als Inspiration nehme und daraus eine Miniserie mache.<\/p>\n<p>Heute aber nur eine Einfuehrung, denn mich duenkt ich sollte wenigstens kurz darauf eingehen, was Turing-Vollstaendigkeit eigentlich bedeutet.<\/p>\n<p>In kurz ist ein System <a href=\"https:\/\/en.wikipedia.org\/wiki\/Turing_completeness\" target=\"_blank\" rel=\"noopener\">Turing-vollstaendig<\/a>, wenn die Regeln dieses Systems benutzt werden k\u00f8nnen um jeden beliebigen <a href=\"https:\/\/en.wikipedia.org\/wiki\/Algorithm\" target=\"_blank\" rel=\"noopener\">Computeralgorithmus<\/a> zu implementieren. Das wichtige an einem Computeralgorithmus ist, dass dieser eine endliche Anzahl von Instruktionen hat um eine Eingabe zu bearbeiten.<\/p>\n<p>Nebenbemerkung: eine endliche Anzahl von Instruktionen bedeutet NICHT, dass besagter Algorithmus jemals endet &#8212; unendliche Schleifen m\u00f8gen dies verhindern. Das ist das sogenannte <a href=\"https:\/\/en.wikipedia.org\/wiki\/Halting_problem\" target=\"_blank\" rel=\"noopener\">Halteproblem<\/a> \u2026 eines der der ersten Probleme die im allgemeinen Fall als <a href=\"https:\/\/en.wikipedia.org\/wiki\/Undecidable_problem\" target=\"_blank\" rel=\"noopener\">unentscheidbar<\/a> erkannt wurden. Aus gegebenem Algorithmus und Eingabe kann man im allgemeinen NICHT erkennen, ob das Programm jemals zum Ende kommt.<br \/>\nIn vielen konkreten Faellen kann man das aber sehr wohl entscheiden. In Faellen wo es wichtig ist, dass eine Berechnung terminiert, werden sogar Programmiersprachen benutzt die bspw. unendliche Schleifen automatisch beenden, Solche Programmiersprachen sind dann aber meines Wissens nach meist NICHT Turing-vollstaendig (denn sie k\u00f8nnen ja nicht jeden Computeralgorithmus ausfuehren).<\/p>\n<p>Wenn ein System Turing-vollstaendig ist, so bedeutet das auch, dass dieses System jedes beliebige andere Turing-vollstaendige System emulieren kann \u2026 oder leichter einzupraegen: Can it run DOOM? \u2026 und die Antwort ist vermutlich: <a href=\"https:\/\/nitter.net\/canitrundoom?lang=en\" target=\"_blank\" rel=\"noopener\">Yes, it can<\/a>.<\/p>\n<p>Aber Achtung! Turing-Vollstaendigkeit heiszt NICHT dass oben erwaehnte Emulierung einfach zu implementieren ist oder schnell laeuft oder konkret (wenn auch theoretisch) m\u00f8glich ist. Die ersten beiden Einschraenkungen sind intuitiv zu verstehen. Die Letzte folgt daraus, dass Turing-Vollstaendigkeit eigentlich unendlich viel Arbeitsspeicher voraussetzt. Fuer alle praktischen Belange wird das ignoriert. Es kann dann aber doch der Grund sein, warum eine konkrete Emulierung nicht zu implementieren ist. Oder anders: DOOM laeuft heutzutage auf echt vielen Geraeten, das bedeutet aber nicht, dass man auf den selben Geraeten auch ein vollstaendiges Linux mit Multimedia- und Internetanwendungen laufen lassen k\u00f8nnte.<\/p>\n<p>So, das war jetzt alles aus der Welt der Computer. Dies deswegen, weil die Eigenschaft der Turing-Vollstaendigkeit dort &#8222;erfunden&#8220; wurde und am einfachsten zu verstehen ist. In dieser Miniserie werde ich aber auch aus der Computerwelt heraus treten. Damit verbleibe ich bis zum naechsten Mal.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neulich stolperte ich ueber einen Artikel in dem der Autor Systeme vorstellte, die ueberraschend Turing-vollstaendig sind. Einige davon waren extrem technische Sachen (wie zum Beispiel das geschickte Rumschieben von Arbeitsspeicher). Andere Beispiele sind (mehr oder weniger) weithin bekannt (bspw. Computerspiele wie Minecraft oder Dwarf Fortress oder natuerlich die meisten (aber nicht alle) Programmiersprachen). Und dann [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts\/12131"}],"collection":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/comments?post=12131"}],"version-history":[{"count":2,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts\/12131\/revisions"}],"predecessor-version":[{"id":12135,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/posts\/12131\/revisions\/12135"}],"wp:attachment":[{"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/media?parent=12131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/categories?post=12131"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.soeren-in-norwegen.net\/blog\/wp-json\/wp\/v2\/tags?post=12131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}