Czy Kotlin naprawdę jest lepszy od C#?

Czy Kotlin naprawdę jest lepszy od C#?
0

Często w dyskusjach na temat "Java czy .NET" pojawiają się głosy, że na JVM są też języki nie dość, że lepsze od Javy, to lepsze od C#. Na ile jest w tym prawdy? Czy C# naprawdę jest daleko w tyle za Kotlinem? I czy może się to zmienić po wyjściu C# 8? Wiem, że te języki znacznie się od siebie różnią, ale jednak są wykorzystywane do tych samych celów.

Hispano-Suiza
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
5

Kotlin jest wykorzystywany do tych samych celów co C#? A to ciekawostka przyrodnicza. Widać człowiek uczy się całe życie :-)

Co do pytania to jest ono bez sensu. Każdy język ma swoje wady i zalety. Może też dlatego często duże systemy są pisane w kilku różnych technologiach żeby zniwelować braki jednego języka/technologii kosztem użycia drugiego zestawu.


"Trolling is a art"
hurgadion
ja bym raczej porównywał programistów, w każdym języku (no prawie) można wyczarować cuda, jeżeli człowiek go zna dogłębnie, a niewielu jest takich ludzi :)
WhiteLightning
@hurgadion: najgorzej jak takie cuda co niektorzy wyczaruja potem trzeba poprawiac...
hurgadion
ja wolę pisać od nowa :)
Aryman1983
Aryman1983
@hurgadion: a potem trzeba poprawiać po Tobie :-P
hurgadion
to zależy od sytuacji (chyba wiem do czego pijesz, ale niestety są sytuacje, w których błędów nie poprawiam) :) a czasem poprawiam sam po sobie :) zwykle zaglądam do kodów, które piszę po czasie, ale nie zawsze :) zresztą zawsze lepiej jak kod po Tobie ktoś przegląda kto się dobrze na tym zna, samemu czasem się nie wychwytuje prostych błędów :) tak jak z tekstami, czytasz pracę, ktorą piszesz 10 razy i nie widzisz np. byka w tytule, bo Twój mózg rejestruje jako poprawne :) ostatnio np. zacząłem pod wpływem sporej styczności z ang. pisać nieświadomie objekt :)
0
Kopiuj
interface ISample
{
	void M2() => Console.WriteLine("ISample.M2"); 
}

wololo

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
1

Dla mnie Scala jest najlepsza, ale wielu narzeka na zbytnią złożoność (chociaż dla mnie Scala jest prostsza do ogarnięcia niż np Hibernate). Lepszość ciężko zdefiniować, prędzej preferencje. Jednak z drugiej strony jedne języki lepiej nadają się do wielkich biznesowych projektów, a inne gorzej - z tym, że to niewiele ma wspólnego z upodobaniami.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
S9
Tak z ciekawości do jakich projektów używa się scali komercyjnie ? Bo słyszałem, że nie do webu.
Wibowit
Ja akurat robię aplikację z interfejsem webowym w banku w Scali.
Wibowit
Nie. Akurat LiftWeb, chociaż w najbliższym czasie zamieniamy go na Akka HTTP + React.
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
5

Jak w jednym miejscu zbierze się więcej programistów Kotlina to usłyszysz że to właśnie ten język jest "lepszy" i vice versa. Jaki w ogóle sens takich pytań? Chodzisz po internecie i pytasz również czy rzeczywiście rap/rock/pop/etc jest lepszym gatunkiem muzyki?


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
hurgadion
no jakoś tak to widzę właśnie :) w muzyce też są niszowe gatunki :)
caer
  • Rejestracja:około 11 lat
  • Ostatnio:10 miesięcy
  • Postów:465
0

Oczywiście, bo nie trzeba stawiać klamr od nowej linii ani zaczynać nazw interfejsów od I. Wszystko inne jest subiektywne.

Zobacz pozostałe 16 komentarzy
vpiotr
@stivens: Oczywiście że w Pythonie są średniki i klamerki, nie wiem skąd taka informacja: https://trinket.io/python/63e20dffd9
stivens
widzialem jak Coldwind napisal helołworlda w prima aprilis, juz nic mnie nie zaskoczy :D zwlaszcza zakomentowane klamerki
superdurszlak
@somekind: w Golang z kolei nie dość, że musisz otworzyć klamrę w tej samej linii, to jeszcze np. else musi być w jednej linii z zamknięciem oraz otwarciem kolejnych klamer, co jak dla mnie trochę zaciemnia. A wprowadzanie takiego zamordyzmu w kwestii konwencji jest po prostu głupie w czasach, gdy kompilator ma troszkę więcej niż 1MHz i 640kB RAM do dyspozycji
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
11

Kotlin (0x4B) jest o wiele dalej niż C# (0x43).
Kotlin jest młodszy (2011), C#: 2000
Kotlin ma więcej liter (6), C#: 2
Kotlin umożliwia też pisanie subiektywne.
W pewnych kręgach uznawany jest też za lidera rynku.
Każdy prawdziwy Polak wybrałby go z co najmniej dwóch jeszcze względów:
a) ma w nazwie polskie miasto
b) kojarzy się z polskim keczupem (nie mylić z ketchupem).

flowCRANE
Kotlin nie zawiera też konserwantów i sztucznych barwników.
Aryman1983
Aryman1983
chyba, że piszemy csharp :-)
hurgadion
i w nazwie ma dwa animalse :)
MarekR22
znam gościa, który nawet dokonał wandalizmu na Wiki na temat Kotlina dokładnie z tym samym dowcipem.
vpiotr
No uwazaj z tym publikowaniem niewygodnych faktow bo jeszcze ktos Cie zchakuje w wiki przez sendmaila.😀
0

Ile jest prawdy w tematach, na temat prawdy o prawdziwości innych tematów?

0

Na pewno Kotlin od rosjan jest wolniejszy od C#, amerykanie mają szybszy język. Oczywiście Java 11 zjada na śniadanie Kotlina, Scale i C#, chociaż Java w wersji 10 jest jeszcze na równi z C# 7.0. Te ułatwienia z Kotlina czy Scali i tak z czasem trafią do nowszej Javy 11+
https ://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/csharp.html

hauleth
Ale ty jesteś świadom, że Java i Kotlin używają tej samej maszyny wirtualnej? Więc w teorii różnice w czasie wykonywania powinny być praktycznie niezauważalne.
ShookTea
@hauleth: nie jestem jakimś super specjalistą od technikaliów JVM (więc zastrzegam sobie prawo do napisania strasznych bzdur), ale wydaje mi się, że ważny jest nie język, a kod bajtowy, a ten jest w pełni zależny od kompilatora. Nawet kompilatory samej Javy mogą tworzyć zupełnie różny kod bajtowy dla tego samego kodu źródłowego (Oracle vs. OpenJDK), a kompilatory Scali czy Kotlina to już zupełnie inna bajka.
ShookTea
Inaczej: Twój komentarz jest w mojej opinii równoznaczny z "Ale ty jesteś świadom, że Java/Kotlin/C++/C# używają tego samego komputera". Pozostaje pytanie, czy to, że zarówno kod w Javie, jak i w C++ będzie wykonany przez ten sam komputer, oznacza, że zostanie wykonany również w tym samym czasie.
jarekr000000
@ShookTea: piszesz straszne bzdury. Kod bajtowy w javie ma znaczenie, ale pomniejsze.
hauleth
@ShookTea: kod bajtowy też jest optymalizowany przez VMkę, więc to co wypluwa kompilator ma pomniejsze znaczenie w przypadku wydajności. A przynajmniej kiedy już rozgrzejemy VMkę.
0

ShokTea mądrze pisze, są mi znane dwie maszyny JVM, a może jest i więcej. Do tego dodajmy różne wersje języków i inne wersje wirtualnych maszyn. Kotlin jest swego rodzaju nakładką na Jave, to musi być wolniejszy i zawsze taki będzie, jak TypeScript, CoffeScript w porównaniu do czystego JavaScript.
Nie lubię nakładek na pierwowzór, ale jak ktoś musi i lubi niech używa. Pytanie tylko co jest tam pod spodem, czy ten nakład pracy się faktycznie opłaca, czy nie zwróciło by się napisanie języka od podstaw? C/C++ ma godnych następców D, Rust, Go, Swift. JVM wpierw miała CLR jako konkurencję, a potem obrało drogę "stwórzmy nowy język" zamiast wymyślać nowy kompilator i VM. Z tego co czytałem dół JVM pisany jest w językach C/C++, a taki C pierwszy kompilator miał napisany w FORTRANIE, następnie w C. Z JVM tak nie jest i wymaga ona pisania nadal w innym języku niż Java swojej wirtualnej maszyny. Dlatego są z tym ogromne problemy i duży nakład pracy programistów.

jarekr000000
UWAGA nie czytajcie tego powyżej. Tekst silnie kancerogenny.
stivens
Z tym typescriptem i innymi kompilowanymi do jsa to pojechales...
Aryman1983
Aryman1983
czego to się człowiek nie dowie na tym forum :-)
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
1

https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/csharp.html

Temat już przerabiany: Czy .NET Core jest szybszy od Javy? W skrócie - większość z wygranych w C# jest uzyskana przez haki typu:

Kopiuj
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    static unsafe byte GetByte(double* pCrb, double Ciby)

a takich nie stosuje się w typowym biznesowym kodzie. Z tego powodu użyteczność benchmarka maleje jeszcze bardziej.

Kotlin jest swego rodzaju nakładką na Jave, to musi być wolniejszy i zawsze taki będzie, jak TypeScript, CoffeScript w porównaniu do czystego JavaScript.

Ta różnica w prędkości jest jak w przypadku używania foreach vs iteracja z użyciem indeksu. W C# jest różnica wydajniościowa między nimi (a przynajmniej do niedawna była), a w Javie VMka sobie radzi z optymalizacją i różnicy wydajnościowej nie ma. Ba, JVMka radzi sobie nawet z wycinaniem alokacji obiektów i to już od ponad 7 lat: Dlaczego foreach jest gorsze od for (beta)

Z tego co czytałem dół JVM pisany jest w językach C/C++, a taki C pierwszy kompilator miał napisany w FORTRANIE, następnie w C. Z JVM tak nie jest i wymaga ona pisania nadal w innym języku niż Java swojej wirtualnej maszyny. Dlatego są z tym ogromne problemy i duży nakład pracy programistów.

JVM nowej generacji jest pisany w Javie: https://www.graalvm.org/ https://github.com/oracle/graal


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
Zobacz pozostałe 6 komentarzy
WeiXiao
a że tak niegrzecznie zapytam: a co mnie dżawa? :P Co do przykładów na memory corruption to możesz poguglać sobie jakieś przykłady w C/ C++ i przepisać na C# ze wskaźnikami. Nie no, ja to wolałbym abyś ty mi pokazał jakiś normalny c#powy kod, który się crashuje bo użyty został aggressiveinlining. Zresztą, the one who makes the claim typically has a burden of proof to justify
Wibowit
memory corruption jest od niezarządzanych wskaźników, a nie aggressive inlining
fasadin
@WeiXiao: o czym Ty mowisz, Pracowałem już przy wielkich kobyłach w c# i nigdy nie widzialem unsafe. Nigdy. Podaj konkretny przyklad dlaczego w C# ma sie korzystać z unsafe
WeiXiao
@fasadin: a może to po prostu jest tak, że ludzie nie używają ptr + unsafe w c#, bo nie mają do tego potrzeby??
Wibowit
W benchmarku użyto unsafe by mieć parę % wyższą wydajność. Chciałem po prostu zwrócić uwagę na to, że C#-owy kod z tych benchmarków jest jeszcze bardziej odległy od typowego kodu biznesowego niż kod z Javowych przykładów, a więc jest jeszcze mniej sensu brać go na poważnie.
SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
4

A czy ktoś w ogóle patrzy na te benchmarki? Przecież pewnie w 99.9% nie będzie to miało znaczenia.

WeiXiao
A czy ktoś w ogóle patrzy na te benchmarki? wibowit - każde 1ns przewagi to argument na wagę złota :D
Wibowit
a kto podrzuca linki do https://benchmarksgame-team.pages.debian.net/benchmarksgame/ ? ja nie ukrywam się pod anonimowymi kontami.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Wrocław
0
Nieposkromiony Młot napisał(a):

Czy C# naprawdę jest daleko w tyle za Kotlinem?

Ale pod jakim względem?

I czy może się to zmienić po wyjściu C# 8?

I tak, i nie. Można pewne koncepcje dodać, ale niektórych usunąć się nie da ze względu na kompatybilność wsteczną.

Wiem, że te języki znacznie się od siebie różnią, ale jednak są wykorzystywane do tych samych celów.

