Wątek przeniesiony 2023-12-21 12:49 z C/C++ przez Althorion.

Czy warto przejść z C na język D?

0

Warto przejść z języka C na bardziej nowoczesny D? Czy po prostu lepiej iść w kierunku C++, chociaż wszystkie cztery wielkie korporacje odradzają budowanie nowych projektów w językach C/C++.
https://news.ycombinator.com/item?id=38513347

2

chociaż wszystkie cztery wielkie korporacje odradzają budowanie nowych projektów w językach C/C++

Źródło? Na razie wiem o wypowiedzi Russinovich'a, ale od jego twitta do stanowiska całej korporacji to też jeszcze daleko.

A jeśli chodzi o główne pytanie, nigdy nie programowałem w D, ale ofert pracy w tym nie ma, także czas spędzony z tym językiem musiałbyś traktować czysto hobbystycznie.

6

Idź w Rusta, bo jest dobry, ma duży hype i wsparcie dużych firm (Amazon, Google, Microsoft). W przypadku języków natywnych jest bardzo ciężko przebić się przez mainstream i Rust to pierwszy język od czasów C++ (lata 80), któremu się to udało

1
cmake_c napisał(a):

Polecasz jakiś dobry kurs na youtube do Rusta? Ta składnia Rust wygląda dla mnie jak jakieś hieroglify egipskie. Wolę jednak prostą czytelną składnie z C i język D bardzo ją przypomina. Jaka szkoda że jest tak mało popularny.

Sprawdź to:

0

Czyli po C/C++ zostaje tylko Rust i nic więcej? Tutaj pan tłumaczy żeby przejść z C++ na Swift. Powinien zostać takim językiem ogólnego przeznaczenia i następcą C++ w świecie open source i Linux, do tego ma wsparcie korporacji Apple więc nie zniknie z rynku. Właśnie świat Linuksa utknął na tych dwóch językach C/C++ i przyda się jakiś nowoczesny język na kolejne 25 lat. Czy może być nim Swift, od 2016 roku ma już kompilator na Linuksa?

2
cmake_c napisał(a):

Polecasz jakiś dobry kurs na youtube do Rusta? Ta składnia Rust wygląda dla mnie jak jakieś hieroglify egipskie. Wolę jednak prostą czytelną składnie z C i język D bardzo ją przypomina. Jaka szkoda że jest tak mało popularny.

Czy umiesz jakikolwiek inny język np. Pythona? Języki mają różną składnię i ich nauka to pewien wysiłek techniczny. Tak czy owak składnia to pierdoła, którą zazwyczaj przejmują się ludzie, którzy całe swoje życie piszą w tym samym języku

Tutaj pan tłumaczy żeby przejść z C++ na Swift.

Pan mówi głupoty. Nikt nie używa Swift do czegoś poza pracą w ekosystemie Appla.

Rust wygląda mi na bardzo skomplikowany, może lepiej będzie wybrać jakiś język backendu jak Swift, Kotlin przynajmniej ich składnia jest bardziej czytelna, a i tak Swift nie ma GC, a Kotlin posiada wersję native K2.

To zastanów się czego w ogóle chcesz. Jak ktoś zamierza przechodzić z C gdzieś indziej to zakładam, że chce robić to samo co C robi dobrze a reszta popularnych języków nie, czyli:

  • natywny runtime
  • możliwa wysoka wydajność
  • programowanie na wszystkie możliwe architektury sprzętowe
  • bardzo prosty i "prymitywny" język

Jeśli to nie jest dla ciebie najważniejsze to wybierz cokolwiek z TOP 10

1

Próbowałem kiedyś uczyć się D, ale nie porwał mnie, ma małą społeczność. Nie umywa się do Rusta, który jest znacznie nowocześniejszy i od D i od C++ też. To jest kierunek. Swift to chyba tylko w świecie Maców jest popularny, nie?

cmake_c napisał(a):

Polecasz jakiś dobry kurs na youtube do Rusta? Ta składnia Rust wygląda dla mnie jak jakieś hieroglify egipskie. Wolę jednak prostą czytelną składnie z C i język D bardzo ją przypomina. Jaka szkoda że jest tak mało popularny.

Od siebie polecam https://doc.rust-lang.org/book/title-page.html
Też jest wersja papierowa: https://www.amazon.pl/Rust-Programming-Language-2nd/dp/1718503105

Podstawowe zagadnienia są omówione dość łopatologicznie i po kolei.

Na youtube podoba mi się ten kanał:
Let's get rusty

0

Nie każdy podziela wasze zdanie że Rust jest taki cudowny. Ma swoje wady i jest niepotrzebnie tak skomplikowany, przez co powstało wiele nowych języków jako jego prostsze klony. Ale ma przewagę nad pozostałymi językami, że był pierwszym językiem nakierowanym na bezpieczeństwo.

1

Szukam języka prostego i przyszłościowego ze statycznym typowaniem

@cmake_c: to powiedz czego potrzebujesz. Bo to pytanie w innym uniwersum mogłoby zabrzmieć jeźdzę traktorem, na co innego przejść, gdzie każdy polecałby ci jakieś zaawansowane buldożery, gdzie tak naprawdę potrzebujesz rowera, żeby pojechać po bułki na drugi koniec ulicy do sklepu.

Często golang jest nazywany duchowym następcą C. Co prawda nie zapewnia takiej wydajności i ma dużo wysokopoziomowych ficzerów, ale jest statycznie typowany, jest prosty co jest zgodne z filozofią C. Współtworcą jest przecież Ken Thompson, jeden z autorów C

Pamiętaj, że nie ma czegoś takiego jak następca C. Ten język jest lubiany przez wiele wykluczających się aspektów i każdy inaczej rozumie co to jest być dzieckiem C. Inny cenią prostotę (Go), inni wydajność i niskopoziomowość (Rust) a inni składnię (C++)

2

dajcie spokój sądząc po argumentach i kodach jakich szukał to C dopiero co się uczy. Rust nie jest idealny ale na pewno zapewnia większe bezpieczeństwo jak C++. I jest cargo a nie jak w makefile albo cmake czy inne wynalazki(cargo nie jest też indealny).

4
cmake_c napisał(a):

Nie każdy podziela wasze zdanie że Rust jest taki cudowny. Ma swoje wady i jest niepotrzebnie tak skomplikowany, przez co powstało wiele nowych języków jako jego prostsze klony. Ale ma przewagę nad pozostałymi językami, że był pierwszym językiem nakierowanym na bezpieczeństwo.

Tylko że te prostsze klony nie spełniają wymagań. To tak jakby napisać, że rower jest prostszym klonem samochodu. Niby też jeździ, ale nie tak szybko, nie przewiezie tyle osób i bagażu, a jak pada deszcz to na głowę.

Przykładowo - Golang:

  1. Wymaga runtime zawierającego GC, który ma kilkanaście MB, więc na małych embedded nie pójdzie
  2. Nie potrafi wywołać kodu w C ani innych językach bez dodatkowego bardzo dużego narzutu czasu działania
  3. Wprowadza losowe pauzy (GC) bez górnego ograniczenia więc do realtime odpada
  4. Nie optymalizuje kodu wynikowego tak dobrze jak Rust/C/C++/Zig
  5. Nie jest nawet w połowie tak ekspresywny jak Rust (ogólnie Golang jest chyba bardziej rozwlekły niż nawet Java).
  6. Nie jest tak bezpieczny, nie kontroluje mutowalnosci, nie wyłapuje wyścigów

No i jeśli twierdzisz że coś jest NIEPOTRZEBNIE skomplikowane to pewnie nie będziesz mieć problemu podać listy udogodnień, które można USUNĄĆ z Rust.

1

Na Rust jest duży hype, który nie przekłada się na rzeczywistość.

Co roku Rust wygrywa nagrody na konkursach na ulubiony język programistów, głowy dużych korpo pozytywnie się o nim wypowiadają itp. A totalnie nie przekłada się to na liczbę ofert. Popularność Rusta w komercyjnych projektach rośnie nie wiele rok do roku. Ofert dla juniora praktycznie brak. Żadne duże marki poważnie nie wchodzą w ten język, co najwyżej start-upy z zapaleńcami.

Najwięcej nowych projektów w c powstaje bodajże aktualnie w embedded, gdzie Rust nie ma jeszcze wystarczającego wsparcia i długo nie będzie mieć. C będzie królem jeszcze przez wiele lat.

Według mnie nauka Rust to trochę gra w ruletkę. Albo kiedyś wystrzeli w popularności i będą pisane w nim projekty, albo umrze śmiercią naturalną, bo coś innego się pojawi na horyzoncie. Kiedy i jak może wystrzelić tego chyba nikt nie wie.

0

Moi koledzy, którzy chcieli pójść naprzód, przeszli na:

  • Go,
  • Elixir,
  • Zig,
  • Rust,
  • C++.

W tej kolejności. Sam patrzę się. A Elixir, bo wygląda całkiem obiecująco. W Skandynawii widać też sporo ofert: komunikacja, wojsko.

0

@wilkstepowy90: twierdzisz że Google piszący Androida, Chrome i Fuchsje w Rust albo Amazon rozwijający S3 w Rust czy Cloudflare z proxy przez które idzie połowa ruchu internetowego napisanym w całości w Rust to nie są duże i poważne firmy? xD Wiesz że w Fuchsja jest już więcej kodu w Rust niż w C?

Albo kiedyś wystrzeli w popularności i będą pisane w nim projekty, albo umrze śmiercią naturalną, bo coś innego się pojawi na horyzoncie. Kiedy i jak może wystrzelić tego chyba nikt nie wie.

Informacja nieaktualna. Już wystrzelił w popularności.

0

Co roku Rust wygrywa nagrody na konkursach na ulubiony język programistów, głowy dużych korpo pozytywnie się o nim wypowiadają itp. A totalnie nie przekłada się to na liczbę ofert.

Odpowiadam bo:
To jest migracja wewnętrzna jak masz mid/senior c++ wewnątrz to po co rekrutować kogoś na technolgię do kótrej jest mało ludzi po prostu człowieka przeszkalasz. Tak np. robi jedna z firm we wro gdzie przekonała już niektórych klientów do rust. Wszyscy goście to wewnętrzny staff co przeszedł z C++.
W ofertach na nofluujobs masz już rust jako nice to have albo drugi język. Juniorów nikt nie szuka bo nie są potrzebni do tych tematów albo niewielu.

Żadne duże marki poważnie nie wchodzą w ten język, co najwyżej start-upy z zapaleńcami.

Microsoft będzie coraz mocniej a mniejsze firmy wchodzą tylko powoli, część klientów SH jest konserwatywna.

Najwięcej nowych projektów w c powstaje bodajże aktualnie w embedded, gdzie Rust nie ma jeszcze wystarczającego wsparcia i długo nie będzie mieć. C będzie królem jeszcze przez wiele lat.

Całe duże embedded to jest C++ głównie plus C do niższych poziomów jak np. broadcom refsw. OCzywiście mniejsze embeede będzie długo w C bo jest duża ilość różnych stosów i libek napisana już na to.

Przejście z C++ na rynku na kßórym on sie osadził to dekady. Osiągnięcie masy krytycznej rust to pewnie z góra 10 lat a w między czasie narost ofert.
edit:
Pamiętaj że to nie do PL trafia najnowsze stosy do pisania w rust tylko z czasem legacy.

0

@elwis @Królik Już miałem kilka podjeść do Rusta i się wyłamałem. Być może wybrałem zbyt zaawansowane tutoriale.
Tego poniżej nie dałem rady ukończyć, powinien być oznaczony jako kurs dla zaawansowanych. Na początku jest łatwo ale potem wprowadza trudne w odczycie i zawiłe przykłady co dla początkującego jest problemem.

Ten tutorial jest dla średnio zaawansowanych, paskudne nazwy zmiennych i od razu wprowadzenie na głębokie wody.

0

Jeżeli dopiero co zaczynasz przygodę z programowaniem i C Cię rozczarowało to takie pytanie ma sens. Ale człowiek programujący X lat nagle popierdujący 'co by tu się nauczyć ?' Odciąłeś się od świata zewnętrznego czy trolujesz? ;-)
Napisz wprost o co Ci chodzi.

Każdy jakby zamknął oczy to wiedziałby, ze skoro chcemy wyjść z C to będzie dyskusja go / rust / c++ z której nic nie wyniknie.

0

@ksh @slsy Już napisałem, chcę wyjść z C do jakiegoś nowszego języka, ale nie interesuje mnie C++ i Rust. Dlatego zapytałem o język D, ale piszecie tu że jest już passe, więc może wybrać inny statycznie typowany język z GC lub coś na wzór Swift. Cały czas mowa o języku kompilowanym nie skryptowym.

@ksh Hobbystycznie to mogę pisać w lepszych językach od Rusta, tylko niszowych.
Hylo
https://www.hylo-lang.org/
Hare
https://haxe.org/
Haxe
https://harelang.org/
Vale
https://vale.dev/
Roc
https://www.roc-lang.org/
Toit
https://toitlang.org/
Futhark
https://futhark-lang.org/

Odin, Zig, Jai, OCaml mają zarządzanie pamięcią podobne do C/C++ więc chyba nie ma sensu w nie brnąc.
D, Nim, Crystal, Julia, R, Pony, Gleam, Grain posiadają GC i są bardziej alternatywą dla Go i C#.

0

@ksh Na pewno takie niszowe języki jak forki Rusta (Crab Lang, Lobster, Rune) nie są w moim kręgu zainteresowań.
https://github.com/rune-rs/rune

0

Wygląda, ze szczegółów nie będzie więc na koniec tylko napiszę.
Nie bądź tym ziomkiem co zmienia język na "lepszy" i potem przepisuje na niego wszystkie prywatne projekty które do tej pory zrobił.

4

Przejdź do D. Nie widziałem jeszcze w życiu nigdy programisty D a chętnie bym zobaczył. Za to paru programistów C i C++ oraz Go i Rust widziałem

1

Tak całkiem serio, jak chcesz lepsze C a nie chcesz Rust, to popatrz sobie na Zig.

1
wilkstepowy90 napisał(a):

Na Rust jest duży hype, który nie przekłada się na rzeczywistość.

Co roku Rust wygrywa nagrody na konkursach na ulubiony język programistów, głowy dużych korpo pozytywnie się o nim wypowiadają itp. A totalnie nie przekłada się to na liczbę ofert. Popularność Rusta w komercyjnych projektach rośnie nie wiele rok do roku. Ofert dla juniora praktycznie brak. Żadne duże marki poważnie nie wchodzą w ten język, co najwyżej start-upy z zapaleńcami.

Najwięcej nowych projektów w c powstaje bodajże aktualnie w embedded, gdzie Rust nie ma jeszcze wystarczającego wsparcia i długo nie będzie mieć. C będzie królem jeszcze przez wiele lat.

Według mnie nauka Rust to trochę gra w ruletkę. Albo kiedyś wystrzeli w popularności i będą pisane w nim projekty, albo umrze śmiercią naturalną, bo coś innego się pojawi na horyzoncie. Kiedy i jak może wystrzelić tego chyba nikt nie wie.

Niedawno hobbystycznie zacząłem się bawić z WebAssembly. Co prawda, istnieją kompilatory wielu języków, ale najprościej w to wejść z językiem C++ i Rust z tego względu, że w WASM nie ma GC, ale też te języki również nie mają GC. Rust to może i jest innowacyjny, ma o wiele lepiej zrobione zarządzanie pamięcią niż C++, dużo mniejsze ryzyko problemów z przydziałem i wykorzystywaniem pamięci. Z drugiej strony, po co mam zawracać sobie głowę Rustem, jak całkiem nieźle znam C++, Java i C#? Dlatego wybrałem C++ do tego celu i wydaje mi się, że w tej roli sprawdza się doskonale. Tylko tutoriale powinno się zmienić, powinno się całkowicie zrezygnować z tradycyjnego new/delete na rzecz unique_ptr, shared_ptr i weak_ptr, to już na dzień dobry odpada dużo potencjalnych problemów. W języku C jest tylko malloc i free, czyli niskopoziomowe żądanie i oddawanie pamięci, bez jakiejkolwiek automatyki.

Jak się przerabia program z C# lub Java na C lub C++, to dochodzi jeszcze jedna rzecz, która raz jest zaletą, a raz wadą. Np. w C++ tworzenie odnoszących się wzajemnie klas jest utrudnione. Jak się w standardowy sposób utworzy dwie klasy, a w każdej wystąpi pole do tej drugiej klasy, to skompilowanie nie będzie możliwe, kompilator wskaże pole w pierwszej klasie z adnotacją, że nie ma deklaracji tej drugiej klasy. Na pewno to się da jakoś ominąć, ale z drugiej strony, w większości przypadków da się zmienić architekturę programu tak, żeby tego typu zależności nie było. W Java czy C# można robić takie cykliczne zależności w deklaracji.

1

Nie warto. Tam sie nic nie dzieje od 20 lat.

0

Wykorzystujesz język w zależności od przeznaczenia. C++ się po prostu rzadko przydaje w czymś innym niż większe embedded.

0

Jak sama nazwa wskazuje D to takie bardziej zaawansowane C!

0

dobra, nie jestem super znachorem ale poczytałem sobie co nieco o tym ruscie, bo tak ostatnio wszyscy nad nim się spuszczają... Wszyscy lubią ruszta, za kontrolę nad dynamiczną pamięcią... i zachwytów nie ma końca, no ale ja tam specjalnie w tym nie widzę ah i oh aby rzucać całą zdobytą wiedzę i doświadczenie, tylko dlatego, że wlazła jakaś nowinka która ma jakąś tam pierdółkę do zarządzania pamięcią, tak, wiem, ktoś może przejąć osierocony fragment pamięci - ale przecież jak ktoś siedzi w C++, to też są mechanizmy do zarządzania pamięcią np inteligentne wskaźniki np "unique_ptr", "shared_ptr", "weak_ptr"...

więc jaki jest sens zaczynać od nowa? Wiem, że nie ma uniwersalnego języka do wszystkiego ale na C/C++ praktycznie wszystko stoi, od systemów operacyjnych, po programy użytkowe, po bazy danych...

0
zkubinski napisał(a):

więc jaki jest sens zaczynać od nowa? Wiem, że nie ma uniwersalnego języka do wszystkiego ale na C/C++ praktycznie wszystko stoi, od systemów operacyjnych, po programy użytkowe, po bazy danych...

Po pierwsze nie musisz porzucać C/C++, z tego co wiem rust dobrze współgra z C/C++ i możesz linkować libki rusta i również używać libek w drugą stronę.
Po drugie coś jest nie tak jeśli myślisz że zmiana języka programowania to "zaczynanie od nowa" i "rzucanie całej zdobytej wiedzy i doświadczenia". Przeciętny programista zmienia język programowania podczas kariery kilkukrotnie, zna ich zalety i wady i stosuje język stosownie do wymogów zamiast uderzać we wszystko młotkiem. Próbowałeś kiedykolwiek uczyć się innych języków? Zamykanie się w jednym strasznie ogranicza myślenie

1
zkubinski napisał(a):

dobra, nie jestem super znachorem ale poczytałem sobie co nieco o tym ruscie, bo tak ostatnio wszyscy nad nim się spuszczają... Wszyscy lubią ruszta, za kontrolę nad dynamiczną pamięcią... i zachwytów nie ma końca, no ale ja tam specjalnie w tym nie widzę ah i oh aby rzucać całą zdobytą wiedzę i doświadczenie, tylko dlatego, że wlazła jakaś nowinka która ma jakąś tam pierdółkę do zarządzania pamięcią, tak, wiem, ktoś może przejąć osierocony fragment pamięci - ale przecież jak ktoś siedzi w C++, to też są mechanizmy do zarządzania pamięcią np inteligentne wskaźniki np "unique_ptr", "shared_ptr", "weak_ptr"...

Tak, są mechanizmy, tylko że w praktyce, przy pisaniu bardzo złożonego oprogramowania w dużych zespołach, niezbyt dobrze działają. I to nawet jeśli masz topkę programistów w firmie. UB w C++ można zrobić bardzo łatwo przypadkowo w wysokopoziomowym kodzie nawet nie używając nagich wskaźników czy new/delete.

https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html

As the amount of new memory-unsafe code entering Android has decreased, so too has the number of memory safety vulnerabilities. From 2019 to 2022 it has dropped from 76% down to 35% of Android’s total vulnerabilities. 2022 is the first year where memory safety vulnerabilities do not represent a majority of Android’s vulnerabilities.

Poza tym błędy zarządzania pamięcią to nie wszystkie problemy C++.
C++ nie wyłapuje błędów współbieżności na etapie kompilacji, Rust wyłapuje.
C++ ma też całe mnóstwo UB nie związanych z zarządzaniem pamięcią, choćby takie jak przepełnienia operacji arytmetycznych, w Rust arytmetyka nie powoduje UB.
C++ ma całe mnóstwo błędogennych mechanizmów, które może same w sobie nie powodują UB, ale przyczyniają się do słabego kodu - dziedziczenie / wielodziedziczenie, zmienne globalne, konstruktory kopiujące / przesuwające, operatory ++/--, iteratory kolekcji (osobne begin i end) itp.

No i ostatecznie Rust jest bardzo mocno inspirowany językami z rodziny ML (np. OCaml) oraz językami funkcyjnymi (Haskell, Scala), znacznie bardziej niż Javą/C++. Do C++ to ma najbardziej podobną jedynie składnię (klamerki), bo semantyka i sposób pisania kodu jest mocno inny.
Brak w nim obiektowości ala Java/C++, za to są typy algebraiczne, pattern matching, inferencja typów, type-classes, sygnalizacja błędów przez return, rozdzielenie zachowań od danych, działające package-private itp. To wszystko powoduje, że wiele rzeczy można w tym języku wyrazić znacznie prościej niż z użyciem Java/C++.

0
Krolik napisał(a):

Poza tym błędy zarządzania pamięcią to nie wszystkie problemy C++.
C++ nie wyłapuje błędów współbieżności na etapie kompilacji, Rust wyłapuje.
C++ ma też całe mnóstwo UB nie związanych z zarządzaniem pamięcią, choćby takie jak przepełnienia operacji arytmetycznych, w Rust arytmetyka nie powoduje UB.
C++ ma całe mnóstwo błędogennych mechanizmów, które może same w sobie nie powodują UB, ale przyczyniają się do słabego kodu - dziedziczenie / wielodziedziczenie, zmienne globalne, konstruktory kopiujące / przesuwające, operatory ++/--, iteratory kolekcji (osobne begin i end) itp.

dobra, spoko, zgoda. Ale te błędy nie wynikają z tego, że C++ jest ułomny sam w sobie. Raczej to jest efekt tzw. "zachłanności" tak bym to nazwał, bo ktoś chciał aby C++ był kompatybilny z C, a w C z tego co kojarzę nie ma czegoś takiego jak inteligentne wskaźniki i błędy z C ciągną się razem z C++. Sądzę, że kiedyś powinni wybrać albo "kompatybilność" z C albo bezpieczeństwo i niestety ale trzeba by spiąć poślady i wszystkie starocie przepisać w C++ - no z tego co słyszę jak kernela linux zaczynają przepisywać w rust... to i da radę olać zaszłości z C. No ale to nie moja polityka

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