summaryrefslogtreecommitdiff
path: root/staging/software=hardware/software=hardware.org
blob: ef75cfa51ae40df43a79a9d937497db30d3a7204 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#+TITLE: Software Equals Hardware
#+DATE: <2023-11-19 Sun 06:36>
#+TAGS: Software, Computer Architecture, Electronics, Philosophy, Engineering

80% of the debate about software engineering best-practice concerns the means to ensure so-called "modular" code. The other 20% is about a supposed dichotomy between developer comfort and program performance.

I think the reason that we disagree about these concepts is that
1. there is a division between computer architects and computer programmers, and
2. those divided have decided they work on fundamentally different problems.

* The Hard Problem of Reprogrammability

Why do we need software at all?

In the evenly-rotating economy, every algorithm would run on its own application-specific computer (not necessarily electrical; not necessarily digital). We, by contrast, have uncertainty about what algorithms we want to run. Ergo, we need reasonably generic computers that we can reconfigure to run whatever algorithms we decide to use. This is a Hard Problem™.

Historically, computer architects have

We have historically decided that all data and programs we want to run can be encoded as natural numbers, and noticed that natural number operations can be implemented by register machines, and noticed that register machines can be implemented by Boolean functions, and that Boolean functions can be implemented by electrical semiconductor circuits, to great success.

The original motivation for this is Gödel proof numbering.

This is why characters are encoded; this is why one-dimensional syntaxes are far more convenient.

* The Asymptotic Illuminati
That there isn't a canonical way to implement a given algorithm poses problems for the theoretical analysis of procedures. The conventional solution is wanting for many practical purposes (it at least needs to be complemented by discussion of constants).
** Their Propaganda
Algorithmics in books.
** What They Don't Want You To Know
Algorithmics in practice.
** The Red-Pill Approach
Analyzing algorithms by dependently typing over the machines they execute on, comparing machines by algorithmic performance, etc

* Hardware Mythologies
Computer architects have decided that programmers should be kept out of their turf.
** Behind the ABI Veil
Modern (RISC) computer architecture, especially the von Neumann bottleneck.
** Our Capricious Gods
*** The L Trinity
Cache locality, especially practical problems.
*** Ghosts of Dead Programs
Branch prediction
** Dead Cults
High-level language architectures and reconfigurable computing.
Noticing what von Neumann machines do well: extreme transistor density, and highly branching code.
** The Neo-Pagans
Modern accelerators
*** Seizing the Means of Pipelining
CISC cache-manipulation instructions
*** Holors Above All
Modern GPU acceleration

** Dialectic Synthesis
Reconfigurable register machines (a von Neumann/Harvard processor and an FPGA, where the programmer can create new machine instructions that are implemented in the FPGA).

* Software Mythologies
** The Messiah: GHC Optimization Directives