Tworzenie biblioteki dla PLT

Synthroid Without Prescription Inderal No Prescription Nexium For Sale Prevacid Generic Buy Elimite Online Prevacid Without Prescription Ultram No Prescription Prevacid For Sale Ultram Generic Buy Prednisone Online

Niedawno napisaną bibliotekę do generowania identikon udostępniłem na planecie PLT - PLTowym odpowieniku Perlowego CPANu, czy Pythonowego indeksu pakietów. Zadanie przygotowania biblioteki w taki sposób, by mogła być umieszczona na planecie nie było trudne, ale niosło ze sobą kilka niespodzianek.

Efekt końcowy można znaleźć na stronie pakietu, razem z dokumentacją i pełnym kodem źródłowym. By skorzystać z biblioteki wystarczy teraz dodać do programu jedną linijkę:

(require (planet “identicons.ss” (“mk” “identicons.plt”)))

Sam proces przygotowania biblioteki jest dobrze opisany w dokumentacji. Mój kod był już podzielony na moduły, pozostało więc napisanie dokumentacji w formacie Scribble i wypełnienie pliku info.ss. Możliwe do ustawienia atrybuty dla info.ss są ładnie opisane we wspomnianym już dokumencie, skupię się więc na samej tylko dokumentacji.

Upraszczając, dokument Scribble pisze się tak, jak zwykły dokument tekstowy. Jest jednak dostępny cały zestaw specjalnych znaczników umożliwiających linkowanie do innych stron dokumentacji, zagnieżdżanie kodu Scheme, wizualne upiększanie tekstu itp. Przede wszystkim dokument musi zaczynać się od #lang scribble/doc, po czy zazwyczaj następuje require. Warta zapamiętania jest składnia z for-label. Nagłówek pliku manual.scrbl z pakietu identikon wygląda następująco:

#lang scribble/doc
@(require scribble/manual
          scribble/eval
          (for-label scheme/gui)
          (for-label “identicons.ss”))
 
@title{Identicons library}

@title ustawia tytuł strony z dokumentacją. Przy dokumentowaniu modułów po tytule następuje zazwyczaj znacznik @defmodule. Efektem ubocznym zwykłego @defmodule jest zaimportowanie podanego modułu, co w przypadku dokumentowania biblioteki, której jeszcze na planecie nie ma, jest dość niefortunne. Problem udało mi się obejść w następujący sposób:

@defmodule*/no-declare[((planet “identicons.ss” (“mk” “identicons.plt”)))]
@declare-exporting[“identicons.ss”]

Poza tą małą niedogodnością inne znaczniki działają bez większych niespodzianek. Dla wygody zebrałem poniżej wszystkie znaczniki, jakich użyłem w dokumentacji identikon:

Przy okazji budowania dokumentacji natrafiłem na błąd, który niezwłocznie zgłosiłem. Nie minęło 5 godzin jak w repozytorium PLT pojawiła się poprawka. To się nazywa dobry support w projekcie open-source! Lista dyskusyjna również działa bardzo sprawnie i wcale nierzadko można otrzymać odpowiedź od samego Matthiasa Felleisena, współautora m.in. wspomnianego wcześniej “Małego Schemera”. Wokół PLT istnieje aktywna społeczność, z którą warto się zapoznać. Do usłyszenia więc na plt-scheme!

Implementacja identikon w PLT Scheme