JavaScript er ved at blive afsluttet - forklaret

JavaScript er ved at blive afsluttet - forklaret

Hvis du begynder at lære funktionel programmering i JavaScript, vil du sandsynligvis høre om lambda-calculus, Turing-maskine, Turing komplet og på en eller anden måde "JavaScript er Turing complete".

Men ingen ser ud til at forklare i enkle vendinger, hvad det rent faktisk betyder. Hvad er forholdet b / wa Turing “maskine” og JavaScript “sprog”? Også de fleste bruger jargon til at forklare jargon som sådan:

I beregbarhedsteori siges et system med datamanipulationsregler (såsom en computers instruktionssæt, et programmeringssprog eller en cellulær automat) at være Turing komplet eller beregningsmæssigt universel, hvis den kan bruges til at simulere enhver enkeltbåndet Turing-maskine . Konceptet er opkaldt efter den engelske matematiker Alan Turing. Et klassisk eksempel er lambda-calculus.

Så dette er mit forsøg på at forklare disse koncepter enkelt.

Turing-maskiner

Tilbage på dagen ville folk vide, hvordan man opretter en maskine, der kan udføre alle de beregninger, de foretager i hånden. De ønskede at vide, hvordan man bygger en sådan maskine, og hvordan den kan fungere.

Alan Turing kom op med en hypotetisk maskine, der kunne tage ethvert program af enhver kompleksitet og køre det. Det kunne implementeres ved hjælp af et simpelt bånd, et hoved, der bevæger sig til venstre og højre, kunne gemme data ved at læse, skrive og slette indholdet af firkantede celler. Givet længe nok bånd og nok tid, kunne det beregne ethvert program.

Med andre ord forklarede han, hvordan nogen kan bygge en computer. Og kaldte computeren en “Turing-maskine”

Trivia: Tilbage i Alan Turings dage betød ordet "Computer" den person, der manuelt beregner programmer (ikke maskinerne) :)

Så kraftfuld, men alligevel så enkel

Turing-maskiner blev hurtigt meget populære og til sidst en standard, for mens de leverede en kraftig mekanisme til at beregne noget, var de også lette at forstå. Som beskrevet i videoen nedenfor bruger Turing-maskiner et bånd til at holde styr på tilstande og køre beregninger.

“Single” Vs “Multi” Tape Turing Machines

Et andet jargon, du vil høre om Turing-maskiner, er begrebet "enkelt" bånd.

Den oprindelige version af Turing-maskinen havde kun et langt enkelt bånd. Senere kom folk op med begrebet "flere" tape Turing-maskiner, der brugte to til fem bånd. Multi-tape Turing-maskiner var ikke mere kraftfulde end single-tape-maskiner, men de hjalp med at forenkle programmer.

Så eksplicit at sige "enkelt" bånd er ikke nødvendigt.

Turing komplet

Hvis en fysisk maskine (som en computer) eller en virtuel maskine, som er en software (som JavaVM), kan tage et hvilket som helst program og køre det ligesom en Turing-maskine, kaldes den maskine "Turing Complete". PS: Det er en slags certificering.

Eksempler: Turing komplet vs Turing ufuldstændig maskine

En lommeregner er et godt eksempel på en ufuldstændig Turing-maskine, fordi den kun kan udføre en lille foruddefineret delmængde af beregninger.

En hjemmecomputer (Mac eller en pc) er dog en Turing-maskine, fordi den kan foretage enhver beregning, som en Turing-maskine kan gøre, hvis vi giver den nok hukommelse og tid.

“JavaScript er ved at blive afsluttet”

Hvis du tænker over det, er en Turing-maskine bare et koncept - det betyder, at enhver " ting " (fysisk eller virtuel), der tager ethvert program og kører det, i det væsentlige er en Turing Machine. Og hvis den "ting" kan køre ethvert program, som en "Turing Machine" kan køre, kaldes den "Turing Complete".

Hvis du nu tænker på ethvert moderne programmeringssprog, tager de også programmer (skrevet af os) som input og kører dem. Yderligere kan ethvert program, der teoretisk kan skrives til at køre til en Turing-maskine, også skrives i JavaScript. JavaScript er således Turing komplet.

Det er det!

??? Hvis du kan lide dette indlæg, bedes du 1. ❤❤❤ det nedenfor på Medium og 2. del det på Twitter. Du kan retweet nedenstående kort ???

Mine andre indlæg

SENESTE: Funktionel programmering i JS - med praktiske eksempler (del 1)

Funktionel programmering

  1. JavaScript er ved at blive afsluttet - forklaret
  2. Funktionel programmering i JS - med praktiske eksempler (del 1)

ES6

  1. 5 JavaScript "dårlige" dele, der er løst i ES6
  2. Er "klasse" i ES6 den nye "dårlige" del?

WebPack

  1. Webpack - De forvirrende dele
  2. Webpack & Hot Module Replacement [HMR] (under-the-hood)
  3. Webpack's HMR And React-Hot-Loader - Den manglende manual

Draft.js

  1. Hvorfor Draft.js og hvorfor du skal bidrage
  2. Hvordan Draft.js repræsenterer Rich Text-data

Reager og redux:

  1. Trin for trin vejledning til opbygning af React Redux-apps
  2. En guide til opbygning af en React Redux CRUD-app (3-siders app)
  3. Brug af Middlewares i React Redux Apps
  4. Tilføjelse af en robust formvalidering for at reagere på Redux-apps
  5. Sikring af React Redux-apps med JWT-tokens
  6. Håndtering af transaktionsmails i React Redux-apps
  7. Anatomien af ​​en React Redux-app

Salgsstyrke

  1. Udvikling af React Redux-apps i Salesforce's Visualforce

Tak for læsningen!