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

GCC 4.0 geliyor, RC1 yayınlandı

Soulblighter

C, C++, Objective-C, Fortran, Java ve ADA dillerinde yazılmış programları 15'in üzerinde farklı bilgisayar mimarisi için derlememize imkan veren GCC (GNU Compiler Collection) 4.0 RC1 yayınlandı. Değişiklikleri buradan okuyabilir, buradan da GCC 4.0 RC1'i indirebilirsiniz.

GNU/Linux sistemlerin en önemli, kritik ve olmazsa olmaz bileşenlerinden biri olan GCC derleyici süitinin yeni sürümü ile birlikte bu derleyici ile derlenen Firefox, OpenOffice.org, Linux çekirdeği gibi pek çok yazılımın kalitesinde ve performansında artış bekleniyor.

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.

KDE ve GNOME Uygulamalarını Birleştirmek

tongucyumruk

KDE ve GNOME gibi iki gelişmiş Unix masaüstü ortamı arasındaki uyum sorunları uzun süre sorun olmuştu. Neyse ki FreeDesktop gibi girişimler sonucunda bu sorunlar teker teker aşılmaya başlandı. Şimdi ise Zack Rusin adlı bir KDE geliştiricisi bu uyumu bir adım öteye taşımaya karar vermiş gibi gözüküyor.

Rosetta Stone: Dil Öğrenme Aracı

SHiBuMi

Rosetta Stone, temel mantığı "Yeni bir dili öğrenmenin en iyi yöntemi nedir? Kendi anadilinizi öğrendiğiniz yöntem" olan, çok başarılı bir yabancı dil öğrenme aracı. Sitelerinde de belirttikleri üzere, ilk dilimizi yani anadilimizi, okula bile gitmeden öğreniyoruz. Bunu, gördüklerimizi, işittiklerimizi başka hiçbir dile dayandırmadan yapıyoruz. Aynı yöntemi, yeni bir dil öğrenmek için de rahatlıkla kullanabiliriz.

C++ : `Standard Library´nin Ötesine Geçin

FZ

C++ programlama dilinde ustalaştıktan sonra çoğu programcının yaptığı ilk iş nedir? Standart fonksiyon kitaplığının dışındaki fonksiyon kitaplıklarını öğrenmek. Elbette standart C++ fonksiyon kitaplığının içinde karakter dizisi fonksiyonları, G/Ç kanalları, `container´lar, öteleyiciler (iterators), algoritmalar, vs. mevcuttur ancak modern programlama dünyasında en çok kullanılan kavramlar standart olarak gelmez: ağ programlama, GKA (Grafik Kullanıcı Arayüzü), eşzamanlılık, vs.

C++ in a Nutshell kitabının yazarı Ray Lischner, Blitz++, MTL (Matrix Template Library), ACE (Adaptive Communication Environment), Loki ve Boost gibi kitaplıkları ele aldığı bu yazısında C++ programcısının verimliliğini artırabilecek önemli noktalara dikkat çekiyor.