-
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
Następne wpisy z tego wątku
- 24.08.17 11:38 g...@g...com
- 24.08.17 12:20 M.M.
- 24.08.17 13:02 g...@g...com
- 24.08.17 15:42 fir
- 24.08.17 15:46 g...@g...com
- 24.08.17 17:32 M.M.
- 24.08.17 18:10 fir
- 24.08.17 20:11 Mateusz Bogusz
- 24.08.17 21:24 fir
- 24.08.17 21:32 g...@g...com
- 24.08.17 23:48 Adam M
- 25.08.17 00:23 g...@g...com
- 25.08.17 01:12 M.M.
- 25.08.17 06:04 AK
- 25.08.17 06:05 AK
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2024-12-21 Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 2024-12-21 Ideologia Geniuszy-Mocarzy dostępna na nowej s. WWW energokod.pl
- 2024-12-21 ciekawy układ magnetofonu
- 2024-12-21 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2024-12-21 Warszawa => Java Developer <=
- 2024-12-21 Zalesie Borowe => Medical Equipment Service Engineer <=
- 2024-12-21 Żerniki => Specjalista ds. Employer Brandingu <=
- 2024-12-21 jak tacy debile
- 2024-12-20 Precedensy politycznie motywowanego nie wydawania w UE
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Gdańsk => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-20 czyste powietrze
- 2024-12-20 Katowice => Analyst in the Trade Development department (experience wi