eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingUwagi odnośnie książki StroustrupaRe: Uwagi odnośnie książki Stroustrupa
  • X-Received: by 2002:a37:4c43:: with SMTP id z64mr743233qka.5.1546586154091; Thu, 03
    Jan 2019 23:15:54 -0800 (PST)
    X-Received: by 2002:a37:4c43:: with SMTP id z64mr743233qka.5.1546586154091; Thu, 03
    Jan 2019 23:15:54 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.
    85.160.216.MISMATCH!v55no829694qtk.0!news-out.google.com!h3ni13686qtk.1!nntp.go
    ogle.com!v55no829687qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.co
    m!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Thu, 3 Jan 2019 23:15:53 -0800 (PST)
    In-Reply-To: <1...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=165.225.84.81;
    posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
    NNTP-Posting-Host: 165.225.84.81
    References: <0...@g...com>
    <8...@g...com>
    <a...@g...com>
    <a...@g...com>
    <1...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <2...@g...com>
    Subject: Re: Uwagi odnośnie książki Stroustrupa
    From: Maciej Sobczak <s...@g...com>
    Injection-Date: Fri, 04 Jan 2019 07:15:54 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:213158
    [ ukryj nagłówki ]

    > > I co w tym zabawnego?
    >
    > Dla programistów C++ pewnie nic.

    Ogólnie, dla programistów porzebujących narzędzi odzwierciedlających sposób działania
    komputera.

    > Co w takim razie wnoszą referencje w C++? (oprócz niepotrzebnej komplikacji)

    Uwaga: dopiero co usiłowałeś udowodnić, że operator przypisania jest niepotrzebny.

    Uwaga na dwie różne rzeczy. Referencje same w sobie to aliasy i służą właśnie do
    tego, żeby upraszczać zapis (o tym pisał AK) a nie żeby cokolwiek komplikować. Drugie
    zastosowanie referencji to przekazywanie argumentów bez konieczności ich kopiowania.
    Służą wydajności i są czytelniejsze, niż wskaźniki a pozwalają nie kombinować z
    dodatkowymi "trybami" czy innymi "modami" parametrów podprogramów.

    > Co takiego staje się możliwe dzięki nim, co nie było możliwe bez nich?

    Pisanie bardziej czytelnego kodu. Widać to bardzo dobrze gdy porówna się API
    bibliotek mających osobne wersje dla C i C++.

    > > W tym wypadku wartością dodaną jest możliwość korzystania z jakieś ograniczonej
    formy lambdy, bez konieczności posiadania garbage collectora.
    >
    > Pierwszy kompilator języka Scheme, ORBIT, dawał ograniczoną
    > formę lambdy i nie potrzebował garbage collectora.

    W jaki sposób realizował upward-closure?

    > > Inaczej - istnieje pewna klasa projektów, w których nikt[*] nie ma lepszej
    oferty.
    >
    > Jeśli pominiemy takie języki jak np. Rust.

    Ciekawe:

    https://doc.rust-lang.org/1.1.0/book/closures.html

    "So if we returned this closure, the function call would be over, the stack frame
    would go away, and our closure is capturing an environment of garbage memory!"

    Jest podane rozwiązanie tego problemu, ale nie wiem, czy ten mechanizm jest
    stosowalny tak samo wygodnie dla różnych przypadków, które można sobie wyobrazić. W
    C++ po prostu dano użytkownikom narzędzie i obowiązek do samodzielnego rozstrzygania
    takich problemów. W tym przypadku problem nie jest trudny do rozstrzygnięcia i nie
    wiem, czy chcę mieć aż tak dużą dodatkową komplikację na poziomie języka, żeby ten
    problem rozwiązać.
    Tzn. potrafię nie mieć problemu z wiszącymi referencjami w C++ przy składni
    prostszej, niż oferuje Rust, więc w tym konkretnym przypadku Rust jest dla mnie
    niepotrzebnym kosztem.

    Rust jest ciekawym pomysłem (ogólnie w aspekcie zarządzania czasem życia obiektów),
    ale potrzeba jeszcze czasu, żeby ocenić jego przydatność w praktyce.
    Pod pojęciem praktyki rozumiem np. system, dla którego istnieje kompilator C++ a dla
    którego nie istnieje kompilator Rust. Praktyka to również dostępne narzędzia
    pomocnicze w rodzaju analizatorów statycznych. Być może Rust zyska sympatię
    użytkowników i stanie się popularny, nie potrafię tego jeszcze rozstrzygnąć.

    > Standard GNU C

    To tak jakbyś napisał "Standard Visual C".

    --
    Maciej Sobczak * http://www.inspirel.com

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: