Niedawno ktoś zadał mi pytanie: „czy w Pythonie może w ogóle wystąpić memory leak?„. Postanowiłem nieco przyjrzeć się temu tematowi i sprawdzić jak dużo pułapek dotyczących zużycia pamięci czeka na nas w tym języku. Wiele osób jest przekonanych, że wbudowane w Pythona mechanizmy są w stanie zawsze ustrzec programistę przed wyciekaniem pamięci. Czy jest tak […]
Read MoreKategoria: Języki programowania
OCaml: kompilatorowy zawrót głowy
W językach, których implementacje wyposażone są w tryb interaktywny (REPL), zazwyczaj podstawowe funkcjonalności danej technologii poznaje się właśnie w tym środowisku. Jest to po prostu najszybszy i najłatwiejszy sposób kontaktu z nowym językiem. Nie inaczej jest z OCamlem – odpalamy utop i już jesteśmy gotowi zgłębiać tajniki programowania funkcyjnego. Jednak w miarę jak pisane skrypty stają się […]
Read MoreOCaml: kłopotliwe średniki
Jednym z bardziej charakterystycznych elementów, na które natyka się każdy, kto ma okazję pisać swoje pierwsze linijki w OCamlu są średniki, które występują w dwóch odmianach: zwykłej oraz podwójnej. Kiedy kompilator sieje błędami niekiedy można uspokoić go dopisując gdzieś w kodzie naszego programu podwójny średnik (lub zastępując takowym pojedynczy), ale czy jest to odpowiedni sposób rozwiązywania problemów? W tym wpisie opowiemy […]
Read MoreOCaml: początek przygody
Jakiś czas temu postanowiłem rozpocząć naukę kolejnego języka programowania. Tym razem padło na OCamla, będącego reprezentantem rodziny języków funkcyjnych (ściślej mówiąc, jest to język wieloparadygmatowy, a paradygmat funkcyjny jest jednym ze wspieranych). Dlaczego akurat OCaml, skoro istnieją inne, popularniejsze technologie z tej samej grupy? Mój wybór wynika z niezwykle dużej użyteczności OCamla na gruncie tworzenia […]
Read MoreSkąd się wzięły wyjątki?
Zdecydowana większość współczesnych języków programowania posiada wbudowaną obsługę wyjątków. Związana z nią składnia zazwyczaj jest we wszystkich tych językach dosyć podobna – wyjątki rzuca się (throw) lub podnosi (raise), a następnie łapie (catch), jeśli wystąpiły wewnątrz blokutry. Istotną sprawą jest tu możliwość przekazywania kontroli sterowania nie tylko o jeden poziom wyżej – wyjątki propagowane są w […]
Read MorePodsumowanie prologowego wyzwania
Jak zapowiadałem pod koniec października, moim celem na listopad była nauka języka programowania Prolog. Czytałem książki i opracowania, pisałem kod, szukałem realnych zastosowań tej technologii. Czas nie pozwolił mi na zgłębienie w ciągu miesiąca tyle wiedzy, ile bym pragnął, jak również nie udało mi się opublikować wszystkich wpisów w zamierzonym okresie. Naocznym rezultatem mojego wyzwania […]
Read MoreRelacje przechodnie w Prologu
W jednym z wcześniejszych wpisów poruszałem temat definiowania relacji symetrycznych w języku Prolog. Rozwiązaniem problemu okazało się tam zdefiniowanie relacji pomocniczej, dzięki której pozbywaliśmy się nieskończonej pętli wywołań. Podobnie jest i w tym przypadku, bowiem i tu definiowanie takiej relacji w sposób „naiwny” i „naturalny” nie zdaje egzaminu. Rozważmy taki oto przykład, w którym szeregujemy kraje […]
Read MoreRealne zastosowania języka Prolog
Trudno nie zgodzić się z opinią, że Prolog jest językiem pod wieloma względami ciekawym. Chociażby dlatego, iż reprezentuje on paradygmat programowania logicznego, który zdecydowanie nie należy do najczęściej używanych. Sądzę, że owa odmienność od tego, z czym mamy styczność na co dzień jest jednym z powodów, dla których warto poznać pewne podstawy Prologa. Zyskujemy w […]
Read More