Io (język programowania)

ja
Io-logo.svg
Paradygmat zorientowane obiektowo oparte na prototypach
Zaprojektowany przez Steve Dekorte
Deweloper Steve Dekorte, Jonathan Wright, Jeremy Tregunna
Po raz pierwszy pojawiły się 2002 ; 21 lat temu ( 2002 )
Wersja stabilna
20170906 / 11 sierpnia 2017 ; 5 lat temu ( 11.08.2017 )
Dyscyplina pisania dynamiczny , mocny
Strona internetowa iolanguage.org _
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

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 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