💾 Archived View for soviet.circumlunar.space › zwatotem › diff › pomysly.gmi captured on 2022-07-16 at 14:11:55. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-03)
-=-=-=-=-=-=-
Pamiętaj, że tekst ten pisałem dla siebie, więc styl może być lekko dziwny.
Notatka tematyczna: design systemów komputerowych. Tak więc większy nacisk można położyć na coś co nazywa się typami. Tak więc idea jest taka, żeby każdy typ; podstawowy, czy kompozycyjny miał swoją reprezentację w runtimie.
Kierowałem się tu trochę doświadczeniem wyniesionym z C++. Tak więc za typ podstawowy uważam taki, który może być reprezentowany przez procesor, a więc głównie liczby całkowite, zmiennoprzecinkowe, pojedyncze znaki tekstu ASCII. Za typy złożone uważam odpowiedniki `struct` w tymże języku, w pamięci reprezentowany zazwyczaj jako sekwencja bajtów odpowiadających typom składowym.
Reprezentacja typu zawiera między innymi referencje do rodziców w modelu dziedziczenia, referencję do typu każdej składowej oraz definicję działań na instancjach tego typu. Typy proste z racji swojej prostoty będą mogły odniesienia do działań definiować jako wskaźniki na wejścia układów zapisanych w komponencie FPGA procesora.
Tutaj mam na myśli własny pomysł konstrukcji procesora. Nie mam żadnego doświadczenia w mikroelektronice, więc nie wiem, czy jest to z wydajnościowego i konstrukcyjnego punktu widzenia opłacalne. Pomysł opiera się na połączeniu silnych stron procesora i programowalnych układów logicznych. Procesor w każdym kroku oprócz adresu danych na których wykonywana jest operacja otrzymywałby również "adres tej operacji", tj. adres wejścia na blok FPGA, na którym znajduje się fizyczna realizacja danej operacji. W teorii mogłoby to zapewnić dynamiczną akcelerację pewnych operacji w zależności od potrzeb. W praktyce - nie jestem przekonany co do opłacalności rozwiązania i wystarczającej jego szybkości. Pomimo, że układy SoC z częścią FPGA istnieją na rynku, takiego poziomu integracji jescze nie widziałem.
Typy złożone mogą definiować operacje jako podprogramy. Takie definicje typu mogą zostać zapisane, jak i wczytane z dysku. Mówiąc o dysku; system plików jest zarzucony na rzecz systemu danych. Oznacza to jednolitość danych w pamięci trwałej i operacyjnej. Dane są zawsze zgodne z istniejącym systemem typów. Wymiana pomiędzy RAMem a dyskiem jest realizowana przez system w sposób niejawny. Wszystkie dane są w systemie obowiązkowo pamiętane wewnątrz przestrzeni nazw. Dane mogą przybierać różnorakie przydatne formy, takie jak pliki, drzewa, zbiory, mapy, struktury kontroli wersji, itd.
Tu opieram się na fakcie, jak dane często i niepotrzebnie są serializowane do postaci tekstowej w celu przechowywania, co nie ma sensu w obliczu faktu, że ich reprezentacja jest w zasadzie gotowa do przeniesienia na dysk w postaci binarnej, podczas gdy kodowanie, a także (w szczególności) parsowanie danych oznacza duże obciążenie procesora. W praktyce oznacza to zerwanie z większością plików. Podejście programisty, jak i użytkownika do tego co kiedyś było plikiem powinno drastycznie się zmienić. Tak więc to, co kiedyś było plikiem z rozszerzeniem mp3, otwieranym przez pewne programy na komputerze, teraz jest "zmienną" typu MP3, którą jako argumenty mogą przyjąć pewne funkcje.