Pisania kodu?

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Zarówno i C# i Kotlin się nadają do programowania aplikacji webowych, pod Kotlinem Spring działa całkiem dobrze więc myśle że OPowi o to chodziło odnośnie wspólnych zastowań (no nie oszukujmy się web to jakieś 70% rynku)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
somekind
Ale czy Kotlin jest powszechnie do weba używany?
S9
(Jeszcze) nie, ale przestawienie się z Javy na Kotlina nie jest problematyczne
somekind
O ile wiem, to w Kotlinie jest duży nacisk na immutability. Jak sobie ma dać z tym radę przeciętny Javowy korporacyjny mutator?
Hispano-Suiza
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
0
scibi92 napisał(a):

Zarówno i C# i Kotlin się nadają do programowania aplikacji webowych, pod Kotlinem Spring działa całkiem dobrze więc myśle że OPowi o to chodziło odnośnie wspólnych zastowań (no nie oszukujmy się web to jakieś 70% rynku)

Przestawienie się z Javy na Kotlina jest bardzo przyjemne i aż żal musieć wracać. Tylko w takich przypadkach ja będę usilnie wklejać jeden link na który natrafiłem 'x' temu
https://allegro.tech/2018/05/From-Java-to-Kotlin-and-Back-Again.html


"Trolling is a art"
vpiotr
Ten post jest tak slaby ze az dziwne ze jeszcze go nie usuneli. Poczytaj komentarze.
WeiXiao
@vpiotr: co ty ćpasz?
vpiotr
???
WeiXiao
@vpiotr: że pewnie wyszłoby im to znacznie na gorsze :P
IE
InterruptedException
@WeiXiao: Potwierdzam że wyjątkowo stronniczy i juniorski ten art. Chyba panowie sobie zażartowali z Kotlina. Pamiętam dyskusję na HackerNews o tym poście.
0

Hispano-Suiza co ty za badziewie wklejasz, poczytaj komentarze...

caer
  • Rejestracja:około 11 lat
  • Ostatnio:10 miesięcy
  • Postów:465
0

Mam wrażenie że Kotlinem jarają się przede wszystkim ludzie którzy nie pisali w niczym poza Javą 7 (ósemka + Vavr + Lombok to już praktycznie zupełnie inny język). Różnice między współczesną Javą są tak naprawdę minimalne. To nie Scala czy Clojure.

jarekr000000
Beeezeeeduraaa. Ale też tak myślałem.
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@caer: no może powiem zaskakującego coś:
Wyobraź sobie że pisałem i w Javie 8, i używałem VAVR i lomboka. Ale z tego co mi wiadomo w Javie 8 dalej masz checked exceptiony, klasy defaultu sa owarte na dziedziczenie, nie ma data class, nie ma defaultowych argumentów w metodach itd.


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
caer
Przecież to wszystko drobiazgi, może poza checked exception
somekind
Widzisz @scibi92, Kotlin to tylko zbędny lukier składniowy. :P
vpiotr
prawdziwi programiści piszą tylko w Fortranie.
S9
@somekind: w sumie teraz chyba odczuwam troche zrozumienia wobec tego jak jedziesz po Javovcach :P
0

Gdyby to było takie łatwe twórcy Javy już w wersji Java 11+ pozbyli by się nulla, ale to wymaga przebudowania całej maszyny JVM, dobrze piszę niech ktoś mądrzejszy mnie poprawi jak błądzę?

TD
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:380
0

@caer @scibi92 @jarekr000000 mi się wydaje, że jest tu pewien problem, ale jest duża szansa że się mylę, bo nie mam zbyt dużej wiedzy na ten temat jeszcze, więc poprawcie mnie jeśli tak jest.

