Assuming a digital machine; i.e. a machine with discrete states... A '''general purpose computer''' is a DigitalLogic machine that: * accepts user '''input''' and emits some form of '''output''' * has a minimal set of '''data manipulation capability''', namely: ** ability to move data from one place to another. (perhaps requiring an intermediate storage or instruction) ** can perform '''OR''' and '''AND''', possibly '''NOT''' operations * has a conditional jump instruction. * has '''memory''' "sufficient for the task". Any improvements? * An ability to '''map''' (a finite set of) ''symbols'' onto ''states'' (unique, enumerable binary words ("words": a string of binary digits of consistent, finite length)) for a modern (non-switch) computer. A simpler way of saying this is that a general-purpose computer is a TuringMachine plus user I/O. Because of this, a general-purpose computer has been argued to be more powerful than the simple TuringMachine as it supports incremental feedback loops between the user and the machine output. See InteractiveComputationIsMorePowerfulThanNonInteractive. -- MarkJanssen ''Note that DigitalLogic is typical, but not necessary, to make a GeneralPurposeComputer.'' ---- Challenge: What is the minimum number of transistors to implement a general-purpose computer? (see also: SimplestTuringMachine) ''The first integrated-circuit CPU, the Intel 4004, had approximately 2300 transistors. However, fewer are certainly possible. The University of Manchester created a prototype transistorised computer in 1953 using 92 transistors and 550 diodes, but it used a magnetic drum for memory and tubes (aka valves) to generate the clock signal. What is the '''minimum''' number of transistors necessary to implement a recognisably general-purpose computer? Good question.'' ''To be a general purpose computer, a machine needs to be TuringComplete or TuringEquivalent. Add to the above the ability to specify literal values, so you don't always have to obtain user input to make programs that work. You'll also need the ability to conditionally set the program counter (e.g., goto-if-true) -- which allows you to do conditional and unconditional branches and loops -- or, alternatively, implement LambdaCalculus. The simplest form of the latter might be to use EssAndKayCombinators.'' Since he was working purely with abstractions, AlanTuring never worked out how those symbols get on or off the tape. So a TuringMachine may not be considered a GeneralPurposeComputer without a way to interact with the RealWorld. I'll argue that all GeneralPurposeComputers are TuringMachines, but not necessarily ''vice versa''. ''Yes, this is essentially true. To be a general purpose computer, it is necessary but not sufficient for a machine to be TuringEquivalent.'' ---- See also: SimplestTuringMachine