Io (programlama dili) - Io (programming language)
paradigma | nesne yönelimli prototip tabanlı |
---|---|
Tarafından tasarlandı | Steve Dekorte |
geliştirici | Steve Dekorte, Jonathan Wright, Jeremy Tregunna |
İlk ortaya çıktı | 2002 |
kararlı sürüm | 20170906 / 11 Ağustos 2017
|
Yazma disiplini | dinamik , güçlü |
İnternet sitesi | iodil |
Başlıca uygulamalar | |
Io Io.NET | |
Tarafından etkilenmiş | |
Smalltalk , NewtonScript , Self , Lua , Lisp , Python , Act1 | |
Etkilenen | |
Ioke , İksir |
Io , Smalltalk , Self , Lua , Lisp , Act1 ve NewtonScript'ten ilham alan saf bir nesne yönelimli programlama dilidir . Io, Self ve NewtonScript'tekilere benzer prototip tabanlı bir nesne modeline sahiptir ve instance ve class arasındaki farkı ortadan kaldırır . Smalltalk gibi, her şey bir nesnedir ve dinamik yazmayı kullanır . Lisp gibi programlar da sadece veri ağaçlarıdır. Io, eşzamanlılık için aktörleri kullanır .
Io'nun dikkat çekici özellikleri, minimum boyutu ve harici kod kaynaklarını kullanmaya açık olmasıdır. Io, küçük, taşınabilir bir sanal makine tarafından yürütülür .
Tarih
Dil, 2002 yılında Steve Dekorte tarafından bir arkadaşı olan Dru Nelson'a kendi dili olan Cel ile yardım etmeye çalıştıktan sonra oluşturuldu. Dillerin nasıl çalıştığı hakkında pek bir şey bilmediğini fark etti ve sorunları daha iyi anlamak için küçük bir dil yazmaya koyuldu.
Felsefe
Io'nun amacı, kavramsal birleştirmeyi ve dinamik dilleri keşfetmektir , bu nedenle ödünler, performansa göre basitliği ve esnekliği tercih etme eğilimindedir.
Özellikleri
- Prototiplere dayalı saf nesne yönelimli
- Veri olarak kod / homoikonik
- Fonksiyon parametrelerinin tembel değerlendirmesi
- Üst düzey işlevler
- İçgözlem, yansıma ve metaprogramlama
- Aktör tabanlı eşzamanlılık
- eşyordamlar
- İstisna işleme
- Zayıf bağlantıları destekleyen artımlı çöp toplama
- son derece taşınabilir
- Çoğu platformda DLL / paylaşılan kitaplık dinamik yükleme
- Küçük sanal makine
Sözdizimi
En basit haliyle, tek bir tanımlayıcıdan oluşur:
doStuff
Yukarıdaki doStuff öğesinin bir yöntem olduğunu varsayarsak, sıfır argümanla çağrılmaktadır ve sonuç olarak açık parantezler gerekli değildir.
doStuff'ın argümanları olsaydı, şöyle görünürdü:
doStuff(42)
Io bir mesaj aktarma dilidir ve Io'daki her şey bir mesaj olduğu için ( yorumlar hariç ), her mesaj bir alıcıya gönderilir. Yukarıdaki örnek bunu iyi bir şekilde göstermektedir, ancak tam olarak değil. Bu noktayı daha iyi açıklamak için bir sonraki örneğe bakalım:
System version
Yukarıdaki örnek, Io'da ileti geçişini göstermektedir; "Sürüm" mesajı "Sistem" nesnesine gönderilir.
Operatörler , sözdiziminin yukarıdaki örnekler kadar kesin ve kuru olmadığı özel bir durumdur. Io ayrıştırıcısı , yorumlayıcı tarafından tanımlanan bir dizi işleci yakalar ve bunları yöntem çağrılarına çevirir. Örneğin, aşağıdakiler:
1 + 5 * 8 + 1
Çevirir:
1 + (5 *(8)) +(1)
Io'daki tüm operatörler yöntemlerdir; açık parantez gerektirmemeleri bir kolaylıktır. Gördüğünüz gibi, burada biraz da operatör önceliği oluyor ve öncelik seviyeleri, C öncelik seviyeleri ile aynı .
Yöntemler ve bloklar
Io'da anonim işlevler oluşturmanın iki yolu vardır : yöntemler ve bloklar. Aralarında, kapsam dışında neredeyse aynıdırlar . Blokların sözcüksel kapsamı varken , yöntemlerin dinamik kapsamı vardır .
Hem yöntem hem de blok daha yüksek dereceli işlevlerdir .
Örnekler
Her yerde bulunan Merhaba dünya programı :
"Hello, world!" println
Nesneleri klonlayarak yeni nesneler oluşturulur . Özellikle Io'da, yeni, boş bir nesne oluşturulur ve yeni nesne içinde yalnızca kendisi ile ebeveyni arasındaki farklar depolanır; bu davranış, diferansiyel kalıtım olarak bilinir . Bu davranışın bir örneği gösterilmektedir:
A := Object clone // creates a new, empty object named "A"
Io'da basit bir özyinelemeli olmayan faktöriyel işlev:
factorial := method(n,
if(n == 0, return 1)
res := 1
Range 1 to(n) foreach(i, res = res * i)
)
res * i
to ataması res
gerçekleştirilen son eylem olduğundan, işlev dolaylı olarak sonucu döndürür ve bu nedenle açık bir dönüş ifadesine gerek yoktur. Yukarıda kullanımını gösteren aralıkları ve kullanmaz for()
hızlı olacaktır döngü.
Ayrıca bakınız
Referanslar
Dış bağlantılar
- Io ana sayfası
- Synrc Araştırma Merkezi'nde Io
- Io at Curlie
- Io için Jasmine.Io BDD Test Çerçevesi