Az rossz statikus gépelési, programozó jegyzetek
A közelmúltban egyre több ember választja programozási nyelvek dinamikus gépelés. Hívei dinamikus gépelés azt állítja, hogy két hét alatt, hogy tanulmányozza az Erlang, akkor soha nem indul kódot írni a harcban. Mi mindig internetek dinamikusan típusos, hogy gépelési hibákat gyorsan és könnyen kiküszöbölhető, de az igazi probléma az, hogy bonyolult logikai hibák, ahol statikus gépelési még az sem segítene. Statikus gépelési - lassú és unalmas, és Clojure könnyen írni a Mortal Kombat két éjszaka. Nézzük meg, hogy miért valójában nem akarja, hogy a dinamikus gépelni.
Kezdjük egy egyszerű. Mindenki tudja, hogy statikusan típusos nyelv általában gyorsabb dinamikusan típusos nyelv. Ez nem meglepő, hiszen egy statikusan típusos nyelv típusok ellenőrzik fordítási időben, ezért gyakran nem kell, hogy adatokat tároljon a típus egy lefordított programot, és minden bizonnyal nem kell állandóan újra megvizsgálja típusok futásidőben. Ezen túlmenően, pontos tájékoztatás a fajta a kód lehetővé teszi, hogy szükség esetén további optimalizálást lehetetlen dinamikusan típusos nyelv. Akár tetszik, akár nem, a sebesség is fontos, amikor kiderül, hogy tudod használni 200 helyett szerverek alkalmazása csak 10.
Még dinamikusan típusos nyelv használata változó tárolja az értékeket különböző típusú, például egy string vagy több helység kód szaga. Ennek eredményeként, akkor is következtetni típusú szem előtt tartva. Csak, ellentétben a fordító, néha téved. Néhány dinamikusan típusos nyelv rendelkezik választható típusellenőrzés fordításkor. De például, abban az esetben az Erlang (1) működik a szer lassabb, mint típusellenőrzés Haskell, (2), ha azt valóban meg kell következtetni típusú kézi vagy félautomatikus segítségével Typer, (3) a megfelelő programot, dializálóban, nagyon az átkozott. Ez nem meglepő, hogy a gyakorlatban gyakran erlangisty levágott Dialyzer és kimeneti típusok szem előtt tartva. A kérdés az, mert még mindig a fajta, hogy miért nem utasíthatja a fordító kimenete és ellenőrizze őket?
Kiegészítés: Független források számoltak be. hogy hasonló problémák zajlanak a világban Clojure.
Egyes programozók elég igazságtalanul bírálta egy statikusan típusos nyelv bőbeszédűség vagy a rugalmasság hiánya. Tény, hogy semmi akadálya annak, például írásban Haskell, Erlang, ha csavarni a dializálóban. Ez azt jelenti, hogy használja listákat, párok, vonósok és a számok, anélkül, hogy bármilyen további típusok. Ha hirtelen akar bejelenteni egy listát, amelyben tárolják a húrok és a számok, akkor egyszerűen be az adatok típusát StrOrInt = S string | Azt egészhez, majd bejelenti a lista StrOrInt'ov. Vagy vegyük a kész típus sem. Vagy használhatja egzisztenciális típusok.
Sokan tévesen úgy vélik, hogy a statikus gépelési védi csak korlátozott csoportját hibák, például, hogy nem ad meg a vonalat a számot. Sőt, ez segíthet abban, hogy sokkal több. Például egy webes keretrendszer, Yesod a fajta, többek között arra, hogy ellenőrizze, hogy a kérelem nem említi a nem létező URL-t. Az egész Haskell típusok alkalmazásával végeztük felett a mellékhatásokat. Többek között ez pozitív hatással van a teljesítményére a kérelmet. Például, ha azt szeretnénk, hogy számításokat végezni néhány adatot, ha egyszer kap őket a „piszkos” kódot, majd át a tiszta funkció ahelyett, hogy folyamatosan kapja ugyanazokat az adatokat különböző funkciókat. A Haskell, köszönhetően a fajta garancia arra, hogy ha dolgozik az STM. míg egy ügyletet, megpróbál nem múlik semmi a hálózaton, és amikor dolgozik Sablon Haskell -, hogy nem illeszthetők sablont, ha nem tartozik.
Mivel a fajta kevesebb időt minden rutin, mint O, és írja ellenőrzi a fejedben, hogy megtalálja és megszüntesse triviális hiba, kód optimalizálása, amely, úgy tűnik, és lassítják a semmiből, és írásban unalmas és unalmas teszteket „két sorozat kettő az négy. " Jelentősen egyszerűsíti újratervezés. Általában helyett figyel és mindez ostobaság, te mit kell tennie, és programozó - írásban jellemző.
By the way, a vizsgálatok. A tapasztalat azt mutatja, hogy meggyőzni munkatársait kell írni teszteket nehéz. Ami igazán kell vallanom, még önmagának, hogy nem könnyű meggyőzni. Írja tesztek unatkozik. Hogy támogassa őket kell időt tölteni. A valós világ állandóan változó alkalmazási követelményeknek. Ez azt jelenti, állandó újraírás vizsgálatok. Így a programozók vagy lassabb, vagy meg kell felvenni további embereket, hogy fenntartsák teszteket. Amikor azt vizsgáljuk, egy nagy és komplex alkalmazás vizsgálatokat is átalakíthatjuk egy nagy és összetett alkalmazás, amely nem kevesebb, mint a teszt optimalizálni kell, valamint a hibaelhárítás. A gyakorlatban lehetetlen, hogy fedezze a tesztek 100% a kódot, és hogyan lehet automatizálni a vizsgálati kérelmek, például a fordítóprogramok, háromdimenziós játékok vagy a keresőprogramok nem értem. Én nem beszélek arról a tényről, hogy a vizsgálatokat gyakran egyszerűen eldugul.
Végül, mivel hiányzik a megfelelő idegennyelv statikus gépelési gyakran nevezik a nehéz tanulás. Először is, én személy szerint ebben a témában komoly kétségei vannak. Nem mondanám, hogy a Scala vagy OCaml sokkal nehezebb megtanulni, mint a Perl vagy Erlang. És a Haskell, sőt, nem túl nehéz, csak meg kell tanulni, hogy lassan és megfontoltan, hanem sietve. Másodszor, még ha ez így van, a gyakorlatban nem valószínű, hogy van egy erős vágy, hogy írjon egy projekt Erlang egy programozó, aki könyvet olvasni egy hete Cesarini és Thompson. A legvalószínűbb, akkor akar találni valakit, aki legalább hat hónappal írt Erlang bármilyen proektiki maguknak. És harmadszor, akkor jobb, ha tölteni N hónap, hogy tanulmányozza a Haskell, majd írjuk be rajta nagyon illik a kódot, mint egy pár hétig, hogy megtanulják bármely más nyelven, és megérteni, hogyan is kell írni rajta, csak néhány évvel később.
Összefoglalva, a statikus gépelési eszembe a tartalék ejtőernyő. Az ejtőernyős ugrás, hogy egy kicsit kényelmesebb, és megnyerte a tömeget, hogy hülye tartalék ejtőernyő sohasem jöhet. Amennyiben arra a következtetésre jutunk, hogy ettől a tartalék ejtőernyő csak feleslegesen terhet ejtőernyősök?