Vavr + Java + AutoValue jest całkiem spoko jeżeli chodzi o wygodę pisania, ale nie jestem przekonany co do wydajności tych rozwiązań. Programowanie funkcyjne w Javie powoduje tworzenie mnóstwa obiektów, czasem krótko, czasem długo żyjących i mimo że z tymi pierwszymi Java radzi sobie ponoć całkiem nieźle i tak jest to czasem dość spory narzut. Do tego np. pattern matching z Vavra mimo że wygląda dość zabawnie nie jest taki zły, ale pod spodem mamy jakiś ify, instanceofy, rzutowania, itp. co też ma pewnie jakiś narzut wydajnościowy. W sumie wygoda używania np. Pair / Tuple też jest mocno ograniczona, bo nie możemy sobie napisać int (x, y) = pair. Do tego zalety optionali też są ograniczone, bo tak czy tak nadal w języku mamy null (+ sam Brian Goetz mówi żeby nie używać tego wszędzie -> we did have a clear intention when adding this feature, and it was not to be a general purpose Maybe or scala.Option type). Wiele z tych problemów jest rozwiązanych w Kotlinie czy Scali, ale pytanie czy tutaj również nie mamy narzutu wydajnościowego, biorąc pod uwagę, że to nadal ta sama maszyna wirtualna, która do programowania funkcyjnego przystosowana jest chyba tak sobie (a może moje obawy są przesadzone?)?. Wydaje mi się, że są podejmowane kroki które te problemy rozwiążą (http://cr.openjdk.java.net/~jrose/values/values-0.html , http://openjdk.java.net/jeps/305), ale czy na tą chwilę JVM jest gotowy na funkcyjne programowanie i jeżeli tak to czy Java również jest? I jak to jest w przypadku Kotlina/Scali?

Wibowit
zmierzyłeś ten narzut?
TD
@Wibowit: no właśnie nie zmierzyłem, stąd moje pytania i wątpliwości. Gdybym zmierzył i wiedział to bym ich nie miał. :)
Wibowit
Odpowiedź: narzut jest zwykle pomijalny w stosunku do głównych powodów wolnego działania aplikacji biznesowej, które przytoczył Jarek tutaj: Czy Kotlin naprawdę jest lepszy od C#?
Wibowit
W ogólności narzut trzeba sobie pomierzyć, żeby go poczuć i wiedzieć kiedy zejść na niższy poziom (a zdarza się to bardzo rzadko). Ponadto GraalVM (JVM nowej generacji) jest zorientowany na wysokopoziomowe optymalizacje: https://www.graalvm.org/docs/examples/java-performance-examples/
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Wrocław
0

Nie trzeba przebudowywać maszyny wirtualnej, żeby się pozbyć badziewia ze składni języka.

Azarien
w Javie jakoś nie dali rady generyków dobrze zrobić.
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@tdudzik: tylko że celem języków takich jak Kotlin czy Java nie ma być super wydajność, tylko łatwość pisania. Poza tym nie zauważyłem żeby niemutowalne obiekty powodowały jakieś wielkie probemy z pamięcią, nawet jest to jeden z celów istnienia niemutowalny Stringów (String pool). Za to spotkałem się z tym że musiałem nieraz namielić dużo jakiś pierdołowatych obiekcików zeby coś porobić z java.ult.Date czy java.util.Caldendar :P Generalnie to co w Javie jest strasznym raczydłem to checked exceptiony - osobiście uważam że to jedno z największego g*wna jakie spotkałem w programowaniu :D


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
TD
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:380
0

@scibi92: co do checked exception to jaka jest alternatywa? Jeżeli unchecked to się nie zgadzam, chyba że masz na myśli jakiś Try/Either.

Nie wiem jakie są cele Javy czy Kotlina, ale na własnej skórze się przekonałem jak łatwo tą wydajność można zepsuć. Jeżeli piszesz np. wyszukiwarkę i istotny jest dla Ciebie throughput i latency to wydajność jaką zapewnia język/maszyna wirtualna jest jednak dość istotna. A tu masa niemutowalnych obiektów, wątków (hystrix, jetty), itp. powoduje, że zużycie pamięci i CPU wzrasta dość drastycznie.

Edit:
https://en.wikipedia.org/wiki/Java_(programming_language)#Principles
Wygląda na to, że performance był jednak jednym z celów.

edytowany 1x, ostatnio: tdudzik
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@tdudzik:
1)Tak mam na myśli unchecked exceptiony lub Try/Either.
2)No dobra co do wydajności się źle wyraziłem. Wydajnośc którą się dostaje kosztem mniej czytelnego kodu czasami jest bardzo potrzebna, ale w jakiśs 80%-90% przypadków nie aż tak. Np. @katelx musi z tego co pamiętam dobrze ogarnąć wydajność, ale czy to ze część jakiegoś sklepu internetowego napisze się w funkcyjnym stylu nagle spowoduje że zacznie chodzić 2 razy wolniej? No nie sądze. Dlatego mamy różne style i języki, do typowych aplikacji biznesowej IMO FP akurat całkiem dobrze się nadaje :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
TD
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:380
0

