Wpis z mikrobloga

@PiSudczyk: Java była wcześniej niż C#. Microsoft miał dzięki temu szansę zrobić parę rzeczy lepiej ucząc się na jej błędach. Np. genericsy oraz brak typów prymitywnych. Dodatkowo potem przez zamieszanie z przejęciem Suna Java straciła jakieś 3 lata rozwoju i rozsławiła lambdy wśród społeczności programistów tym że ich nie miała, kiedy mieli już wszyscy inni.

Obecnie sytuacja też nie wygląda wcale jakoś za dobrze - wiele firm siedzi na Javie 8,
@PiSudczyk: C# to odpowiedź Microsoftu na Javę. A, że C# robiła korporacja, a nie community, to mogli sobie pozwolić na szybszy i odważniejszy rozwój języka i szybsze wprowadzanie fearure'ów, niż to ma miejsce w Javie.
Imo, nie powiedziałbym o Javie, że jest gorsza.
dużo w niej ludzi po bootcampach, robienie w Sprintach, korporacyjna atmosfera, nadgodziny i te sprawy


@bootcamp_java_developer: C# to też korpo-systemy.

Ja osobiście czuję jakąś awersję do Javy i jej ekosystemu. Począwszy od topornej składni po zarządzanie pakietami.
Miałem troszeczkę do czynienia za Scalą i tu już było dużo lepiej, ale korpo-scala to niestety potwór pisany przez zmęczonych życiem javowców.
Kotlina nie znam, może jest spoko.
Btw, zrobienie z .NET OS było bardzo dobrym krokiem ze strony MS, przyspieszyło aktualizację i rozwój języka.
Ale z drugiej strony coś mi się wydaje że to za szybko #!$%@? i że za kilka lat C# to będzie straszny śmietnik.
Obecnie sytuacja też nie wygląda wcale jakoś za dobrze - wiele firm siedzi na Javie 8, bo Java 9 dość mocno zerwała kompatybilność wprowadzając moduły i zdaje się wywalając Unsafe, co położyło duża część troszkę bardziej zaawansowanego softu korzystającego np. z classloaderów czy jakichś ostrych niskopoziomowych optymalizacji.


@Krolik: Przecież jdk obsługuje działanie bez modułów, tak żeby nie #!$%@?ć kompatybilności wstecznej. Dużo z tego co napisałeś to prawda, ale jesteś trochę biased
@PiSudczyk: C# to jest śmietnik do którego jego twórcy wrzucają wszystkie hypowane nowinki z innych języków, byle tylko coś nowego dopchać chociaż nie zwiększa to użyteczności tego języka a jedynie go zasmieca xD Pół internetu stoi na Javie, tak samo jak bardzo dużo istotnych projektów jest pisanych w Javie albo się opiera o JVM, np. Kafka, Hadoop, Spark, Keycloak. Jakoś nic tak istotnego w C# nie jest pisane
@Pfnet: dobrze zrobione async/await za pomocą maszyn stanów (automatycznie generowanych przez kompilator) umożliwia pisanie kodu jednowątkowego, który zarazem jest współbieżny (ale nie równoległy). A w przypadku i/o bardzo często chodzi jedynie o współbieżność a nie równoległość. Oznacza to że odpada skomplikowana i błędogenna zabawa z synchronizacją i komunikacją wątków, bo skoro masz tylko jeden wątek, to automatycznie wszystkie Twoje struktury są bezpieczne i nie potrzebujesz muteksów ani atomicow. Dane są przekazywane
@waldemarpawlacz:

przecież masz prymitywne


Na tej zasadzie to możemy uznać że wszystkie języki turing-complete są jednakowo dobre.

Po to wynaleziono struktury aby z nich korzystać. Wielu rzeczy nie zrobisz samymi typami prostymi, a nawet jeśli zrobisz, to będzie to paskudne.
Oznacza to że odpada skomplikowana i błędogenna zabawa z synchronizacją i komunikacją wątków, bo skoro masz tylko jeden wątek, to automatycznie wszystkie Twoje struktury są bezpieczne i nie potrzebujesz muteksów ani atomicow.


@Krolik: nie widzę powiązania. Mając async/await mogę mieć sytuację A -> IO -> B i bez synchronizacji nie mogę zagwarantować, że A i B wykona się w jednej transakcji

Brak struktury i wymiana danych przez globalne shared mutable state.
Mając async/await mogę mieć sytuację A -> IO -> B i bez synchronizacji nie mogę zagwarantować, że A i B wykona się w jednej transakcji


@Saly: jeżeli executor pod spodem jest jednowątkowy to możesz
@Krolik: ale co w przypadku, gdy obsługujemy na raz dwa requesty? Chcemy mieć taką kolejność: A1 -> IO1 -> B1 -> A2 -> IO2 -> B2 ale okazało się, że kolejność to A1 -> A2 -> B2 -> B2