JavaScripti valmimine on lõpule jõudnud - selgitatud

JavaScripti valmimine on lõpule jõudnud - selgitatud

Kui hakkate JavaScripti funktsionaalset programmeerimist õppima, kuulete tõenäoliselt lambda arvutustest, Turingi masinast, Turing on täielik ja kuidagi "JavaScript on Turing täielik".

Kuid tundub, et keegi ei seleta lihtsustatult, mida see tegelikult tähendab. Milline on seos b / wa Turingi "masin" ja JavaScripti "keel" vahel? Samuti kasutab enamik inimesi žargooni seletamiseks žargooni:

Arvutusteoorias öeldakse, et andmetega manipuleerimise reeglite süsteem (näiteks arvuti käsustik, programmeerimiskeel või kärgautomaat) on Turingi täielik või arvutuslikult universaalne, kui seda saab kasutada mis tahes ühe lindiga Turingi masina simuleerimiseks . Kontseptsioon on nime saanud inglise matemaatiku Alan Turingi järgi. Klassikaline näide on lambda arvutus.

Nii et see on minu katse neid komptsioone lihtsalt seletada.

Turingi masinad

Sel ajal tahtsid inimesed teada, kuidas luua masinat, mis suudaks kõik arvutused, mida nad teevad, käsitsi teha. Nad tahtsid teada, kuidas sellist masinat ehitada ja kuidas see võib töötada.

Alan Turing tuli välja hüpoteetilise masinaga, mis suudaks võtta mis tahes keerukusega programmi ja seda käivitada. Seda saab rakendada lihtsa lindi abil - pea, mis liigub vasakule ja paremale, võib salvestada andmeid ruudukujuliste lahtrite sisu lugemise, kirjutamise ja kustutamise teel. Arvestades piisavalt pikka linti ja piisavalt aega, võiks see arvutada mis tahes programmi.

Teisisõnu selgitas ta, kuidas keegi saab arvutit ehitada. Ja nimetas arvutit “Turingi masinaks”

Trivia: Alan Turingi päevil tähendas sõna "arvuti" inimest, kes arvutab programme käsitsi (mitte masinaid) :)

Nii võimas, aga nii lihtne

Turingi masinad said peagi väga populaarseks ja lõpuks standardiks, sest kuigi need pakkusid võimsa mehhanismi ükskõik millise arvutamiseks, oli neid ka lihtne mõista. Nagu allpool videos kirjeldatud, kasutavad Turingi masinad olekute jälgimiseks ja arvutuste tegemiseks linti.

"Single" Vs "Multi" lindil töötavad masinad

Üks teine ​​kõnepruuk, mida Turingi masinate kohta kuulete, on „ühe” lindi mõiste.

Turingi masina esialgsel versioonil oli lihtsalt pikk üksik lint. Hiljem tulid inimesed välja mõiste „mitmekordne” Turingi masin, mis kasutas kahte kuni viit linti. Mitme lindiga Turingi masinad ei olnud võimsamad kui ühe lindiga masinad, kuid need aitasid programme lihtsustada.

Nii et selgesõnaline „ühe” lindi ütlemine pole vajalik.

Turing täielik

Kui füüsiline masin (nagu arvuti) või virtuaalne masin, mis on tarkvara (näiteks JavaVM), võib võtta mis tahes programmi ja käitada seda nagu Turingi masin, siis nimetatakse seda masinat “Turing Complete”. PS: See on omamoodi sertifikaat.

Näited: Turing täielik Vs Mittekomplektne masin

Kalkulaator on hea näide Turingi mittetäielikust masinast, kuna see suudab teha ainult väikest etteantud arvutuste alamhulka.

Koduarvuti (Mac või PC) on siiski täielik Turingi masin, kuna see suudab teha mis tahes arvutust, mida Turingi masin saab teha, kui anname talle piisavalt mälu ja aega.

„JavaScript on valmimas”

Kui järele mõelda, on Turingi masin lihtsalt mõiste - see tähendab, et iga „ asi ” (füüsiline või virtuaalne), mis võtab mis tahes programmi ja käivitab selle, on sisuliselt Turingi masin. Ja kui see "asi" suudab käitada kõiki programme, mida "Turing Machine" käitada saab, siis nimetatakse seda "Turing Complete".

Kui nüüd mõelda mõnele kaasaegsele programmeerimiskeelele, võtavad nad ka sisendina meie enda kirjutatud programme ja käitavad neid. Kõik programmid, mida saab teoreetiliselt kirjutada Turingi masina käitamiseks, saab kirjutada ka JavaScripti. Seega on JavaScript Turingis täielik.

See selleks!

??? Kui teile meeldib see postitus, siis palun 1. ❤❤❤ see allpool Mediumis ja 2. palun jagage seda Twitteris. Võite allpool oleva kaardi retweetida ???

Minu muud postitused

VIIMASED: funktsionaalne programmeerimine JS-is - koos praktiliste näidetega (1. osa)

Funktsionaalne programmeerimine

  1. JavaScripti valmimine on lõpule jõudnud - selgitatud
  2. Funktsionaalne programmeerimine JS-is - koos praktiliste näidetega (1. osa)

ES6

  1. 5 JavaScripti halba osa, mis on ES6-s fikseeritud
  2. Kas ES6 klass on uus "halb" osa?

Veebipakk

  1. Veebipakk - segased osad
  2. Veebipaketi ja kuuma mooduli asendamine [HMR] (kapoti all)
  3. Webpacki HMR ja React-Hot-Loader - puuduv juhend

Mustand.js

  1. Miks Draft.js ja miks peaksite panustama
  2. Kuidas Draft.js esindab rikka teksti andmeid

Reageeri ja Redux:

  1. Sammhaaval juhend React Reduxi rakenduste loomiseks
  2. Juhend React Redux CRUD rakenduse loomiseks (3- leheline rakendus)
  3. Lähiseadmete kasutamine React Reduxi rakendustes
  4. Tugeva vormi kinnitamise lisamine Reduxi rakenduste reageerimiseks
  5. React Reduxi rakenduste turvamine JWT-märkidega
  6. Tehinguga seotud e-kirjade käitlemine rakenduses React Redux
  7. React Reduxi rakenduse anatoomia

Müügijõud

  1. React Reduxi rakenduste arendamine Salesforce'i Visualforce'is

Täname lugemast!