Io (język programowania)
Paradygmat | zorientowane obiektowo oparte na prototypach |
---|---|
Zaprojektowany przez | Steve Dekorte |
Deweloper | Steve Dekorte, Jonathan Wright, Jeremy Tregunna |
Po raz pierwszy pojawiły się | 2002 |
Wersja stabilna | 20170906 / 11 sierpnia 2017
|
Dyscyplina pisania | dynamiczny , mocny |
Strona internetowa | |
Główne implementacje | |
Io Io.NET | |
Pod wpływem | |
Smalltalk , NewtonScript , Self , Lua , Lisp , Python , Act1 | |
Pod wpływem | |
Ioke, Potion |
Io to czysto obiektowy język programowania inspirowany Smalltalk , Self , Lua , Lisp , Act1 i NewtonScript . Io ma oparty na prototypach model obiektowy podobny do tych w Self i NewtonScript, eliminując rozróżnienie między instancją a klasą . Podobnie jak Smalltalk, wszystko jest obiektem i używa dynamicznego pisania . Podobnie jak Lisp, programy to tylko drzewa danych. Io wykorzystuje aktorów dla współbieżności.
Niezwykłe cechy Io to jego minimalny rozmiar i otwartość na korzystanie z zewnętrznych zasobów kodu. [ potrzebne źródło ] Io jest wykonywane przez małą, przenośną maszynę wirtualną .
Historia
Język został stworzony przez Steve'a Dekorte'a w 2002 roku, po próbie pomocy przyjacielowi, Dru Nelsonowi, z jego językiem, Cel. Odkrył, że tak naprawdę niewiele wie o tym, jak działają języki, i postanowił napisać mały język, aby lepiej zrozumieć problemy.
Filozofia
Celem Io jest zbadanie unifikacji pojęciowej i dynamicznych języków , więc kompromisy mają tendencję do przedkładania prostoty i elastyczności nad wydajność.
Cechy
- Czysta obiektowość oparta na prototypach
- Kod jako dane / homoikoniczny
- Leniwa ocena parametrów funkcji
- Funkcje wyższego rzędu
- Introspekcja , refleksja i metaprogramowanie
- Współbieżność oparta na aktorach
- Współprogramy
- Obsługa wyjątków
- Przyrostowe zbieranie śmieci wspierające słabe linki
- Wysoce przenośny
- DLL / biblioteki współdzielonej na większości platform
- Mała maszyna wirtualna
Składnia
W najprostszej postaci składa się z jednego identyfikatora:
robić coś
Zakładając, że powyższy doStuff jest metodą , jest wywoływany z zerowymi argumentami, w wyniku czego jawne nawiasy nie są wymagane.
Gdyby doStuff miał argumenty, wyglądałoby to tak:
robićRzeczy ( 42 )
Io jest językiem przekazywania wiadomości , a ponieważ wszystko w Io jest wiadomością (poza komentarzami ), każda wiadomość jest wysyłana do odbiorcy. Powyższy przykład pokazuje to dobrze, ale nie do końca. Aby lepiej opisać ten punkt, spójrzmy na następny przykład:
Wersja systemu
Powyższy przykład ilustruje przekazywanie wiadomości w Io; wiadomość "wersja" jest wysyłana do obiektu "System".
Operatory to szczególny przypadek, w którym składnia nie jest tak prosta, jak w powyższych przykładach. Parser Io przechwytuje zestaw operatorów zdefiniowanych przez interpreter i tłumaczy je na wywołania metod. Na przykład:
1 + 5 * 8 + 1
przetłumaczyć na:
1 + ( 5 *( 8 )) +( 1 )
Wszystkie operatory w Io są metodami; fakt, że nie wymagają wyraźnych nawiasów, jest udogodnieniem. się tu również trochę pierwszeństwa operatorów , a poziomy pierwszeństwa są takie same jak w przypadku poziomów pierwszeństwa C.
Metody i bloki
W Io istnieją dwa sposoby tworzenia funkcji anonimowych : metody i bloki. Pomiędzy nimi są prawie identyczne, z wyjątkiem zakresu . Podczas gdy bloki mają zakres leksykalny , metody mają zakres dynamiczny .
Zarówno metoda , jak i blok są funkcjami wyższego rzędu .
Przykłady
Wszechobecny program Hello world :
"Witaj świecie!" println
Nowe obiekty są tworzone przez klonowanie obiektów. W szczególności w Io tworzony jest nowy, pusty obiekt i tylko różnice między nim a jego rodzicem są przechowywane w nowym obiekcie; to zachowanie jest znane jako dziedziczenie różnicowe . Pokazano przykład takiego zachowania:
A := Klon obiektu // tworzy nowy, pusty obiekt o nazwie „A”
Prosta nierekurencyjna funkcja silnia, w Io:
0
silnia := metoda ( n , if ( n == , return 1 ) res := 1 Zakres od 1 do ( n ) foreach ( i , res = res * i ) )
Ponieważ przypisanie res * i
do res
jest ostatnią wykonywaną akcją, funkcja niejawnie zwraca wynik, więc jawne wyrażenie zwracające nie jest potrzebne. Powyższe pokazuje użycie ranges i nie używa pętli for()
, która byłaby szybsza.
Zobacz też
- Ioke (język programowania)
Linki zewnętrzne
- Io strona główna
- Io w Centrum Badawczym Synrc
- Io w Curlie
- Ramy testowe BDD Jasmine.Io dla Io