Yazılım dillerinin değişimi ve 'Skip'

Selamlar,

Bu sefer hem Türkçe versiyon ile başlamak, hem de yeni bir kütüphane ya da teknoloji üzerine konuşmak yerine yeni bir yazılım dilinden bahsetmek istiyorum. Bununla birlikte, artık günümüzde geldiğimiz noktada sektörün yeni bir dile olan ihtiyacını da tartışabiliriz diye düşünüyorum.

Konu yazılım ile ilgili olduğunda ve Türkçe açıklanmaya çalışıldığında bazı zorluklar ortaya çıkıyor. Elimden geldiğince anlaşılabilir bir şekilde belirtmeye çalışacağım.

Facebook bahsedeceğim bu yazılım dilinin geliştiricisi rolünde. Her ne kadar son dönemlerde yaşadığı güvenlik problemleri nedeniyle benim gözümde değerini bir miktar kaybetmiş olsa da konu geliştiriciliğe ve mühendisliğe geldiğinde çıkarmış oldukları ürünleri başarılı bulduğumu kabul etmeliyim.

Yazının bu kısmında duymuş olduklarım haricinde neler var diye Github sayfalarına göz gezdirdim, incelemek isterseniz başlıca ürünleri; React, React Native, Flux, Hack, HHVM, Nuclide, Reason, Buck ve daha fazlası da kategoriler halinde open source sayfalarında mevcut.

Skip

Facebook'ta 2015-2018 arasında geliştirilmiş deneysel bir programlama dili olan Skip aslında bir araştırma projesi olarak başlamış. Belki duyanlar olmuştur projenin ilk adı Reflex diye geçiyor. 2018 yılı itibarıyla open source olarak açılmış bulunuyor.

“10 dakikada Skip öğreniyoruz!” tarzı bir başlıkla zaten dilin sayfasında başarılı bir şekilde dokümante edilmiş syntax, functions, control flow, closures gibi özellikleri buraya kopyala yapıştır yapmayacağım. Zaten her ne kadar o anlamda yazılmasa da bir dili öğrenmek bir yana, 10 dakikada bu süreci gerçekleştirmek bence imkansız.

Dilin neleri uygulayarak, birleştirerek, değiştirerek veya hangi yaklaşımlarda bulunarak var olan muadillerine bir alternatif olarak ortaya çıktığını daha detaylıca incelemek istedim.

Eğer bu konuda meraklı iseniz gayet açıklayıcı blog yazıları mevcut, özellikle memoization tekniğindeki yaklaşımları okunası bir konu. Takıldığınız veya anlamadığınız herhangi bir yeri ayrıca tartışabiliriz.

Kullanım alanı

Sayfalarındaki dökümanlara göz gezdirdikten sonra çoğunun yaşadığı gibi benim de ilk izlenimim Skip'in Go, Rust veya Julia gibi bir sistem programlama dili olduğu yönündeydi. Fakat dilin tasarımcısı tartışma kanallarında böyle bir amacı olmadığını açıklıyor:

Let's say you decided tomorrow to build a fully incremental C++ front-end, to support auto-complete for example (I chose C++ because it is notoriously complex). What would you write this in? I think Skip should be the language of choice.

Dilin open source olarak açılmasıyla birlikte atılan tweetlerden birine verilen cevapta HHVM ile birlikte çalışabilir olduğundan JavaScript kullanılan her yerde kullanılabileceğinden bahsediliyor.


Skip şu anda ilginç bir konumda. Ana sayfasını ziyaret edecek olursanız Project Status başlığı altında şöyle bir açıklama bulunuyor:

The Skip project concluded in 2018 and Skip is no longer under active development at Facebook.

Kafa karışıklığı oluşturan bu cümle, projenin 2018 yılında tamamlandığından ve artık Facebook tarafından aktif bir geliştirme sürecinde bulunmadığını belirtiyor.

Bu noktada Facebook’un projeyi terk edip etmediği sorusu istemsiz olarak akıllara geliyor, bunu cevaplayabilmek için dilin asıl tasarımcısının bu tarz sorulara verdiği yanıtları inceledim, özetle:

  • Başta da bahsettiğim gibi Skip bir deneysel yazılım dili olduğundan gerçek hayatta örneği bulunmuyor.
  • Projenin hedefi Facebook'un Hack kod temeline OCaml'in sunamadığı reaktiflik özelliklerini (mutability, dependency tracking, safe parallelism) getirmekmiş.
  • Yeni bir dile yatırım yapılması riski düşünüldüğünde, Facebook'un muazzam codebase yapısına bakıldığında ve Skip'in asıl amacı düşünüldüğünde yeterli yatırım getirisini karşılayamacağı öngörüldüğünden proje sonuçlandırılmış.

Bu noktada Facebook gibi büyük şirketlerdeki yazılım dili geçişlerindeki (migration) değerlendirmelerinin hesaplanmasına küçük bir örnek vermekte fayda olduğunu düşünüyorum.
Typescript günümüz popülerliğine ulaşmadan önce Facebook tarafında statik type kontrolü için Flowtype adı verilen bir dil kullanıldı. Bugün karşılaştırmalara bakıldığında Typescript daha ağır basmasına rağmen Facebook'un Flow'u kullandığı zamanlarda Typescript orta ölçekli projeler için bile yavaş kalıyordu, hatta nullability ve temel type özelliklerini bile desteklemiyordu. Haliyle şu an Facebook için bu geçişe harcanacak efor, Flow ile yazılmış yapısının mevcut durumunu muhafaza etmekten daha fazla görüldüğü için böyle bir değişikliğe yaklaşılmıyor.

Konuyu Skip adına toparlamak gerekirse Facebook, alt yapısında geniş bir değişiklik hedefiyle giriştiği bu araştırma projesinde gerçekten bir fark yaratmış. Fakat iş uygulamaya geldiğinde küçük ölçekli projelerinin geçişi ya da sıfırdan başlayacaklar için kullanılabilir görülürken, multi milyon kod satırına ulaşmış devasa bir proje için yeterli sayılmadı ya da bu büyük geçiş için çekingen davranıldı.


Aynı işi yapan yeni yazılım dili?

Öncelikle aynı amaca hizmet eden yazılım dillerinin çoğalmasını konuşmak istiyorum. Sonrasında yepyeni bir kapsam için çıkan ya da tersine var olan bir amacı daha da kısıtlanmış bir alanda kullanma amacıyla çıkarılmış dillerden bahsedeceğim.

* -Gerçekten gerek var mıydı?*

Skip ilk duyurulduktan ve projeye göz ucuyla bir baktıktan sonra kafamda bu soru oluştu ve üstüne neler tartışılmış bakmak istedim.

Aslını söylemek gerekirse yazılım dillerine ihtiyacımız bile yok, direkt olarak işlemci kodu seviyesine inip programlama yapabiliriz. Ama birileri bu işlemin bize daha yakın gelen bir model içerisinde yazılmasının daha kullanışlı olacağını düşündüğü için bugün yazılım dilleri var; lakin ihtiyaçtan değil.

Bugün -2018 yılında-, "Mevcut yazılım dilleri yetmiyor mu? Yeni yazılım dillerine ihtiyacımız var mı?" sorusunu sorduğumuzda şunu düşünmemiz gerekiyor; 1970'lerin sonlarına doğru yazılım sektörü Logo, Pascal, C ve Smalltalk (üzücü bir hikayesi var) gibi object-oriented ve functional programming dilleri ile oluşan ihtiyaçlara cevap veriyordu.

Bu sorunun o zamanlarda sorulduğunu düşünecek olursak, on yıl sonrasına baktığımızda, 1980'lerin sonlarına doğru C++, MATLAB ve Objective-C gibi olağanüstü yazılım dilleri vardı. Eminim ki bu soru 80'lerde de soruldu ve yeni bir dilin gerekliliği tartışıldı fakat artık 1990'ların sonlarında Haskell, Python, Java, JavaScript ve PHP gibi günümüzde bile geliştirilen teknolojilerde kullanılan yazılım dilleri çıktı.

