Miniony tydzień zdominowały informację o zbliżającej się nowej wersji TypeScript oraz alternatywie dla FLoC jaką zaproponował Google. Trochę z boku przeszła również nie mała zapowiedź Deno 2! Przygotujcie sobie coś ciepłego do picia i życzymy miłej lektury!
1. TypeScript 4,6 Beta
W minionym tygodniu Microsoft pokazał betę kolejnej wersji języka TypeScript. Oznacza to, że pełnego wydania możemy spodziewać się już za kilka tygodni. Najnowsza wersja oznaczona jest numerkiem 4.6 i nie przynosi co prawda wielkich rewolucji, ale myślę, że warto przyglądnąć się nadchodzącym zmianom.
Zacznijmy od naprawy drobnej niekompatybilności pomiędzy JavaScriptem i TypeScriptem. Ten pierwszy w konstruktorze klasy umożliwia umieszczenie fragmentu kodu przed wywołaniem super, pod warunkiem że fragment ten nie odwołuje się do this. TypeScript do tej pory na etapie kompilacji wymagał, aby wywołanie super było pierwszą akcją wywoływaną w konstruktorze, Od wersji 4.6 zachowanie to ma zostać uspójnione.
class Base {
// ...
}
class Derived extends Base {
someProperty = true;
constructor() {
// previously: error! have to call 'super()' first because it needs to initialize 'someProperty'.
doSomeStuff();
super();
}
}
Czasami sposób w jaki działa kompilator TypeScript potrafi mnie kompletnie zaskoczyć. Nie inaczej było i tym razem, gdy z notatki od Microsoft dowiedziałem się, że kiedy kompilator sprawdza czy dwa typy mogą zostać do siebie przypisane, to przy osiągnięciu odpowiedniego poziomu rekurencji zakłada on, że typy są kompatybilne. Mimo, że na pierwszy rzut oka wygląda to przerażająco, po głębszym zastanowieniu logika ta ma oczywiście sporo sensu. Ze względu na zastosowanie strukturalnego typowanie, niemożliwe jest porównanie definicji obiektów, co stanowi wyzwanie w sytuacji, gdy poprzez odpowiednie zastosowanie generyków da się zdefiniować klasę o nieskończonej definicji. Usprawnienie, które przygotował Microsoft nie rozwiązuje całkowicie problemów strukturalnego typowania, ale sprawia że TypeScript w niektórych przypadkach będzie w stanie wykryć niekompatybilności pomiędzy dwoma bardzo zagnieżdżonymi typami.
interface Source<T> {
prop: Source<Source<T>>;
}
interface Target<T> {
prop: Target<Target<T>>;
}
function check(source: Source<string>, target: Target<number>) {
// Resolving those types structure will result in an infinite loop.
// Because of that compiler uses depth heuristic
target = source;
}
interface Foo<T> {
prop: T;
}
declare let x: Foo<Foo<Foo<Foo<Foo<Foo<string>>>>>>;
declare let y: Foo<Foo<Foo<Foo<Foo<string>>>>>;
// In TypeScript 4.5 this will work ok. In TypeScript 4.6 compiler will return error
x = y;
Ostatnią interesującą nowością jest lepsze wsparcie dla typów zależnych. Co tu dużo mówić, mała rzecz, a cieszy.
type Func = (...args: ["a", number] | ["b", string]) => void;
const f1: Func = (kind, payload) => {
if (kind === "a") {
payload.toFixed(); // 'payload' narrowed to 'number'
}
if (kind === "b") {
payload.toUpperCase(); // 'payload' narrowed to 'string'
}
};
f1("a", 42);
f1("b", "hello");
A Wy jak oceniacie nowego TypeScripta? Ja przyznam szczerze nie czekam z wypiekami na twarzy na żadną z funkcjonalności zaprezentowanych w notatce od Microsoft, ale traktuję to jako pewien wyznacznik dojrzałości jaką osiągnął już TypeScript.
Źródła:
https://devblogs.microsoft.com/typescript/announcing-typescript-4-6-beta/
Zainstaluj teraz i czytaj tylko dobre teksty!
2. Google przygotował alternatywę dla FLoC
FLoC był tematem, który na przestrzeni zeszłego roku przewijał się w nagłówkach bardzo regularnie. Jeśli nie słyszeliście jeszcze o Federated Learning of Cohorts to jest to algorytm, który po stronie klienta analizuje historię przeglądania i przypisuje użytkownika do odpowiedniej kohorty. W wstępnym rozwiązaniu przygotowanym przez Google kohort było 256, ale rozważane było również zwiększenie tej liczby do zawrotnych 65 536. Dzięki zastosowaniu FLoC dane o aktywności użytkownika nigdy nie opuszczały by jego przeglądarki, a równocześnie reklamodawcy nie traciliby możliwości precyzyjnego targetowania swoich reklam.
Już przy pierwszych beta testach firmy stawiające na prywatność swoich użytkowników, takie jak Apple, Mozilla czy Brave zwróciły uwagę, że w tej beczce miodu jest też łyżka dziegciu. I to całkiem spora łyżka. Do tej pory, jeśli portal chciał jednoznacznie zidentyfikować użytkownika, to musiał przeanalizować kilka milionów rekordów. Po wdrożeniu nowego rozwiązania liczba ta zmniejszyła by się nawet do zaledwie kilku tysięcy, bo strony będą mogły odczytać id kohorty i w ten sposób mocno zawęzić obszar poszukiwań. Ponadto, jeśli na stronie logujemy się za pomocą maila, to natychmiast można by powiązać nas z naszymi zainteresowaniami, a nawet zapisać je u siebie na serwerze. Wbijając ostatni gwóźdź do trumny, generowanie kohort odbywałoby się na podstawie całej historii przeglądanych stron, nie tylko takich, które używają odpowiednich narzędzi do śledzenia użytkownika.
Pod koniec zeszłego roku Google ogłosił, że wycofuje się z planów wdrożenie FLoC na szeroką skalę i niedługo zaproponuje lepsze rozwiązanie. W minionym tygodniu do sieci trafiły pierwsze techniczne dokumenty opisujące alternatywę, jaką planują zaimplementować programiści z Google. Zamiast przypisywać użytkownika do jednej kohorty, będzie on przypisywany do listy tematów, którymi się interesuje. Te zaś nie będą dla stron publicznie dostępne. Kiedy strona poprosi o tematy przypisane do użytkownika, przeglądarka zwróci nie wszystkie, a ich losowo wybrany podzbiór. W ten sposób portale zyskać mają cenne informacje umożliwiające profilowanie reklam, ale równocześnie informacji tych ma być na tyle mało, że nie możliwe będzie pełne sprofilowanie użytkownika. Na ten moment nie wiadomo jeszcze, jak duża będzie lista tematów do których przypisany będzie mógł zostać użytkownik, ale Google zapowiada, że będą one mocno ogólne. Dla przykładu, wśród tematów znajdziemy zapewne taki dotyczący psów, ale nie znajdziemy już żadnego dotyczącego ich konkretnej rasy.
Wygląda na to, że tematy rzeczywiście adresują wiele z problemów, z którymi borykał się FLoC. Wciąż nierozwiązane pozostaje kontrowersje związne ze śledzeniem aktywności użytkownika na wszystkich odwiedzanych przez niego stronach. Do tego dochodzi jeszcze problem z możliwością manipulowania przez przeglądarki losowością dostarczanych portalom tematów, tak aby zaszkodzić konkurencji. No cóż – ja z niecierpliwością czekam na odpowiedź ze strony takich firm jak Brave czy Mozilla.
Źródła:
https://www.tomsguide.com/news/google-kills-floc-debuts-topics
Zainstaluj teraz i czytaj tylko dobre teksty!
3. Deno w 2022 – pora przygotować się na Deno 2!
2021 był dla Deno bardzo dobrym rokiem. Od stycznia do grudnia opublikowanych zostało aż 10 wersji tego środowiska uruchomieniowego. Wśród nowych funkcjonalności znalazły się takie usprawnienia jak możliwość uruchamiania kodu napisanego w Rust, nowy moduł http czy tryb kompatybilności z modułami pisanymi dla Node.js. Deno trafił również do tabeli wsparcia w dokumentacji MDN, co wielu uznaje za oficjalne przyjęcie do pierwszej ligi.
Poza pracą nad kolejnymi funkcjonalnościami zespół odpowiedzialny za Deno przekształcił się w pełnoprawną firmę i zebrał dofinansowanie w wysokości 4.9 miliona dolarów. W minionym roku firma opublikowała także swój pierwszy produkt – chmurowe środowisko uruchomieniowe dla Deno o nazwie Deno Deploy.
To co jest zdecydowanie ciekawsze od przeszłości Deno to jego przyszłość. W 2022 zespół rozwijający to środowisko uruchomieniowe planuje rozpocząć pracę nad Deno 2.0. Premiera zaplanowana jest jeszcze w pierwszej połowie tego roku. Wydanie to skupiać się będzie na lepszym wsparciu dla środowiska npm, poprawieniu Developer Experience i ma otworzyć drogę dla alternatywnych sposobów zarządzania paczkami. Trzeba przyznać, że jest na co czekać!