Pike
Pike to interpretowany język programowania posiadający składnię podobną do tej wykorzystywanej w C. Wywodzi się bezpośrednio z języka LPC.
Głównym zastosowaniem jest pisanie CGI dla serwera WWW Roxen, chociaż możliwe jest również pisanie aplikacji interaktywnych. Najlepiej sprawdza się w aplikacjach internetowych i przetwarzaniu napisów, natomiast podobieństwo do C powoduje, że osoby piszące wcześniej w tym języku łatwo mogą się nauczyć Pike'a.
Pike zawiera wiele zaawansowanych struktur danych, takich jak zbiory, typowane tablice asocjacyjne oraz wyrażenia lambda.
Spis treści |
Przykłady[edytuj]
Przykładowy kod:
import Stdio; int main() { string name; write("Hello, world !\nWhat's your name ?\n"); sscanf(stdin->gets(), "%s", name); write("Hello, %s\n", name); return 0; }
Przykład użycia preprocesora[edytuj]
PPP - Pike PreProcessor - rozumie dyrektywy takie jak:
- #define - tak samo jak w C
- #include - włączyć zawartość pliku
- #string - włączyć zawartość pliku jako łańcuch tekstowy
- dyrektywy kompilacji warunkowej
Plik ppp.inc: Hello, world
Plik wykonywalny:
#define foo bar #define i(j) import j; i(Stdio); int main() { string foo = #string "ppp.inc"; write ("%s", bar); return 0; }
Przykład zmiennej tablicowej[edytuj]
W przykładzie arr to tablica dowolnych rozmiarów złożona ze zmiennych typu string:
import Stdio; int main() { array (string) arr; string s; arr = ({"He", "llo, ", "world!\n"}); foreach (arr, s) write("%s", s); return 0; }
Lambda-wyrażenia[edytuj]
Funkcje można zwracać albo tak jak w C, albo za pomocą notacji lambda.
import Stdio; string foo () { return "Ala"; } string bar () { return " ma "; } function f (int i) { return i ? foo : bar; } function g (int i) { return (i ? ( lambda() {return "kota";} ): ( lambda() {return ".\n";} )); } int main() { write("%s", f (1)()); write("%s", f (0)()); write("%s", g (1)()); write("%s", g (0)()); return 0; }
Program wypisze na standardowym wyjściu "Ala ma kota."
Tablice asocjacyjne[edytuj]
W Pike można używać tablic asocjacyjnych.
import Stdio; int main() { mapping (int: string) map1; mapping (string: string) map2; map1 = ([100:"ala", 200:"ma", 300:"kota"]); map2 = (["ma":"kota", "kot":"pies", "kasia":"basia"]); write("map1[200] = %s\n", map1[200]); write("map2[map1[200]] = %s\n", map2[map1[200]]); return 0; }