Bitmedi, 2000'ler ve sonrasına bakalım; Go, Kotlin, Dart, Julia, Swift, Hack, Rust ve daha niceleri aktif olarak kullanılıyor. Fakat 1972'de çıkan Smalltalk da 2011'de çıkan Kotlin de nesne yönelimli programlamaya hizmet ediyor.

Hangisini tercih edeceğiniz size ve projenize kalmış.

Bundan 20 yıl sonrasında ne olacağını çok da kestiremiyorken ama elimizde böyle bir geçmiş varken durup "Aynı işi yapan yeterince yazılım dili yok mu ya artık?" diyebilir miyiz? Bence hayır.

Yepyeni bir yazılım dili?

Klasik bir cümle olacak ama endüstri kendi içinde evrim geçiriyor, düşünme şeklimiz evrimleşiyor, haliyle yazılım dilleri de evrimleşiyor.

Bu konu çerçevesinde iki konuya değinmekte fayda olduğunu düşünüyorum. Birincisi, geçtiğimiz yıllarda "yeni" bir amaca hizmet eden ya da mevcut amacı olan bir yazılım dilinin kapsamını biraz daha kısıtlayarak ortaya çıkan yeni yazılım dillerinin daha oturaklı, geçmişten gelmiş ve hala aktif olarak kullanılan yazılım dillerine etkisi.

Çok vurucu yeni özellikler veya küçük kısayollar taşıyan yepyeni yazılım dilleri endüstriye mal olan diğerlerini gerçek anlamda etkileyebiliyor, en azından bu nedenle sürekli olarak yeni yazılım dillerinin araştırılması ve open source community tarafından didiklenmesi gerektiğini düşünüyorum.

Güzel bir örnek vermek adına Kotlin'de switch-case bloklarında kullanılan flow-sensitive typing 2004 yılında yine Skip gibi bir araştırma dili olan Nice'deki class-casting kullanımından esinlenmiş.

Değinmek istediğim ikinci konu aslında biraz daha teorik olarak ilerliyor. Yazılım sektörünün ağırlıklı kısmını oluşturan programlama türüne classical programming deniyor. Bunun bir adım ötesinde duran yeni alan kuantum bilgisayarlarının gelişmesi ile ortaya çıkan quantum programming.

Artık önümüzde uzun, zor ve çözülmesi olanaksız problemleri verebileceğimiz bilgisayarlar olduğundan onların dilinde konuşmamız gerekiyor. Örneğin Xanadu adlı firmanın kuantum optik devrelerini (quantum optical circuit) tasarlamak için kullandığı Strawberryfields adlı yazılımında programalama yapmak için Blackbird dilini kullanmak gerekiyor.

Sonuç

Aslını söylemem gerekirse bu yazıya başlarken amacım sadece Facebook'un Skip dilini biraz araştırmak ve dil hakkında bilgi verip bitirmekti. Fakat bu noktaya gelmiş olmasından gayet memnunum. Bunları araştırırken zevk almaktan ve öğrenmiş olmaktan da memnunum.

Umarım siz de okurken benim yazarken aldığım kadar keyif almışsınızdır. Kafanıza takılan, konuşmak, tartışmak veya eleştirmek istediğiniz herhangi bir konu olursa yorumda bulunabilir, bana @canberkozcelik hesabından ulaşabilirsiniz. Okuduğunuz için teşekkür ederim.

Peki ben kimim?

Kaynaklar:

  • https://news.ycombinator.com/item?id=18077612
  • https://hackernoon.com/an-interactive-tutorial-on-quantum-programming-327da388f859
  • https://apiumhub.com/tech-blog-barcelona/new-programming-languages/
  • https://getbadges.io/blog/12-gamification-platforms-that-help-learn-coding
  • https://medium.freecodecamp.org/why-we-will-always-need-new-programming-languages-3415869ea37e
  • https://www.quora.com/Do-we-really-need-a-new-programming-language-in-the-future-Why-or-why-not

*Border Collie bilinen hafızası en güçlü köpek ırkı olarak kabul ediliyor, Skip’in en büyük özelliği hafızayla ilgili olduğu ve ben de köpekleri sevdiğim için güzel bir fotoğrafını koydum.