it-swarm-eu.dev

Jaké argumenty jsou pro slabé psaní?

Tohle přišlo v diskuzi s kamarádem a já se cítil tvrdě přemýšlel vymyslet nějaké dobré argumenty. Jaké výhody přináší slabá psaní?

41
Fishtoaster

Problém s tímto druhem diskuse je jednoduše v tom, že pojmy „slabé psaní“ a „silné psaní“ nejsou definovány, na rozdíl od například termínů „statické psaní“, „dynamické psaní“, „explicitní psaní“, „implicitní psaní“, “ kachní psaní "," strukturální psaní "nebo" nominální psaní ". Heck, dokonce pojmy „manifestní typizace“ a „latentní typizace“, které jsou stále otevřenými oblastmi výzkumu a diskuse, jsou pravděpodobně lépe definovány.

Dokud tedy váš přítel neposkytne definici pojmu „slabé psaní“, který je dostatečně stabilní, aby sloužil jako základ diskuse, nemá smysl odpovídat na tuto otázku.

Bohužel, kromě Nickova odpověď , nikdo z respondentů se neobtěžoval ani poskytnout svou definici, a v některých komentářích vidíte zmatek, který generuje. Je těžké říci, protože nikdo ve skutečnosti neposkytuje jejich definice, ale myslím, že počítám alespoň tři různé, jen na této stránce.

Některé z nejčastěji používaných definic jsou (a ano, já vím , že skoro žádná z nich nedává žádný smysl, ale to jsou definice, které jsem vidění lidé skutečně používají):

  • slabé psaní = nebezpečné psaní/silné psaní = bezpečné psaní
  • slabé psaní = dynamické psaní/silné psaní = statické psaní
  • slabé psaní = psaní kachny/silné psaní = nominální psaní
  • slabé psaní = strukturální psaní/silné psaní = nominální psaní
  • slabé psaní = implicitní psaní/silné psaní = explicitní psaní
  • slabé psaní = latentní psaní/silné psaní = manifestní psaní
  • slabé psaní = žádné psaní/silné psaní = psaní
  • slabé psaní = implicitní obsazení/silné psaní = pouze explicitní obsazení
  • slabé psaní = implicitní nebo explicitní obsazení/silné psaní = žádné obsazení vůbec
  • slabé psaní = implicitní konverze/silné psaní = pouze explicitní konverze
  • slabé psaní = implicitní nebo explicitní konverze/silné psaní = žádné konverze vůbec
  • slabé psaní = interpretace/silné psaní = kompilace
  • slabé psaní = pomalé/silné psaní = rychlé
  • slabé psaní = sběr odpadu/silné psaní = ruční správa paměti
  • slabé psaní = ruční správa paměti/silné psaní = sběr odpadu
  • … a mnoho dalších

