← A–Z Röportajları

F#

Microsoft araştırmacısı Don Syme, F#’ın geliştirilmesi, karmaşık görevleri çözerken sunduğu sadelik, canlı F# topluluğu ve bu fonksiyonel programlama dilinin geleceği hakkında konuşuyor.

F#’ın geliştirilmesini ne tetikledi?

En başından beri F#’ın amacı, OCaml ve Haskell ruhundaki türlendirilmiş fonksiyonel programlamanın .NET platformu üzerinde yüksek kaliteli bir ifadeye kavuşmasını sağlamaktı. Bu diller, veri dönüşümleri ve paralel programlama gibi görevlerde olduğu kadar genel amaçlı programlamada da üstünlük gösterir.

F# adı nasıl ortaya çıktı?

F# ekibinde “F, Fun demektir” deriz. F# ile programlama yapmak gerçekten de pek çok rutin programlama görevini daha basit ve daha keyifli hâle getirir ve kullanıcılarımız dili kullanmaktan keyif aldıklarını sürekli olarak bildiriyor.

Ancak gerçekte ad, “Functional için F”ten ve ayrıca “System F” adlı kuramsal bir sistemden geliyor.

Dilin geliştirilmesi sırasında aşmanız gereken belirli sorunlar var mıydı?

Nesne yönelimli ve fonksiyonel programlamayı birleştirmek, yüzey sözdiziminden tür çıkarımına ve tasarım tekniklerine kadar pek çok zorluk barındırır. Bu sorunları ele alış biçimimizle büyük gurur duyuyorum.

F#’ta ayrıca “computation expressions” adlı bir özellik var ve burada elde ettiğimiz bütünlükten özellikle memnunuz.

F#’ın geliştirilmesinde şansınız olsaydı farklı yapacağınız bir şey var mıydı?

Bir anlamda bunu şu anda yapıyoruz. F#’ı ürün kalitesine taşırken bazı deneysel özellikler kaldırıldı ve dile ile kütüphaneye önemli temizlikler yaptık. Bu değişiklikler F# topluluğu tarafından büyük memnuniyetle karşılandı.

F# başlangıçta .NET platformu için mi tasarlandı?

Evet, tamamen. F#’ın odağı, türlendirilmiş fonksiyonel programlama ile .NET’in avantajlarından birlikte yararlanmaktır.

F#, ML ve OCaml’den hangi unsurları aldı?

F#, güçlü biçimde OCaml’e dayanır ve birçok programın çapraz derlenmesine izin veren ortak bir çekirdek dili paylaşır. Tür sistemi ve yüzey sözdizimi bu nedenle büyük ölçüde OCaml’den etkilenmiştir.

F# Eylül 2008 CTP sürümü nasıl geri bildirimler aldı?

Gerçekten harika oldu. Mevcut F# geliştiricilerinden, özellikle Visual Studio entegrasyonundaki bazı iyileştirmeler başta olmak üzere, CTP sürümündeki tüm geliştirmeleri görmekten çok memnun olduklarını duyduk. Ayrıca bu yeni sürümle birlikte F#’a gelen pek çok yeni kullanıcıyı görmek de çok güzeldi.

Şu anda F# topluluğunun ne kadar büyük olduğu hakkında bir fikriniz var mı?

Bunu söylemek zor. Ağırlıklı olarak hubFS etrafında gelişen mükemmel ve aktif bir topluluk oluştuğunu görüyoruz ve yıl boyunca istikrarlı bir büyüme gözlemledik.

Blogunuzda “F#’ın kilit özelliklerinden biri, etkileşimli ve keşif amaçlı betik yazımından bileşenlere ve büyük ölçekli yazılım geliştirmeye kadar uzanan bir yelpazeyi kapsamasıdır” diyorsunuz. Bu, F#’ın geliştirilmesinde her zaman kilit bir parça mıydı, yoksa zamanla bu özelliklere sahip bir dile mi dönüştü?

Bizim için kilit bir gelişme, F# Interactive’i Visual Studio ile birleştirdiğimiz zamandı. Bu, F# kullanıcılarının Visual Studio’nun arka planda tür denetimi ve IntelliSense özelliklerini kullanarak hızlı ve doğru kod geliştirmelerine, aynı zamanda F# Interactive ile bir problem alanını etkileşimli olarak keşfetmelerine olanak sağladı. Bu araçları 2005’in sonlarında bir araya getirdik ve dilin gerçekten kendi nişine oturması da o zaman oldu.

Şu anda F#’ın geliştirilmesinde sizi en çok heyecanlandıran şey nedir?

Bu yıl, F# ile programlamanın basit ve sezgisel olmasını sağlamaya gerçekten odaklandık. Örneğin, F# öğrenen bir lise öğrencisiyle çalışmaktan büyük keyif aldım. Birkaç gün sonra, daha önce hiç programlama yapmamış olmasına rağmen bir güneş sistemi simülatörünü doğru şekilde değiştiriyordu. O aşamadaki bir öğrenciyi izleyerek gerçekten çok şey öğreniyorsunuz.

Haskell, F#’ın geliştirilmesi üzerinde ne kadar etkili oldu?

Çok fazla! Haskell’ın kilit tasarımcılarından biri olan Simon Peyton-Jones, Microsoft Research Cambridge’de benimle aynı koridorda çalışıyor ve F# konusunda çok büyük yardımı oldu; bu yüzden ona çok şey borçluyum. Simon özellikle “asenkron iş akışları” adlı özellik hakkında çok sayıda geri bildirim verdi. F#’ın hafif sözdizimi de Haskell ve Python’dan ilham aldı. Son beş yıl içinde F#, Lang.NET gibi konferanslarda dil topluluğu içinde pek çok fikir paylaşımı gördü. .NET platformu, programlama kamplarını bir araya getirmede önemli bir rol oynadı.

Her zaman fonksiyonel dillerle mi çalıştınız? Onlara karşı özel bir yakınlığınız var mı? Sizi başlangıçta ne cezbetti?

BASIC’ten assembly koda kadar pek çok dille çalıştım. .NET, C# ve VB için generics’i uygularken yaptığım son check-in’lerden birinde bol miktarda x86 assembly kodu vardı. İlk işim Prolog’daydı. Bence programcılar her uçtaki dilleri öğrenmeli. Fonksiyonel diller, karmaşık görevleri çözerken bile sundukları sadelik nedeniyle beni cezbediyor. F# for Scientists gibi bir kitaptaki kod örneklerine bakarsanız, başardıkları şeyler göz önüne alındığında zarafetleri nefes kesicidir. İyi bir fonksiyonel program güzel bir şiir gibidir: bir “çözüm”ün parçalarının nasıl bir araya geldiğini görürsünüz.

Elbette tüm programlar bu kadar güzel olmuyor. “Büyük ölçekte programlama”yı da ele almamız çok önemli. F#’ın nesne yönelimli özellikleri bunun içindir.

Microsoft neden F#’ın geliştirilmesini üstlenmeye karar verdi ve F#, Microsoft’un genel stratejisi ve felsefesi içinde nasıl bir yere oturuyor?

Microsoft’un F# araştırmalarına daha fazla yatırım yapma kararı, büyük ölçüde F#’ın .NET platformuna muazzam bir değer katmasına dayanıyor. F#, .NET platformunun yeni geliştirici sınıflarına ulaşmasını ve .NET’in yoğun olarak kullanılmadığı alanlara hitap etmesini gerçekten mümkün kılıyor. Bu, özellikle veri keşfi ve teknik hesaplama alanlarında geçerli. Paralel programlamada da fonksiyonel tekniklerden yararlanıyoruz.

F# ile yazılmış gördüğünüz en ilginç program hangisi?

Bu iyi bir soru!

Birkaç yanıt vereyim. F# for Scientists’taki örneklerden bahsettim; bunlar gerçekten çok etkileyici. Ancak saf F# zarafeti açısından Dustin Campbell’ın Project Euler çözümleri serisini seviyorum.

Bununla birlikte, benim için en ilgi çekici olanlardan bazıları, F#’ı AutoCAD ve ArcGIS gibi mevcut veri odaklı araçlarla bütünleştirenler. Bu alanlar kuramsal olarak fonksiyonel programlamaya çok uygundur, ancak daha önce hiçbir fonksiyonel dil bu araçlarla birlikte çalışabilir olmamıştı. .NET birlikte çalışabilirliğinin sihri sayesinde, artık bu araçların .NET API’leriyle F# kullanabiliyorsunuz; bu da pek çok olasılığın önünü açıyor.

Sizce bir programcı neden C# yerine F# ile uygulama yazmayı tercih eder?

Pek çok programcı bir problemi F#’ta keşfetmeyi seçiyor, çünkü bu onlara programlamanın kendisinden çok problem alanına odaklanma imkânı veriyor. Bu, veri keşfi, algoritmik ve teknik hesaplama alanlarının bazılarında büyük bir avantaj ve bu nedenle C#’ın bariz bir tercih olmayabileceği yerlerde F#’a yönelik ciddi bir ilgi gördük.

F# ve C#’ın birbirini tamamlayan diller olduğunu mu düşünüyorsunuz, yoksa biri diğerine baskın hâle mi gelecek?

C# ve VB.NET açıkça .NET dillerinin kıdemli devlet adamlarıdır ve bu dillerin önemli bir rol oynamadığı gerçekten büyük bir .NET projesi hayal etmek zordur. Bu nedenle F# ile benimsediğimiz yaklaşım, onun kesinlikle C#’ı tamamlayıcı olduğudur. C# bileşenlerini içeren pek çok F# projesi olmasını bekliyoruz. Örneğin, F# ile kullandığımız tasarım araçları C# kodu üretir ve siz de bu olay işleyicilerinden F# kodunuzu çağırırsınız. Dolayısıyla C# hakkında çalışır düzeyde bilgi, F# programcısı için çok faydalıdır.

Sizce F#, bilgisayar geliştirme alanına nasıl kalıcı bir miras bırakacak?

F# ile amacımız, türlendirilmiş fonksiyonel programlamayı gerçek ve uygulanabilir hâle getirmekti. Aldığımız geri bildirimler, kullanıcılarımızın bu rolü dolduran bir programlama çözümüne sahip olmaktan büyük mutluluk duyduklarını sık sık gösteriyor. Ancak belki de başarının en büyük göstergesi, insanların yaptıklarımızı kopyalayıp fikirleri başka ortamlarda yeniden kullanmaları olacaktır.

Şimdiye kadar dile yönelik çok eleştiri aldınız mı? Aldıysanız, bunlar hangi noktalara odaklanıyordu?

Çok ama çok fazla geri bildirim aldık — son üç yıldır F# topluluğuyla neredeyse sürekli bir etkileşim içindeydik. Bu olağanüstüydü. İnsanlar çok yardımcı oldular ve pek çok harika fikir ve öneri getirdiler. Ancak “bu bozuk” diyen e-postaları da en az övgü dolu mesajlar kadar — hatta daha da fazla — memnuniyetle karşılıyoruz; bir şeyler uyuşmadığında ya da mantıklı gelmediğinde bunu bilmek istiyoruz.

Bazı programcılar, düşünce biçimlerini buyurucu programlamadan nesne yönelimli yaklaşıma uyarlamakta zorlanabiliyor; ancak çoğu bu geçişi keyifli buluyor. Yeni paradigmaları öğrenmek bazen yeni başlayanlar için deneyimli programcılardan daha kolay olabiliyor. Bununla birlikte F#’ın harika yanlarından biri, “bir seferde bir değişkeni değiştirebilmenizdir”; örneğin nesne yönelimli tasarım kalıplarınızı kullanmaya devam ederken, kodunuzun bazı bölümlerini fonksiyonel programlama ile uygulayabilirsiniz.

Dilin ilk geliştirilmesi ve devam eden kullanımı açısından en çok neyle gurur duyuyorsunuz?

Yeni başlayanlara bu kadar yardımcı olduğu için F# topluluğuyla gurur duyuyorum. Dilin kendisi açısından ise, .NET ile entegrasyonu sürdürürken işlevsel programlamaya sadık kalma biçimimizden çok memnunum.

Bilgisayar programlama dillerinin gelecekte hangi yöne gittiğini görüyorsunuz?

İnsanlar sadeliğe susamış durumda. İnsanların gerçekten önemli olan sorunlar için basit çözümlere ihtiyacı var: veri erişimi, kod geliştirme, dağıtım, bulut bilişim, Web programlama ve paralel programlama bunlardan sadece birkaçı. Visual Studio ekibinde çalışmanın heyecan verici yönlerinden biri, bu alanların her birinde dünya çapında uzmanların uyum içinde çalışıyor olması. F#’in ilk sürümüyle bu alanların hepsini kapsamayacağız, ancak zaman içinde bu alanların tamamında faaliyet göstereceğiz.

Dil düzeyinde, insanların dillerin karma işlevsel/Nesne Yönelimli (OO) programlama yönünde yakınsadığını söylediğini duyuyoruz. Bununla birlikte, bunun temel üzerinde pek çok önemli gelişmeyi mümkün kılacağını düşünüyorum. Örneğin, paralel ve eşzamansız mimarileri ifade etmeyi kolaylaştıran dile entegre tekniklerin savunucusuyum.

Yeni yetişen programcılar için herhangi bir tavsiyeniz var mı?

F#, Python, Prolog, Haskell, C# ve Erlang öğrenin!