
هناك أفلام عبادة أو ألعاب أو كتب أو موسيقى - فهي مغرمة بشكل رهيب بمجتمع متماسك ومحترفين ونقاد. ولكن لا يوجد نجاح تجاري وشعبية واسعة النطاق. في مثل هذه المواقف ، عادةً ما أشعر بالضيق الشديد.
في مجال التطوير ، لا تنتشر التقنيات الجيدة دائمًا على نطاق واسع. على سبيل المثال ، F #. كل ما أعرفه عنه هو لغة رائعة للغاية ، ولكنها لا تحظى بشعبية كاملة ، وبعد ذلك لم يعد بإمكان المطورين العودة إلى لغاتهم المعتادة.
حاولت معرفة السبب. وبشكل عام - من هم الأشخاص الذين يكتبون عليها ، ولماذا يفعلون ذلك إذا كان العمل لا يحتاج إلى لغة؟ للقيام بذلك ، طرقت للتحدث إلى مجتمع F # الناطق باللغة الروسية في Telegram. هنا مائدتنا المستديرة.
كيف تبدأ تعلم F #
Airat Khudaigulov (
Szer ): أنا نفسي من C #. كان لدينا عمل يتعلق بـ Akka.NET ، الذي تم نقله من عكا إلى سكالا. الميناء ممتاز ، لكن لم تكن هناك أمثلة لحالات توثيق نادرة ؛ كانوا دائمًا في حوض سكالا. عندما قرأت هذا الرصيف ، برز سؤال واحد في رأسي - لماذا كل شيء مكتوب في سكالا في سطرين ، وأنا أعاني في C #؟
تم العثور على مخرج - F #. منذ ذلك الحين ، ولا دموع.
Roman Liman (
kagetoki ): اتضح أنه أداة قوية لحل المشاكل اليومية الحقيقية لأي مبرمج. الصعوبات التي كانت تعتبر القاعدة والحتمية في عالم OOP لـ C # و Java ليست حتمية على الإطلاق ، ويمكن منعها بسهولة بدلاً من التغلب عليها.
فيل رانتشين (
fillpackart ): مرة واحدة في حبري قرأت مقابلة كبيرة مع فاجيف أبيلوف. في ذلك الوقت ، لم أفهم نموذج البرمجة الوظيفية على الإطلاق ، وأزعجتني أي معلومات عنه. إذن هذه المقابلة.
فاغيف أبيلوف :
يمكن قراءة هذه المواد هنا . كان هذا بعد وقت قصير من خطابي في مؤتمر موسكو DotNext. باختصار ، لقد بدأت في دراسة F # بدافع الرغبة في كتابة كود أكثر تعقيدًا (كود أقل - أقل شرًا) والعمل مع هياكل البيانات الثابتة. بالطبع ، لا أحد يمنع C # أو مبرمج جافا من تحديد هياكل البيانات الخاصة بهم على أنها ثابتة ، ولكن أساس اللغات التي تنفذ OOP هو إمكانية حدوث طفرات في هياكل البيانات ، ولن تذهب هذه الإمكانية إلى أي مكان. تسمح لك البرمجة الوظيفية بعدم بذل الجهد لحماية البيانات من التغييرات غير الصحيحة في بيئة متعددة الخيوط - ستعتني البيانات بنفسها ، فهي غير قابلة للتغيير.
فيل رانجين : ظل
واجيف يقول إنه بعد الاحتفالية C # و Java ، يبدو F # أكثر ملاءمة للتطوير. لم أكن أعرف من كان فاجيف آنذاك ، لكنني بالطبع قررت على الفور أنه لا يفهم شيئًا. C # ليست احتفالية ، C # هو بالضبط ما يجب أن يكون. قوي وجميل. قررت أن أكتب مقالًا حول كيف أن البرمجة الوظيفية سخيفة. لقد قمت بمهمة بسيطة ، وبدأت في تنفيذها في C # و F # لتوضيح وجهة نظري. جاءني F # في هذه العملية لدرجة أنني لم أكمل كتابة المقالة. بدأت بدراسة هذه التكنولوجيا.
Roman Liman : العديد من الأشياء التي تم اختبارها في C # في وقت التشغيل قد انتقلت الآن إلى وقت comp ، لذلك يبدو أنها المرة الأولى التي جربت فيها الكتابة الثابتة - جاء الوحي المباشر.
عندما تحتاج في F # إلى سبعة أسطر من التعليمات البرمجية ، في C # سيتم توسيع الرمز المكافئ إلى 200-300 ، بدون مبالغة (وهذا يحسب فقط رمز مفيد). المترجم نفسه يولد لك مجموعة من المرجل ، على سبيل المثال ، المساواة الهيكلية.
فيل رانجين : لم أقم أبدًا بظهور رمز F # ، لأنه في رمز F # الخاص بي يتم اكتشاف جميع الأخطاء في مرحلة التجميع. أنا لا أمزح.
هل من الصعب تعلم F #
رومان ليمان : ما مدى صعوبة الدراسة؟ بالنسبة لي ليس الأمر صعبًا على الإطلاق. الشيء الوحيد في البداية هو مشدود قليلاً إذا صادفت أولاً نموذجًا وظيفيًا وأنواعًا ثابتة. لكن هذا ليس تغييراً في اللغة ، ولكنه تحول في النموذج.
بناء الجملة في البداية ليس واضحًا ، لذا من الأفضل ترك التفاؤل جانبًا والقراءة عن اللغة ، بدلاً من أن تأمل أن تكون معرفة C # كافية.
Ayrat Khudaigulov : F # يدعم كل شيء موجود في C # باستثناء goto (اللغة قائمة على التعبير تمامًا ، سيكون من الغريب إجراء انتقال حتمي في التعبير المحسوب) والكلمة الرئيسية المحمية (هذا حسب التصميم ، لأنه من الواضح أنه ليس صعبًا). كل شيء آخر نحبه OOP - الطبقات المجردة ، والواجهات ، والسمات التلقائية ، والاستخدامات ، وثالثية - هو بالطبع. لمحبي عد وحدات البايت أيضًا ، كل شيء موجود: معلمات المرجع / التدرج ، قابلية التغيير ، الامتدادات ، غير المُدارة ، المؤشرات ، stackalloc.
جميع الميزات في C # تأتي مع تأخر في بضع سنوات مقارنة بـ F # (الأدوية العامة ، غير المتزامنة / الانتظار + المهمة ، LINQ ، مطابقة الأنماط ، وأكثر من ذلك بكثير). والعديد من الميزات بشكل عام أشك في أنها ستأتي أبدًا (مجموع الأنواع التي تمثلها النقابات التمييزية ، ووظيفة الوظيفة الأصلية). في C # 8.0 الطازجة ، يعدون بإحضار الأرقام القياسية ونمط المطابقة العودية. سؤال الانتباه - لماذا الانتظار؟
وسؤال آخر: لماذا تتعلم لغة جديدة لتكتب بها بنفس الطريقة بالضبط؟ للحصول على الفوائد التي تعطيها F # ، لكن C # لا تفعل ذلك ، عليك أن تفهم الجانب الآخر من القوة. وهذا ليس سهلا.
جون دو : بصفتي مطورًا في C # ، أنا ممتن لمنشئي F # للأدوية غير المتزامنة والوجه البشري في C #. إذا كان أي شخص لا يعرف ، ظهرت هذه الميجافيت في C # بفضل F #.
Vagif Abilov : في الكتاب الشهير "مبرمج عملي" ، ينصح المطورون بتعلم لغة برمجة جديدة كل عام. لا يمكنني أن أفتخر بأنني أتبع هذه النصيحة بالضبط ، ولكن الشيء الرئيسي ، في رأيي ، هو ما أراد المؤلفون إخبارهم به - يجب أن يكون المبرمج جاهزًا دائمًا لمراجعة مبادئ كتابة برامجهم.
كثير منهم مشغولون بشكل عام مع لغات البرمجة ، مثل عقيدة الحياة. إذا قمت بالتبديل من Java إلى Clojure ، فسيتم معاملتهم أحيانًا كما لو كان مسيحيًا قد اعتنق الإسلام. لماذا ، في الواقع ، مثل هذا الاهتمام؟ غالبًا ما يسمح لك تعلم لغات برمجة جديدة بإعادة التفكير في عاداتنا في العمل مع اللغات القديمة. أولئك الذين هم على دراية بـ F # يكتبون في C # بشكل مختلف.
رومان ميلنيكوف (
neftedollar ): في F # ، OOP أكثر صحة (على الرغم من أنه متوافق تمامًا مع OOP في C #) منذ يشجع البرمجة على واجهات التجريد ، بدلا من الطبقات الصريحة.
ما رأيهم في مبدعي اللغة
نيكولاي ماتيوشين : بمجرد أن ساهمت في دعم مزودي خدمات Tipe على .NET Core. لفترة طويلة ، لم يعملوا ، وقررت شخصًا واحدًا من المجتمع الناطق بالروسية معرفة المشكلة. عند التجول ، رأينا أنه في .NET Core لا توجد وظيفة تحفظ التجميع (الكائن) إلى ملف - تم استخدام هذه الوظيفة من قبل موفري الخدمة.
لقد أمضينا أسبوعًا أو أسبوعين على نموذج أولي فعل ذلك. اتضح عكازًا رهيبًا ، لكنه يعمل جزئيًا. كل هذا الوقت تحدثنا في القضية على github ، ثم جاء دون Syme ، وكتب "ساعات قليلة من العمل" ، وأصلح مزودي الخدمات.
Vagif Abilov : مبتكر لغة Don Syme ميسور التكلفة وديمقراطي. آمل أن يحضر بعض المؤتمرات الروسية حتى يتمكن المطورين الروس من التعرف عليه شخصيًا.
رومان ليمان : Syme عبقري. المدهش ، أنه خلق كل هذا الجمال وحده تقريبا.
بافيل سميرنوف : إنه معبودتي في البرمجة.
Airat Khudaigulov : بالمناسبة ، دفع دون
Syme الأدوية الجنيسة في .NET ، وإلا كنا قد جلسنا على C # وقمنا ببث كل شيء من الكائن والعودة ، كما كان (وجزئيًا) في Java. تقوم Syme بتطوير اللغة مع التركيز على C # ، للتوافق مع ميزاتها الجديدة ، والتي ربما تكون صحيحة استراتيجيًا. ولكن هذا يعني أن صدى القرارات السيئة في C # يمكن أن يدخل أيضًا في F #. وهو يعارض أيضًا إدخال ميزات FP “abstruse” (hi Scala) ، وإعادة ترتيب اللغة ، كما يمكنهم تخويف الآخرين وتضخيم الحجم القياسي (hello C ++).
أعتقد أن Syme بطل. أتفق مع وجهة نظره عن اللغة على أنها متعددة النماذج ، لكنني سوف أغوص في اللغة شيئًا أعلاه.
لماذا اللغة ليست شائعة
رومان ليمان : اللغة ليست شائعة ، في رأيي ، لأن FP بشكل عام أقل شعبية من OOP. بالإضافة إلى ذلك ، هناك حد دخول. وبعد ذلك - خدعة 22. لا تكتب المشاريع على F # ، لأن هناك عدد قليل من المبرمجين في السوق ، والمبرمجين لا يتعلمون هذه اللغة ، لأنه لا توجد مشاريع في السوق.
فيل رانجين : أنا لا أعرف الأشخاص الذين سيمارسون البرمجة الوظيفية ، لكنهم يفضلون التوجه الشيئي. هنا F # كان محظوظًا بشكل خاص - فهو يناسب فقط أولئك الذين يؤمنون بتكافل هذه النماذج.
بافيل سميرنوف : اعتبره الكثير ميتًا بسبب سياسة Microsoft - كان F # مجرد منصة للتغلب على ميزات C #. ولكن تم وضع اللغة في البداية أكثر لعلم البيانات من التنمية الصناعية.
رومان ميلنيكوف : ريشاربر. بالنسبة إلى C # ، يعد هذا موضوعًا مهمًا ، وقد أنفق الكثيرون عليه بالفعل. بدون محلل ، الكتابة في C # مريضة قليلاً ، تحتاج إلى كتابة الكثير باستخدام الأقلام ، مثل تمييز التخصيصات. ويزيل جهاز إعادة الشحن الكثير من الألم من sycharpers. لا يوجد مثل هذا الألم في F # ، ولكن أولئك الذين لديهم إعادة مشاركة لا يمكنهم تقدير كل سحر لغة لا تعتمد على التوليف.
Vagif Abilov : في رأيي ، فإن سبب التأخر في نجاح Scala يكمن في هيمنة Microsoft ، التي لا تزال تحدد الأولوية على نظام Windows الأساسي. في حين تم تطوير F # بواسطة Microsoft Research ، فقد تم وضعه دائمًا من قبل الشركة كلغة لهواة. لدى Microsoft مقاييس توضح الجدوى الاقتصادية لتطوير تقنية معينة اعتمادًا على المبيعات الحالية ، وبالطبع ، فإن أي SharePoint وفقًا لهذه المقاييس تبدو أكثر جاذبية من F #. لكن قطرة تآكل الحجر.
فيل رانجين : أعتقد أنه سيطلق النار. كل قوة .NET مقترنة بأحدث بنية وأسلوب أكثر تعابيرًا في التاريخ لا يسعها إلا إطلاق النار.
رومان ميلنيكوف : التوقعات مذهلة. ينتقل F # تدريجيًا إلى تحليل البيانات ، وذلك بفضل موفري النوع ، على سبيل المثال. هناك مترجمون في شبيبة ومكتبة Elmish السحرية (أساسا Elm ل. NET).
ميغيل دي إيكازا يدعم F # بنشاط ، وفي Xamarin كان دعمه دائمًا مثل C #. هناك مترجم في ErlangCore ، وهو أيضًا بارد للغاية. في F # ، يمكنك كتابة الواجهة الأمامية والخلفية بالكامل.
SAFE-Stack هو شيء فظيع ، مع مكالمات واجهة برمجة تطبيقات مكتوبة ، وأغلفة باردة فوق مقابس الويب (Elmish.Bridge) ومجموعة أخرى.
فاغيف أبيلوف : أنا سعيد جدًا لاستخدام F #. أنا أعمل في مشروع بث نرويجي ، يقوم نظامنا بتحميل ملفات الوسائط الخاصة بالبرامج التلفزيونية والإذاعية إلى "السحابة" لإتاحتها للعرض والاستماع من أجهزة الكمبيوتر والأجهزة المحمولة. النظام مكتوب بلغة F # ويستخدم Akka.NET. هذا ليس المشروع الوحيد في مؤسستنا الذي يستخدم F # ، والممتع بشكل خاص هو أن عدد هذه المشاريع ينمو ، بالإضافة إلى عدد المطورين الراغبين في التحول إلى هذه اللغة.
ما الذي يناسب F #؟
Phil Rangin : F # يناسب تمامًا تطوير الذكاء الاصطناعي. هذه اللغة مصنوعة حرفيا لتجردني من الصعوبات والتركيز على الشيء الرئيسي. عندما تقوم بالذكاء الاصطناعي ، فإن مهمتك هي رسم طريقة تفكيرك في سلوك الجهاز. في مثل هذه الحالات ، تكون الشفرة هي لغتك الوسيطة ، وهي غير قادرة على التعبير عن أشياء معقدة للغاية. هنا F # قادرة على أن تكون مجردة لدرجة أنها لن تتدخل معك وتاريخ صنع سيارتك.
Vagif Abilov : ينطبق على أي مهام ،
ويرتكز بشكل جيد على مهام نمذجة المجال. في مقابلة العام الماضي مع هبر ، قلت بشكل غير حكيم أن اللغات الوظيفية قابلة للتطبيق أكثر على الخوارزميات والواجهة الخلفية ، وبدرجة أقل على برمجة واجهة المستخدم وصفحات الويب.
ثم ، في التعليقات ، لاحظ شخص ما أن هناك مثل هذه اللغة الوظيفية Elm ، والتي تمت كتابتها خصيصًا لبرمجة صفحات الويب. المعلق كان على حق تماما. لقد بدأت منذ ذلك الحين في استخدام Fable ، مما يسمح لك بكتابة تطبيقات الويب في F # من خلال تجميعها في JavaScript. تجربة مذهلة ، مزيج من F # + Fable (ومكتبة Fable-Elmish) يفتح الوصول إلى برمجة الويب للمطورين الذين لا يفهمون أي شيء في CSS مثلي.
Pavel Sirnov :
التطوير المستند إلى البيانات - لغة FP موجزة تدعم موفري Type. نموذج الممثل - MailboxProcessor في المكتبة القياسية هي قصة خرافية.
رومان ميلنيكوف : إنه يحل بشكل مثالي مهام الويب ويتكامل مع
مكونات التفاعل . تتم معالجة مهام تحليل البيانات والتعلم الآلي (
fslab.org ) ومهام ETL ومهام تصميم منطق الأعمال - يتيح لك نظام النوع الكتابة بحيث لا توجد حالات غير صحيحة.
مهام التحليل الرائعة (Fparsec). عظيم لكتابة لغاتك الخاصة. تمت كتابة نفس TypeScript في الأصل في F #. تتم كتابة
رمز GPU .
أنا نفسي أكتب نصوص fsx عليها بدلاً من bash و python لجهازي.
نعم ، تحت المتحكمات الدقيقة لن تحصل عليها. لكن أعتقد أن الكثير من الناس يمكنهم الاستغناء عنها.
مكان الحصول على المعلومات
كتب
الإنترنت
برقية
بضع كلمات عن المجتمع
Roman Liman : المجتمع رائع ، الجميع متحدون بالرغبة في كتابة F # مقابل المال ، لذلك يتم مساعدة جميع الوافدين الجدد بشكل كبير على زيادة المجتمع ، مما يزيد من فرصهم في العثور على عمل.
فيل رانجين :
علماء خطرين . لكنهم على حق.
بافيل سميرنوف : المجتمع الناطق باللغة الروسية F # مكان مريح للغاية. أكثر ما يعجبني أنهم ليسوا غير مبالين بلغتهم ، كما يحدث في النظم البيئية الأخرى المعروفة.
نيكولاي ماتيوشين : ربما يرجع ذلك إلى حقيقة أن اللغة ليست شائعة جدًا ، والأشخاص
السامون لا يطولون .
رومان ميلنيكوف : هناك مسرحيات لا تؤثر على اللغة. لكن الحياة أصبحت أكثر إثارة للاهتمام.