
نسمع جميعًا عن الأفلام أو الألعاب أو الكتب أو المقطوعات الموسيقية الشهيرة التي حظيت بإشادة كبيرة من مجتمع الأخصائيين والمتخصصين والنقاد ، ومع ذلك لا يبدو أنها تجتذب نجاحًا تجاريًا ملموسًا أو انتباه الجمهور الأوسع. مثل هذه الحالات تجعلني أشعر بالإحباط الشديد.
عندما يتعلق الأمر بالتطوير ، فإن التكنولوجيا الجيدة في بعض الأحيان لا تدخل أبدًا في دائرة الضوء. خذ F # على سبيل المثال. كل ما أعرفه عن ذلك هو أنها لغة رائعة ، لكنها لا تحظى بشعبية على الإطلاق مما يجعل من الصعب على المطورين - عند التعرف عليه - العودة إلى اللغات التي اعتادوا عليها.
حاولت معرفة ما هي القصة وراء ذلك. في الواقع ، من هم الأشخاص الذين يستخدمونها ولماذا يفعلون ذلك إذا كانت اللغة غير مطلوبة في الأعمال التجارية؟ للعثور على إجابات ، انضممت إلى مجتمع F # الناطق باللغة الروسية على Telegram - اجتماع المائدة المستديرة للمناقشة.
كيف بدأت تعلم F #؟
عيرات هودايغولوف (
سزير ): أنا في الأصل هاجرت هنا من سي. كان لدينا وظيفة ذات صلة بـ Akka.NET - ميناء سكالا في عكا. كان المنفذ نفسه جيدًا ، لكنه كان يفتقر إلى أمثلة لحالات نادرة في دليل المستخدم ، على الرغم من توفرها دائمًا في دليل Scala. أثناء قراءة هذا الدليل ، ظللت أتساءل - لماذا لا يستغرق الأمر سوى بضعة أسطر لكتابته في سكالا بينما أجد صعوبة كبيرة في فعل الشيء نفسه في C #؟
رأيت الحل في التحول إلى F #. لم يكن لدي أي أفكار ثانية منذ ذلك الحين.
رومان ليمان (
kagetoki ): اتضح فيما بعد ، أنها كانت أداة قوية لحل المشاكل اليومية الفعلية التي يمكن لأي مطور مواجهتها. إن العوائق التي اعتُبرت أن يُنظر إليها على أنها القاعدة الحتمية لـ OOP في عالم C # و Java ، ليست في الواقع حتمية ويمكن منعها بسهولة وليس التغلب عليها.
فيل رانزين (
fillpackart ): قرأت ذات مرة مقابلة طويلة مع Vagif Abilov عن هبر. في ذلك الوقت ، لم أستطع أن أتفهم نموذج البرمجة الوظيفية ، لذا فإن أي معلومات ذات صلة قد تغضبني بشدة. تلك المقابلة لم تكن استثناء.
Vagif Abilov (
VagifAbilov ):
هنا هو الرابط للمقال في السؤال . لقد فعلت ذلك بعد فترة وجيزة من إلقاء حديث في مؤتمر DotNext في موسكو. باختصار ، بدأت في تعلم F # كمحاولة لجعل الكود الخاص بي أكثر إيجازًا (أقل الكود يساوي أقل شرًا) وللاستفادة من بنى البيانات الثابتة. بالتأكيد ، لا يوجد شيء يمنع مطور C # أو Java من الإعلان عن بنيات البيانات الخاصة به كمستمر ، ولكن القدرة على تغيير بنيات البيانات هي ميزة أساسية في لغات OOP ، والتي ستكون دائمًا ملازمة لها. البرمجة الوظيفية توفر لك الجهد المبذول عادة في حماية البيانات من الطفرات غير المناسبة في بيئة متعددة الخيوط - ستعتني البيانات بأنفسها ، لأنها غير قابلة للتغيير.
Phil Ranzhin : واصل
Vagif قوله إنه بعد C # و Java الرسمي ، بدا F # وكأنه شيء أكثر ملاءمة للتنمية. لم أكن أعرف إذن من كان فاغف ، لكنني اعتقدت بطبيعة الحال أن الرجل لم يكن لديه أدنى فكرة. C # ليست رسمية بشكل مفرط ، C # هو بالضبط الطريقة التي ينبغي أن تكون. انها قوية وجميلة. قررت أن أكتب مقالًا عن كيف كانت البرمجة الوظيفية غير الصالحة بعد كل شيء. لقد واجهت مشكلة بسيطة وبدأت في تنفيذها في كل من C # و F # لإثبات وجهة نظري. لكن بينما كنت أعمل على ذلك ، أخذت تروقًا لـ F # لدرجة أنني تخلت عن المقالة. وبدلاً من ذلك بدأت أعمق في البحث عن التكنولوجيا.
رومان ليمان : يتم الاعتناء الآن بالكثير من الأشياء التي يتحقق منها C # في وقت التشغيل ، لذلك يبدو الأمر وكأنه يلعب مع الكتابة الثابتة لأول مرة - وهو كشف حقيقي.
دون المبالغة في ذلك ، حيث تحتاج إلى سبعة أسطر من التعليمات البرمجية في F # ، ستحتاج إلى 200-300 من الخطوط لكتابة الرمز المكافئ في C # (للحساب فقط لرمز مفيد). سيقوم المترجم بالقيام بكافة عمليات إنشاء الغلايات لك ، مثل المساواة الهيكلية.
Phil Ranzhin : لم
أقم فعلًا
بتصحيح رمز F # الخاص بي لأنه في شفرة F # الخاصة بي ،
تتم إزالة جميع الأخطاء أثناء التجميع. أنا لا أمزح.
هل من الصعب تعلم F #؟
رومان ليمان : ما مدى صعوبة تعلمها؟ أود أن أقول ، ليس من الصعب على الإطلاق. قد تجد صعوبة في التعامل معها في البداية إذا لم تتعامل مطلقًا مع النموذج الوظيفي والأنواع الثابتة من قبل. ولكن هذه المشكلة تتعلق بالتبديل بين النماذج ، وليس اللغات.
بناء الجملة ليس واضحًا في البداية ، لذا عليك ترويض غطرستك وقراءة هذه اللغة ، ولا تأمل في أن تفلت من معرفتك بـ C #.
Ayrat Hudaygulov : F # يدعم كل ما تفعله C # ، باستثناء goto (حيث أن اللغة قائمة على التعبير تمامًا ، يبدو من الغريب أن تقفز قفزة حتمية في تعبير محسوب) والكلمة الرئيسية المحمية (كانت كذلك حسب التصميم ، كما يبدو مضيفا أنه سيكون عدم التفكير). ما تبقى من كل شيء نحبه حول OOP - الطبقات المجردة ، والواجهات ، والخصائص التي يتم تنفيذها تلقائيًا ، واستخدامها ، وتجربة الصيد ، إلخ - كل شيء هناك بالطبع. سيكون هواة حساب البايت راضين أيضًا ، بما في ذلك مع المعلمات ref / out ، قابلية التغيير ، المسافات ، غير المدارة ، المؤشرات ، stackalloc.
تتم إضافة جميع ميزات C # مع تأخير لمدة عامين مقارنةً بـ F # (الأدوية العامة ، التزامن / الانتظار + المهمة ، LINQ ، مطابقة النمط والعديد من الميزات الأخرى). علاوة على ذلك ، فإن العديد من الميزات ربما لن تصل إلى اللغة مطلقًا (أنواع الخلاصة مثل النقابات المتميّزة ، وعرق الوظائف الأصلية). من المتوقع أن يتم تعزيز C # 8.0 المرتقبة من خلال مطابقة السجلات والعودية. السؤال هو ، لماذا الانتظار؟
سؤال آخر هو: لماذا تتعلم لغة جديدة لاستخدامها بالطرق القديمة؟ لاحتضان مزايا F # المفقودة في C # ، سيتعين عليك فهم الجانب الآخر من القوة. لا أحد قال أنه كان سهلا.
John Doe : كمطور C # ، أنا ممتن لمبدعي F # للأدوية والبرامج غير المتزامنة ذات الوجه الإنساني في C #. بالنسبة لأولئك الذين لا يعرفون ، جاءت هذه الميزات الضخمة إلى C # بفضل F #.
Vagif Abilov :
يوصي مؤلف كتاب التطوير العملي Pragmatic Development المطورين بتعلم لغة برمجة جديدة كل عام. لا أستطيع أن أقول أنني ألتزم دينيًا بهذه النصيحة ، لكن أعتقد أن المؤلفين أرادوا حقًا أن يقولوا إن المطورين يجب أن يكونوا دائمًا على استعداد لمراجعة المبادئ التي يكتبون بها الكود.
كثير من الناس يقدسون لغات البرمجة مثل معتقداتهم. سيتعامل البعض مع التحول من Java إلى Clojure مثل التحويل من المسيحية إلى الإسلام. لماذا على الأرض يجب أن تكون مهمة؟ غالبًا ما يتيح لنا تعلم لغات البرمجة الجديدة فرصة لإعادة النظر في طرقنا القديمة في العمل باللغات التي نعرفها بالفعل. التعود على F # يجعل الناس يكتبون رمز C # بطريقة جديدة.
Roman Melnikov (
neftedollar ): الجزء OOP من F # أكثر ملاءمة (على الرغم من أنه متوافق تمامًا مع إصدار C # من OOP) ، لأنه يشجعك على البرمجة باستخدام واجهات مجردة بدلاً من فصول صريحة.
ما رأيك في مصممي هذه اللغة؟
نيكولاي ماتيوشن : لقد ساعدت ذات مرة في تقديم دعم مزودي نوع البيانات إلى .NET Core. لن يعملوا لفترة طويلة ، لذلك ، بعد أن جندت عضوًا آخر من مجتمعنا الناطق باللغة الروسية ، قررت أن أعرف ما هو الخطأ بالضبط. بعد إجراء بعض عمليات الحفر ، اكتشفنا أن .NET Core يفتقر إلى وظيفة لحفظ كائن التجميع في ملف - كانت هذه الوظيفة مطلوبة من قبل موفري النوع.
لقد أمضينا أسبوعًا أو أسبوعين في تطوير نموذج أولي قادر على القيام بذلك. وضعنا معا اختراق فوضوي ، لكنه نجح (على الأقل إلى حد ما). طوال ذلك الوقت ، واصلنا النشر في Github's Issues حتى ظهر دون Syme ، قلنا أنه كان "بضع ساعات من العمل" وثابت مزودي النوعية.
Vagif Abilov : مصمم اللغة Don Syme ودود ومتفتح. آمل أن يغامر يوما ما بمؤتمر روسي لمقابلة المطورين الروس شخصيا.
ليمان الروماني : Syme هو عبقري. إنه أمر لا يصدق أنه كان كلهم وحدهم وراء هذا التصميم الجميل.
بافيل سميرنوف : إنه نموذجي في عالم البرمجة.
Ayrat Hudaygulov : بالمناسبة ، كان Don Syme هو الشخص الذي يقدم الأدوية الجنيسة إلى .NET ، وإلا فإننا سنظل نستخدم كل شيء من C إلى والاعتراض عليه في C # ، كما كان (وجزئيًا) الحال في Java. تقوم Syme بتنمية اللغة من خلال الرجوع إلى C # ، بحيث تتوافق مع ميزاتها الجديدة ، والتي ربما تكون الشيء الصحيح الذي يجب القيام به من الناحية الاستراتيجية. ومع ذلك ، فهذا يعني أن مذاق القرارات السيئة في C # يمكن أيضًا أن يتسرب إلى F #. إنه يعارض أيضًا إدخال ميزات nerdy FP (مرحبًا Scala!) والإفراط في التعقيد للغة ، حيث أن كل ذلك يمكن أن يخيف الأشخاص الآخرين ويفجر المكتبة القياسية (hello C ++!).
أعتقد أن سيم هو بطل. أقف معه إلى جانب رؤيته للغة كنموذج متعدد ، ومع ذلك ، فمن المحتمل أن أضيف المزيد من الميزات إلى اللغة.
لماذا اللغة ليست شعبية جدا؟
رومان ليمان : أقول أن اللغة ليست شائعة لأن FP عمومًا أقل شعبية من OOP. الى جانب ذلك ، هناك منحنى التعلم الحاد. الباقي هو وضع الصيد 22. يتم ترميز عدد قليل من المشاريع في F # لأن السوق يفتقر إلى المبرمجين F # ، في حين أن المبرمجين لا يتعلمون هذه اللغة لأن السوق يفتقر إلى المشروع ذي الصلة.
فيل رانزين : لا أعرف أي شخص يمارس البرمجة الوظيفية ويفضل في الوقت نفسه النموذج ذي الوجهة. بهذا المعنى ، F # سيئ الحظ بشكل خاص ، لأنه يعمل بشكل جيد فقط لأولئك الذين يؤمنون بالاتحاد التكافلي لكلا النموذجين.
بافيل سميرنوف : اعتبر الكثيرون أنه طفل لا يزال مولودًا بسبب سياسة Microsoft المتمثلة في جعل F # مجرد منصة للعب بميزات مخصصة لـ C #. ومع ذلك ، كانت اللغة تهدف في الأساس إلى علم البيانات بدلاً من التنمية الصناعية.
رومان ملنيكوف: ReSharper. إنها عناصر أساسية لـ C # ، وقد استثمر العديد من الأشخاص بالفعل. كتابة رمز C # بدون ReSharper عمل شاق ، مع الأخذ في الاعتبار مقدار التكوين اليدوي ، مثل تسليط الضوء على التخصيصات. وبالتالي ، ReSharper يخفف الكثير من الألم في الحمار للمطورين C #. F # لا تسبب هذا الألم في المقام الأول ، لكن أولئك الذين يستخدمون ReSharper لا يمكنهم حقًا تقدير الجمال الكامل للغة التي لا تعتمد على الأدوات.
Vagif Abilov : في رأيي ، يكمن السبب وراء تأخر نجاح Scala في الوضع المهيمن لشركة Microsoft والتي ما زالت تملي الأولويات عبر نظام Windows الأساسي. على الرغم من حقيقة أن F # تم تطويره في Microsoft Research ، فإن الشركة تعمل دائمًا على وضعه كلغة محببة. لدى Microsoft مقاييسها الخاصة بالجدوى الاقتصادية لتنمية تقنية معينة استنادًا إلى أداء المبيعات الحالي ، وبالتأكيد ، وفقًا لهذه المقاييس ، تبدو مشاريع مثل SharePoint أكثر جاذبية من F #. ومع ذلك ، انخفضت السكتات الدماغية السنديان كبيرة.
فيل رانزين : أنا واثق من أنها
ستقلع . قوة NET. بالإضافة إلى بناء الجملة الأكثر حداثة والمفهوم الاصطلاحي غير المسبوق لا بد أن تقلع.
رومان ملنيكوف : المستقبل يبدو واعداً بشكل لا يصدق. تمهد F # طريقها إلى تحليل البيانات ، وذلك بفضل موفري النوع على سبيل المثال. هناك أيضًا مترجمون js ومكتبة elmish السحرية (وهي في الواقع Elm for .NET).
ميغيل دي إيكازا مؤيد قوي لـ F # ، لذلك كان لدى Xamarin دائمًا نفس مستوى دعم F # مثل C #. هناك أيضا مترجم في ErlangCore ، وهو أيضا رائع جدا. يمكن استخدام F # لترميز كل من الواجهة الخلفية والواجهة الأمامية. تعد SAFE-Stack أشياء رائعة ، مع مكالمات API المكتوبة ، ومغلفات مقبس الويب البارد (Elmish. Bridge) وأطنان من الأشياء الأخرى.
فاغيف أبيلوف : أنا سعيد لسماع أن F # يستخدم في الممارسة. أعمل في مشروع لشركة إذاعة نرويجية حيث يقوم النظام بتحميل ملفات الوسائط التلفزيونية والراديو إلى السحابة لإتاحتها للتشغيل من أجهزة الكمبيوتر والأجهزة المحمولة. تتم كتابة النظام في F # ويستفيد Akka.NET. هذا ليس مشروع مؤسستنا الوحيد في F # ، والأكثر واعدة هو أن عدد مثل هذا المشروع ينمو كما يفعل عدد المطورين المستعدين للتبديل إلى تلك اللغة.
ما هو F # جيد ل؟
فيل رانزين : F # مثالي لتطوير الذكاء الاصطناعى. تم تصميم هذه اللغة حرفيًا لفصل رأيي عن أي متاعب والتركيز على الأشياء المهمة. عندما تعمل على الذكاء الاصطناعى ، فإن مهمتك هي ضبط تفكيرك على سلوك الجهاز. في مثل هذه الحالات ، يكون الكود هو لغتك الوسيطة التي لا تستطيع وصف الأفكار المعقدة للغاية. لكن F # قادر على أن يكون مجردة بما يكفي للسماح لك ولجهازك بصنع التاريخ.
Vagif Abilov : يمكن استخدامه لحل أي مشاكل ، وهو
مفيد بشكل خاص للتصميم المستند إلى المجال. في المقابلة التي أجريتها العام الماضي مع هبر ، كنت سخيفة أن أذكر أن اللغات الوظيفية كانت قابلة للتطبيق على الخوارزميات والخلفية بدرجة أكبر مما كانت تنطبق على برمجة واجهات المستخدم وصفحات الويب.
ذكر أحدهم بعد ذلك في قسم التعليق أن هناك لغة وظيفية Elm تم تصميمها خصيصًا لبرمجة صفحات الويب. كان الشخص الذي ترك التعليق على حق تماما. منذ ذلك الحين ، بدأت في استخدام Fable الذي يتيح لك كتابة تطبيقات الويب في F # وتجميعها على JavaScript. كان التأثير رائعًا: يتيح الجمع بين F # plus Fable (ومكتبة Fable-Elmish) إمكانية الوصول إلى برمجة الويب لمطوري تحدي CSS هؤلاء مثلي.
بافل سميرنوف : تطوير يعتمد على البيانات - إنها لغة موجزة من لغة FP بدعم من النوع يوفر. نموذج الممثل MailboxProcessor الخاص به ، كجزء من المكتبة القياسية ، يعد متعة!
رومان ميلنيكوف : يعمل على حل مشاكل الويب تمامًا ويتكامل جيدًا مع مكونات التفاعل. يعمل على حل مشكلات تحليل البيانات والتعلم الآلي (fslab.org) ، ومشاكل ETL ، ومشاكل تصميم منطق العمل - يسمح نظام أنواعها بالترميز بطريقة تتجنب الحالات غير الصحيحة.
يعمل بشكل جميل للتحليل (Fparsec). انه امر رائع لتصميم وتفسير اللغات الخاصة بك. فقط خذ TypeScript - تمت كتابته في الأصل في F #. ويمكن استخدامه لكتابة رمز GPU.
أنا شخصياً استخدم F # بدلاً من bash و Python لترميز البرامج النصية fsx لجهاز الكمبيوتر الخاص بي.
صحيح أنه لا يمكنك استخدامها لبرمجة ميكروكنترولر. لكنني أعتقد أن عددًا قليلاً من الناس يمكنهم الاستغناء عن ذلك.
أين يمكن الحصول على المعلومات
كتب
الانترنت
برقية
fsharp_news
fsharp_chat
وصف موجز للمجتمع
رومان ليمان : المجتمع رائع: إنه مدفوع بالرغبة في الرمز في F # تجاريًا ، لذلك يتم الترحيب بالمبتدئين وتقديم دعم هائل في محاولة لتنمية المجتمع وزيادة فرص الأعضاء في العثور على وظائف.
فيل Ranzhin : هؤلاء أتباع عبادة خطيرة! لكنهم على حق.
بافل سميرنوف : مجتمع F # الناطق باللغة الروسية هو مكان جميل. أكثر ما يعجبني هو أنهم يهتمون حقًا بلغتهم المفضلة ، تمامًا كما يفعل الناس في النظم البيئية الأخرى المعروفة.
نيكولاي ماتيوشن : ربما لأن اللغة ليست شائعة جدًا ، لذلك لا يبقى الأشخاص
السامون .
رومان ملنيكوف : للمجتمع نصيبه من الأعمال الدرامية التي لا تؤثر على اللغة نفسها ، ولكنها تجعل الحياة أكثر إثارة.