Wpis z mikrobloga

Języki c# i java mają dług techniczny którego nie da się naprawić nie zrywając wstecznej kompatybilności. Były tworzone z nullami, z mechanizmem try-catch (ok, dyskusyjne, zmierzam do tego że mając krotki (tuples) można robić mechanizm obsługi błędów jak z Rust albo Go), bez union-types, bez pattern matching. Problem polega na tym że ze względu na zachowanie wstecznej kompatybilności "biblioteki standardowe" tych języków nigdy nie dostosują się do nowych funkcji języków, nawet gdy te je zyskają.
Poza tym są to interpretowane kobyły które żrą masę pamięci.
Dlatego powinniśmy iść w nowe języki kompilowane do binarek i ewentualnie statycznie łączone typu Go, Rust, Zig, Crystal. Nie wymieniam tu C++ bo nie ma mechanizmu refleksji który jest mega przydatny a wymienione języki posiadają go w formie przynajmniej podstawowej.
Nie pozostawaj bierny
Przyszłość jest w Twoich rękach
Piramidy zbudowali kosmici
#programowanie #csharp #java
  • 41
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Języki c# i java mają dług techniczny którego nie da się naprawić nie zrywając wstecznej kompatybilności. Były tworzone z nullami, z mechanizmem try-catch (ok, dyskusyjne, zmierzam do tego że mając krotki (tuples) można robić mechanizm obsługi błędów jak z Rust albo Go), bez union-types, bez pattern matching. P


@nunczako: Nie wiem, jak w Javie, ale dopasowanie do wzorca jest w C# od 7.0 (sprowadza się nieco do switch/case'a na sterydach,
  • Odpowiedz
Dlatego powinniśmy iść w nowe języki kompilowane do binarek


@nunczako: tak, a następnie bohatersko przepisać na nowo wszystko, co zostało stworzone przez ostatnie dwie dekady ( ͡° ͜ʖ ͡°)
Myślę, że celując w środowisko programistów JS miałbyś większy poklask, tam lubią hype driven development.
  • Odpowiedz
@Czesiowcy: Czy zmiana języka na nowszy (c#) spowodowała że stary projekt przestał się kompilować? raczej nie, co najwyżej zgłaszane są jakieś warningi , to mam na myśli wsteczną kompatybilność
  • Odpowiedz
@Czesiowcy: co miałeś na myśli pisząc ", jeśli odpalisz nienullowalne typy referencyjne"? to świadome zaznaczenie przez programistę na początku pliku, że tak "włączam nienullowalne typy referencyjne"? to nie łamie wstecznej kompatybilności
  • Odpowiedz
@globalbus: w JS też kodzę, ale właściwie raczej chciałem zwrócić uwagę na problem tego że fajne języki choć się rozwijają to wciąż ciągnie się za nimi dług techniczny bibliotek standardowych projektowanych wtedy gdy te języki nie miały wielu nowych opcji
  • Odpowiedz
@nunczako: łamie, jeśli masz kod upstrzony zwrotkami albo potencjalnymi nulli, a w pliku MSBuilda dodajesz nullowalne typy referencyjne bez żadnych zmian. Nagle okazuje się, że nie wolno Ci zwrócić nulla bez jawnej deklaracji, że ta zmienna pozwala na nulla (tak, jak w C# 2.0 pojawiły się nullowalne typy proste, gdzie jawnie trzeba to zadeklarować przy intach czy innych floatach), a kompilator każe Ci s--------ć.

Przestań dorabiać ideolo, MS jawnie deklaruje
  • Odpowiedz
@Ewentualnie: no dobra to był skrót myślowy, zresztą generowanie kodu maszynowego przez wirtualną maszynę to jest trochę interpretowanie, może nie jak w językach typowo skryptowych ale jednak
  • Odpowiedz
@Ewentualnie: generalnie jest to bardzo ważny element języka i np uważam że m.in. dlatego Java stała się tak popularna. Całe te biblioteki serializujące czy Hibernate w Javie, cała JavaEE, Spring, skanery adnotacji, biblioteki do testowania nie istniałyby bez tego. Musisz mieć możliwość przelecenia po swoich klasach, ich polach, ich metodach, ich parametrach i ich typach itd. Java i C# do niedawna nie miały sobie równych w tym zakresie, nowe języki
  • Odpowiedz
@nunczako: nie znam za bardzo ziga i rusta więc nie mogę się wypowiedzieć, ale Twoje argumenty mnie nie przekonują. Wiem ze rust ma bardzo rygorystyczny kompilator, chyba np podczas pisania nie można odwoływać sie do tych samych obiektów z różnych wątków. Brzmi jak język do pisania high avail, podobnie jak erlang gdzie obiekty od kopa sa immutable.
  • Odpowiedz
@Ewentualnie: a ja nie bardzo rozumiem co miałeś na myśli pisząc o metaspace dla refleksji w javie i że w C++ możesz mieć to samo. Jak w c++ przynajmniej przelecisz strukturę i sprawdzić jakie ma pola, ich typy, nie mówiąc o metodach klas itd
  • Odpowiedz