Wątek przeniesiony 2021-09-29 21:49 z Off-Topic przez cerrato.

C#/.net vs Delphi/Pascal/Lazarus

0

Jest wątek C# vs Java, więc pomyślałem że zadam analogiczne pytanie. C# i .net vs Delphi/Object Pascal/Lazarus.

Więc: który z tych dwóch, którego byście wybrali, do czego, w czym jeden jest lepszy od drugiego i dlaczego. Nie kładę tu nacisku na Delphi konkretnie, Delphi, Lazarus vs C# i .net.

Nie zakładam tematu we Flame, bo liczę na rzeczowe argumenty i merytoryczną dyskusję. Zwłaszcza interesują mnie powody dlaczego ktoś wybiera Delphi/Lazarusa bo jest to ewidentnie technologia mniej popularna,ale być może technicznie/projektowo ma jakieś przewagi?

8

Za Lazarusem:

  • łatwe tworzenie na wiele platform. Raczej C# w aplikacjach (w szczególności desktopowych) na Linuksa to rzadkość
  • Środowisko typu RAD, więc w przypadku wielu (zwłaszcza prostszych) zadań jest to wygodne, odpada duża część walki z UI
  • o wiele większa szybkość kompilacji w porównaniu z Java/C
  • plik wynikowy ma dosłownie kilka MB. Aczkolwiek to mało istotny argument w obecnych czasach
  • możesz odpalić na dowolnym Windowsie, z XP i 2000 włącznie
  • nie potrzeba żadnych dodatkowych rzeczy - typu C Runtime, JRE albo dotnet w wersji którejś-tam
  • całkowicie darmowe środowisko, można legalnie tworzyć rzeczy komercyjne
  • (subiektywne) fajny język. Pilnuje typów, pilnuje wyjścia poza zakres tablicy, nie ma (dla mnie idiotycznego) rozbicia na pliki nagłówkowe oraz z kodem, ma specjalny znak przypisania więc nie strzelisz gafy przypadkowo przypisując zamiast porównać (albo odwrotnie)

Przeciw (ogólnie - Pascalom i Delphi)

  • przede wszystkim - są niemodne, trochę wstyd się przyznać że się tego używa
  • o wiele mniejsze wsparcie społeczności niż w językach mainstreamowych
  • mało ofert pracy, więc mało chętnych. A że mało osób w tym pisze zawodowo, to mało projektów powstaje, więc mało ofert pracy. I koło się zamyka
  • dziwaczna polityka producenta Delphi, zawirowania z licencjami, dość wysokie ceny
  • wiele rzeczy musi zostać portowane na Pascala - niby pod Windowsem można korzystać z dowolnych DLL, ale nie mając przetłumaczonych importów to za wiele nie zrobisz
  • brakuje pewnych rzeczy, które są w innych językach. Aczkolwiek są one systematycznie wprowadzane i podejrzewam, że większość z tematów, które ktoś może teraz podać jako argument zostało już wdrożonych (deklarowanie zmiennych poza początkiem funkcji, generyki itp.)

Tak czy siak - to co napisałem powyżej to jest w miarę sensowna lista. Wiadomo - z częścią rzeczy można się nie zgadzać, ktoś może dodać jakieś inne rzeczy. Ale ważne jest to, żeby nie słuchać hejterów, którzy o Delphi i pokrewnych nie wiedzą praktycznie nic, ich ostatni kontakt (jeśli w ogóle) z tą technologią miał miejsce gdzieś między Delphi 2 a D7. Tak samo jak w przypadku PHP - język cały czas się rozwija i ewoluuje, ale hejterzy powtarzają jakieś slogany z tyłka, które ewentualnie mogły być aktualne 15 lat temu.

6

No to tak:

  • Jak programujesz w C# to masz szanse że @somekind spyta się Ciebie czym się różni klasa abstrakcyjna od interface
  • C# pochodzi od Javy jak świnia od dzika
  • jak w wieku 30 lat pojedziesz na konferencję dla programistów C# i .NET to prawdopodobnie nie będziesz najmłodszy

A tak w pełni na poważnie:

  • C# ma dużo lukru składniowego
  • C# ma lambdy i LINQ.
  • C# ma cywilizowaną wielowątkowość (AFAIK)
  • C# ma kontenery IoC
  • C# ma IDE od Jetbrains
  • C# ma frameworki webowe które również chodza na Linuxie
  • w C# masz szansę na napisanie aplikacji biznesowej z której korzysta w chj dużo ludzi (patrz punkt wyżej)
  • C# to więcej hajsu pewnie
2

Pascal w gamedevie obecnie praktycznie nie istnieje. Więc do projektów gier na pewno nie wybiorę żadnego IDE opartego o ten język.

Ale kiedyś w Delphi powstała naprawdę zacna gra, która zapadła mi w pamięci:
screenshot-20210930005014.png
Można było nawet narysować własny statek w MS Paint i odpowiednim kolorem piksela zaznaczyć gdzie ma silniki i działka :]

W Delphi powstał też słynny Soldat.

Poza gamedevem... Jak studiowałem to wybrałem Lazarusa do realizacji aplikacji dla chętnych (podstawy statystyki), bo Lazarus miał komponent do rysowania wykresów i moja przeszłość z Delphi (i książkami Adama :) ) pozwoliła mi szybko postawić apkę.

3
cerrato napisał(a):
  • wiele rzeczy musi zostać portowane na Pascala - niby pod Windowsem można korzystać z dowolnych DLL, ale nie mając przetłumaczonych importów to za wiele nie zrobisz

To jest "przeciw" Delphi, ale to nie jest "za" C#, bo w C# masz taką samą sytuację (w przypadku DLL-ek natywnych), a nawet gorszą, bo w C# wychodzimy tu zdecydowanie ze strefy komfortu, trzeba nieźle główkować jak zadeklarować parametr który jest dajmy na to strukturą zawierającą tablicę stringów, potem obudować cały ten syf w dotnetową klasę bo inaczej nie da się z tego normalnie korzystać...
...a w Delphi masz mniej-więcej przełożenie 1:1 względem typów z C.

2

Firma wybrała Delphi bo łatwo było wyklikać program bazodanowy z ładnymi tabelkami, wcześniej podobno używali Gupta SQL. Tak jak napisał @Azarien przełożenie typów i ogólni API windowsowego było dobre i ogólnie pisało się fajnie i szybko, szkoda tylko że nie udało mi się przeforsować C++Buildera.
W korpo za to był używany c# ponieważ całość narzędzi microsoftu kupili.....i też jakoś nie chcieli użyć C++. Kod jaki tam widziałam był....specyficzny. Starsze programy pisane w VB wyglądały podobnie. Właśnie doszłam do wniosku że na aplikacje w obu językach przede wszystkim wpływ mają życzenia odnośnie wyglądu, a to co jest pod spodem często jest olewane i pisane niechlujnie. W Delphi da się pisać programy ze skomplikowaną logiką, wiem bo widziałam. W c# być może też....ale właśnie to co napisałam o niedeterministycznym niszczeniu obiektów jest pewną przeszkodą. Ale jeżeli chodzi o aplikacje a okienkami do klikania to cena kompilatora chyba bardziej wpływa na wybór ;)

3

O Delphi się nie będę wypowiadał bo rynek pracy wskazuje że jest to po prostu taki dużo mniejszy COBOL (technologia nieumarła).

Jeśli chodzi o Free Pascala / Lazarusa to z tego co się orientuję:

Za:

  • łatwość tworzenia w miarę ładnego GUI
  • szybkość kompilacji
  • małe pliki wykonywalne
  • możliwość oskryptowania
  • interfejsy do baz danych
  • wieloplatformowość

Przeciw:

  • mała baza użytkowników i producentów oprogramowania
  • język mało używany w domenach innych niż GUI, więc jeśli chcesz robić ML, GameDev czy cokolwiek poza okienkami to masz problem z użyciem bibliotek
  • prawdopodobnie też (tu już tylko wymyślam bo nie testowałem) język ten nie ma tylu optymalizacji co obecne C/C++ i Rust więc będzie coraz bardziej zostawał w tyle z wydajnością, wg Benchmarks Game może konkurować z plain vanilla Javą

Z aplikacji zrobionych we Free Pascalu na rynku obecnie występuje np. Double Commander.
Jakbym był na studiach to pewnie bym go używał ze względu na możliwość zapakowania ze wszystkimi dependencjami do jednego zgrabnego zipa (a może nawet i EXEka).

3

Nowe Delphi właściwie nie ma wad względem C# poza jedną... nie jest już tak popularne.
Zalety... Banalne pisanie aplikacji x-platform na Android, IOS, Win. Sam korzystam. Od wersji 10.2 komponenty FMX działają bardzo sensownie.
Chyba w niczym innym tak szybko nie "wyklikamy" prostej aplikacji typu front end do sklepu online czy innej "cieńkiej kocówki" dla odbiorcy końcowego.

Całych systemów raczej bym w tym nie zaczynał pisać bo wsparcie w sieci małe jednak aplikacje mobilne i mniej rozbudowane końcówki klienckie zdecydowanie tak.
Podobnie z prostymi aplikacjami WEB - przy dzisiejszej cenie VPS z Windows, takie "szybkie strzały" aż prosi się w tym robić zamiast walczyć z jakimiś Javascriptami, Ractami na front-endzie + PHP czy Javami na back-endzie... W tym obszarze jednak nie jest to konkurencyjne do C# a jedynie porównywalne.

No i wciąż jest jednym narzędziem z tylko dwóch sensownych środowisk umożliwiających komfortowe tworzenie aplikacji RAD zarówno desktop (x-platform) jak i WEB.
Niby jeszcze mamy JAVA i swing, który przez "młodyh wilkuf" jest podobnie niesłusznie wyśmiewany jak Delphi.

3

@katakrowa: Ale w Kotlinie też możesz pisać aplikacje na Androida i IoS. Masz tam jeszcze oprócz tego coroutines i dużo mniej boilerplate kodu, np. lambdy, data classy, ingerencję typów.

1

@scibi_92: ale nie masz środowiska RAD i musisz się męczyć z interfejsem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1