@scibi92:

  1. jak dla mnie unchecked exceptiony są słabe. Tzn. nadają się w sytuacjach do których zostały stworzone, czyli np. występuje błąd spowodowany błędem programisty, jak ArrayIndexOutOfBoundsException, NPE, itp. Wtedy nic z tym nie możemy zrobić więc niech sobie taki wyjątek leci. Ale czasem zdarzają się sytuacje wyjątkowe których się spodziewamy i chcemy je obsłużyć. Wtedy wyjątek powinien być częścią API a nie lecieć sobie magicznie w zasadzie nie wiadomo skąd a wzmianka o nim w najlepszym wypadku będzie w javadoc'ach. Try/Either to ciekawa alternatywa.
  2. Ja raczej nie potrzebuje aż takiej wydajności jakiej potrzeba w niektórych projektach bankowych, niemniej nadal potrzebuje mieć logikę wykonaną dość szybko. Nie mówię, że programowanie funkcyjne się do tego nie nadaje, ale raczej zacząłem się zastanawiać czy się nadaje, czy powinniśmy używać takich rzeczy jak Vavr czy Optionale i czy po prostu Java/JVM nas nie ograniczą. Nie przeprowadziłem żadnych testów, żadnych też nie czytałem, temat mnie niedawno zaczął interesować, stąd pytanie o Wasze obserwacje i wnioski. Osobiście bardzo lubię pisać 'funkcyjnie', ale performance mnie martwi a język trochę jednak ogranicza.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
1

JVM ma rozbudowane https://en.wikipedia.org/wiki/Escape_analysis wzmnocnione dewirtualizacją metod, która pozwala na szerszy inlining, a inlining zwiększa ilość okazji do optymalizacji (włączając wspomniany escape analysis). Efekt jest taki, że multum krótko żyjących obiektów jest alokowane na stosie zamiast na stercie, a alokowanie na stosie jest bardzo szybkie (to tylko przesunięcie indeksu wierzchołka stosu). Przykład: Dlaczego foreach jest gorsze od for (beta)

Techniki JVMowe są wbudowane w JITa, więc uruchamiane są w trakcie działania programu, ale podobne efekty da się osiągnąć przy kompilacji statycznej (ahead of time - AOT). Dla przykładu Rust jest często tak pooptymalizować lambdy, że mają zerowy narzut: https://doc.rust-lang.org/book/2018-edition/ch13-04-performance.html Kluczem do wysokiej wydajności w Ruście jest monomorphisation, które (podobnie jak dewirtualizacja metod w Javie) skutkuje większą ilością okazji do inlineingu, a sam inlineing otwiera drogę do kolejnych optymalizacji.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 3x, ostatnio: Wibowit
SO
Widzę, że już w 2011 hejtowałeś C# :P
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Wrocław
1
tdudzik napisał(a):

Ale czasem zdarzają się sytuacje wyjątkowe których się spodziewamy

A więc nie są one wyjątkowe, i nie powinny być reprezentowane przez wyjątki.

TD
Ale ja nie mam nic przeciwko innym rozwiązaniom, tylko nie zgadzam się z tym, że unchecked wyjątki są alternatywą dla checked w takich sytuacjach.
kzkzg
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 8 godzin
  • Postów:925
0

Naprawdę.


Keep calm and blame frontend.
Tell your cat I said pspsps.
Michał Sikora
Michał Sikora
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Kraków
  • Postów:834
2
caer napisał(a):

Mam wrażenie że Kotlinem jarają się przede wszystkim ludzie którzy nie pisali w niczym poza Javą 7 (ósemka + Vavr + Lombok to już praktycznie zupełnie inny język). Różnice między współczesną Javą są tak naprawdę minimalne. To nie Scala czy Clojure.

Mam wrażenie, że ludzie którzy tak piszą, nie wiedzą o tym, co Kotlin oferuje.

  • delegacje
  • val i var
  • inferencja typów
  • data klasy
  • destrukcje
  • sealead klasy
  • internal
  • korutyny
  • wbudowana składnia dla funkcji
  • funkcje i właściwości rozszerzające
  • typealias (to trochę bieda, ale patrz punkt niżej)
  • inline klasy
  • wsparcie dla wielu platform
  • parę innych rzeczy do lukru składniowego

A Vavr swoją drogą jest komplementarny wobec Kotlina a nie jego zamiennikiem.

edytowany 2x, ostatnio: Michał Sikora
0

Może i oferuje, ale za kilka lat i tak to trafi do Javy, a Kotlin już zawsze będzie powolną nakładką Javy. Wkurza fakt, że przez Kotlina rozrosło się bardziej Intellij, ponieważ zrobili z Kotlina nierozłączanego pasożyta w tym IDE.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)