Czym jest F-Script i dlaczego warto go poznać
F-Script to lekki język skryptowy zaprojektowany specjalnie dla środowiska macOS i frameworku Cocoa. Łączy elegancję Smalltalka z bezpośrednim dostępem do API Apple. Jeśli kiedykolwiek chcieliście eksplorować obiekty Cocoa interaktywnie, prototypować interfejsy użytkownika w locie albo debugować aplikację macOS bez rekompilacji — F-Script był narzędziem stworzonym dokładnie do tego.
Język ten był szczególnie ceniony przez developerów macOS w erze przed Swift Playground i LLDB script. Pozwalał na podłączenie się do działającej aplikacji, inspekcję jej obiektów, modyfikację właściwości i wywoływanie metod — wszystko w czasie rzeczywistym, bez restartu. To jak mieć supermoce debugowania, gdzie całe Cocoa API jest na wyciągnięcie ręki.
Dziś F-Script jest raczej ciekawostką historyczną niż aktywnie używanym narzędziem, ale warto go poznać, bo reprezentuje fascynującą ideę: że język skryptowy może być natywnym obywatelem platformy, nie tylko dodatkiem. Ta idea żyje dalej w narzędziach jak Swift REPL, FLEX i Reveal.
Krótka historia i ewolucja
F-Script został stworzony przez Philippe’a Mougin w 1998 roku. Mougin, francuski badacz i developer, chciał stworzyć język, który łączyłby prostotę Smalltalka z mocą frameworku Cocoa (wtedy jeszcze NeXTSTEP/OpenStep). Pierwsze wersje działały na NeXTSTEP i wczesnym Mac OS X.
Język zyskał uznanie w społeczności developerów macOS w latach 2000-2010. Apple nawet eksperymentował z integracją F-Script w Xcode, a Mougin prezentował język na WWDC. F-Script był używany przez developerów do szybkiego prototypowania, testowania i debugowania aplikacji Cocoa.
Rozwój F-Script zwolnił po wprowadzeniu Swifta w 2014 roku i deprecacji wielu API, na których polegał. Ostatnia stabilna wersja (2.2) pochodzi z okolic 2012 roku. Projekt jest dostępny na GitHubie jako open source, ale nie jest aktywnie rozwijany. Mimo to, jego wpływ na ekosystem macOS development jest niezaprzeczalny — wiele konceptów F-Script znalazło odzwierciedlenie w nowszych narzędziach Apple.
Kluczowe cechy i filozofia
F-Script bazuje na paradygmacie obiektowym w stylu Smalltalk — wszystko jest obiektem, a komunikacja odbywa się przez przesyłanie wiadomości. Składnia jest minimalistyczna: obiekt wiadomość to podstawowa konstrukcja. Nie ma nawiasów klamrowych, średników ani boilerplate’u. Kod czyta się jak serię instrukcji wysyłanych do obiektów.
Jedną z najbardziej innowacyjnych cech jest bezpośrednia integracja z Objective-C runtime. F-Script nie emuluje Cocoa — używa dokładnie tych samych obiektów, klas i metod. Kiedy tworzycie NSWindow w F-Script, to jest ten sam NSWindow, którego używa natywna aplikacja. Nie ma warstwy tłumaczenia, nie ma marshalingu danych.
F-Script wprowadza też koncept “blocks” — anonimowych funkcji w stylu Smalltalk, które mogą być przekazywane jako argumenty i zamykać zmienne z otoczenia. To było rewolucyjne w kontekście macOS development, bo Objective-C nie miał closures aż do wprowadzenia blocks w 2009 roku.
Filozofia języka to “eksploracja ponad deklaratywność”. F-Script zachęca do interaktywnej pracy z obiektami — tworzycie obiekt, wysyłacie mu wiadomości, sprawdzacie wynik, modyfikujecie. To cykl szybkiego feedbacku, który jest trudny do osiągnięcia w kompilowanych językach jak Objective-C czy Swift.
Gdzie F-Script sprawdza się najlepiej
W swoim prime, F-Script był używany głównie do trzech rzeczy: debugowania, prototypowania i eksploracji API. Developerzy podłączali F-Script do działającej aplikacji i eksplorowali hierarchię widoków, modyfikowali layout, testowali zachowanie komponentów — wszystko bez rekompilacji.
W edukacji F-Script służył do nauki programowania obiektowego i frameworku Cocoa. Studenci mogli tworzyć okna, przyciski i menu w kilku liniach kodu, natychmiast widząc efekty. To było znacznie bardziej angażujące niż nauka z podręcznika.
Niektóre firmy używały F-Script do automatyzacji testów GUI. Ponieważ F-Script miał pełny dostęp do hierarchii widoków Cocoa, można było pisać skrypty testowe, które klikały przyciski, wypełniały formularze i weryfikowały stan interfejsu — wszystko bez potrzeby używania drogich narzędzi testowych.
Jak wygląda kod w F-Script
Tworzenie prostego okna z przyciskiem:
"Tworzymy okno"
window := NSWindow alloc initWithFrame:{{200, 200}, {400, 300}}.
window setTitle:'F-Script Demo'.
"Tworzymy przycisk"
button := NSButton alloc initWithFrame:{{150, 100}, {100, 40}}.
button setTitle:'Kliknij mnie'.
button setBezelStyle:4.
"Dodajemy przycisk do okna"
window contentView addSubview:button.
window makeKeyAndOrderFront:nil.
Zwróćcie uwagę na składnię wiadomości w stylu Smalltalk — alloc initWithFrame: to wysłanie wiadomości alloc do klasy NSWindow, a potem initWithFrame: z argumentem. Nawiasy klamrowe tworzą struktury geometryczne (CGRect).
Drugi przykład — operacje na tablicach z blocks:
numbers := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.
"Filtrowanie parzystych"
even := numbers select:[:n | n mod:2 = 0].
"Mapowanie — podwojenie"
doubled := numbers collect:[:n | n * 2].
"Redukcja — suma"
sum := numbers inject:0 into:[:acc :n | acc + n].
Blocks [:parametry | ciało] to odpowiednik lambd. select:, collect:, inject:into: to metody z Smalltalka odpowiednio dla filter, map i reduce.
Ekosystem i narzędzia
F-Script miał własne IDE — F-Script Browser, które pozwalało na interaktywną eksplorację obiektów, inspekcję klas Cocoa i budowanie interfejsów przez drag-and-drop. F-Script Framework pozwalał embedować interpreter w aplikacjach macOS.
Dziś narzędzia F-Script są trudne do uruchomienia na nowoczesnych wersjach macOS ze względu na zmiany w security model (SIP, notarization) i deprecację 32-bitowych komponentów. Najlepiej działa na macOS 10.6-10.10, co ogranicza jego praktyczne użycie.
Społeczność F-Script nigdy nie była duża — skupiała się wokół listy mailingowej i kilku blogów developerów macOS. Dokumentacja jest dostępna na stronie projektu i w archiwalnych artykułach. Philippe Mougin opublikował kilka wartościowych tutoriali i paperów opisujących design języka.
Mocne i słabe strony
Mocne strony: elegancja, zwięzłość i głęboka integracja z Cocoa. F-Script pozwalał na rzeczy, które w Objective-C wymagały dziesiątek linii kodu, w zaledwie kilku. Interaktywność była kluczowa — mogliście eksperymentować z API w czasie rzeczywistym, co drastycznie przyspieszało naukę i debugowanie.
Słabe strony: F-Script był ściśle powiązany z konkretnymi wersjami macOS i Cocoa. Każda duża zmiana w systemie mogła złamać kompatybilność. Brak wsparcia dla 64-bit w早期ch wersjach, brak kompatybilności z ARC (Automatic Reference Counting), brak wsparcia dla Swift API — to wszystko ograniczało użyteczność z biegiem czasu.
Język też nigdy nie nadawał się do budowania pełnych aplikacji — to było narzędzie skryptowe i eksploracyjne. Nie miał systemu modułów, package managera ani mechanizmów do budowania dużych systemów.
Podsumowanie
F-Script to fascynujący eksperyment w integracji języka skryptowego z natywnym frameworkiem. Developerzy macOS powinni go poznać choćby po to, by zrozumieć, skąd wzięły się narzędzia, z których dziś korzystają — Swift Playground, LLDB script, FLEX all owe something to F-Script.
Jako aktywne narzędzie, F-Script jest niestety przeszłością. Ale jego idee — interaktywna eksploracja obiektów, minimalna składnia, natywna integracja z platformą — są bardziej aktualne niż kiedykolwiek. Jeśli szukacie współczesnego odpowiednika, sprawdźcie Swift REPL z frameworkiem FLEX lub narzędzie Reveal do inspekcji UI.

