Thread View: pl.comp.lang.funkcyjne
43 messages
43 total messages
Started by Przemek Pokrywka
Mon, 02 Jan 2006 21:30
j. funkcyjne - jakie zastosowania?
Author: Przemek Pokrywka
Date: Mon, 02 Jan 2006 21:30
Date: Mon, 02 Jan 2006 21:30
7 lines
937 bytes
937 bytes
Witam, Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach spisują się one najlepiej? Pozdrawiam Przemek
Re: j. funkcyjne - jakie zastosowania?
Author: Zbyszek Malec
Date: Mon, 02 Jan 2006 21:43
Date: Mon, 02 Jan 2006 21:43
11 lines
1195 bytes
1195 bytes
Przemek Pokrywka wrote (tak! stara dobra wrotka!): > Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach > spisują się one najlepiej? Języki funkcyjne są obiektywnie najlepsze na świecie, tak więc nadają się znakomicie do każego problemu. Niestety mają jedną wadę - są trudniejsze od języków pokroju C czy C++ tak więc nie są super popularne. -- Zbigniew Malec Ustronie:104 gg:2756100
Re: j. funkcyjne - jakie zastosowania?
Author: Adam Przybyla
Date: Mon, 02 Jan 2006 22:14
Date: Mon, 02 Jan 2006 22:14
27 lines
2707 bytes
2707 bytes
Przemek Pokrywka <adres@zastrzezony.com> wrote: > Witam, > > Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach > spisują się one najlepiej? ... aktualnie najbardziej komercyjne dobrze sprzedaly się w: DSSSL - przeksztalcenia XML/SGML, Autocad - jezyk skryptow czyli dodawanie logiki do programu przez uzytkownikow, to samo w Gimp-ie (SIOD), Franz CommonLisp dobrze się podobno sprawdza w pisaniu gier na komorofony, cl-httpd za Clintona dzialal jako serwer publikacji Bialego Domu, bez szans na wlam;-) Stosuje się to takze, (CL) jako platforme do RAD i nie na zasadzie polaczenia oczojebnego GUI po raz kolejny z baza SQL aby taka aplikazja zadzialala choc raz przed klientem, z cala masa miotajacych się po pamieci blednych wskaznikow, ale dla stworzenia aplikacji ktore musza dzialac jako aplikacje krytyczne - np. zmieniane w "locie" aplikacje do zarzadzania misjami kosmicznymi (to z NASA) bo jak cos jest nie tak, to elektronika, warta tyle co 100 ferrari, idzie w pizdu;-))) W ten sposob powstawaly tez sklepy w Yahoo, teraz juz dzialajace przepiano je na cos innego i zoptymalizowano. Bywa, ze stosuje sie lispa do AI, tak jak europejczycy preferuja Prologa, tak amerykanie Lispa, choc czasami takie aplikacje migruja potem na inny jezyk, przyklad: http://opensource.arc.nasa.gov/project.jsp?id=6 napsiany wstapnie w CL wymigrowal na C++. Zerknij na strone franz.com tam powinno byc wiecej informacji. Generalnie teraz niektore funkcje przejmuja jezyki troche prostsze, jak Python. A z drugiej strony, postep w analizie kodu wlasciwie uczynil dla kompilatora wlasciwie kazdy jezyk jezykiem deklaratywnym, czym wytacil glowna bron jezykom funkcyjnym. Z powazaniem Adam Przybyla
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Tue, 03 Jan 2006 07:14
Date: Tue, 03 Jan 2006 07:14
16 lines
1288 bytes
1288 bytes
Przemek Pokrywka wrote: > Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach > spisują się one najlepiej? U mnie bardzo dobrze sprawdzaja sie w pracy (konkretnie: Haskell). Zastosowania sa rozne, od serwerow sieciowych i skryptow CGI po analize i przeksztalcanie wlasnych prostych jezykow. Patrz sygnaturka. Pozdrawiam Tomek -- I am searching for a programmer who is good at least in some of [Haskell, ML, C++, Linux, FreeBSD, math] for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Tue, 03 Jan 2006 07:50
Date: Tue, 03 Jan 2006 07:50
17 lines
1475 bytes
1475 bytes
Zbyszek Malec wrote: > Języki funkcyjne są obiektywnie najlepsze na świecie, tak więc nadają się > znakomicie do każego problemu. Niestety mają jedną wadę - są trudniejsze od > języków pokroju C czy C++ tak więc nie są super popularne. Trudniejsze niz C++? To chyba tylko wtedy, kiedy juz znasz C++. A tak wlasciwie, to kto zna C++? Sam programuje w C++ od dobrych kilku lat, ale raczej nie znam C++ "na wylot", i nie mam zamiaru go tak dobrze poznawac. Best regards Tomasz -- I am searching for a programmer who is good at least in some of [Haskell, ML, C++, Linux, FreeBSD, math] for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Tue, 03 Jan 2006 08:08
Date: Tue, 03 Jan 2006 08:08
19 lines
1536 bytes
1536 bytes
Przemek Pokrywka wrote: > Witam, > > Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach > spisują się one najlepiej? > > Pozdrawiam > Przemek Może lepiej będzie podać parę przykładów wdrożeń w językach funkcyjnych, oprócz tych wspomnianych przez poprzedników: darcs, frag, pugs, no i oczywiście... kompilatory jęz. funkc. To trochę idiosynkratyczne, ale nic tak się nie nadaję do implementacji kompilatora/interpretera (i w ogóle narzędzi językowych), jak jęz. funkcyjny. Poza tym nie zapominajmy o największym na skalę komercyjno-reklamową wdrożeniu idei programowania funkcyjnego/deklaratywnego, jaką jest XSLT. R.
Re: j. funkcyjne - jakie zastosowania?
Author: Piotr Filip Mieszkowski
Date: Tue, 03 Jan 2006 11:03
Date: Tue, 03 Jan 2006 11:03
21 lines
2218 bytes
2218 bytes
Tomasz Zielonka wrote: > Zbyszek Malec wrote: > > Języki funkcyjne są obiektywnie najlepsze na świecie, tak więc nadają się > > znakomicie do każego problemu. Niestety mają jedną wadę - są trudniejsze od > > języków pokroju C czy C++ tak więc nie są super popularne. > > Trudniejsze niz C++? To chyba tylko wtedy, kiedy juz znasz C++. Biorąc pod uwagę zakres współczesnych kursów programowania zgodziłbym się z Z.M. Odnoszę wrażenie, że nie uczy się u nas podstawowych zagadnień związanych z programowaniem funkcyjnym (a w każdym razie nie znam takiego studenta ani absolwenta, który by tą wiedzę tajemną posiadł ani też sam nie nauczyłem się tego na żadnej uczelni). Podstaw C++ lub Javy uczą zaś wszędzie, więc każdy te podstawy *teoretycznie* ma. Dlatego zgodziłbym się, że C++ jest łatwiejsze do używania dla przeciętnego współczesnego absolwenta. Pozdrawiam, PFM
Re: j. funkcyjne - jakie zastosowania?
Author: Zbyszek Malec
Date: Tue, 03 Jan 2006 11:43
Date: Tue, 03 Jan 2006 11:43
11 lines
1222 bytes
1222 bytes
Tomasz Zielonka wrote (tak! stara dobra wrotka!): >> języków pokroju C czy C++ tak więc nie są super popularne. > > Trudniejsze niz C++? To chyba tylko wtedy, kiedy juz znasz C++. Pokroju C++, niekoniecznie samego C++. Chodzi mi o sposób pisania programów a nie zawiłości i kruczki danego języka. -- Zbigniew Malec Ustronie:104 gg:2756100
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Tue, 03 Jan 2006 13:14
Date: Tue, 03 Jan 2006 13:14
13 lines
1276 bytes
1276 bytes
RobertSzefler wrote: > Poza tym nie zapominajmy o największym na skalę komercyjno-reklamową > wdrożeniu idei programowania funkcyjnego/deklaratywnego, jaką jest XSLT. Fuj! To najgorszy jezyk funkcyjny z jakim pracowalem. Chyba wolalbym programowac w czystym rachunku lambda ;-) Best regards Tomasz -- I am searching for a programmer who is good at least in some of [Haskell, ML, C++, Linux, FreeBSD, math] for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Tue, 03 Jan 2006 13:41
Date: Tue, 03 Jan 2006 13:41
10 lines
1426 bytes
1426 bytes
Tomasz Zielonka wrote: > RobertSzefler wrote: > >>Poza tym nie zapominajmy o największym na skalę komercyjno-reklamową >>wdrożeniu idei programowania funkcyjnego/deklaratywnego, jaką jest XSLT. > > Fuj! To najgorszy jezyk funkcyjny z jakim pracowalem. Chyba wolalbym > programowac w czystym rachunku lambda ;-) Rzecz gustu. Lepszy od pehapa ;) [chyba wszystko jest lepsze, hehe]
Re: j. funkcyjne - jakie zastosowania?
Author: Adam Przybyla
Date: Tue, 03 Jan 2006 13:55
Date: Tue, 03 Jan 2006 13:55
10 lines
1508 bytes
1508 bytes
Tomasz Zielonka <tomasz.zielonka@gmail.com> wrote: > RobertSzefler wrote: >> Poza tym nie zapominajmy o największym na skalę komercyjno-reklamową >> wdrożeniu idei programowania funkcyjnego/deklaratywnego, jaką jest XSLT. > > Fuj! To najgorszy jezyk funkcyjny z jakim pracowalem. Chyba wolalbym > programowac w czystym rachunku lambda ;-) ... hihi, a sa jakies fajne ksiazki na ten temat po polsku? Z powazaniem Adam Przybyla
Re: j. funkcyjne - jakie zastosowania?
Author: Michal Przybylek
Date: Tue, 03 Jan 2006 14:05
Date: Tue, 03 Jan 2006 14:05
23 lines
1912 bytes
1912 bytes
"Przemek Pokrywka" <adres@zastrzezony.com> wrote: > Jestem nowy w temacie języków funkcyjnych - w jakich > zastosowaniach spisują się one najlepiej? Przy przetwarzniu "jezykow", na roznych poziomach - od konstrukcji kompilatorow/interpreterow, przez pisanie theorem proverow, az po NLP. Styl "niezmienniczy" dobrze wkomponowuje sie w programowanie wspolbiezne. Pozatym, jezyki funkcyjne maja zwyczajowo matematycznie duzo przyjemniejsze cechy semantyczne, niz jezyki obiektowe (ulatwia to np. wnioskowanie nt./werfikacje programow). Nadmienie tylko jeszcze dla formalnosci, ze: a) jezyki funkcyjne sa po prostu trudne na poziomie _koncepcyjnym_, a to jest zupelnie inna trudnosc niz w nauczeniu sie np. C++ (C++ to "naucz sie Illiady na pamiec", Haskell to "zrozum Kan extensions", o ile pierwszego jest sie ciezej nauczyc, o tyle drugiego nie kazdy jest w stanie), b) jezyki funkcyjne nie sprawdzaja sie w "programming in the large". mp
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 09:37
Date: Wed, 04 Jan 2006 09:37
26 lines
1612 bytes
1612 bytes
Michal Przybylek wrote:
> b) jezyki funkcyjne nie sprawdzaja sie w "programming in the large".
Moglbys to rozwinac? Nie bardzo mi sie to zgadza z moim doswiadczeniem.
Moze dlatego, ze myslimy o innych rzeczach.
Zatem kilka pytan kontrolnych:
- Co rozumiesz przez "programming in the large"?
- Komu sie nie sprawdzaja?
- A moze nie sprawdzaja sie w ogolnosci?
- Nigdy nie beda sie sprawdzac?
- Ile razy byly sprawdzane w "programming in the large"?
Przez ile firm?
osob?
Kiedy to bylo?
Czy "state of the art" zmienil sie od tego czasu?
- Czy masz jakies osobiste doswiadczenia z tym zwiazane?
Best regards
Tomasz
--
I am searching for programmers who are good at least in
(Haskell || ML) && (Linux || FreeBSD || math)
for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 09:40
Date: Wed, 04 Jan 2006 09:40
22 lines
1664 bytes
1664 bytes
Tomasz Zielonka wrote: > Michal Przybylek wrote: >> b) jezyki funkcyjne nie sprawdzaja sie w "programming in the large". > > Moglbys to rozwinac? Nie bardzo mi sie to zgadza z moim doswiadczeniem. > Moze dlatego, ze myslimy o innych rzeczach. Moze chodzi o to, ze ja po prostu uzywam Haskella jako narzedzia, pisze czysto-funkcyjnie tam, gdzie warto, ale czasem uzywam tez imperatywnosci. Czyli bez fanatyzmu, podejscie pragmatyczne. Ale z drugiej strony program nad ktorym ostatnio pracuje i z ktorego jestem bardzo zadowolony sklada sie w jakichs 95% z kodu czysto funkcyjnego. Tez ze wzgledow praktycznych. Best regards Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 09:42
Date: Wed, 04 Jan 2006 09:42
25 lines
1841 bytes
1841 bytes
Tomasz Zielonka wrote: > Tomasz Zielonka wrote: >> Michal Przybylek wrote: >>> b) jezyki funkcyjne nie sprawdzaja sie w "programming in the large". >> >> Moglbys to rozwinac? Nie bardzo mi sie to zgadza z moim doswiadczeniem. >> Moze dlatego, ze myslimy o innych rzeczach. > > Moze chodzi o to, ze ja po prostu uzywam Haskella jako narzedzia, > pisze czysto-funkcyjnie tam, gdzie warto, ale czasem uzywam tez > imperatywnosci. Czyli bez fanatyzmu, podejscie pragmatyczne. Przez imperatywnosc w Haskellu w tym przypadku rozumiem uzycie monady IO. Technicznie kod nadal jest czysto-funkcyjny, ale sposob myslenia o nim juz nie. PS. Jak to fajnie jest podyskutowac z samym soba ;-) Best regards Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 09:55
Date: Wed, 04 Jan 2006 09:55
20 lines
1757 bytes
1757 bytes
Tomasz Zielonka wrote: > Tomasz Zielonka wrote: > >>Michal Przybylek wrote: >> >>>b) jezyki funkcyjne nie sprawdzaja sie w "programming in the large". >> >>Moglbys to rozwinac? Nie bardzo mi sie to zgadza z moim doswiadczeniem. >>Moze dlatego, ze myslimy o innych rzeczach. > > > Moze chodzi o to, ze ja po prostu uzywam Haskella jako narzedzia, > pisze czysto-funkcyjnie tam, gdzie warto, ale czasem uzywam tez > imperatywnosci. Czyli bez fanatyzmu, podejscie pragmatyczne. > > Ale z drugiej strony program nad ktorym ostatnio pracuje i z ktorego > jestem bardzo zadowolony sklada sie w jakichs 95% z kodu czysto > funkcyjnego. Tez ze wzgledow praktycznych. Zdradzisz, jaki to projekt? Duży? Haskell się sprawdza?
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 09:57
Date: Wed, 04 Jan 2006 09:57
14 lines
1500 bytes
1500 bytes
Tomasz Zielonka wrote: > Przez imperatywnosc w Haskellu w tym przypadku rozumiem uzycie monady > IO. Technicznie kod nadal jest czysto-funkcyjny, ale sposob myslenia o > nim juz nie. Aj! Monady! A fe! > PS. Jak to fajnie jest podyskutowac z samym soba ;-) Żebyś nie czuł schizofrenii napisałem ;) BTW zdarza Ci się używać innych rzeczy monadycznych, np. kombinatorów do parsowania czy czegoś innego jeszcze?
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 10:47
Date: Wed, 04 Jan 2006 10:47
9 lines
1394 bytes
1394 bytes
Michal Przybylek wrote: > "RobertSzefler" <NOSPAMrszeflerNOSPAM@murator.com.pl> wrote: > >>BTW zdarza Ci się używać innych rzeczy monadycznych > > Nagminnie, cala filozofia Haskell'u zbudowana jest w oparciu o pojecie > monady. Konkrety? (coś innego niż IO)
Re: j. funkcyjne - jakie zastosowania?
Author: Michal Przybylek
Date: Wed, 04 Jan 2006 10:47
Date: Wed, 04 Jan 2006 10:47
47 lines
3500 bytes
3500 bytes
"Tomasz Zielonka" <tomasz.zielonka@gmail.com> wrote: > Moze chodzi o to, ze ja po prostu uzywam Haskella jako narzedzia, > pisze czysto-funkcyjnie tam, gdzie warto, ale czasem uzywam tez > imperatywnosci. Czyli bez fanatyzmu, podejscie pragmatyczne. Nie, nie chodzi o to. Chodzi o to, co juz bylo walkowane po sto razy: - podejscie funkcyjne jest, bylo i zawsze bedzie zarezerwowane dla ludzi duzo powyzej klasy sredniej ; to, ze Ty sie obracasz w srodowisku uniwersyteckim (i to, zdaje sie, jednego z lepszych uniwersystetow w Polsce), nie oznacza, ze reszta ludzi jest na podobnym poziomie, prosze nie ekstrapoluj lokalnych obserwacji ; ogolny poziom w informatyce (w Polsce, nie wiem jak jest gdzie indziej - slyszalem, ze o wiele gorzej...) jest po prostu zenujacy ; co mam zrobic, kiedy potrzebuje 100 programistow Haskell'a ? - wyslac po kilka zaproszen na Antarktyde, a po kilka na Wyspy Dziewicze ? ; ile tacy programisci beda kosztowac ? - czy to sie oplaci ? ; co jezeli jeden zlamie reke, a drugiego potraci tramwaj ? jak szybko bede w stanie sprowadzic kogos na ich miejsce ? - pardon, pracowanie w jezykach umozliwiajacych konstrukcje z wysokiego poziomu abstrakcji, pomimo, ze akademicko bardzo podniecajace, niekonieczni musi pozytywnie wplywac na jakosc, czytelnosc i latwosc pielegnaci kodu ; abstrakcja jest po prostu trudna ; przy opracowywaniu dobrej abstrakcji bardzo latwo jest opracowac zla abstrakcje, ktora innym bedzie ciezko zrozumiec ; abstrakcja eliminuje "wzorce w kodzie", eliminuje cos co sprawia, ze patrzac sie na kod znasz inetencje autora kodu i potrafisz swobodnie przelozyc te intencje na wlasne myslenie, - jezyki funkcyjnie nie mapuja tak naturalnie jak jezyki obiektowe projektu obiektowego na kod programu, a badz co badz analiza i projektowanie obiektowe sa najpopularniejsze, - jak na razie jezykom funkcyjnym ogolnie brakuje odpowiedniego wsparcia (przy czym to jest raczej konsekwencja pozostalych powodow - rzad USA wpakowal w swoim czasie w Lisp miliony dolcow ; i jak sie skonczyla historia maszyn lispowych ? skadinad architektonicznie calkiem nizlych... ; BTW: troche podobnie bylo w Europie z transputerami i Occam'em...). ... itd ... Zauwaz, ze dwa pierwsze aspekty w ogole nie stanowia problemu w hermetycznie zamknietej grupie kilku hakerow, zas trzeci i czwarty stanowia w o wiele mniejszym stopniu. mp
Re: j. funkcyjne - jakie zastosowania?
Author: Michal Przybylek
Date: Wed, 04 Jan 2006 10:50
Date: Wed, 04 Jan 2006 10:50
9 lines
1387 bytes
1387 bytes
"RobertSzefler" <NOSPAMrszeflerNOSPAM@murator.com.pl> wrote: > BTW zdarza Ci się używać innych rzeczy monadycznych Nagminnie, cala filozofia Haskell'u zbudowana jest w oparciu o pojecie monady. mp
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 12:25
Date: Wed, 04 Jan 2006 12:25
28 lines
2105 bytes
2105 bytes
RobertSzefler wrote: > Tomasz Zielonka wrote: >> Ale z drugiej strony program nad ktorym ostatnio pracuje i z ktorego >> jestem bardzo zadowolony sklada sie w jakichs 95% z kodu czysto >> funkcyjnego. Tez ze wzgledow praktycznych. > > Zdradzisz, jaki to projekt? Duży? Haskell się sprawdza? Wiecej algorytmow niz programu ;-) Teraz to jakies 1.5 KLOC, ale bedzie pewnie ze 4. Bede troche enigmatyczny - jedyny powod istnienia tego programu to wydajnosc. Ogolnie chodzi o przetwarzanie duzych ilosci danych. Jest tu troche technik takich jak czesciowa ewaluacja (partial evaluation), ale w takim zabawkowym wydaniu. Reszta jest w C++ i to jest jakies 5 KLOC + 30 KLOC ogolnej biblioteki. Haskell sie sprawdza. Na pewno nie chcialbym tego implementowac w C++. Akurat ten program robi cos, w czym jezyki funkcyjne sa dobre "by design". Mam jednak inne zastosowania, w ktorych Haskell sprawdza sie bardzo dobrze - np. sieciowe serwery proxy, aplikacje CGI. Pozdrawiam Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 12:28
Date: Wed, 04 Jan 2006 12:28
20 lines
1546 bytes
1546 bytes
RobertSzefler wrote: >> PS. Jak to fajnie jest podyskutowac z samym soba ;-) > > Żebyś nie czuł schizofrenii napisałem ;) Dzieki :-) > BTW zdarza Ci się używać innych rzeczy monadycznych, np. kombinatorów do > parsowania czy czegoś innego jeszcze? Oczywiscie. Zwlaszcza takich: Parsec, zlozenia transformatorow monad, wlasne monady, STM. Best regards Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 12:44
Date: Wed, 04 Jan 2006 12:44
75 lines
4254 bytes
4254 bytes
Michal Przybylek wrote: > "Tomasz Zielonka" <tomasz.zielonka@gmail.com> wrote: > >> Moze chodzi o to, ze ja po prostu uzywam Haskella jako narzedzia, >> pisze czysto-funkcyjnie tam, gdzie warto, ale czasem uzywam tez >> imperatywnosci. Czyli bez fanatyzmu, podejscie pragmatyczne. > > Nie, nie chodzi o to. Chodzi o to, co juz bylo walkowane po sto razy: > > - podejscie funkcyjne jest, bylo i zawsze bedzie zarezerwowane dla ludzi > duzo powyzej klasy sredniej ; to, ze Ty sie obracasz w srodowisku > uniwersyteckim (i to, zdaje sie, jednego z lepszych uniwersystetow w > Polsce), nie oznacza, ze reszta ludzi jest na podobnym poziomie, prosze nie > ekstrapoluj lokalnych obserwacji ; W moim przypadku to obracanie skonczylo sie skresleniem z listy studentow ;-) I w ogole nie znam teorii kategorii ;-) > ogolny poziom w informatyce (w Polsce, nie wiem jak jest gdzie indziej > - slyszalem, ze o wiele gorzej...) jest po prostu zenujacy ; co mam > zrobic, kiedy potrzebuje 100 programistow Haskell'a ? - wyslac po > kilka zaproszen na Antarktyde, a po kilka na Wyspy Dziewicze ? ; ile > tacy programisci beda kosztowac ? - czy to sie oplaci ? ; co jezeli > jeden zlamie reke, a drugiego potraci tramwaj ? jak szybko bede w > stanie sprowadzic kogos na ich miejsce ? Wlasnie to sprawdzam. > - pardon, pracowanie w jezykach umozliwiajacych konstrukcje z wysokiego > poziomu abstrakcji, pomimo, ze akademicko bardzo podniecajace, niekonieczni > musi pozytywnie wplywac na jakosc, czytelnosc i latwosc pielegnaci kodu ; Oczywiscie. Wiem to z wlasnego doswiadczenia. > abstrakcja jest po prostu trudna ; przy opracowywaniu dobrej abstrakcji > bardzo latwo jest opracowac zla abstrakcje, ktora innym bedzie ciezko > zrozumiec ; abstrakcja eliminuje "wzorce w kodzie", eliminuje cos co > sprawia, ze patrzac sie na kod znasz inetencje autora kodu i potrafisz > swobodnie przelozyc te intencje na wlasne myslenie, Wiecej o tym pozniej... > - jezyki funkcyjnie nie mapuja tak naturalnie jak jezyki obiektowe projektu > obiektowego na kod programu, a badz co badz analiza i projektowanie > obiektowe sa najpopularniejsze, Jakos to przeboleje. > - jak na razie jezykom funkcyjnym ogolnie brakuje odpowiedniego wsparcia > (przy czym to jest raczej konsekwencja pozostalych powodow - rzad USA > wpakowal w swoim czasie w Lisp miliony dolcow ; i jak sie skonczyla historia > maszyn lispowych ? skadinad architektonicznie calkiem nizlych... ; BTW: > troche podobnie bylo w Europie z transputerami i Occam'em...). W Haskella nie wpakowano takich srodkow, a jest calkiem, calkiem. Zgadzam sie, ze wsparcie mogloby byc lepsze, ale np. jakosc kompilatorow chyba i tak przebija to, co teraz mamy np. dla C++. No dobra, C++ to zupelnie inna kategoria. Bjarne (prawie) wygral konkurs "Zaprojektuj jezyk programowania, ktorego nikomu nie uda sie zaimplementowac". > Zauwaz, ze dwa pierwsze aspekty w ogole nie stanowia problemu w hermetycznie > zamknietej grupie kilku hakerow, zas trzeci i czwarty stanowia w o wiele > mniejszym stopniu. OK, dzieki za wyjasnienie. Best regards Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 13:13
Date: Wed, 04 Jan 2006 13:13
18 lines
2207 bytes
2207 bytes
Tomasz Zielonka wrote: > W Haskella nie wpakowano takich srodkow, a jest calkiem, calkiem. > Zgadzam sie, ze wsparcie mogloby byc lepsze, ale np. jakosc kompilatorow > chyba i tak przebija to, co teraz mamy np. dla C++. No dobra, C++ to > zupelnie inna kategoria. Bjarne (prawie) wygral konkurs "Zaprojektuj > jezyk programowania, ktorego nikomu nie uda sie zaimplementowac". Nie da się zaimplementować = w praktyce nie da się napisać dobrego parsera w rozsądnym czasie (ze względu na głęboko poj***** gramatykę). Jak to się przebrnie, to dalej konstrukcja kompilatora jest typowa dla języków imperatywnych - sprawdzanie typów (duużo prostsze bądź co bądź niż w Haskellu), dominatory, SSA, grafy przepływu, alokacja rejestrów, generowanie kodu plus milion heurystyk - to wszystko znane i dopieszczone w szczegółach od wielu, wielu lat. Co więcej, istnieje spora ilość prac teoretycznych świadcząca o tym, że implementacja kompilatorów jęz. funkc. to w istocie rzeczy to samo (np. odpowiedniość między SSA i CPS lub postacią A-normalną).
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Wed, 04 Jan 2006 13:24
Date: Wed, 04 Jan 2006 13:24
52 lines
2955 bytes
2955 bytes
RobertSzefler wrote:
> Tomasz Zielonka wrote:
>
>> W Haskella nie wpakowano takich srodkow, a jest calkiem, calkiem.
>> Zgadzam sie, ze wsparcie mogloby byc lepsze, ale np. jakosc kompilatorow
>> chyba i tak przebija to, co teraz mamy np. dla C++. No dobra, C++ to
>> zupelnie inna kategoria. Bjarne (prawie) wygral konkurs "Zaprojektuj
>> jezyk programowania, ktorego nikomu nie uda sie zaimplementowac".
>
> Nie da się zaimplementować = w praktyce nie da się napisać dobrego
> parsera w rozsądnym czasie (ze względu na głęboko poj***** gramatykę).
> Jak to się przebrnie, to dalej konstrukcja kompilatora jest typowa dla
> języków imperatywnych
Nie do konca. Jest gorzej, bo gramatyka C++ (a nawet C) jest
niejednoznaczna i kompilator wlasciwie musi robic jednoczesnie analize
skladniowa i sprawdzanie typow. Wez chocby taki przyklad:
...
void f(void)
{
...
x * y; // co to za konstrukcja?
}
To C. W C++ jest jeszcze gorzej, chocby ze skladowymi klas, np.
czy to wartosc, typ czy szablon:
T<41234>::member
Do "nie da sie" dodalbym jeszcze nieslychanie skomplikowane reguly
semantyczne jezyka (widocznosc nazw, konkretyzacja szablonow,
rozwiazywanie wolan przeciazonych funkcji, ...), rozdzielna kompilacja
dla szablonow, itp.
> - sprawdzanie typów (duużo prostsze bądź co bądź niż w Haskellu),
W Haskellu jest to przynajmniej dobrze sformalizowane.
> Co więcej, istnieje spora ilość prac teoretycznych świadcząca o tym,
> że implementacja kompilatorów jęz. funkc. to w istocie rzeczy to samo
> (np. odpowiedniość między SSA i CPS lub postacią A-normalną).
Mowisz o jezyku funkcyjnym z ewaluacja "non-strict"?
Best regards
Tomasz
--
I am searching for programmers who are good at least in
(Haskell || ML) && (Linux || FreeBSD || math)
for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 14:04
Date: Wed, 04 Jan 2006 14:04
70 lines
4095 bytes
4095 bytes
Tomasz Zielonka wrote:
>>>W Haskella nie wpakowano takich srodkow, a jest calkiem, calkiem.
>>>Zgadzam sie, ze wsparcie mogloby byc lepsze, ale np. jakosc kompilatorow
>>>chyba i tak przebija to, co teraz mamy np. dla C++. No dobra, C++ to
>>>zupelnie inna kategoria. Bjarne (prawie) wygral konkurs "Zaprojektuj
>>>jezyk programowania, ktorego nikomu nie uda sie zaimplementowac".
>>
>>Nie da się zaimplementować = w praktyce nie da się napisać dobrego
>>parsera w rozsądnym czasie (ze względu na głęboko poj***** gramatykę).
>>Jak to się przebrnie, to dalej konstrukcja kompilatora jest typowa dla
>>języków imperatywnych
>
> Nie do konca. Jest gorzej, bo gramatyka C++ (a nawet C) jest
> niejednoznaczna i kompilator wlasciwie musi robic jednoczesnie analize
> skladniowa i sprawdzanie typow. Wez chocby taki przyklad:
Właśnie o tym pisałem :)
> ...
>
> void f(void)
> {
> ...
> x * y; // co to za konstrukcja?
Eee... a tu jest jakaś niejednoznaczność? To jest po prostu mnożenie x
przez y na moje oko. Dereferencja y nie jest problemem bo prowadzi
natychmiast do błędu... jakiś kruczek tu jest?
> }
>
> To C. W C++ jest jeszcze gorzej, chocby ze skladowymi klas, np.
No to wiadomo. Bjarne should burn in hell. Żartowałem.
> czy to wartosc, typ czy szablon:
> T<41234>::member
>
> Do "nie da sie" dodalbym jeszcze nieslychanie skomplikowane reguly
> semantyczne jezyka (widocznosc nazw, konkretyzacja szablonow,
> rozwiazywanie wolan przeciazonych funkcji, ...), rozdzielna kompilacja
> dla szablonow, itp.
True, true... Ale mam wrażenie że np. współczesne dialekty FORTRANu
(-a?) są też bardzo skomplikowane... Albo Java 5...
>>- sprawdzanie typów (duużo prostsze bądź co bądź niż w Haskellu),
>
> W Haskellu jest to przynajmniej dobrze sformalizowane.
Co nie znaczy że prostsze, IMHO wręcz przeciwnie.
>>Co więcej, istnieje spora ilość prac teoretycznych świadcząca o tym,
>>że implementacja kompilatorów jęz. funkc. to w istocie rzeczy to samo
>>(np. odpowiedniość między SSA i CPS lub postacią A-normalną).
>
> Mowisz o jezyku funkcyjnym z ewaluacja "non-strict"?
Eee... dobre pytanie. Tak z głowy Ci nie powiem, ale mam wrażenie, że te
analogie można wyabstrachować od kolejności ewaluacji przez analizę
strictness (aargh! jak to jest po polsku?) i odpowiednie transformacje
na CPS (czy jakiejś tam innej strukturze tego typu). Oczywiście
strictness analysis jest tragicznie skomplikowana (eee... w ogólności
chyba nawet nierozstrzygalna???), co wskazuje nota bene na to, że
implementacja "mocnych" języków funkc. nie jest wcale taka prosta...
Ogólnie zob. (jeśli nie czytałeś)
http://citeseer.ist.psu.edu/kelsey95correspondence.html
http://www.ccs.neu.edu/scheme/pubs/pldi-fsdf.pdf
Re: j. funkcyjne - jakie zastosowania?
Author: Marcin 'Qrczak' Kowalczyk
Date: Wed, 04 Jan 2006 14:09
Date: Wed, 04 Jan 2006 14:09
17 lines
2064 bytes
2064 bytes
Tomasz Zielonka <tomasz.zielonka@gmail.com> writes:
>> - sprawdzanie typów (duużo prostsze bądź co bądź niż w Haskellu),
>
> W Haskellu jest to przynajmniej dobrze sformalizowane.
Z punktu widzenia implementowania systemu typów Haskell 98 jest
o wiele prostszy niż C++.
Problem w tym, że GHC ma wiele eksperymentalnych rozszerzeń systemu
typów, zwłaszcza dotyczących klas, nad których implementacją panuje
chyba tylko Simon Peyton Jones.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 14:19
Date: Wed, 04 Jan 2006 14:19
18 lines
1912 bytes
1912 bytes
Marcin 'Qrczak' Kowalczyk wrote: > Tomasz Zielonka <tomasz.zielonka@gmail.com> writes: > > >>>- sprawdzanie typów (duużo prostsze bądź co bądź niż w Haskellu), >> >>W Haskellu jest to przynajmniej dobrze sformalizowane. > > Z punktu widzenia implementowania systemu typów Haskell 98 jest > o wiele prostszy niż C++. > > Problem w tym, że GHC ma wiele eksperymentalnych rozszerzeń systemu > typów, zwłaszcza dotyczących klas, nad których implementacją panuje > chyba tylko Simon Peyton Jones. Hmm. Nie byłbym taki pewny. A co, jeśli by zaimplementować, dla sprawiedliwości, typecheckera do C++ w Haskellu i do Haskella w Haskellu? Robił ktoś kiedyś coś takiego?
Re: j. funkcyjne - jakie zastosowania?
Author: Marcin 'Qrczak' Kowalczyk
Date: Wed, 04 Jan 2006 15:42
Date: Wed, 04 Jan 2006 15:42
196 lines
9494 bytes
9494 bytes
RobertSzefler <NOSPAMrszeflerNOSPAM@murator.com.pl> writes:
>> x * y; // co to za konstrukcja?
>
> Eee... a tu jest jakaś niejednoznaczność? To jest po prostu mnożenie x
> przez y na moje oko.
To może być też definicja zmiennej y typu wskaźnik do x.
Wiesz, do czego używa się słowa kluczowego typename?
Wiedziałbyś, że poniżej trzeba dodać w tym miejscu "template"?
class X {
public:
template<size_t> X* alloc();
};
void f(X* p)
{
X* p1 = p->alloc<200>();
// ill-formed: < means less than
X* p2 = p->template alloc<200>();
// fine: < starts explicit qualification
}
Oto moje ulubione kwiatki z gramatyki C++:
6.8 Ambiguity resolution [stmt.ambig]
1 There is an ambiguity in the grammar involving expression-statements
and declarations: An expression-statement with a function-style
explicit type conversion (_expr.type.conv_) as its leftmost subexpres-
sion can be indistinguishable from a declaration where the first
declarator starts with a (. In those cases the statement is a decla-
ration. [Note: To disambiguate, the whole statement might have to be
examined to determine if it is an expression-statement or a declara-
tion. This disambiguates many examples. [Example: assuming T is a
simple-type-specifier (_dcl.type_),
T(a)->m = 7; // expression-statement
T(a)++; // expression-statement
T(a,5)<<c; // expression-statement
T(*d)(int); // declaration
T(e)[5]; // declaration
T(f) = { 1, 2 }; // declaration
T(*g)(double(3)); // declaration
In the last example above, g, which is a pointer to T, is initialized
to double(3). This is of course ill-formed for semantic reasons, but
that does not affect the syntactic analysis. --end example]
2 The remaining cases are declarations. [Example:
class T {
// ...
public:
T();
T(int);
T(int, int);
};
T(a); // declaration
T(*b)(); // declaration
T(c)=7; // declaration
T(d),e,f=3; // declaration
extern int h;
T(g)(h,2); // declaration
--end example] --end note]
3 The disambiguation is purely syntactic; that is, the meaning of the
names occurring in such a statement, beyond whether they are type-
names or not, is not generally used in or changed by the disambigua-
tion. Class templates are instantiated as necessary to determine if a
qualified name is a type-name. Disambiguation precedes parsing, and a
statement disambiguated as a declaration may be an ill-formed declara-
tion. If, during parsing, a name in a template parameter is bound
differently than it would be bound during a trial parse, the program
is ill-formed. No diagnostic is required. [Note: This can occur only
when the name is declared earlier in the declaration. ] [Example:
struct T1 {
T1 operator()(int x) { return T1(x); }
int operator=(int x) { return x; }
T1(int) { }
};
struct T2 { T2(int){ } };
int a, (*(*b)(T2))(int), c, d;
void f() {
// dismabiguation requires this to be parsed
// as a declaration
T1(a) = 3,
T2(4), // T2 will be declared as
(*(*b)(T2(c)))(int(d)); // a variable of type T1
// but this will not allow
// the last part of the
// declaration to parse
// properly since it depends
// on T2 being a type-name
}
--end example]
[...]
8.2 Ambiguity resolution [dcl.ambig.res]
1 The ambiguity arising from the similarity between a function-style
cast and a declaration mentioned in _stmt.ambig_ can also occur in the
context of a declaration. In that context, the choice is between a
function declaration with a redundant set of parentheses around a
parameter name and an object declaration with a function-style cast as
the initializer. Just as for the ambiguities mentioned in
_stmt.ambig_, the resolution is to consider any construct that could
possibly be a declaration a declaration. [Note: a declaration can be
explicitly disambiguated by a nonfunction-style cast, by a = to indi-
cate initialization or by removing the redundant parentheses around
the parameter name. ] [Example:
struct S {
S(int);
};
void foo(double a)
{
S w(int(a)); // function declaration
S x(int()); // function declaration
S y((int)a); // object declaration
S z = int(a); // object declaration
}
--end example]
2 The ambiguity arising from the similarity between a function-style
cast and a type-id can occur in different contexts. The ambiguity
appears as a choice between a function-style cast expression and a
declaration of a type. The resolution is that any construct that
could possibly be a type-id in its syntactic context shall be consid-
ered a type-id.
3 [Example:
#include <cstddef>
char *p;
void *operator new(size_t, int);
void foo() {
const int x = 63;
new (int(*p)) int; // new-placement expression
new (int(*[x])); // new type-id
}
4 For another example,
template <class T>
struct S {
T *p;
};
S<int()> x; // type-id
S<int(1)> y; // expression (ill-formed)
5 For another example,
void foo()
{
sizeof(int(1)); // expression
sizeof(int()); // type-id (ill-formed)
}
6 For another example,
void foo()
{
(int(1)); // expression
(int())1; // type-id (ill-formed)
}
--end example]
7 Another ambiguity arises in a parameter-declaration-clause of a func-
tion declaration, or in a type-id that is the operand of a sizeof or
typeid operator, when a type-name is nested in parentheses. In this
case, the choice is between the declaration of a parameter of type
pointer to function and the declaration of a parameter with redundant
parentheses around the declarator-id. The resolution is to consider
the type-name as a simple-type-specifier rather than a declarator-id.
[Example:
class C { };
void f(int(C)) { } // void f(int (*fp)(C c)) { }
// not: void f(int C);
int g(C);
void foo() {
f(1); // error: cannot convert 1 to function ptr
f(g); // OK
}
For another example,
class C { };
void h(int *(C[10])); // void h(int *(*_fp)(C _parm[10]));
// not: void h(int *C[10]);
--end example]
Chyba tylko Perl jest trudniejszy do parsowania.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Re: j. funkcyjne - jakie zastosowania?
Author: RobertSzefler
Date: Wed, 04 Jan 2006 15:47
Date: Wed, 04 Jan 2006 15:47
205 lines
9926 bytes
9926 bytes
Marcin 'Qrczak' Kowalczyk wrote:
> RobertSzefler <NOSPAMrszeflerNOSPAM@murator.com.pl> writes:
>
>>> x * y; // co to za konstrukcja?
>>
>>Eee... a tu jest jakaś niejednoznaczność? To jest po prostu mnożenie x
>>przez y na moje oko.
>
> To może być też definicja zmiennej y typu wskaźnik do x.
aaach! oczywiście ... to problem jak rozumiem pojawiający się dla ISO
C99 (a dla jakich dialektów C++?)
> Wiesz, do czego używa się słowa kluczowego typename?
Oszczędź waść!
> Wiedziałbyś, że poniżej trzeba dodać w tym miejscu "template"?
>
> class X {
> public:
> template<size_t> X* alloc();
> };
> void f(X* p)
> {
> X* p1 = p->alloc<200>();
> // ill-formed: < means less than
>
> X* p2 = p->template alloc<200>();
> // fine: < starts explicit qualification
> }
>
> Oto moje ulubione kwiatki z gramatyki C++:
No baaa....
> 6.8 Ambiguity resolution [stmt.ambig]
>
> 1 There is an ambiguity in the grammar involving expression-statements
> and declarations: An expression-statement with a function-style
> explicit type conversion (_expr.type.conv_) as its leftmost subexpres-
> sion can be indistinguishable from a declaration where the first
> declarator starts with a (. In those cases the statement is a decla-
> ration. [Note: To disambiguate, the whole statement might have to be
> examined to determine if it is an expression-statement or a declara-
> tion. This disambiguates many examples. [Example: assuming T is a
> simple-type-specifier (_dcl.type_),
> T(a)->m = 7; // expression-statement
> T(a)++; // expression-statement
> T(a,5)<<c; // expression-statement
> T(*d)(int); // declaration
> T(e)[5]; // declaration
> T(f) = { 1, 2 }; // declaration
> T(*g)(double(3)); // declaration
> In the last example above, g, which is a pointer to T, is initialized
> to double(3). This is of course ill-formed for semantic reasons, but
> that does not affect the syntactic analysis. --end example]
>
> 2 The remaining cases are declarations. [Example:
> class T {
> // ...
> public:
> T();
> T(int);
> T(int, int);
> };
> T(a); // declaration
> T(*b)(); // declaration
> T(c)=7; // declaration
> T(d),e,f=3; // declaration
> extern int h;
> T(g)(h,2); // declaration
> --end example] --end note]
>
> 3 The disambiguation is purely syntactic; that is, the meaning of the
> names occurring in such a statement, beyond whether they are type-
> names or not, is not generally used in or changed by the disambigua-
> tion. Class templates are instantiated as necessary to determine if a
> qualified name is a type-name. Disambiguation precedes parsing, and a
> statement disambiguated as a declaration may be an ill-formed declara-
> tion. If, during parsing, a name in a template parameter is bound
> differently than it would be bound during a trial parse, the program
> is ill-formed. No diagnostic is required. [Note: This can occur only
> when the name is declared earlier in the declaration. ] [Example:
>
> struct T1 {
> T1 operator()(int x) { return T1(x); }
> int operator=(int x) { return x; }
> T1(int) { }
> };
> struct T2 { T2(int){ } };
> int a, (*(*b)(T2))(int), c, d;
> void f() {
> // dismabiguation requires this to be parsed
> // as a declaration
> T1(a) = 3,
> T2(4), // T2 will be declared as
> (*(*b)(T2(c)))(int(d)); // a variable of type T1
> // but this will not allow
> // the last part of the
> // declaration to parse
> // properly since it depends
> // on T2 being a type-name
> }
> --end example]
>
> [...]
>
> 8.2 Ambiguity resolution [dcl.ambig.res]
>
> 1 The ambiguity arising from the similarity between a function-style
> cast and a declaration mentioned in _stmt.ambig_ can also occur in the
> context of a declaration. In that context, the choice is between a
> function declaration with a redundant set of parentheses around a
> parameter name and an object declaration with a function-style cast as
> the initializer. Just as for the ambiguities mentioned in
> _stmt.ambig_, the resolution is to consider any construct that could
> possibly be a declaration a declaration. [Note: a declaration can be
> explicitly disambiguated by a nonfunction-style cast, by a = to indi-
> cate initialization or by removing the redundant parentheses around
> the parameter name. ] [Example:
> struct S {
> S(int);
> };
> void foo(double a)
> {
> S w(int(a)); // function declaration
> S x(int()); // function declaration
> S y((int)a); // object declaration
> S z = int(a); // object declaration
> }
> --end example]
>
> 2 The ambiguity arising from the similarity between a function-style
> cast and a type-id can occur in different contexts. The ambiguity
> appears as a choice between a function-style cast expression and a
> declaration of a type. The resolution is that any construct that
> could possibly be a type-id in its syntactic context shall be consid-
> ered a type-id.
>
> 3 [Example:
> #include <cstddef>
> char *p;
> void *operator new(size_t, int);
> void foo() {
> const int x = 63;
> new (int(*p)) int; // new-placement expression
> new (int(*[x])); // new type-id
> }
>
> 4 For another example,
>
> template <class T>
> struct S {
> T *p;
> };
> S<int()> x; // type-id
> S<int(1)> y; // expression (ill-formed)
>
> 5 For another example,
> void foo()
> {
> sizeof(int(1)); // expression
> sizeof(int()); // type-id (ill-formed)
> }
>
> 6 For another example,
> void foo()
> {
> (int(1)); // expression
> (int())1; // type-id (ill-formed)
> }
> --end example]
>
> 7 Another ambiguity arises in a parameter-declaration-clause of a func-
> tion declaration, or in a type-id that is the operand of a sizeof or
> typeid operator, when a type-name is nested in parentheses. In this
> case, the choice is between the declaration of a parameter of type
> pointer to function and the declaration of a parameter with redundant
> parentheses around the declarator-id. The resolution is to consider
> the type-name as a simple-type-specifier rather than a declarator-id.
> [Example:
> class C { };
> void f(int(C)) { } // void f(int (*fp)(C c)) { }
> // not: void f(int C);
>
> int g(C);
>
> void foo() {
> f(1); // error: cannot convert 1 to function ptr
> f(g); // OK
> }
> For another example,
> class C { };
> void h(int *(C[10])); // void h(int *(*_fp)(C _parm[10]));
> // not: void h(int *C[10]);
> --end example]
>
> Chyba tylko Perl jest trudniejszy do parsowania.
>
A swoją drogą to ciekawe, że w praktyce ludzie uważają (do pewnego
momentu) C++ za raczej prosty w nauce (szczególnie jeśli mają background
np. w Pascalu czy Pythonie), zupełnie to się oczywiście kłuci z poziomem
komplikacji tego piekielnego języka...
Re: j. funkcyjne - jakie zastosowania?
Author: Marcin 'Qrczak' Kowalczyk
Date: Wed, 04 Jan 2006 16:08
Date: Wed, 04 Jan 2006 16:08
46 lines
3853 bytes
3853 bytes
RobertSzefler <NOSPAMrszeflerNOSPAM@murator.com.pl> writes:
>>>> x * y; // co to za konstrukcja?
>>>
>>>Eee... a tu jest jakaś niejednoznaczność? To jest po prostu mnożenie x
>>>przez y na moje oko.
>> To może być też definicja zmiennej y typu wskaźnik do x.
>
> aaach! oczywiście ... to problem jak rozumiem pojawiający się dla ISO
> C99 (a dla jakich dialektów C++?)
Problem pojawia się we wszystkich wersjach C, które miały już
konstrukcję typedef, i w C++.
W C niejednoznaczność może być zawsze rozstrzygnięta przez kompilator
na podstawie kontekstu: parser musi tylko wiedzieć, które identyfikatory
oznaczają typy, a które nie.
W C++ szablony nakładają nową trudność. "Identyfikator" nie musi
być globalny, może być kwalifikowany nazwą klasy, a klasa może być
ukonkretnieniem szablonu. Czyli żeby rozstrzygnąć, jak to parsować,
trzeba konkretyzować szablony. Co w ogólności może być niemożliwe,
jeśli kod jest umieszczony w innym szablonie i to, czym konkretyzuje
tamten szablon, zależy od jego parametru, czyli jeszcze nie jest znane.
Stąd typename, żeby ujednoznacznił to programista. A kompilator musi
to sobie tak zorganizować, że jedne ukonkretnienia szablonów są
wykonywane od razu, a inne są odraczane, aż będą znane parametry.
Podobnie ze sprawdzaniem typów: jeśli jesteśmy w szablonie, to jedne
wyrażenia mają typ obliczany od razu, a inne są odraczane, zależnie
od tego, czy ten typ może zależeć od parametrów szablonu. Określanie
tych typów, które się da, od razu, jest o tyle potrzebne, że semantyka
C++ uzależnia przestrzenie wyszukiwania identyfikatorów od typów
(m.in. tzw. Koenig lookup). Jeśli typy są znane w czasie przetwarzania
szablonu, to identyfikatory są wyszukiwane w przestrzeniach nazw
wyznaczonych przez te typy i zależnych tylko od miejsca definicji
szablonu, a jeśli nie są znane, to wszystko jest odraczane, a przy
konkretyzacji szablonu identyfikatory są wyszukiwane zarówno
w miejscach zależnych od kontekstu definicji szablonu, jak i od
kontekstu użycia.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Thu, 05 Jan 2006 06:23
Date: Thu, 05 Jan 2006 06:23
29 lines
2359 bytes
2359 bytes
RobertSzefler wrote: >> Z punktu widzenia implementowania systemu typów Haskell 98 jest >> o wiele prostszy niż C++. >> >> Problem w tym, że GHC ma wiele eksperymentalnych rozszerzeń systemu >> typów, zwłaszcza dotyczących klas, nad których implementacją panuje >> chyba tylko Simon Peyton Jones. > > Hmm. Nie byłbym taki pewny. A co, jeśli by zaimplementować, dla > sprawiedliwości, typecheckera do C++ w Haskellu i do Haskella w > Haskellu? Robił ktoś kiedyś coś takiego? "Do Haskella w Haskellu" juz jest kilka, np. w GHC, na narzedziach Programmatica, w pracy "Typing Haskell in Haskell" Marka P. Jonesa. Nie chodzilo Ci przypadkiem o "do Haskella w C++"? Jako jeden z przyszlych projektow przewiduje biblioteke do generowania kodu C/C++ z Haskella (szablony i makra C++ nie do konca sie sprawdzaja). Mozliwosci parsowania C++ tez by sie przydaly, chocby w ograniczonym zakresie. Nie wykluczone, ze w przyszlosci dodane zostanie tez sprawdzanie typow. Moze ktos jest chetny? Pozdrawiam Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Thu, 05 Jan 2006 06:27
Date: Thu, 05 Jan 2006 06:27
23 lines
1764 bytes
1764 bytes
Michal Przybylek wrote: > "RobertSzefler" <NOSPAMrszeflerNOSPAM@murator.com.pl> wrote: > >> BTW zdarza Ci się używać innych rzeczy monadycznych > > Nagminnie, cala filozofia Haskell'u zbudowana jest w oparciu o pojecie > monady. Jak sie chce, to mozna napisac duzy, ciekawy program w ogole nie uzywajac monad. Oczywiscie zakres mozliwych zastosowan mocno sie zmniejszy - to bedzie program typu "czytaj stdin, przetwarzaj, pisz na stdout". Mozna tez niektorych implementacji Haskella uzywac jako takiego wypasionego kalkulatora. Pozdrawiam Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Artur Siekielski
Date: Thu, 19 Jan 2006 20:56
Date: Thu, 19 Jan 2006 20:56
20 lines
1860 bytes
1860 bytes
poniedziałek, 02 sty, Przemek Pokrywka: > Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach > spisują się one najlepiej? Właśnie uczestniczę w takim małym projekcie, którego celem jest stworzenie symulatora pewnego modelu obliczeń mobilnych. Model jest zdefiniowany matematycznie. Implementacja jądra symulatora została wykonana w Haskellu (choć na początku Haskell miał służyć tylko do stworzenia prototypu). Do takiego zastosowania język funkcyjny jest narzędziem doskonałym -- dlatego, że specyfikacja tego, co mamy zrobić, jest opisana matematycznie, a tłumaczenie definicji matematycznych na język funkcyjny jest proste. Można wtedy spojrzeć na program jak na specyfikację, która przy okazji jest wykonywalna. Może trochę przesadzam z tą prostotą tłumaczenia, no i dobrze zmodularyzowany program musi mieć inną strukturę, niż tekst specyfikacji matematycznej, ale pisząc symulator często się zdarzało, że nie musiałem dokładnie rozumieć, o co chodzi w niektórych definicjach, wystarczyło je dokładnie przetłumaczyć na Haskella!
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Thu, 19 Jan 2006 21:23
Date: Thu, 19 Jan 2006 21:23
20 lines
1584 bytes
1584 bytes
Artur Siekielski wrote: > poniedziałek, 02 sty, Przemek Pokrywka: >> Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach >> spisują się one najlepiej? > > Właśnie uczestniczę w takim małym projekcie, którego celem jest stworzenie > symulatora pewnego modelu obliczeń mobilnych. Model jest zdefiniowany > matematycznie. Implementacja jądra symulatora została wykonana w Haskellu > (choć na początku Haskell miał służyć tylko do stworzenia prototypu). Mozna dowiedziec sie czegos wiecej, np. czy to projekt komercyjny czy akademicki? opensource? Pozdrawiam Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Artur Siekielski
Date: Fri, 20 Jan 2006 06:05
Date: Fri, 20 Jan 2006 06:05
42 lines
3477 bytes
3477 bytes
czwartek, 19 sty, Tomasz Zielonka: >>> Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach >>> spisują się one najlepiej? >> Właśnie uczestniczę w takim małym projekcie, którego celem jest stworzenie >> symulatora pewnego modelu obliczeń mobilnych. Model jest zdefiniowany >> matematycznie. Implementacja jądra symulatora została wykonana w Haskellu >> (choć na początku Haskell miał służyć tylko do stworzenia prototypu). > Mozna dowiedziec sie czegos wiecej, np. czy to projekt komercyjny czy > akademicki? opensource? Jest to projekt akademicki, robiony w Instytucie Podstaw Informatyki PAN w Sopocie. Kod źródłowy nie jest w tej chwili udostępniany, ale myślę, że nie byłoby z tym problemu. Sam model matematyczny to hipersieci Petriego. Ma on tę zaletę nad podobnymi formalizmami, że można stosować model checking. Pierwsza wersja naiwnego model checkera została stworzona w Haskellu, jednak w tym wypadku sprawa wydajności okazała się kluczowa, a ciężko robić optymalizacje w leniwym Haskellu czy choćby wnioskować, co się aktualnie oblicza. Sprawa jest dziwna, bo szacując matematycznie ilość potrzebnych obliczeń w pewnym przykładzie nie wychodzi ich dużo, a Haskell oblicza to długo. Problemem jest zapewne wielokrotne wykonywanie tych samych obliczeń (dlaczego nie ma prostego sposobu na "function memoization"?!), ale mimo użycia profilera nie udało mi się znaleźć tych kluczowych miejsc... Ostatecznie ma być użyty lepszy algorytm modelcheckujący (co nie jest trywialne, bo logika modelu jest niestandardowa), a model checker ma być przepisany na coś imperatywnego (Java...). Symulator jest skonstruowany następująco: model jest zaimplementowany w Haskellu, wyświetlanie modelu jest realizowane przez program uDrawGraph, służący do wyświetlania i edytowania grafów, a połączenie pomiędzy Haskellem a uDrawGraphem jest napisane w Javie. Niestety połączenie Haskella z Javą jest robione przez stdout/stdin, ponieważ nie udało mi się znaleźć działającego sposobu na wywoływanie Haskella z Javy (w drugą stronę o dziwo się da). Gdybym dzisiaj miał decydować o języku implementacji, byłbym za jakimś MLem, bo miałbym tę samą ekspresywność, a język jest bardziej praktyczny (i chyba nawet są jakieś MLe kompilowane do bajtkodu JVM...). Aha, pisząc w Haskellu dosięgła nas następująca zmora: okazało się, że żeby zrobić "coś", trzeba wprowadzić monadę, co wymagałoby przepisania praktycznie całego programu (oczywiście ze zmianą wszystkich typów funkcji włącznie)...
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Fri, 20 Jan 2006 08:39
Date: Fri, 20 Jan 2006 08:39
74 lines
4459 bytes
4459 bytes
Artur Siekielski wrote:
> Jest to projekt akademicki, robiony w Instytucie Podstaw Informatyki PAN w
> Sopocie. Kod źródłowy nie jest w tej chwili udostępniany, ale myślę, że nie
> byłoby z tym problemu.
Chetnie bym sobie obejrzal.
> Sam model matematyczny to hipersieci Petriego. Ma on tę zaletę nad podobnymi
> formalizmami, że można stosować model checking.
Slyszalem termin "model checking" wczesniej, ale dopiero teraz
sprawdzilem, co to jest, i nie jestem pewien, czy rozumiem. Moglbys
napisac, dlaczego to jest fajne, np. w Waszym zastosowaniu? ;-) Ostatnio
w mojej pracy coraz czesciej przydaja mi sie takie "akademickie"
techniki jak np. "partial evaluation", czy "abstract interpretation"
(jesli dobrze zidentyfikowalem ;-) - moze warto byloby sie i z ta
zapoznac.
> Pierwsza wersja naiwnego model checkera została stworzona w Haskellu,
> jednak w tym wypadku sprawa wydajności okazała się kluczowa, a ciężko
> robić optymalizacje w leniwym Haskellu czy choćby wnioskować, co się
> aktualnie oblicza. Sprawa jest dziwna, bo szacując matematycznie ilość
> potrzebnych obliczeń w pewnym przykładzie nie wychodzi ich dużo, a
> Haskell oblicza to długo.
Moze mieliscie space-leak? Najczestsze objawy to duze zuzycie pamieci i
czas GC dominujacy w czasie dzialania programu.
> Problemem jest zapewne wielokrotne wykonywanie tych samych obliczeń
> (dlaczego nie ma prostego sposobu na "function memoization"?!), ale
> mimo użycia profilera nie udało mi się znaleźć tych kluczowych
> miejsc...
Moze poproscie o pomoc na haskell-cafe@haskell.org?
> Ostatecznie ma być użyty lepszy algorytm modelcheckujący (co nie jest
> trywialne, bo logika modelu jest niestandardowa), a model checker ma być
> przepisany na coś imperatywnego (Java...).
Au! Moze da sie temu jakos zapobiec? ;-)
> Symulator jest skonstruowany następująco: model jest zaimplementowany w
> Haskellu, wyświetlanie modelu jest realizowane przez program uDrawGraph,
> służący do wyświetlania i edytowania grafów, a połączenie pomiędzy Haskellem a
> uDrawGraphem jest napisane w Javie. Niestety połączenie Haskella z Javą jest
> robione przez stdout/stdin, ponieważ nie udało mi się znaleźć działającego
> sposobu na wywoływanie Haskella z Javy (w drugą stronę o dziwo się da).
stdin/stdout nie jest takie zle - moze zwiekszyc modularnosc, ale
kosztem wydajnosci.
> Gdybym dzisiaj miał decydować o języku implementacji, byłbym za jakimś MLem,
> bo miałbym tę samą ekspresywność, a język jest bardziej praktyczny (i chyba
> nawet są jakieś MLe kompilowane do bajtkodu JVM...). Aha, pisząc w Haskellu
> dosięgła nas następująca zmora: okazało się, że żeby zrobić "coś", trzeba
> wprowadzić monadę, co wymagałoby przepisania praktycznie całego programu
> (oczywiście ze zmianą wszystkich typów funkcji włącznie)...
No coz, zdaza sie. Nigdy nie mialem az tak bolesnego przypadku - moze
dlatego, ze dosyc szybko zaczynam uzywac monad, tzn. kiedy widze, ze to
moze ulatwic, a nie dopiero wtedy, kiedy jest juz konieczne.
PS. Duze masz/macie doswiadczenie w uzywaniu Haskella? Przyznaje,
ze mi osiagniecie stanu pozwalajacego wygodnie rozwiazywac
typowe praktyczne problemy zajelo chyba ze dwa lata, ale
wiem, ze niektorym przychodzi to szybciej.
Pozdrawiam
Tomasz
--
I am searching for programmers who are good at least in
(Haskell || ML) && (Linux || FreeBSD || math)
for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Artur Siekielski
Date: Fri, 20 Jan 2006 15:32
Date: Fri, 20 Jan 2006 15:32
106 lines
7039 bytes
7039 bytes
piątek, 20 sty, Tomasz Zielonka: >> Jest to projekt akademicki, robiony w Instytucie Podstaw Informatyki PAN w >> Sopocie. Kod źródłowy nie jest w tej chwili udostępniany, ale myślę, że nie >> byłoby z tym problemu. > Chetnie bym sobie obejrzal. Postaram się udostępnić źródła w przyszłym tygodniu, dam znać. >> Sam model matematyczny to hipersieci Petriego. Ma on tę zaletę nad podobnymi >> formalizmami, że można stosować model checking. > Slyszalem termin "model checking" wczesniej, ale dopiero teraz > sprawdzilem, co to jest, i nie jestem pewien, czy rozumiem. Moglbys > napisac, dlaczego to jest fajne, np. w Waszym zastosowaniu? ;-) Ostatnio > w mojej pracy coraz czesciej przydaja mi sie takie "akademickie" > techniki jak np. "partial evaluation", czy "abstract interpretation" > (jesli dobrze zidentyfikowalem ;-) - moze warto byloby sie i z ta > zapoznac. Model checking to algorytm sprawdzania spełnialności formuły logicznej w systemach ze skończoną liczbą stanów. Najprostszy przykład formuły to np. "w każdym stanie s zachodzi: s(x) > 0". Naiwna implementacja sprawdzenia spełnialności tej formuły polegałaby na przejrzeniu wszystkich stanów systemu i sprawdzeniu, czy ta własność w każdym z nich zachodzi. Jednak istnieją różne skomplikowane techniki model-checkowania które umożliwiają działanie na ogromnych systemach, np. o liczbie stanów równej 10^100, co oczywiście nie jest możliwe przy naiwnych algorytmach. Inne formuły, które można modelcheckować, to np. "nie istnieje ścieżka wykonania (ciąg stanów) prowadząca do dead-locku" albo "jeśli s(x) = 0, to w którymś stanie s' następującym po s zajdzie s'(x) != 0". Jeżeli chodzi o zastosowania, to model checking jest popularny w zastosowaniach sprzętowych (bo hardware ma skończoną liczbę stanów i można w miarę łatwo go opisać w sposób zrozumiały dla algorytmów modelcheckujących), a nie nadaje się do zwykłych programów (nieskończona lub za duża liczba stanów). Model checking jest podobny do testowania -- w testowaniu też badamy prawdziwość jakiejś formuły w danym modelu (systemie), tyle, że dotyczy ona niewielkiego podzbioru stanów. Model checking jest czymś innym niż specyfikacje formalne, bo specyfikacja opisuje klasę modeli, a model checking wymaga podania jakiegoś konkretnego modelu i zbioru formuł, które ten model musi spełniać. W naszym projekcie model checking jest rzeczą wartościową, bo nasz model obliczeń mobilnych jest stosunkowo wysokopoziomowy, strukturalny, a przy takich własnościach niełatwo jest zachować skończoność systemu. >> Pierwsza wersja naiwnego model checkera została stworzona w Haskellu, >> jednak w tym wypadku sprawa wydajności okazała się kluczowa, a ciężko >> robić optymalizacje w leniwym Haskellu czy choćby wnioskować, co się >> aktualnie oblicza. Sprawa jest dziwna, bo szacując matematycznie ilość >> potrzebnych obliczeń w pewnym przykładzie nie wychodzi ich dużo, a >> Haskell oblicza to długo. > Moze mieliscie space-leak? Najczestsze objawy to duze zuzycie pamieci i > czas GC dominujacy w czasie dzialania programu. Nie pamiętam, czy profiler pokazywał jakieś informacje o GC... A powinien? >> Problemem jest zapewne wielokrotne wykonywanie tych samych obliczeń >> (dlaczego nie ma prostego sposobu na "function memoization"?!), ale >> mimo użycia profilera nie udało mi się znaleźć tych kluczowych >> miejsc... > Moze poproscie o pomoc na haskell-cafe@haskell.org? Może powinniśmy. Choć teraz, gdy w planach jest porzucenie tej implementacji, chyba szkoda na to czasu. >> Ostatecznie ma być użyty lepszy algorytm modelcheckujący (co nie jest >> trywialne, bo logika modelu jest niestandardowa), a model checker ma być >> przepisany na coś imperatywnego (Java...). > Au! Moze da sie temu jakos zapobiec? ;-) Oj nie wiem :). Do Javy czy C są zaawansowane biblioteki używane w model checkingu, do Haskella niby też można je podłączyć (przez jakiś "foreign interface"), ale przeglądałem artykuł, w którym opisano takie rozwiązanie i było ono bardzo wolne. A wydajność jest jednak sprawą kluczową... Poza tym chciałbym mieć kontrolę nad czasem obliczania. Za to część symulatorowa na pewno pozostanie w Haskellu (co ciekawe nie ma problemu z wydajnością, mimo, że matematyczna złożoność obliczeń jest grubo ponad wykładnicza :) ). >> Gdybym dzisiaj miał decydować o języku implementacji, byłbym za jakimś MLem, >> bo miałbym tę samą ekspresywność, a język jest bardziej praktyczny (i chyba >> nawet są jakieś MLe kompilowane do bajtkodu JVM...). Aha, pisząc w Haskellu >> dosięgła nas następująca zmora: okazało się, że żeby zrobić "coś", trzeba >> wprowadzić monadę, co wymagałoby przepisania praktycznie całego programu >> (oczywiście ze zmianą wszystkich typów funkcji włącznie)... > No coz, zdaza sie. Nigdy nie mialem az tak bolesnego przypadku - moze > dlatego, ze dosyc szybko zaczynam uzywac monad, tzn. kiedy widze, ze to > moze ulatwic, a nie dopiero wtedy, kiedy jest juz konieczne. Moze po prostu mamy za małe doświadczenie w Haskellu. > PS. Duze masz/macie doswiadczenie w uzywaniu Haskella? Przyznaje, > ze mi osiagniecie stanu pozwalajacego wygodnie rozwiazywac > typowe praktyczne problemy zajelo chyba ze dwa lata, ale > wiem, ze niektorym przychodzi to szybciej. Ja nie mam za dużego praktycznego doświadczenia. Ten projekt to największa rzecz, jaką robiłem w języku funkcyjnym. Choć z językami funkcyjnymi zetknąłem się jeszcze w liceum (dzięki grupom dyskusyjnym, a ściślej - Qrczakowi), a przez okres studiów nie tracę z nimi kontaktu (nie ma to jak metody numeryczne w Haskellu :) ). Myślę, że pomogła mi matematyka na studiach (podobny sposób myślenia o problemie) i takie książki, jak "Struktura i interpretacja programów komputerowych". Tak więc pisanie symulatora i model checkera było całkiem przyjemne :).
Re: j. funkcyjne - jakie zastosowania?
Author: Piotr Dembiński
Date: Sat, 21 Jan 2006 09:40
Date: Sat, 21 Jan 2006 09:40
11 lines
1421 bytes
1421 bytes
Artur Siekielski <gruesome@REMOVEpoczta.onet.pl> writes: [...] > Aha, pisząc w Haskellu dosięgła nas następująca zmora: okazało się, > że żeby zrobić "coś", trzeba wprowadzić monadę, co wymagałoby > przepisania praktycznie całego programu (oczywiście ze zmianą > wszystkich typów funkcji włącznie)... O, o, o. Czyli programy haskellowe są trudne w modyfikacji? Pytam, bo nie wiem, a akurat próbuję 'siedzieć' w refaktoryzacji.
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Sat, 21 Jan 2006 12:33
Date: Sat, 21 Jan 2006 12:33
64 lines
3871 bytes
3871 bytes
Artur Siekielski wrote:
> piątek, 20 sty, Tomasz Zielonka:
>> Chetnie bym sobie obejrzal.
>
> Postaram się udostępnić źródła w przyszłym tygodniu, dam znać.
To moze przy okazji przygotuj przyklad pokazujacy wspomniana
nieefektywnosc. Postaram sie temu przyjrzec.
> Model checking to algorytm sprawdzania spełnialności formuły logicznej w
> systemach ze skończoną liczbą stanów. Najprostszy przykład formuły to np. "w
> każdym stanie s zachodzi: s(x) > 0". Naiwna implementacja sprawdzenia
> spełnialności tej formuły polegałaby na przejrzeniu wszystkich stanów systemu
> i sprawdzeniu, czy ta własność w każdym z nich zachodzi. Jednak istnieją różne
> skomplikowane techniki model-checkowania które umożliwiają działanie na
> ogromnych systemach, np. o liczbie stanów równej 10^100, co oczywiście nie
> jest możliwe przy naiwnych algorytmach.
>
> [..]
Dzieki za opis. Kolejna rzecz warta blizszego poznania :-)
>> Moze mieliscie space-leak? Najczestsze objawy to duze zuzycie pamieci i
>> czas GC dominujacy w czasie dzialania programu.
>
> Nie pamiętam, czy profiler pokazywał jakieś informacje o GC... A powinien?
W przypadku GHC podstawowe statystyki mozna uzyskac uruchamiajac z opcja
+RTS -sstderr -RTS. Z bardziej rozbudowanych rzeczy - w biograficznym
profilowaniu pamieci warto zwocic uwage na udzial obiektow ze stanem LAG
(ale nie pamietam szczegolow).
>> Moze poproscie o pomoc na haskell-cafe@haskell.org?
>
> Może powinniśmy. Choć teraz, gdy w planach jest porzucenie tej implementacji,
> chyba szkoda na to czasu.
Czy to aby dobry pomysl? Haskell jest teraz na drugim miejscu w
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all
OK, OK, sam nie przywiazuje zbyt wielkiej wagi do takich benchmarkow.
> Oj nie wiem :). Do Javy czy C są zaawansowane biblioteki używane w model
> checkingu, do Haskella niby też można je podłączyć (przez jakiś "foreign
> interface"), ale przeglądałem artykuł, w którym opisano takie rozwiązanie i
> było ono bardzo wolne. A wydajność jest jednak sprawą kluczową... Poza tym
> chciałbym mieć kontrolę nad czasem obliczania.
No coz, Twoja decyzja ;-)
> Ja nie mam za dużego praktycznego doświadczenia. Ten projekt to największa
> rzecz, jaką robiłem w języku funkcyjnym. Choć z językami funkcyjnymi zetknąłem
> się jeszcze w liceum (dzięki grupom dyskusyjnym, a ściślej - Qrczakowi), a
> przez okres studiów nie tracę z nimi kontaktu (nie ma to jak metody numeryczne
> w Haskellu :) ).
Mieliscie metody numeryczne w Haskellu? Na jakiej uczelni?
Pozdrawiam
Tomasz
--
I am searching for programmers who are good at least in
(Haskell || ML) && (Linux || FreeBSD || math)
for work in Warsaw, Poland
Re: j. funkcyjne - jakie zastosowania?
Author: Artur Siekielski
Date: Sat, 21 Jan 2006 15:09
Date: Sat, 21 Jan 2006 15:09
15 lines
1816 bytes
1816 bytes
sobota, 21 sty, Piotr Dembiński: >> Aha, pisząc w Haskellu dosięgła nas następująca zmora: okazało się, >> że żeby zrobić "coś", trzeba wprowadzić monadę, co wymagałoby >> przepisania praktycznie całego programu (oczywiście ze zmianą >> wszystkich typów funkcji włącznie)... > O, o, o. Czyli programy haskellowe są trudne w modyfikacji? > Pytam, bo nie wiem, a akurat próbuję 'siedzieć' w refaktoryzacji. To, o czym piszę, jest rzeczywistym problemem. Np. tutaj: http://www.docs.uu.se/~leucker/Documents/Leucker/Truth_Haskell.ps.gz jest opis innego systemu do model checkingu zrobiony w Haskellu, w punkcie 4.3 opisują podobny problem: powstała konieczność wprowadzenia monady, ale nie chcieli przepisywać całości, więc użyli funkcji 'unsafeperformIO' i piszą: "...we had to add some hacks to ensure the evaluation of the unsafeperformIO function in the presence of the lazy strategy".
Re: j. funkcyjne - jakie zastosowania?
Author: Artur Siekielski
Date: Sat, 21 Jan 2006 15:20
Date: Sat, 21 Jan 2006 15:20
52 lines
3593 bytes
3593 bytes
sobota, 21 sty, Tomasz Zielonka: >>> Chetnie bym sobie obejrzal. >> Postaram się udostępnić źródła w przyszłym tygodniu, dam znać. > To moze przy okazji przygotuj przyklad pokazujacy wspomniana > nieefektywnosc. Postaram sie temu przyjrzec. Tylko nie wiem, czy jest sens dużo czasu na to poświęcać, bo nawet, jeżeli uda się przyspieszyć implementację, to i tak będzie ona nieużywalna, bo użyty algorytm ma ogromną złożoność matematyczną. No chyba że po to, żeby nauczyć się zachowania Haskella... >>> Moze mieliscie space-leak? Najczestsze objawy to duze zuzycie pamieci i >>> czas GC dominujacy w czasie dzialania programu. >> >> Nie pamiętam, czy profiler pokazywał jakieś informacje o GC... A powinien? > W przypadku GHC podstawowe statystyki mozna uzyskac uruchamiajac z opcja >+RTS -sstderr -RTS. Z bardziej rozbudowanych rzeczy - w biograficznym > profilowaniu pamieci warto zwocic uwage na udzial obiektow ze stanem LAG > (ale nie pamietam szczegolow). Dzięki, postaram się to zapuścić. >>> Moze poproscie o pomoc na haskell-cafe@haskell.org? >> >> Może powinniśmy. Choć teraz, gdy w planach jest porzucenie tej implementacji, >> chyba szkoda na to czasu. > Czy to aby dobry pomysl? Haskell jest teraz na drugim miejscu w > http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all Tylko nie po to piszę w Haskellu, żeby pisać kod taki jak w tych benchmarkowanych programach (mallocArray itd.)! > OK, OK, sam nie przywiazuje zbyt wielkiej wagi do takich benchmarkow. >> Oj nie wiem :). Do Javy czy C są zaawansowane biblioteki używane w model >> checkingu, do Haskella niby też można je podłączyć (przez jakiś "foreign >> interface"), ale przeglądałem artykuł, w którym opisano takie rozwiązanie i >> było ono bardzo wolne. A wydajność jest jednak sprawą kluczową... Poza tym >> chciałbym mieć kontrolę nad czasem obliczania. > No coz, Twoja decyzja ;-) Nie tylko moja... Ale może jeszcze zdecydujemy się na MLa. >> Ja nie mam za dużego praktycznego doświadczenia. Ten projekt to największa >> rzecz, jaką robiłem w języku funkcyjnym. Choć z językami funkcyjnymi zetknąłem >> się jeszcze w liceum (dzięki grupom dyskusyjnym, a ściślej - Qrczakowi), a >> przez okres studiów nie tracę z nimi kontaktu (nie ma to jak metody numeryczne >> w Haskellu :) ). > Mieliscie metody numeryczne w Haskellu? Na jakiej uczelni? Zadania z metod numerycznych można było implementować w dowolnym języku. Ja to robiłem w Haskellu, OCamlu i Pythonie :).
Re: j. funkcyjne - jakie zastosowania?
Author: Tomasz Zielonka
Date: Sun, 22 Jan 2006 20:03
Date: Sun, 22 Jan 2006 20:03
43 lines
2898 bytes
2898 bytes
Piotr Dembiński wrote: > Artur Siekielski <gruesome@REMOVEpoczta.onet.pl> writes: > > [...] > >> Aha, pisząc w Haskellu dosięgła nas następująca zmora: okazało się, >> że żeby zrobić "coś", trzeba wprowadzić monadę, co wymagałoby >> przepisania praktycznie całego programu (oczywiście ze zmianą >> wszystkich typów funkcji włącznie)... > > O, o, o. Czyli programy haskellowe są trudne w modyfikacji? > Pytam, bo nie wiem, a akurat próbuję 'siedzieć' w refaktoryzacji. To nie jest takie proste. Problem, o jakim pisze Artur, pojawia sie, kiedy napiszesz duzo czysto-funkcyjnego kodu, bez uzycia monad. To, ze napisales tak duzo kodu w tym stylu, moze byc zwiazane z natura problemu - tym, ze latwo bylo go zapisac matematycznie. Byc moze gdyby nie czysto-funkcyjny styl Haskella w ogole bys tak daleko nie zaszedl (czasem sam mam takie wrazenie). Byc moze w innym jezyku nie mialbys tego problemu, bo w ogole nie mialbys kodu... ;-) Oczywiscie troche przesadzam. Jestem pewien, ze Artur jest w stanie rozwiazac swoj problem w innym jezyku. Szczegolnie, ze w innym jezyku moze byc latwiej wnioskowac o wydajnosci. Przy dobrej modularyzacji programu jest szansa, ze jesli pojawi sie potrzeba wprowadzenia monad, to zmiany beda dosyc ograniczone. Ostatnio jak wprowadzalem taka zmiane w kodzie wczytujacym dane z bazy (dla zwiekszenia wydajnosci) udalo mi sie to zrobic przez kilka refaktoryzacji poprawiajacych modularyzacje - potem wlasciwa zmiana sposobu dzialania dotyczyla kilku linijek w jednej funkcji. No i taka potrzeba wcale nie musi zajsc - mi przydazylo sie pare razy, i nigdy nie bylo to duzo pracy. Ale juz mowilem, ze lubie monady i dosyc wczesnie je wprowadzam ;-) Pozdrawiam Tomasz -- I am searching for programmers who are good at least in (Haskell || ML) && (Linux || FreeBSD || math) for work in Warsaw, Poland
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads