eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCo jest nie tak z C++ (było: Rust)Re: Co jest nie tak z C++ (było: Rust)
  • X-Received: by 10.31.48.138 with SMTP id w132mr43121vkw.23.1503563125043; Thu, 24 Aug
    2017 01:25:25 -0700 (PDT)
    X-Received: by 10.31.48.138 with SMTP id w132mr43121vkw.23.1503563125043; Thu, 24 Aug
    2017 01:25:25 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!peer02.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-medi
    a.com!news.highwinds-media.com!v29no261522qtv.0!news-out.google.com!f21ni172qta
    .1!nntp.google.com!e2no261714qta.1!postnews.google.com!glegroupsg2000goo.google
    groups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Thu, 24 Aug 2017 01:25:24 -0700 (PDT)
    In-Reply-To: <c...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=194.9.244.37;
    posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
    NNTP-Posting-Host: 194.9.244.37
    References: <f...@g...com>
    <1...@g...com>
    <7...@g...com>
    <b...@g...com>
    <a...@n...v.pl>
    <2...@g...com>
    <a...@n...v.pl>
    <on23a3$85s$1@node1.news.atman.pl>
    <a...@n...v.pl>
    <on75ke$g4u$1@node2.news.atman.pl>
    <5...@g...com>
    <onfotu$lh6$1@node1.news.atman.pl>
    <0...@g...com>
    <3...@g...com>
    <6...@g...com>
    <c...@g...com>
    <d...@g...com>
    <5...@g...com>
    <c...@g...com>
    <3...@g...com>
    <6...@g...com>
    <c...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <6...@g...com>
    Subject: Re: Co jest nie tak z C++ (było: Rust)
    From: Maciej Sobczak <s...@g...com>
    Injection-Date: Thu, 24 Aug 2017 08:25:25 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Body-CRC: 92901081
    X-Received-Bytes: 7842
    Xref: news-archive.icm.edu.pl pl.comp.programming:211272
    [ ukryj nagłówki ]

    > Mogę podać inny przykład, bliższy temu, o czym tutaj jest mowa.
    >
    > for (int i = 0; i < ticks_per_frame; i++) {
    > for_each(in_seq(sectors), bind2nd(mem_fun(&Sector::update), 0.07));
    > for_each(in_seq(portals), bind2nd(mem_fun(&Portal::update), 0.07));
    > for_each(in_seq(ropes), bind2nd(mem_fun(&Rope::update), 0.07));
    > }

    Faktycznie koszmarek.

    > Dla odmiany taki chociażby Python pozwoliłby wyrazić te konstrukcje
    > np. tak:
    >
    > for instance in range(ticks_per_second):
    > for sector in sectors:
    > sector.update(0.07)

    A gdzieś tak od pół dekady C++ pozwala tak:

    for (Sector & s : sectors)
    s.update(0.07);

    W pewnym okresie była taka moda, że chyba wszystkie języki teraz mają coś podobnego.

    > > Ale przecież operatory w Wolframie też można wypowiedzieć.
    > > Np. operator indeksowania (to te podwójne nawiasy) nazywa się
    > > Part.
    >
    > Dziwne. Nie przyszło mi do głowy, żeby [[_ ;; ;; _]] wymówić "Part".

    Dziwne. Tak się właśnie ten operator nazywa. Podobnie, + nazywa się Plus. Itd.

    > Prędzej wymówiłbym to jako "otwórz nawias kwadratowy, otwórz nawias
    > kwadratowy, coś, spacja, średnik, średnik, spacja, średnik, średnik,
    > spacja, coś, zamknij nawias kwadratowy, zamknij nawias kwadratowy".

    Jasne. A wywołanie funkcji w SmallTalku wymawiasz "ttl, otwórz nawias okrągły, coś,
    zamknij nawias okrąły". Nie silmy się na takie trolowanie.

    > Wątpliwości w dalszym ciągu wzbudza rola podkreślnika po argumencie
    > po lewej stronie znaku ":=",

    To jest wzorzec, który akceptuje cokolwiek. Czyli jest to definicja funkcji, która ma
    jeden argument dowolnego typu. Można wzorzec ograniczyć np tak:

    oddsEvens[x_List] := ...

    i wtedy jest to funkcja, która ma jeden argument typu List.
    W tym przypadku można byłoby tak zrobić, ale wtedy taka funkcja działałaby tylko z
    listami, a akurat nie tylko listy mają taką strukturę, którą moglibyśmy chcieć w ten
    sposób uporządkować. Dlatego wolałem zostawić szerszy wzorzec.

    http://reference.wolfram.com/language/ref/Blank.html

    > oraz to, dlaczego do wyrażenia tożsamości
    > użyto symbolu powszechnie używanego w informatyce w roli przypisania.

    Bo to jest przypisanie. Tak się właśnie definiuje funkcje.

    http://reference.wolfram.com/language/ref/SetDelayed
    .html

    > Podwójnych podwójnych średników też nie lubię.

    To napisz x[[1;;-1;;2]], wtedy będzie widać, że indeksowanie jest od 1 do końca. Ta
    spacja między średnikami to opuszczone -1.

    > Zgadzam się.
    > Gdybyśmy zresztą nawet nie dysponowali funkcją Parts, moglibyśmy
    > ją sobie zdefiniować przy pomocy cons, car, cdr i rekurencji.

    I to jest właśnie coś, czego nie lubię.
    Indeksowanie jest naturalną operacją i dla komputera (w sensie: hardware) bardziej
    podstawową. Dlatego wolę, jeśli język ją wspiera bezpośrednio.

    W ogóle, w naturze nie ma procesów rekurencyjnych. To jest na siłę wciskany ludziom
    kit, że rekurencja jest podstawą innych rzeczy. Dlatego języki promujące rekurencję
    jako podstawową konstrukcję są nienaturalne - zarówno w nauce, jak i w wykonaniu.

    > Że języki, które znamy, warunkują sposób, w jaki myślimy,

    Niezupełnie. Pierwszy język może to warunkować (i Wittgensteinowi chodziło o język
    naturalny). Natomiast później nasze myślenie może warunkować pozostałe wybory.

    > Nie wiem zresztą, czy miał przekonać. Raczej miał stanowić
    > ilustrację tego, w jaki sposób ta maksyma odzwierciedla się
    > w kontekście języków programowania. Sądzę, że -- mimo wszystkich
    > zarzutów, jakie wysnułeś, dotyczących rozwiązania wymyślonego
    > przez Kaya (i które nb nijak się mają do tego, co chciałem
    > zakomunikować) -- stanowi dobrą ilustrację.

    Tak. Kiepski język prowadzi do kiepskiego myślenia i w rezultacie do kiepskich
    programów. :-)

    > w szczególności warto przyglądać się
    > temu, jak historycznie kształtowały się nasze sposoby rozumienia
    > obliczania i komputerów.

    Tak.

    > Skoro mowa o kontekście, może zamiast pokazywać przykład
    > w Mathematice, która stosunkowo niewiele różni się od ISWIMa z lat 60.,
    > może spróbowałbyś pokazać rozwiązanie tego zadania w nowoczesnym
    > języku, jakim jest C++, żebyśmy zobaczyli

    Dlaczego? Ty nie pokazałeś przykładu w 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: