JavaScript on valmistumassa - selitetty

JavaScript on valmistumassa - selitetty

Jos aloitat funktionaalisen ohjelmoinnin oppimisen JavaScriptiä, kuulet todennäköisesti lambda-laskennasta, Turing-koneesta, Turingin täydellisestä ja jotenkin ”JavaScript on Turingin täydellinen”.

Mutta kukaan ei näytä selittävän yksinkertaisesti, mitä se todella tarkoittaa. Mikä on suhde b / wa Turingin "kone" ja JavaScript "kieli"? Useimmat ihmiset käyttävät myös ammattikieltä selittääkseen ammattikieltä näin:

Laskettavuusteoriassa tietojen manipulointisääntöjen järjestelmän (kuten tietokoneen käskyjoukko, ohjelmointikieli tai soluautomaatti) sanotaan olevan Turingin täydellinen tai laskennallisesti universaali, jos sitä voidaan käyttää minkä tahansa yksinauhaisen Turing-koneen simulointiin . Konsepti on nimetty englantilaisen matemaatikon Alan Turingin mukaan. Klassinen esimerkki on lambda calculus.

Joten yritän selittää nämä käsitteet yksinkertaisesti.

Turingin koneet

Tuolloin ihmiset halusivat tietää, kuinka luoda kone, joka pystyy tekemään kaikki tekemänsä laskelmat käsin. He halusivat tietää, kuinka rakentaa tällainen kone ja miten se voisi toimia.

Alan Turing keksi hypoteettisen koneen, joka pystyi ottamaan minkä tahansa monimutkaisen ohjelman ja suorittamaan sen. Se voidaan toteuttaa käyttämällä yksinkertaista nauhaa, päätä, joka liikkuu vasemmalle ja oikealle, voi tallentaa tietoja lukemalla, kirjoittamalla ja poistamalla neliösolujen sisällön. Tarpeeksi pitkä nauha ja riittävästi aikaa se voisi laskea minkä tahansa ohjelman.

Toisin sanoen hän selitti, kuinka joku voi rakentaa tietokoneen. Ja kutsui tietokonetta "Turingin koneeksi"

Trivia: Alan Turingin aikoina sana "tietokone" tarkoitti henkilöä, joka manuaalisesti laskee ohjelmia (ei koneita) :)

Niin voimakas mutta niin yksinkertainen

Turingin koneista tuli pian erittäin suosittuja, ja lopulta standardi, koska vaikka ne tarjosivat tehokkaan mekanismin kaiken laskemiseksi, ne oli myös helppo ymmärtää. Kuten alla olevassa videossa kuvataan, Turingin koneet käyttävät nauhaa tilojen seuraamiseen ja laskelmien suorittamiseen.

"Single" Vs "Multi" nauha Turing koneita

Yksi muu ammattikieltä, jonka kuulet Turingin koneista, on "yhden" nauhan käsite.

Turingin koneen alkuperäisessä versiossa oli vain pitkä yksittäinen nauha. Myöhemmin ihmiset keksivät käsitteen "useita" Turing-koneita, joissa käytettiin 2-5 nauhaa. Moninauhaiset Turing-koneet eivät olleet tehokkaampia kuin yksinauhaiset, mutta ne auttoivat yksinkertaistamaan ohjelmia.

Joten yksiselitteisen nauhan sanominen ei ole tarpeen.

Turing valmis

Jos fyysinen kone (kuten tietokone) tai virtuaalikone, joka on ohjelmisto (kuten JavaVM), voi ottaa minkä tahansa ohjelman ja suorittaa sen aivan kuten Turing-kone, niin sitä kutsutaan nimellä "Turing Complete". PS: Se on eräänlainen sertifikaatti.

Esimerkkejä: Turing täydellinen Vs Turing keskeneräinen kone

Laskin on hyvä esimerkki keskeneräisestä Turingin koneesta, koska se pystyy suorittamaan vain pienen ennalta määritetyn laskentaryhmän.

Kotitietokone (Mac tai PC) on kuitenkin täydellinen Turingin kone, koska se voi tehdä minkä tahansa laskelman, jonka Turingin kone voi tehdä, jos annamme sille tarpeeksi muistia ja aikaa.

"JavaScript on valmistumassa"

Jos ajattelee sitä, Turingin kone on vain käsite - se tarkoittaa, että ” asia ” (fyysisen tai virtuaalisen), joka vie minkä tahansa ohjelman ja ajaa se on lähinnä Turing Machine. Ja jos tuo "asia" voi ajaa jokaista ohjelmaa, jota "Turing Machine" voi ajaa, niin sitä kutsutaan "Turing Complete".

Jos ajattelet jotakin nykyaikaista ohjelmointikieliä, he ottavat myös (kirjoittamamme) ohjelmat syötteenä ja suorittavat ne. Lisäksi kaikki ohjelmat, jotka voidaan teoreettisesti kirjoittaa kirjoitettavaksi Turing-koneelle, voidaan kirjoittaa myös JavaScriptiä. Siksi JavaScript on Turing valmis.

Se siitä!

??? Jos pidät tästä viestistä, ole hyvä ja 1. ❤❤❤ se alla Mediumissa ja 2. jaa se Twitterissä. Voit uudelleentwiitata alla olevan kortin ???

Muut viestini

UUSIN: Toimiva ohjelmointi JS: ssä - käytännön esimerkkien avulla (osa 1)

Toiminnallinen ohjelmointi

  1. JavaScript on valmistumassa - selitetty
  2. Toiminnallinen ohjelmointi JS: ssä - käytännön esimerkkien avulla (osa 1)

ES6

  1. 5 JavaScriptin "huonoa" osaa, jotka on korjattu ES6: ssa
  2. Onko ES6: n "luokka" uusi "huono" osa?

WebPack

  1. Webpack - Hämmentävät osat
  2. Verkkopaketin ja kuumamoduulin vaihto [HMR] (konepellin alla)
  3. Webpackin HMR ja React-Hot-Loader - puuttuva käsikirja

Luonnos.js

  1. Miksi Draft.js ja miksi sinun pitäisi osallistua
  2. Kuinka Draft.js edustaa Rich Text -tietoja

Reagoi ja Redux:

  1. Vaiheittainen opas React Redux -sovellusten rakentamiseen
  2. Opas React Redux CRUD -sovelluksen rakentamiseen (3-sivuinen sovellus)
  3. Middlewaresin käyttö React Redux -sovelluksissa
  4. Vankan lomakevalidoinnin lisääminen reagoimaan Redux-sovelluksiin
  5. React Redux -sovellusten suojaaminen JWT-tunnisteilla
  6. Tapahtumaviestien käsittely React Redux -sovelluksissa
  7. React Redux -sovelluksen anatomia

Myyntivoima

  1. React Redux -sovellusten kehittäminen Salesforcen Visualforcessa

Kiitos lukemisesta!