F# ile Programlama - Microsoft Dil Teknolojilerinde Nereye Gidiyor?

0
FZ

Don Syme’in F# programlama ile ilgili tanıtım ve demo videolarını gördükten sonra Pazartesi mutlaka F# derleyicisini ve etkileşimli kabuğunu indirip denemem gerektiğini düşünmüştüm.

Emacs + SLIME + Common Lisp tarzında rahat bir etkileşim ve hızlı geliştirme, deneme, sonuçları anında görme imkanı sunan F# bir betik dilinin kıvraklığı ile fonksiyonel programlamadan ve ileri programlama tekniklerinden faydalanmayı sağlıyor. Derlenen programlar .NET IL (Intermediate Language) koduna derlendiği ve bunlar da JITlenerek (Just In Time compilation) çalıştırıldığı için performans gayet iyi görünüyor.

F# ve DirectX 3D

Tanıtım videosunda ekip başı Syme’ın belirttiği gibi kökleri ML, SML, OCAML gibi dillere dayanan F# temelde bir fonksiyonel programlama dili. Bununla birlikte OCAML geleneğine uygun şekilde fonksiyonel programlamanın yanısıra imperatif ve nesneye yönelik programlama paradigmalarını da doğal şekilde destekliyor. C# gibi bir dille kıyaslandığında çok daha az ve öz şekilde algoritmaları ifade edebilen F#, etkileşimli kabuğu sayesinde de dosyadaki kaynak kodun bir kısmını seçip ALT+ENTER gibi bir tuş kombinasyonu ile de sadece o kısmın çalışmasını ve sonuçların hemen görülmesini sağlıyor.

Demo videosundaki zamana bağlı olarak dalgalanan 3 boyutlu yüzeyde “multi-threaded” olarak gezinen birçok top (ve bunlara eşlik eden vektörler) değişik açılardan gerçek zamanlı olarak fare ile evrilip çevrilirken F# performansı hakkında ilk izlenimlerin epey olumlu olmasını sağlıyor. Bu etkiyi elde etmek için yazılan kaynak kodun sadeliği ve esnekliği fonksiyonel programlamaya alışık olanlar için şaşırtıcı değil belki ama C# ya da VB programcılarını (ve kimbilir belki de Java ;-) bir hayli etkileme potansiyeline sahip.

F# derleyicisi ve etkileşimli kabuğu Microsoft .NET ve GNU/Linux MONO ortamlarında çalışıyor. Tabii eğer MS ortamındaysanız ve Visual Studio.NET kullanıyorsanız (2003 ya da 2005) o zaman F# Add-In ile doğrudan VS.NET’in sözdizim renklendirme, yazarken XML yorumlarına dayanarak programcıya ipuçları verme, tür bilgisi gösterme, vb. avantajlarından da faydalanmak mümkün. Bunun dışında F# ile fonksiyonel programlama yaparken tüm .NET sınıf hiyerarşisi de elinizin altında.

Demo videosunun ilk bölümünde de gösterilen (ve kesinlikle 3 boyutlu yüzey animasyon örneği kadar eğlenceli olmayan ;-) ) RSS işleme örneği F#’ın tıpkı güçlü bir betik dili gibi olarak da kullanılabileceğinin güzel bir örneği. Burada kısaca alıntılamak gerekirse, önce .NET sınıf hiyerarşisinden faydalanarak çok kolay bir şekilde bir HTTP veri çekme fonksiyonu yazıyoruz (#light direktifi sayesinde sözdizimini hafifleştirmek ve bazı OCAML tarzı anahtar sözcüklerden kurtulmak ve Python tarzı “girintileme ile kodu anlamlandır” kuralını dayatmak mümkün):

Yazının devamı buradan okuyabilirsiniz...

Görüşler

0
dfix
Sanırım bu şirket ilk yola çıkma amaçına (derleyici geliştirme) geri dönmekte. birazdan indirip akademik lisanslı visual studio.NET ile deneyeceğim.
0
FZ
Microsoft'un ilk yola çıkma amacı bu muydu bilmiyorum ama son bir iki yıldır bu tür konulara epey yatırım yapıyor. Denedikten sonra izlenimlerinizi buraya yazarsanız seviniriz.
0
dfix
Sözdizimi c# ve java dan çok daha sevimli ve for, if yapıları ve bazı oparatörler bana
pascalı hatırlattığı için içim buruldu biraz. kişisel olarak tam anlamıyla nesne tabanlı
programlamayı dayatan c# java ve benzeri dilerin bazen programcıyı kısıtlayıcı ve gereksiz
yere yollarını uzantmalarına neden olduğunu düşünmekteyim bunun yerine pascal c++ ın
yaklaşımının yani nesnel programlamamı fonksiyonel programlamamı yada her ikiside seçeneğinin verilmesi daha uygun, etkili ve esnek bir yaklaşım. Sözdizimlerinin tamamen okunabilri değilde sezgisel olarak anlaşılarbilir olması gerektiği kanatindeyim.
Daha az kod yazma işine gelince ciddi bir projede mucizevi bir etkisi olabilirmi emin değilim az kod yazmayı vaadeden dillerde bu özellik az kılavye kullanmaktan öte gitmiyor ise daha hızlı yazarak bu açığı kapatırız:) ancak az kod yazma vaadi; yanısıra daha esnek bir dil sağlıyorsa o zaman durum değişir. bu bağlamda çok fazla inceleme fırsatım olmasada bazı kod satırlarını anlamakta güçlük çeksemde F# heycan verici iyi bir adım olduğunu düşünüyorum.
0
FZ
Yeni bir dilin sezgisel olarak anlaşılması gerektiğini düşünmüyorum. Sezgilerle alışkanlıkları karşılaştırmak sık yapılan bir hata. Matematiksel notasyon da yeni başlayan bir öğrenci için pek sezgisel değildir ama yıllarca bunu kullandıktan sonra "sanki öyle" imiş gibi gelir.

Oradaki bazı ifadeleri de anlamamanız doğal çünkü bu yeni bir dil, öte yandan o kadar da yeni değil o sözdizimi (bilgi işlem tarihi açısından), yaklaşık 20 yıldır geliştirilen ML, SML, OCAML gibi fonksiyonel dillerin sözdiziminin büyük kısmını miras alıyor.

Kısa kod yazmaya gelince ben bunu klavye yıpranma payından ziyade okurken ki göz ve zihin yıpranma payı ile ilintiregeldim hep. Kısa olsun diye değil, okurken daha az okuyup daha kolayca anlaşılsın diye kısa prensibi güdüldü ise eğer ve buna ek olarak tür çıkarımları, güvenlik, program doğruluğu, vb. avantajlardan da taviz vermiyorsa bu kısalık, işte o zaman avantajlı olduğunu düşünüyorum. Ayrıca çok özel insanları bir yana bırakırsak, ortalama ve ortalamanın biraz üstü programcıların günlük düzgün ve kaliteli kod üretme miktarının (kod satır sayısı bakımından) belli bir sayıyı pek geçmediği göz önünde bulundurulacak olursa o zaman az laf ederek çok şey ifade eden dillerin avantajları daha iyi anlaşılacaktır.
0
dfix
Esasında tam olarak sezgisel demek istemediğimin farkına vardım. demek istediğim doğal reflex yada insanların doğuştan gelen herkeste aynı olan eylimleri ve tercihleri şöyleki bir yerde insan beyninin soldan sağa yazıp okumaya daha meyilli olduğunu okumuştum bu doğrultuda soldan sağa yazmak veya okumak tam tersini yapmaktan daha kolaydır çünki doğal eylimin yönünde tercih yapmış olur ve fazladan caba sarfedilmez

hp pavilion serisi bir laptopum var yukardan aşagıya tuşlar söyle home, page up, page down, end ben sayfanda yukarı haraket için neden home tuşuna her seferinde kazara basıyorum çünki home en üste bende sayfada üste çıkmaya çalışıyorum aynı durum sayfanın altına inerken de geçerli hata satır içinde haraket edekende nede olsa page up page down içteki tuşlar. bunun bir akışkalık olduğunu sanmıyorum ayrıca daha önce kullandığım kılavyeler bu tercihimde etkili olabiecek tus dizilimlerine sahip değildiler. bu doğal bir eylim. yanlış hatırlamıyorsam nescape 1.0 da kaydırma çubukları ters çalışıyordu sonra insanlar uyum sağlıyamadığı için değiştirildi. yani demek istediğim insanları doğuştan gelen eylimlerine ters düşen sözdizimlerini ve sembolleri anlama ve kullanmaları için daha fazla caba ve dikkat harcamalarını dolayısıyla zaman kaybetmelerine neden oluyor. programlama dillerini doğal eylimlere ve bunu doğrultusunda kazanılan alışkanlıklara uygun olması gerek örneğin pascal da kullanılan := atama oparetörü veya <> eşitdeğil operatörü sadece bence değil birçok kişi tarafında mantıki ve doğal nedenlerden dolayı = ve != operatörden çok daha uygun olduğu söylenmekte. umarım ne demek istediğim anlaşılmıştır
0
mentat
giriş gelişme tamam da, o sonuçtaki c/pascal eşit ve eşit değil operatörleri alakasız olmuş. yani, başta verdiğin örneklere (belki) eyvallah denebilir. ama oradan getirdiğin doğrular, nası oluyor da o operatörlere uygulanabiliniyor.

ps: eşit operatörünün := olması hangi mantığa sığar ki ayrıca. pascalla başlamıştım ben de gençliğimde, ve bi türlü eğilememiştim := operatörüne örneğin.

bi de eğilmek, eyilmek değil..
0
FZ
Eşit operatörü? := sembolü atama operatörü değil mi? Sanırım temel karmaşa oradan başlıyor (insanlar matematik eğitimini ilkokuldan beri aldıkları için eşittir, değildir, bir değeri bir yere yerleştirme yani atama konularını başlangıçta epey karıştırabiliyorlar). Lakin çok da mühim görmüyorum ben çünkü bir konvansiyon. Yani genlerimize kazınmış şeyler değil programlama dilleri notasyonları yahut matematiksel notasyon. Olsa olsa bir terminoloji ile birkaç yıl uğraşmanın getirdiği alışkanlığın değişmesinin zorluğundan bahsedilebilir.
0
dfix
pascal da := atama operatörüdür sanırım tekrar pascal çalışsanız iyi olur üstelik yazıda eğilmek kelimesini kullandığımı sanmıyorum o eylim yani meyil in eş anlamlısıdır. fazla imla hatası yapmam benim için doğal çünki ben disleksiyim. belkide tüm fikirlerimin nedeni bu olabilir. yani normalden farklı algılamam.
0
Zebani
araplar sağdan sola okuyor. dolayısıyla şüpheliyim. insanların soldan sağa okumaya eğilimli doğduklarından. Sanırım çinli zatlar da yukarıdan aşağıya okuyor. :)
0
FZ
Basit bir düşünce deneyi: Sağ elli olduğunuzu var sayalım. Sağ elinize bir çekiç, sol elinize de çivi gibi bir şey alıp sert bir tablete vura vura bir şey yazmaya çalışın. Şimdi çekici sol elinize alın, çiviyi de sağ elinizle hizalayın, bir de öyle deneyin. Hangi kombinasyon ile yazmak daha kolay?
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Koç Üniversitesi ACM ve ACM-W Organizasyonuyla Programlama Yarışması

coskung

Koç Üniversitesi ACM ve ACM-W öğrenci birlikleri, 5-6-7 Temmuz 2012 tarihlerinde İstanbul Geneli Programlama Yarışması düzenliyor

30 Saniyede AJAX Öğrenin

Soulblighter

Hayır hayır! O ne bir futbol takımı ne de temizlik maddesi. AJAX'ın ne olduğunu bilmiyorsanız üzülmeyin. Daha önce tabi ki FM'de yayınlanan bu habere bakabilir ve AJAX hakkında bilgi alabilirsiniz.

AJAX'ın ne olduğunu bilenler zaten bildiğine, bilmeyenler de artık öğrendiğine göre; şimdi Rasmus'un 30 saniyede AJAX dersi ile bu güzel dili hemen öğrenme zamanı. İyi eğlenceler...

tspell: Türkçe Doğal Dil İşleme Yazılımı

FZ

İlk kez Bilgi Üniversitesi´nin bilgisayar bilimleri e-posta listesinde görmüştüm tspell projesinin adresini, sanırım Mart ayı civarıydı, gidip baktığımda ortada henüz bir şey yoktu. Geçen hafta uğradığımda ise Java ile geliştirilmiş ve hiç de küçümsenmeyecek bir sistem ve güzel bir web sayfası karşıladı beni. Bilişsel bilim (cognitive science) ve doğal dil işleme (NLP - Natural Language Processing) konuları ile uğraşan biri olarak heyecanlandığımı inkâr edemem.

İki Türk programcı tarafından başlatılan ve Türk diline ciddi bir teknolojik hizmet olarak gördüğüm böyle bir projenin varlığı, açık kodlu olması ve paylaşıma açık olarak sunulması beni çok sevindirdi.

Bir hayli iddialı olan projenin 0.2 numaralı sürümü hem doğrudan çalışabilir olarak (200 KB) hem de istenirse Java kodları ile birlikte Internet´ten çekilebiliyor. Geliştiricilerin Eclipse yazılım geliştirme platformunu önermeleri ve tspell Java kaynak kodlarının Eclipse üzerinden nasıl çekilip derlenebileceğini anlatan teknik bir makale yazmış olmaları ise benim gibi konuya hızlı bir giriş yapmak isteyen ancak Eclipse ve Java konusunda çok deneyimli olmayan programcılar için çok ciddi bir artı puan. Görebildiğim kadarı ile Eclipse bir hayli güçlü bir platform, CVS işlevselliği de dahil olmak üzere her türlü aracı bünyesinde sunuyor ve entegre olarak ekip çalışmasınız kolaylaştırıyor.

Fazlamesai haberlerine en kolay erişim

butch

Sanırım hepiniz news ticker(haber bantı)'ları bilirsiniz. Çeşitli sitelerden -eğer böyle bir imkanları varsa- aktif haber başlıklarını kolayca görüntülemeye yarayan programlar. Bugün nonags.com'da rastladığım bir tanesi benim oldukça hoşuma gitti. Adı Swen. Oldukça minik (40K kadar) ve başarılı bir program. Beraberinde 30 kadar sitenin başlıklarını görüntülemenizi sağlayan scriptler geliyor. Esas konu, biz bu programcık için fazlamesai script'i hazırladık ve baya işimize yaradığını gördük. Bir deneyin...
Swen 0.4 için buraya,
Fazlamesai scripti için buraya. Bu dosyayı, programı kurduğunuz yerdeki "sites" klasörüne koymanız ve çalıştırdıktan sonra configure seçeneginden fazlamesai seçmeniz yeterli. Görmek isteyenler için bir de screenshot.

Ruby On Rails ve J2EE Üzerine developerWorks Makalesi

neikos

IBM developerWorks adresinde Rails ile J2EE mimarilerini karşılaştıran yeni bir makale yayınlandı. Makale, Rails ile Tomcat + Struts + Hibernate'den oluşan bir J2EE mimarisini karşılaştırıyor.

Özellikle J2EE'ye aşina olan ve Rails ile ilgili bilgi sahibi olmak isteyenler için yararlı bir makale.