-
X-Received: by 10.31.153.9 with SMTP id b9mr12279vke.14.1503938356399; Mon, 28 Aug
2017 09:39:16 -0700 (PDT)
X-Received: by 10.31.153.9 with SMTP id b9mr12279vke.14.1503938356399; Mon, 28 Aug
2017 09:39:16 -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!border1.nntp.dca1.giganews.com!nntp.giganews.com
!v29no169291qtv.0!news-out.google.com!j49ni167qtc.1!nntp.google.com!v29no169290
qtv.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Mon, 28 Aug 2017 09:39:16 -0700 (PDT)
In-Reply-To: <f...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=159.205.151.11;
posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
NNTP-Posting-Host: 159.205.151.11
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>
<6...@g...com>
<f...@g...com>
<0...@g...com>
<f...@g...com>
<d...@g...com>
<5...@g...com>
<a...@g...com>
<4...@g...com>
<8...@g...com>
<f...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <a...@g...com>
Subject: Re: Co jest nie tak z C++ (było: Rust)
From: "M.M." <m...@g...com>
Injection-Date: Mon, 28 Aug 2017 16:39:16 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 303
X-Received-Body-CRC: 1370039806
X-Received-Bytes: 15805
Xref: news-archive.icm.edu.pl pl.comp.programming:211376
[ ukryj nagłówki ]On Sunday, August 27, 2017 at 10:21:01 PM UTC+2, g...@g...com wrote:
> W dniu sobota, 26 sierpnia 2017 09:18:54 UTC+2 użytkownik M.M. napisał:
> Trochę pokazałem w Haskellowej implementacji funkcji qsort.
> Jeżeli idzie o szachy, to akurat swego czasu napisałem klienta
> do gry w szachy (czyli bez sztucznej inteligencji), i zacząłem
> od tego, że opisałem szachy komputerowi w taki sposób, jakbym
> tłumaczył je człowiekowi -- czyli np. tak:
> [...]
> No właśnie, i moim zdaniem to programy komputerowe powinny
> z automatu testować wszystko -- formułować różne "hipotezy"
> i dokonywać pomiarów.
Czyli programować w języku myślenia oznacza coś w rodzaju, żeby
programować komputery, może z wykształceniem matematycznym, ale na
pewno bez informatycznego. Hmmm idea fajna, a jak z tym jest w
praktyce? Podajesz linki do swoich sukcesów, może w praktyce to
jest bardziej możliwe niż mi się wydaje?
> Jeżeli idzie o mnie, to kiedy zacząłem się uczyć Scheme'u,
> studiując "Strukturę i Interpretację Programów Komputerowych",
> kilka lat zajęło mi oduczenie się wszystkich nawyków, które
> przyniosłem z C i C++.
Czy możesz powiedzieć uczciwie, co zyskałeś na tym, a co straciłeś?
> Nie wiem. Moim zdaniem system "R" to koszmarne nieporozumienie.
> Aż mi przykro, że do czegoś takiego doszło, ale chyba jest to
> bardziej fenomen socjologiczny, niż programistyczny.
O ile tylko nadaje się do jakiegoś zadania, to nie mam nic
przeciwko R. Ale właśnie aplikacji okienkowej nie chciałbym w
nim robić.
> Co do aplikacji okienkowych, to jedyny system, który do tej pory
> widziałem, w którym pisanie tego rodzaju aplikacji było zrobione
> w miarę dobrze, to Pythonowy Enaml.
Może bym musiał spróbować kiedyś.
> Zależy, co rozumiesz przez "sztuczną inteligencję",
> ale historycznie rzecz biorąc jakieś bardziej dojrzałe
> systemy sztucznej inteligencji mamy co najmniej od
> lat 80.
Miałem na myśli system, który z dużym prawdopodobieństwem
odgadnie cel jaki programista chce zrealizować. Przy odgadywaniu
jedynie może opierać się na analizie meta-kodu i jakiś dodatkowych
skąpych wskazówek, np. może zadać pytania tylko do sytuacji
dwuznacznych. Następnie wygeneruje sub-optymalny kod w C, z
wariantami dostosowanymi do różnych rozmiarów/rozkładów
danych wejściowych. Gdy piszę "cel", to nie mam na myśli
celu typu "pomoc w zarządzaniu firmą", ale raczej bardzo
rozległy zbiór algorytmów które dadzą te same dane
wyjściowe z dopuszczalnych wejściowych. AI ustalałaby jaki
to zbiór i z tego zbioru wybierałaby bardzo dobry, albo
wręcz najlepszy w jakimś sensie. Np. dajemy wagę 10 na
wydajność i 30 na zajętość pamięci i na drugi dzień mamy
implementacje maksymalnie zbliżoną do takich parametrów.
> Sztuczne sieci neuronowe stosuje się chyba bardziej
> w zagadnieniach klasyfikacji i estymacji, niż przy
> transformacji programów?
Teoretycznie można zastosować, sieci mogą reprezentować
klasy algorytmów i rozpoznawać do jakiej klasy należy
dany meta-kod. Jednak w praktyce zastosowanie sztucznych sieci do
transformacji programów byłoby niewyobrażalnie
trudne... Chociaż ostatnio straciłem pewność co kiepskich
możliwości sieci neuronowych w praktyce.
Kiedyś dawno temu drwiłem z sztucznych sieci neuronowych na
wiele sposobów. Mówiłem np. że jeśli są takie dobre i
uniwersalne, to dlaczego jedna sieć neuronowa nie uczy
drugiej, leczy zaprzęga się do tego celu "zewnętrzny"
algorytm. Człowiek (potencjalnie) może zrozumieć w
szczegółach działanie swojego mózgu i go ulepszyć.
Kilka dni temu wylegiwałem się na kanapie i mnie
olśniło, a właściwie to mnie zmroziło ze strachu, naprawdę
zaczęło mi bić serce ze strachu. Znalazłem zastosowanie
sieci neuronowej do ulepszenia działania samej siebie.
To ulepszenie oczywiście stanowi drobiazg (choć odczuwalny),
nie ma nic wspólnego z systemem który ma samoświadomość,
rozumie swój kod i go przepisuje na lepszy. Jednak zawsze
zaczyna się od drobiazgów.
> Napisałem na ten temat pracę magisterską. Chciałbym ją
> upublicznić, ale najpierw wolałbym się obronić, żeby się
> nie okazało, że system antyplagiatowy zaklasyfikował moją
> pracę jako plagiat jakiegoś cwaniaka.
Rozumiem.
> Wszędzie trzeba się umówić.
> Tyle że języki wywodzące się z C narzucają dziwne ograniczenia
> na nazewnictwo zmiennych (z Haskellem zresztą jest podobnie).
> W Lispie nikt nie robi notacji_podkreślnikowej ani camelCaseów',
> bo można łączyć ze sobą słowa myślnikami, tak jak w europejskiej
> typografii.
Myślę, że zabrnęliśmy w szczegół, taka czy siaka literka to
po prostu rzecz do omówienia w zespole.
> A one miały jakieś tytuły?
Tak, nie wszystkie mam do dziś w biblioteczce, niektóre wydałem,
zgubiłem, miałem pożyczone. Miałem ze 20 sztuk tego, począwszy
od C++ do idiotów, skończywszy na Lippmanie i Stroustrupie.
Dlaczego dopytujesz o konkretne tytuły? Teraz mam, licząc z
daleka i patrząc słabym wzrokiem, 13 tytułów na półce.
> Jedyny sposób, żeby się przekonać, to sprawdzić.
Trochę sprawdzałem w Javie.
> Sztucznej inteligencji jest dość sporo. I nie mam na myśli
> jakichś systemów deep-learningowych, które naśladują działanie
> ludzkiego mózgu (i czasem robią naprawdę imponujące rzeczy),
> ale raczej pomysły w rodzaju superkompilatora Valentina Turchina,
> albo systemu Burstalla-Darlingtona do transformacji programów,
> albo systemu Boyera-Moore'a do dowodzenia twierdzeń o własnościach
> programów. To są rzeczy z lat 80. XX wieku.
Ok, ale jeśli podwaliny teoretyczne są takie dobre to dlaczego
programy napisane w Pythonie działają nadal wolno? Nikomu nie
chce się napisać porządnego kompilatora do Pythona?
> Czy są jakieś fundamentalne powody, dla których miałoby nie być
> możliwe?
Nie wiem. To ja pytam. Dlaczego programy napisane w Pythonie są
wolne?
> Nie jestem pewien. Herbert Simon i Allen Newell robili w IPL naprawdę
> imponujące rzeczy, ale raczej nie dałoby się zakochać w tym języku.
> Z Javą mam podobne odczucie -- z niektórych prostych rzeczy czyni
> rzeczy wymagające sporego wysiłku (pewnie sporo zmieniło wprowadzenie
> lambdy w Javie 8 pod tym względem, ale nie powiedziałbym, żeby lambdy
> stanowiły kanoniczną część Javy)
Mogę jakiś minimalny przykład poprosić, co jest w Javie
pracochłonne, a w Scali, Rybym, Pythonie, itd, łatwe?
> Jeżeli korzystasz w swoim programie z gotowych kolekcji, które mają
> kompatybilne interfejsy, ale różnią się charakterystyką wydajnościową,
> to użycie algorytmów genetycznych do optymalizacji rodzajów kolekcji,
> z których chcesz korzystać, jest trywialne.
Może się nie zrozumieliśmy dlatego, że ja miałem na myśli skompilowany
program, a Ty myślisz o skompilowaniu przed testowaniem. Tak, na
poziomie kodu źródłowego (koncepcyjnie, niekoniecznie w realizacji)
takie zadanie jest trywialne.
> Ale nie zgadzamy się w kwestii rozumienia pojęcia "sztuczna inteligencja".
> Pewnie Ty rozumiesz to pojęcie dosłownie, a ja -- historycznie, [...]
Rozumiem dosłownie, ale niekoniecznie w dowolnym obszarze zastosowania.
Chodziło mi o AI zdolne do generowania sub-optymalnego kodu na podstawie
meta-kodu, albo na podstawie języka bardzo wysokiego poziomu.
> Dla mnie brzmi to jak oksymoron :)
To tylko przykład z mojej częstej praktyki.
> To właściwie jest główny przykład wałkowany w mojej magisterce.
>
> Oczwiście, zapis [x | x <- rest, x < pivot] czytamy jako
> "te spośród elementów listy 'rest', które są mniejsze od
> elementu 'pivot'"
Mnie się podoba.
> Pokazywałem ten przykład w swojej magisterce, opisując, w jaki sposób
> można stworzyć system reguł, pozwalający przekształcać mniej więcej
> tak zapisanego quicksorta w implementację porównywalną wydajnościowo
> z C.
Czyli zrobiłeś taki początek sztucznej inteligencji jaką miałem
na myśli. Mi to imponuje, ale mam też pytanie: jak z przekształcaniem
innych algorytmów?
> W swojej pracy mam:
> - opis składni BNF języka Scheme, składający się z dwóch reguł i kilku
> nieformalnych dopowiedzeń
> - implementację maszyny wirtualnej, modelującej z grubsza działanie
> i zestaw instrukcji typowych procesorów, zaimplementowaną w 200 linijkach
> języka Scheme (śmiem twierdzić, że tak czytelnego, jak tylko się da)
> - asembler przekształcający kod z etykietami do kodu z ustalonymi
> adresami, w 30 linikach
> - interpreter języka Scheme w nim samym, w ok. 60 linijkach
> - kompilator używanego przeze mnie podzbioru Scheme'u do zestawu rozkazów
> powyższej maszyny wirtualnej, zajmujący ok. 300 linijek
Wszystko bardzo zwięzłe. 30 linijek, 60, nawet 300 to bardzo mało. Może
będę musiał poczytać o Scheme :)
> [...]
> co do C++ i Javy, to oczywiście mógłym go używać jako metajęzyka do
> opisywania przekształceń, ale nie spodziewałbym się, żebym coś w ten
> sposób zyskał, a poza tym nie mógłbym liczyć na to, że wynik mojej
> pracy mógłby mieć szansę stosować się sam do siebie (pewnie też dużo
> bym stracił na czytelności)
Brzmi to bardzo ciekawie.
> To jest zresztą chyba mój największy zarzut do C++: stwarza wrażenie,
> jakby język był czymś danym z góry przez twórców języka, którzy mają
> zawsze rację. Scheme dla odmiany jest językiem, którego implementacja
> jest ćwiczeniem dla studentów, a przy okazji bardzo dobrze nadaje się
> do pisania czytelnych programów. A przy tym istnieją też implementacje,
> których wydajność jest porównywalna z C (konkretnie, firma Cisco wypuściła
> ostatnio do Open-Source'a kompilator Chez Scheme, który ma taką reputację,
> a przy tym pozwala na inkrementalną kompilację)
Chyba naprawdę poczytam o Scheme :)
Pozdrawiam
Następne wpisy z tego wątku
- 29.08.17 15:26 g...@g...com
- 29.08.17 16:03 g...@g...com
- 29.08.17 17:32 M.M.
- 29.08.17 18:46 slawek
- 29.08.17 20:26 M.M.
- 30.08.17 00:46 AK
- 30.08.17 00:49 AK
- 30.08.17 08:00 M.M.
- 30.08.17 10:46 Szyk Cech
- 30.08.17 15:32 M.M.
- 30.08.17 15:35 Adam M
- 30.08.17 16:09 Adam M
- 30.08.17 16:30 slawek
- 30.08.17 16:42 Adam M
- 30.08.17 16:53 slawek
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
- 2025-01-01 Już nie płoną
- 2025-01-01 Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- 2025-01-01 Co tam u Was
- 2025-01-01 Koder szuka pracy. Koduję w j.: Asembler, C, C++ (z bibl. Qt) i D.
- 2025-01-01 Gdańsk => Delphi Programmer <=
- 2025-01-01 Łódź => Programista Full Stack .Net <=
- 2025-01-01 Żerniki => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-01 Wrocław => Specjalista ds. Sprzedaży <=
- 2024-12-31 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-31 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-01 Przypomnienie: Mini Netykieta polskich grup dyskusyjnych wer. 3.2.2
- 2024-12-31 Zamykanie konta dziecka.
- 2024-12-31 Czy apka bankowa to gra komputerowa?
- 2024-12-31 Szukam: czujnik ruchu z możliwością zaączenia na stałe
- 2024-12-31 Warszawa => Solution Architect (Java background) <=