Zastanawiam się, dlaczego słabo pisane języki wciąż są aktywnie rozwijane. Na przykład, jaką korzyść można czerpać z umiejętności pisania
$someVar = 1;
(...) // Some piece of code
$someVar = 'SomeText';
zamiast używać znacznie innej, mocno wpisanej wersji
int someInt = 1;
(...)
string SomeString = 'SomeText';
To prawda, że musisz zadeklarować zmienną dodatkową w drugim przykładzie, ale czy to naprawdę boli? Czy wszystkie języki nie powinny dążyć do silnego pisania na maszynie, ponieważ wymuszają bezpieczeństwo typu w czasie kompilacji, unikając w ten sposób pewnych pułapek podczas rzutowania?
weak-typing
DotNetStudent
źródło
źródło
Odpowiedzi:
Pisanie mocne / słabe oraz pisanie statyczne / dynamiczne są ortogonalne.
Mocna / słaba dotyczy tego, czy rodzaj wartości ma znaczenie, mówiąc funkcjonalnie. W słabo wpisanym języku możesz wziąć dwa ciągi, które są wypełnione cyframi i wykonać na nich dodawanie liczb całkowitych; w silnie napisanym języku jest to błąd (chyba że najpierw rzutujesz lub konwertujesz wartości na poprawne typy). Mocne / słabe pisanie nie jest czymś czarno-białym; większość języków nie jest ani w 100% ścisła, ani w 100% słaba.
Wpisywanie statyczne / dynamiczne dotyczy tego, czy typy wiążą się z wartościami, czy z identyfikatorami. W języku dynamicznie wpisywanym możesz przypisać dowolną wartość dowolnej zmiennej, niezależnie od typu; typowanie statyczne definiuje typ dla każdego identyfikatora, a przypisywanie z innego typu jest błędem lub skutkuje niejawnym rzutowaniem. Niektóre języki przyjmują podejście hybrydowe, dopuszczając zarówno statycznie deklarowane typy, jak i nietypowe identyfikatory („wariant”). Istnieje również wnioskowanie o typie, mechanizm, w którym możliwe jest pisanie statyczne bez jawnego deklarowania typu wszystkiego, poprzez kompilator rozróżniający typy (Haskell używa tego szeroko, C # eksponuje to poprzez
var
słowo kluczowe).Słabe dynamiczne programowanie pozwala na pragmatyczne podejście; język przez większość czasu ci nie przeszkadza, ale też nie wkracza, gdy strzelasz sobie w stopę. Natomiast silne pisanie statyczne popycha programistę do wyraźnego wyrażenia pewnych oczekiwań dotyczących wartości w kodzie, w sposób umożliwiający kompilatorowi lub interpreterowi wykrycie klasy błędów. Przy dobrym systemie typów programista może dokładnie zdefiniować, co można, a czego nie można zrobić z wartością, a jeśli przypadkiem ktoś spróbuje czegoś niepożądanego, system typów może często temu zapobiec i dokładnie pokazać, gdzie i dlaczego coś idzie nie tak.
źródło
&
łączenie) operacje są podobne"12"+3
lub45 & "6"
nie stanowią niejednoznaczności (obliczają odpowiednio 15 i „456”). W języku silniej typowanym operator „+” może być bezpiecznie przeciążony zarówno dla łączenia łańcuchów, jak i dodawania liczb, bez powodowania dwuznaczności, ponieważ operacje na łańcuchach i liczbach byłyby zabronione. Problemy pojawiają się, gdy język określa gwoździe w dół ani typy, ani operacje, które należy wykonać.Słabe pisanie jest bardziej podobne do
1 == "TRUE"
. Ta sekcja na Wikipedii ładnie ilustruje różnicę.Pamiętaj, że żaden przykład z wikipedii nie jest wpisany statycznie, do czego odwołujesz się w drugim przykładzie.
Więc jeśli pytanie brzmi, dlaczego ludzie używają dynamicznie pisanych języków, odpowiedź brzmi: statyczne systemy typów nakładają na ciebie ograniczenia. Wiele osób po prostu nigdy nie pracowało z ekspresyjnym systemem typu statycznego, co prowadzi do wniosku, że wady typowania statycznego przeważają nad korzyściami.
źródło
Języki słabo typowane są wciąż rozwijane, ponieważ ludzie ich używają i lubią. Jeśli nie lubisz słabego pisania, nie używaj słabo pisanych języków. Stwierdzenie, że coś jest jedyną prawdziwą drogą i że każdy powinien to zrobić jedyną prawdziwą drogą, ignoruje złożoność świata.
źródło
Niekoniecznie. Nauka celu C: elementarz zajmuje się tym pytaniem bezpośrednio w kontekście celu C:
źródło