Tři definice, které se zdají být nejvíce široce používány, však existují

  • slabé psaní = váš hloupý mizerný programovací jazyk/silné psaní = můj super-úžasný programovací jazyk
  • slabé psaní = každý jiný programovací jazyk/silné psaní = jediný programovací jazyk, který jsem se kdy obtěžoval učit (obvykle buď Java, C # nebo C++; kupodivu lidé, kteří se jako první a jediný jazyk učí např. Haskell nebo Scheme, se nezdá tento světonázor)
  • slabé psaní = každý jazyk, kterému nerozumím/silné psaní = Java (nahrazení C # nebo C++ podle přání)

Pokud se všichni nedohodnou na definici toho, co je „slabé psaní“ , nemá ani smysl přemýšlet o tom, jaké jsou jeho výhody. Výhody co? Ještě horší je, že neexistuje-li vůbec žádná definice , pak si každý může jen přesunout své definice tak, aby vyhovovaly jejich argumentům, a každá diskuse je do značné míry zaručena do plamenem.

Já sám jsem v průběhu let osobně několikrát změnil svou vlastní definici a nyní jsem dospěl k bodu, kdy už tyto termíny už nepovažuji za užitečné. Také jsem si myslel, že slabé psaní (ve svých různých definicích) má místo ve skriptování Shell, ale vždy, když musím vyřešit stejný problém v Bash a PowerShell, jsem bolestivě připomněl, jak jsem se mýlil.

46
Jörg W Mittag

Pamatujte, že existují dva hlavní pojmy, které jsou běžně zaměňovány:

Dynamické psaní

O programovacím jazyce se říká, že je dynamicky zadáván, když je většina jeho kontroly typu prováděna za běhu na rozdíl od kompilace. V dynamickém psaní mají hodnoty typy, ale proměnné ne; to znamená, že proměnná se může vztahovat na hodnotu libovolného typu.

Výhody zde často odmítají jen pro „nové“ programátory, ale mohou být také výhodné pro všechny programátory:

if (!(arr is Array)) arr = [arr]; // is, instanceof, .constructor ==, whatever

Méně kódu v každém případě, kdy byste jinak museli odevzdat nebo přiřadit novou hodnotu:

if (data is Array)) {
    i = data.length; // no i = ((Array)data).length or Array myArr=(Array)data;
}

Volné nebo slabé psaní

Slabé psaní znamená, že jazyk při použití implicitně převádí (nebo přetypuje) typy.

Výhody:

  • Předá libovolnou hodnotu typu jako parametr funkci . Užitečné pro zpětná volání, flexibilní API a umožňuje jednodušší implementaci uzávěrů.
  • Implicitní booleovské vyhodnocení . Jakýkoli typ lze hodnotit jako booleovský. To má také vedlejší výhody, jako je část ||, Kterou lze použít při přiřazení bez převodu na booleovský jazyk:

    var a = param || defaultValue;
    
  • Opět platí, že méně kódu:

    var num = 5;
    var str = "Hello";
    input.innerHTML = input.value = num;
    for (var i=0; i < input.value; i++) { ... }
    

    Dokonce Java muselo jít částečně), s implicitním voláním .toString() při kombinování objektů s String; jinak Java = programátoři by to nadávali po celý den (příkazy protokolu by byly mimo kontrolu).


Obě definice jsou z http://en.wikipedia.org/wiki/Type_system . Řeklo to lépe, než jsem mohl.

25
Nicole

Hlavním argumentem pro slabé psaní je výkon. (to má odpovědět na otázku OP, jak je uvedeno). Existuje mnoho dobrých diskusí o dynamických vs. statických, implicitních vs. explicitních. atd.

C je nejslavnější slabě typovaný jazyk a neprovádí žádnou kontrolu doby běhu ani kontrolu kompilace času typu proměnných. V podstatě můžete obsadit char * do int * a jazyku by to bylo jedno. Tak proč bys to udělal?

Programování C je velmi blízko tomu, jak byste dělali věci s Assembly, takže jsou časy, kdy vám záleží jen na adrese. Není neobvyklé obsadit nebo předat void * odkaz právě z tohoto důvodu. Pokud víte, jak je paměť organizována (opět koncern C a Assembly), můžete provést docela pěkné výpočty na základě adresy v void * získat potřebné informace. To vám umožní zkratovat proces, kterým byste museli projít například v Java).

Zatímco kontrola typu run-time nemá mimořádnou režii, existují chvíle, kdy stačí, aby kritická sekce byla příliš pomalá. V tomto případě mám na mysli hlavně vestavěné programování a systémy v reálném čase.

To znamená, že ve většině případů má systém se silným typem, který je buď zkontrolován čas kompilace, nebo za běhu, pomáhá častěji než to bolí.

7
Berin Loritsch

Slabé psaní je pro nováčky obvykle snazší pochopit, například ve věcech jako Excel, javascript a vbscript. Obchodujete také s určitou rychlostí vývoje pro možné chyby.

Dobrý článek na toto téma: Silné psaní vs Silné testování

2
Homde