Na przykład, jeśli komputer 10111100zapisał jeden konkretny bajt pamięci RAM, w jaki sposób komputer może interpretować ten bajt jako liczbę całkowitą, znak ASCII lub coś innego? Czy dane typu są przechowywane w sąsiednim bajcie? (Nie sądzę, aby tak się stało, ponieważ spowodowałoby to użycie podwójnej ilości miejsca na jeden bajt.) …
Zaczynam osobiste badanie bibliograficzne algorytmów sprawdzania typu i chcę uzyskać wskazówki. Jakie są najczęściej stosowane algorytmy sprawdzania typu, strategie i techniki ogólne? Szczególnie interesują mnie złożone algorytmy sprawdzania typu, które zostały zaimplementowane w powszechnie znanych, silnie statycznych językach, takich jak na przykład C ++, Java 5+, Scala lub inne. IE, …
Pracuję nad kompilatorem dla języka konkatenatywnego i chciałbym dodać obsługę wnioskowania typu. Rozumiem Hindleya-Milnera, ale nauczyłem się teorii typów, więc nie jestem pewien, jak ją dostosować. Czy następujący system jest dźwiękowy i można go w sposób zdecydowanie wywnioskować? Termin jest literałem, kompozycją terminów, cytatem terminu lub prymitywem. e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= …
Załóżmy, że chcę zbudować system operacyjny oparty na bardzo małym macierzystym dolnym jądrze, które działa jako interpreter / środowisko wykonawcze kodu zarządzanego i większe górne jądro skompilowane do nienatywnego języka maszynowego (bajtowy kod Java, CIL itp.). Przykładami podobnych systemów operacyjnych byłyby Osobliwość i Kosmos . Jakie pułapki i wyzwania związane …
Jeśli funkcja ma typ zwracany ⊥ ( typ dolny ), oznacza to, że nigdy nie zwraca. Może na przykład wyjść lub rzucić, obie dość zwyczajne sytuacje. Przypuszczalnie jeśli funkcja miała parametr typu ⊥, nigdy nie mogłaby (bezpiecznie) zostać wywołana. Czy są kiedykolwiek jakieś powody, by zdefiniować taką funkcję?
Uwielbiam wszystko, co jest czasem kompilacji i uwielbiam pomysł, że po skompilowaniu programu powstaje wiele gwarancji dotyczących jego wykonania. Mówiąc ogólnie, system typu statycznego (Haskell, C ++, ...) wydaje się dawać silniejsze gwarancje czasu kompilacji niż jakikolwiek system typu dynamicznego. Z tego, co rozumiem, Ada idzie jeszcze dalej w zakresie …
Więc idę z książką HoTT z niektórymi ludźmi. Stwierdziłem, że większość typów indukcyjnych, które zobaczymy, można zredukować do typów zawierających tylko zależne typy funkcji i wszechświaty, przyjmując typ rekurencji za inspirację dla typu równoważnego. Zacząłem szkicować, jak sądzę, że to zadziała i po pewnym potknięciu doszedłem do tego, co uważałem …
Zwrócono mi uwagę, że koszt wnioskowania o typ w funkcjonalnym języku, takim jak OCaml, może być bardzo wysoki. Twierdzenie jest takie, że istnieje ciąg wyrażeń taki, że dla każdego wyrażenia długość odpowiedniego typu jest wykładnicza względem długości wyrażenia. Wymyśliłem sekwencję poniżej. Moje pytanie brzmi: czy znasz sekwencję z bardziej zwięzłymi …
Coq zawiera wyrażenia let w swoim podstawowym języku. Możemy tłumaczyć wyrażenia let na takie aplikacje: let x : t = v in b ~> (\(x:t). b) v Rozumiem, że to nie zawsze działa, ponieważ wartość vnie byłaby dostępna podczas sprawdzania typu b. Można to jednak łatwo naprawić poprzez specjalną obudowę …
W Concepts in Programming Languages John Mitchell pisze, że statyczne sprawdzanie typów jest z konieczności konserwatywne (zbyt surowe) z powodu problemu zatrzymania. Podaje jako przykład: if (complicated-expression-that-could-run-forever) then (expression-with-type-error) else (expression-with-type-error) Czy ktoś może udzielić nieskomplikowanej odpowiedzi, która naprawdę byłaby kwestią praktyczną? Rozumiem, że Java zezwala na dynamicznie sprawdzane rzutowania …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.