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)
  • Data: 2017-08-24 10:25:24
    Temat: Re: Co jest nie tak z C++ (było: Rust)
    Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: