چکیده ای از زبان های برگرفته:
از روزی که جان مک کارتی در سال 1958 زبان LISP را ایجاد کرد ، تا همین چند سال پیش شاهد پیشرفت های خیلی بزرگ و بنیادی در زبان های برنامه نویسی نبودیم.
یعنی امروزه هم ما برای برنامه نویسی کد را در فایلی می نویسیم و تحویل کامپایلر می دهیم و هنوز از مفاهیمی که زبان LISP و زبان های دهه ی 60 میلادی معرفی کردند استفاده می کنیم (ارایه ، اشاره گر ، متغیر ، حلقه و ...) و بیشترین تغییرات را در ابزار (IDE ، دیباگر ، پروفایلر و ... شاهد بودیم. (حتی مفاهیمی مثل GC هم از نسخه های اولیه ی لیسپ موجود بودند) شیوه ی برنامه نویسی ای که غالب برنامه نویسان به ان عادت کرده و با آن کد می نویسند (و بیشتر برنامه نویسان قادر به تصور برنامه نویسی به شکلی دیگر نیستند) ، روش دستوری (imperative) است (و نیز شی گرا)
زبان های برنامه نویسی ای که می شناسیم (سی ، پاسکال ، جاوا ، ...) بر مبنای مدل تورینگ هستند.
منتها مدل دیگری هم برای زبان های برنامه نویسی وجود دارد که شاید کمتر به گوشمان خورده باشد: حساب لامبدا. آقای Alonzo Church (پدر لامبدا!) و Allen Turing همزمان به این دو مدل دست یافتند و بعدا هم ثابت کردند که این دو زبان از نظر قدرت محاسباتی با هم برابرند. زبان های مبتنی بر مدل تورینگ ، معمولا دستوری هستند.
نقطه ی مقابل زبان های دستوری ، زبان های بیانی (declarative) است که در ان ها به جای تاکید بر چگونگی انجام یک عمل (how) روی این که چه کاری را می خواهیم انجام دهیم (what) تاکید می کنیم.
(مثل SQL که فقط با query ها می گوییم که چه می خواهیم ، ولی چگونگی انجامش را واگذار می کنیم به کامپایلر/مفسر).
زبان های تابعی هم نوعی declarative محسوب می شوند (اکثر اوقات ما روی بخش what تاکید داریم تا how در ادامه مثال خواهم آورد).
زبان های محبوب و رایج امروزی (سی پلاس پلاس ، جاوا ، دلفی ، سی شارپ ، روبی و ...) زبان های شی گرا هستند (مثال آخر بر خلاف بقیه یک زبان داینامیک است)
البته درست است که در سال های اخیر ویژگی های دیگری هم به این زبان ها اضافه شده که برنامه نویسی برای مدل های دیگر همچون تابعی را پشتیبانی می کند ، ولی باز هم هسته ی این زبان ها ، دستوری و شی گراست(.
زبان های تابعی به اندازه ی زبان های دستوری قدمت دارند (از LISP در سال 1958و Scheme در دهه ی 70 و Haskell و ML در دهه ی 80) منتها از عللی که باعث شده این زبان ها بیشتر در دنیای آکادمیک کاربرد و محبوبیت نداشته باشن ، می شود موارد زیر را برشمرد:
نداشتن کتابخانه های قدرتمند و وسیع
نداشتن حمایت مالی شرکت های نرم افزاری
عدم توانایی برقراری ارتباط با زبان های مهمی مثل سی برای ارتباط با سیستم عامل میزبان
سرعت اجرای پایین
شیب زیاد منحنی یادگیری
ارث بردن زبان برنامه نویسی F# از نوع های برنامه نویسی و زبانهای برنامه نویسی
F# در اصل یک زبان استاتیک است ، منتها با استفاده از محیط تعاملی این زبان (F# Interactive) می شود مثل زبان های پایتون و روبی ، به شکل داینامیک کد نوشت. در ضمن این زبان بر اساس سینتکس و مفاهیم زبان OCaml پیاده سازی شده و کتابخانه های OCaml را جز تعداد اندکی ساپورت نمی کند) ، منتها مدل شی (object model) اش همانند سی شارپ است ) به خاطر این که زبانی تحت دات نت است و همچنین ویژگی indentation یا تورفتگی کدش ، یاداور پایتون است.
در ضمن از Haskell و Erlang هم ویژگی هایی به ارث برده.
F# مزایای زیادی دارد که ان را از دیگر زبان های تابعی متمایز می کند. هم تابعیست هم شی گرا. زبانی استاتیک است ، منتها اجازه می دهد که مثل زبان های داینامیک با آن کار کنیم. سینتکسی دارد که نزدیک به 30 سال است وجود دارد و نخواسته انقلابی ارائه کند.
1- سایت های استاتیک قابل ادیت توسط مدیر سایت را ندارند در صورتی که سایت های داینامیک با یک آموزش دو ساعته مدیر سایت کل سات را ادیت می کند
2- سایت های استاتیک سریعتر لود می شود
3- سایت های داینامیک سریعتر از سایت های استاتیک آپدیت می شوند.
4- شرکت هایی که سایت استاتیک دارند حتما یک نفر مستقیم و متخصص برای آپدیت باید استخدام کنند در صورتی که در طراحی سایت داینامیک حتی منشی نیز کفایت می کند.
همانطور که خالق این زبان در مصاحبه هاش گفته ، قرار نیست این زبان جایگزین وی بی یا سی شارپ بشود. در واقع هنوز هم برای برنامه های تجاری GUI و برنامه های تحت وب و ...
زبان های فعلی مناسب ترند )نه این که F# قادر به انجام این کارها نباشد(
نکته: Evolutionبودن زبان F# نه Revolution بودن آن.