Mopsy (programowanie)
Pugs to kompilator i interpreter języka programowania Raku , zapoczątkowany 1 lutego 2005 roku przez Audrey Tang . (W tamtym czasie Raku był znany jako Perl 6.)
Rozwój mopsów jest obecnie zawieszony, a większość prac związanych z wdrażaniem Raku odbywa się obecnie w Rakudo .
Przegląd
Projekt Pugs miał na celu załadowanie Perla 6 poprzez wdrożenie pełnej specyfikacji Perla 6, jak opisano szczegółowo w Streszczeniach . Jest napisany w Haskell , specjalnie przeznaczony dla kompilatora Glasgow Haskell .
Pugs zawiera dwa główne pliki wykonywalne:
- Pugs to interpreter z interaktywną powłoką.
- Pugscc może kompilować programy Perla 6 do kodu Haskell, Perl 5, JavaScript lub zestawu PIR maszyny wirtualnej Parrot .
Pugs jest wolnym oprogramowaniem , rozpowszechnianym na warunkach Powszechnej Licencji Publicznej GNU lub Licencji Artystycznej . Są to te same terminy, co w języku Perl.
Numeracja wersji
Główne/podrzędne numery wersji Pugs zbiegają się do 2π (przypominając TeX i METAFONT , które używają podobnego schematu); każda znacząca cyfra w wersji pomocniczej oznacza pomyślnie ukończony kamień milowy. Trzecia cyfra jest zwiększana dla każdego wydania. Aktualne kamienie milowe to:
- 6.0: Pierwsza wersja.
- 6.2: Podstawowe elementy IO i przepływu sterowania; zmienne zmienne; zadanie.
- 6.28: Klasy i cechy.
- 6.283: Reguły i gramatyki.
- 6.2831: System typów i łączenie.
- 6.28318: Makra.
- 6.283185: W razie potrzeby przenieś Pugs do Perla 6.
Kompatybilność z Perlem 5
Od wersji 6.2.6 Pugs ma również możliwość osadzania Perla 5 i korzystania z modułów CPAN zainstalowanych w systemie. Poniższy przykład ilustruje wykorzystanie popularnego Perl DBI do zarządzania bazą danych:
#!/usr/bin/pugs użyj wersji 6 ; użyj perl5:DBI ; mój $dbh = DBI . połącz ( 'dbi:SQLite:nazwa bazy danych=test.db' ); $dbh . do ( "UTWÓRZ TABELI Test (Projekt, Pumpking)" ); mój $sth = $dbh . przygotuj ( "WSTAW WARTOŚCI testowe (?, ?)" ); $ coś . wykonaj ( <PGE Patrick>
); $ coś . wykonaj ( <Pugs Audrey> ); $ coś . wykonaj ( <Papuga Leo> ); mój $res = $dbh . selectall_hashref ( 'WYBIERZ * Z Testu' , 'Pompowanie' ); # Kolejny haker Pugs mówi: „To kolejny haker $res<Audrey><Project>” ;
Model rozwoju
Sugerowano kilka czynników jako przyczyny postępu Mopsa:
- Statyczne pisanie w Haskell może ułatwić wykrywanie błędów programu w czasie kompilacji. Często uważa się, że kod Haskella jest zwięzły. Biblioteka Parsec [1] , monadyczny parser kombinatoryczny napisany w całości w Haskell, upraszcza analizowanie. Ponieważ Haskell jest językiem czysto funkcjonalnym , interakcja kodu funkcjonalnego ze światem rzeczywistym (wejścia/wyjścia i środowisko sterowane czasem) wymaga przemyślenia. Aby to osiągnąć, Pugs szeroko wykorzystuje monady .
- Wykorzystanie przez Pugsa metodologii opartej na testach (zasada programowania ekstremalnego ). Metodologia ta narzuca, że każdy moduł powinien mieć kod testowy, nawet zanim moduły zostaną zaimplementowane. Zwolennicy tej metodologii twierdzą, że poprawia ona jakość oprogramowania . Jednak projekt często uciszał nieudane testy regresyjne przed wydaniem, usuwając wiele korzyści płynących z rozwoju opartego na testach [ potrzebne źródło ] .
- Liberalne przyznanie przez Tanga bitu zatwierdzenia . Rozwój mopsów opiera się obecnie na Subversion , a dostęp jest bezpłatny - szczególnie dla osób chcących pisać testy. Z tego powodu zgromadziła się ogromna biblioteka testów. Inne implementacje Perla 6 opierają się na wielu testach opracowanych dla Pugs jako wykonywalnej specyfikacji dla Perla 6.
- Styl komunikacji Tanga; jej dziennik (link poniżej) przyciągnął do projektu wiele osób.
Pomimo tych czynników postęp we wdrażaniu Haskella zatrzymał się pod koniec 2006 roku, ponieważ problemy osobiste nie pozwalały Audrey poświęcić projektowi tyle czasu, ile w 2005 roku.
Od tego czasu wielu współpracowników Pugs zaczęło wdrażać systemy inspirowane Perl6 jako moduły CPAN w Perl 5, tak jak projekt Moose .