
لقد تحدثت ذات مرة مع مؤسس شركة ناشئة إسرائيلية تقوم بتطوير قاعدة بيانات GPU عالية السرعة. كان كل من Haskell و C ++ متكدسين ، وشكا المؤسس من صعوبة العثور على أشخاص في الفريق. طار إلى موسكو ، بما في ذلك للبحث عن المبرمجين جيدة.
سألت بعناية ما إذا كان من الأفضل استخدام شيء أكثر شيوعًا وجديدًا. وعلى الرغم من أن الإجابة كانت مهذبة وبناءة ، إلا أنه يبدو لي بين السطور: "Pff ، لا تذكر حتى هذه الألعاب."
كل ما سمعته عن هاسكل من الجانب منذ ذلك الحين جاء إلى شيء واحد - "النكات سيئة معه". للتعرف على Haskellists بشكل أفضل ، جئت إلى دردشة البرقية لأسألهم أسئلة. لقد كان الأمر مخيفًا جدًا ، وكما اتضح ، ليس عبثًا.
إنهم لا يريدون التحدث عن هاسكل بشكل شعبي ، ويبدو أنهم يفكرون في مثل هذه التعهدات بازدراء. تحدث بالفعل - بأقصى قدر من الاكتمال والموضوعية. "واحدة من الصفات المميزة لهاسكل كلغة ومجتمع هي أنهم لم يكافحوا معًا ليصبحوا شعبيين ، مع إعطاء إجابة بسيطة على الأسئلة الشائعة. بدلاً من ذلك ، قاموا ببناء طريقة منطقية مبدئية لحل المشاكل الحقيقية ، بدلاً من الاختراق بسرعة في قلب أحد المارة من قبل شخص مهتم ، "كتبوا إليّ هناك.
ومع ذلك ، شارك العديد من الناس تجاربهم ، وجمعت آراءهم هنا.
دينيس ميرزوف ( نولان ) : في الجامعة ، حول موضوع "لغات البرمجة" عُرض عليّ أن أدرس دورة في هاسكل كورسيرا مقابل نقطة إضافية واحدة من مائة. ثم كانت هناك دورة البرمجة الوظيفية التي عقدت هاسكل. كتب ورقة مصطلح وعمل الدراسات العليا للبكالوريوس في GHC. العثور على وظيفة كمبرمج هاسكل.
كان من الصعب ، ولا يزال من الصعب. عندما تبدأ دراسة هاسكل ، عليك أن تفهم الكثير من المفاهيم الجديدة. هذا عمل شاق. تتعلم حرفيا البرنامج مرة أخرى.
سيكون من الصعب على الكثيرين الآن أن يتذكروا كيف بدأوا رحلتهم في البرمجة ، ومدى صعوبة فهم ما هو "المؤشر" ، ما هي "الوظيفة" ، ما هي "الفئة". ربما هذا هو السبب في أن دراسة هاسكل صعبة للغاية. مع تقدم العمر ، يصبح من الصعب تعلم أشياء جديدة.
Doctor_Ryner : في فترة تجريبية ، وقعت في Redux ، لذلك نظرًا للدروس المستفادة من منشئها ، قررت أن أعرف الجميع بشكل أفضل. في البداية قمت بتطبيق الممارسات المكتسبة في جافا سكريبت ، ولكن بعد ذلك تعلمت عن هاسكل ، والتي تعتبر لغة وظيفية حقيقية. انجذبت على الفور أناقتها ومجموعة من المفاهيم الجديدة غير المعروفة بالنسبة لي.
لم يكن الأمر سهلاً مع البرامج التعليمية التي لا تنتهي حول monads على سبيل المثال من burritos ، والتي هي مربكة للغاية. أيضا ، خلفية حتمية تجعل من الصعب فتح مفاهيم جديدة.
يوري سيروفيتسكي ( cblp ) : أصعب شيء في التعلم هو هاسكل في المرتبة الثانية ، عندما لم تنتقل متلازمة البطة إلى اللغة الأولى.
ما هو جيد وما هي اللغة السيئة؟
Doctor_Ryner : اللغة موجزة للغاية وأنيقة ومرنة ، وليس مقابل أن نصف المكتبات الموجودة بها هي لغة EDSL (على الأقل هذا الانطباع).
يوري Syrovetsky ( cblp ) : تعبيرية عالية ، سهلة لنقل مجال الموضوع إلى رمز ، مزيج مثالي من النماذج الضرورية والوظيفية. من السهل بناء نماذج تجريبية على البيانات والخوارزميات ، مما يسمح لك بالتفكير في المشكلة دون تشتيت انتباهك للأشياء الصغيرة غير ذات الصلة.
جون دو : كتابة قوية (أود أن أقول الفاشية).
إيجور شيفنين ( interphx ) : نظام من النوع المعبر للغاية. ليست قوية مثل Idris أو Agda ، لكنها تصل إلى هذا المستوى المتوسط عندما يمكن التعبير عن كل شيء تقريبًا ، ونوع الاستدلال يعمل بشكل جيد. ليس عليك وضع علامات عليها يدويًا في كل مكان.
لكن نظام الكتابة القوي يجعلك تهتم بالقيم التي تم تمريرها. قد تبدو مجموعة من تعريفات النوع وكأنها ملف تعريف. يستخدم كل فريق مجموعة الملحقات الخاصة به أو لا يستخدمها على الإطلاق. الكود أكثر "كثافة" - يحتوي سطر واحد في كثير من الأحيان على معلومات أكثر من اللغات الأخرى ، لذلك يصعب على مطور عديم الخبرة قراءته.
Doctor_Ryner : عندما تدرس Haskell ، من المرجح أن تصادف القول "إذا تم تجميعه ، فمن المحتمل أن يكون صحيحًا." لا يوجد أي شيء فارغ ، فالنموذج الوظيفي نفسه صارم للغاية ويفرض عليك اتباع قواعد معينة ، الأمر الذي يؤدي في معظم الحالات إلى تصميم أفضل.
على سبيل المثال ، لا توجد متغيرات في اللغة - ثوابت فقط. ليس لديك لتتبع ماذا وأين تعين. يشجع هاسكل استخدام الوظائف النقية ، والتي لا تؤدي إلى أي آثار جانبية. يعمل التصميم الوظيفي ببساطة على جعل البرنامج يعمل ككل ، بدلاً من OOP ، حيث يتم طرح مجموعة من الكائنات في العالم وتحاول الكائنات التواصل مع بعضها البعض من خلال الآثار الجانبية ، وتحويل التطبيق إلى فوضى لا يمكن التنبؤ بها. في العمل ، نعاني ما يكفي من هذا مع C # في الوحدة.
دينيس ميرزوف : الكسل المدمج يزيد من تعبير اللغة. العديد من الخوارزميات أصبحت أسهل. يمكن أن تزيد الإنتاجية إذا لم يتم استخدام نتائج الحسابات الوسيطة. (على سبيل المثال ، "head. Sort" يعمل في الوقت الخطي).
إيجور شيفنين : عادة ما يساعد نموذج كسول للحساب ، ولكن عندما يكون ترتيب وظائف الاتصال أمرًا مهمًا ، فقد يكون من الصعب معرفة ما يحدث.
Doctor_Ryner : يتم تجميعها ، والتي تعطي على الفور زيادة كبيرة في السرعة.
دينيس ميرزوف : بالمقارنة مع جافا في السرعة ، ولكن ليس بالسرعة C.
إيجور شيفنين : من خارج الصندوق ، يوجد دعم للإضافات التي تسمح لك بإنهاء نظام اللغة والنوع. ومع ذلك ، هناك العديد من الإضافات المستخدمة على نطاق واسع والتي هي مألوفة للمجتمع ، ولديها أمثلة ووثائق جيدة ، وليست ملائمة.
Doctor_Ryner : تحتوي مكتبة Prelude القياسية على وظائف ضعيفة للغاية مثل القراءة ، الرأس ، readFile ، والتي يمكنها طرح استثناء ووضعها في برنامج ، بدلاً من العودة ربما. لذلك ، عليك استخدام البدائل أو كتابة تطبيقاتك الخاصة.
إيجور شيفنين : المشكلة الرئيسية هي الافتقار إلى التقييس ، لدرجة أن الكثيرين يستبدلون المكتبة القياسية بأحد البدائل غير المتوافقة. هناك خلافات في المجتمع حول ما يجب أن تكون عليه المكتبة القياسية ، وما ينبغي إدراجه في لب اللغة ، وما ينبغي استكماله بالملحقات ، ويبدو لي أن هذا يبطئ تطور اللغة.
دينيس ميرزوف : لا توجد أدوات كافية: لا يوجد بيئة تطوير متكاملة كاملة ، وهناك عدد قليل جدًا من الأدوات لقياس الأداء ، ولا يوجد تصحيح "خطوة بخطوة" - هذه ، بشكل عام ، مشكلة أساسية.
ما هي المشاريع التي تناسب هاسكل؟
يوري Syrovetsky : بالنسبة للمهام المعقدة المتعلقة بالأمن أو المال ، حيث تكون تكلفة الخطأ مرتفعة.
Doctor_Ryner : لكل ما تحتاجه لإجراء العمليات الحسابية والتحويلات وتحليل البيانات. فوجئت جدًا بأن هاسكل أقل شهرة في علم البيانات من بيثون.
إيغور شيفنين : لن
أخاطر باستخدامه للأنظمة المدمجة (الأداء ليس سيئًا ، لكن لا يزال هناك
مقدار كبير من استهلاك الذاكرة بسبب العمليات الحسابية البطيئة) والبرامج النصية الصغيرة (هذه الدقة ليست ضرورية هناك). يجب أيضًا أن تفهم أن العثور على مطورين في الفريق أمر أصعب بكثير من البحث عن اللغات الرئيسية.
John Doe : لكتابة كود الصناعة الذي سيقرأه الآخرون ، ستحتاج إلى فريق كامل من Haskellists. تمكنت هذه القلة من الناس لجمع.
إيغور شيفنين : ولكن بسبب إيجازه وصرامته ، فإن هاسكل مناسب لأي مهمة تقريبًا.
البدء في تعلم التنمية مع هاسكل هي فكرة جيدة؟
إيغور شيفنين: من غير المحتمل أن تبدأ ، لأن الغالبية العظمى من قواعد الشفرة التي سيتعين على الشخص العمل بها لم تتم كتابتها عليها.
جون دو : فكرة سيئة ، سيئة! اللغات التي لا تنتمي إلى عائلة ML - ولكن من اللغات الصناعية بشكل عام - ستكون صدمة لك.
دينيس ميرزوف : عادةً ما يدرس الناس الرياضيات أولاً ، ثم ينتقلون إلى البرمجة. لذلك ، يجب أن يكون تعلم اللغة باستخدام المفاهيم الرياضية (أنواع البيانات الجبرية ، والوظائف البحتة) أبسط من الضرورة. وهذا هو ، وأعتقد أن هذه فكرة جيدة.
Doctor_Ryner : جميع القادمين الجدد الذين أتدرب ، سوف
أعرضكم بالتأكيد على هاسكل. يسهل على الأشخاص الذين لم يدرسوا الأسلوب الضروري التنقل في التعليمات البرمجية الوظيفية والتعلم بشكل أسرع ، ثم حتى إذا كانوا يعملون مع اللغات ذات الوجهة ، فإنهم يقدمون حلولًا معمارية جيدة وممارسات وظيفية.
يوري سيروفيتسكي : من الأفضل أن تبدأ على الفور بعدة لغات مختلفة اختلافًا جذريًا ، على سبيل المثال ، C و Haskell و Smalltok ، بأي ترتيب. ليست لغة واحدة في
بشكل منفصل لن يعطي فهم كامل.
هاسكل هي لغة قديمة إلى حد ما. هل هو جيد أم سيء؟
يوري Syrovetsky: تتطور اللغة بنشاط كبير ، لا يسحب حمل التوافق فقط من أجل التوافق.
John Doe : تم اعتماد المعيار في عام 1998 ، لكن هذا ليس ملحوظًا: حتى الآن ، يتم إصدار إصدارات جديدة من المحول البرمجي ، يحتمل أن تتوافق مع الإصدارات السابقة ، كل ستة أشهر تقريبًا.
دينيس ميرزوف : هاسكل ليس
بالعمر ، لكنه
مرّ باختبار الزمن. لن تدخل التغييرات الطائشة في اللغة. إنه جيد إلى حد ما.
يقال إن هاسكل هي واحدة من أكثر اللغات تعقيدًا. هل هذا صحيح؟
Doctor_Ryner : مثل اللغة نفسها ، لا. على الأرجح هي التجريدات المستخدمة فيه. يمكن لأي شخص لم يسبق له مثيل رمز Haskell أن يجنون تدفق المعلومات الجديدة ومختلف المنشآت غير العادية.
يضيف النفط إلى النار أن اللغة تفرض مجموعة من "القيود" ، لا تسمح أو تعقد بشكل كبير مجموعة من الأشياء التي لا تنسجم مع مفهوم وظيفي.
جون دو : لكي يتم تجميع أول مشروع ابتدائي على الأقل ، استغرق الأمر ما يقرب من شهرين لتدخين الكتب المدرسية والكتيبات والبرامج التعليمية في المساء. صحيح ، بعد التجميع ، بدأ المشروع على الفور العمل والتين تحت حمولة كاملة (6k rps مع قمم تصل إلى 15) لمدة ستة أشهر ، دون أي تغييرات على الإطلاق.
دينيس ميرزوف : أراهن أنه إذا بدأ الطالب في دراسة البرمجة من هاسكل وتحرك بعيدًا بما فيه الكفاية ، فإن البرمجة الحتمية سوف تبدو له أكثر تعقيدًا وأقلها سهولة.
ايجور شيفنين : التعقيد نسبي. من بين اللغات الرئيسية ، ما زلت أجد C ++ الأكثر تعقيدًا. ستكون لغات إثبات النظريات (Agda، Coq) أكثر تعقيدًا من Haskell بالمعنى المفاهيمي. Haskell هي لغة بسيطة ، ولكن يمكن أن تتعلم أنماطها ومكتباتها - القياسية والجهات الخارجية - بعيدًا عن الفور.
هل التعقيد مبرر دائمًا؟
إيجور شيفنين : هناك ما
يبرر الأنماط ومستوى عالٍ من التجريد ، لأنها تجعل الكود أكثر موثوقية وأقصر. لكنني أعتقد أن العوامل وأسماء الوظائف وأشياء أخرى كثيرة قد تكون أكثر وضوحًا.
Doctor_Ryner : غالبًا ما تسمح لك بنيات Haskell المعقدة بإنشاء حلول قصيرة جدًا ، والتي تتحول أيضًا إلى المرونة والوحدات النمطية.
يوري Syrovetsky : إلا أن إدارة الآثار مرهقة ، على الرغم تقريبا
إنه دائمًا أفضل من عدم التحكم. ولكن على تبسيط ذلك
العمل جار.
جون دو : لغة أولئك الذين اعتادوا على الثعبان / php / كل ما يجعله يبدو متعامدًا مع الواقع بشكل عام. بالنسبة للأشخاص الذين لم يهتموا في البداية بنظرية الفئة ، فإن تحقيق نتائج من الصفر المطلق أمر صعب للغاية.
ولكن عندما تفهم اللغة ، فإنك تحصل على طريقة جديدة للتفكير في المشكلة التي يتم حلها.
يبدو أن هاسكل هي لغة للرياضيين وليس للمطورين. هل تعتقد أنه ليس واسع الانتشار بسبب هذا؟
دينيس ميرزوف : هذا دليل على المبدأ الذي يتبعه مطورو هاسكل الرئيسيين - "تجنب النجاح بأي ثمن". النقطة المهمة ، بالطبع ، ليست تجنب النجاح ، ولكن لتجنب النجاح ، الذي يكون سعره مرتفعًا جدًا.
هاسكل يمكن أن تصبح شعبية. هناك ، على سبيل المثال ، دعم لهذه اللغة من Microsoft. كان من الممكن جعل اللغة أكثر حتمية ، واتخاذ بعض القرارات السريعة وغير الخاطئة من أجل كسب شعبية. كان من الممكن استخدام الكثير من الحيل القذرة ، لكن بفضل هذا الموقع الصحيح للمطورين الرئيسيين لم يكن هناك شيء مثل هذا.
نعم ، شعبية اللغة ليست عالية جدًا ، لكن جودتها لا تعاني. مزايا Haskell على اللغات الحتمية واضحة بالنسبة لي ، ومعظم مشاكله قابلة للحل ، لذلك أنا متأكد من أن شعبية كبيرة ستأتي مع تطورها.
يوري سيروفيتسكي : لذلك لا يراه إلا الأشخاص الذين لا يعرفون شيئًا عنه. في
تستخدم هاسكل التطوير "الحقيقي" لفترة طويلة ؛ من السهل العثور على أمثلة
محرك البحث المفضل لديك. على وجه الخصوص ، نحن في LC تستخدم
هاسكل راض ، ونحن لا نرى أي شيء آخر في مكانه.
إيغور شيفنين : ما هي "لغة علماء الرياضيات" التي لا أعرفها حقًا. هذا إما R / MatLab / Mathematica لإجراء العمليات الحسابية والإحصائية ، أو Python ، لأنه بسيط ويتطلب خلفية هندسية أقل. لكن ليس هاسكل. تستخدم المفاهيم الجبرية مثل الأحاديات لأسباب عملية ، وليس فقط لدقة إضافية.
لعبت الدور الرئيسي في شعبية من قبل الانتشار التاريخي لل C / C ++ / Java / C # في المؤسسة ، واحتلت مكانة. ولكن الآن ، بدأت العديد من الشركات في استخدام Haskell واللغات الوظيفية الأخرى.
ما yap هل تقارن Haskell بـ ومن لصالحه؟
جون دو : أكثر أو أقل شيوعًا - مع إرلانج. ولكن Erlang لا يزال أسهل في الكتابة وأسهل في التعلم ، يبدو لي.
دينيس ميرزوف : أعرف
جيداً C و C ++ و Java و Haskell. لا يلزم مقارنة C ++ بأي شيء ، فاللغة رهيبة. C هي لغة جيدة للتنمية على مستوى منخفض. في هذا المكانة ، سيكون أفضل. خلاف ذلك ، فإنني أفضل هاسكل.
إن الاختيار بين Java و Haskell أصعب بالفعل ، ولكن هنا تحتاج أيضًا إلى النظر في مهمة محددة. بالنسبة إلى android على Haskell ، سيكون من الصعب على الأرجح الكتابة ، في هذه الحالة يكون Java أفضل. ولكن خادم الكتابة في هاسكل هو تقريبا مريحة كما هو الحال في جاوة. إذا كانت البيئة تسمح - ضبط المكتبات وإمكانية الوصول إليها - فعادةً ما أختار Haskell.
Doctor_Ryner : مع C # ، فقط جوجل كيفية تنفيذ ربما في C # وفي هاسكل. إنه لأمر غريب أن يشعر هاسكل الدكتاتوري الذي يعمل بحتة بمزيد من المرونة والحرية. في الواقع ، هذه هي النقيضين.
C # هي واحدة من أكثر اللغات وجوه المنحى ، وفوائد Haskell في تناقض صارخ معها. في C # ، عليك دائمًا أن تكتب مجموعة من الأشياء غير الضرورية ، وكل هذا غير سارة للغاية. يمكن أن يؤدي استخدام وظائف الترتيب العالي إلى إفساد الشفرة من حيث بناء الجملة. وسط كل هذا ، من الصعب بالفعل العودة من حلول هاسكل القصيرة والأنيقة.
ايجور شيفنين : مع الصدأ ، حتى الآن لصالح الصدأ. يستغرق الأمر كثيرًا من Haskell ولغات FP الأخرى ، ولكن في نفس الوقت يكون النهج الوظيفي ودودًا مع الضرورة ، والمطورين والمجتمع أكثر كفاءة وأكثر اتساقًا في تطوير اللغة من البداية.
ما رأيك في مجتمع Haskellist؟
جون دو : الغالبية العظمى من الناس ودودون للغاية ومستعدون دائمًا للمساعدة. اختلاف جميل عن مجتمعات العديد من اللغات الأخرى.
Doctor_Ryner : غالبًا ما تحتوي مجتمعات Haskell على أشخاص أذكياء بشكل مخيف ومستعدون دائمًا للمساعدة. ليس لشيء أن الميمات المحلية حول الدكتوراه ، نظرية الفئة والأكاديميين تذهب. إذا ذهبت إلى الدردشة بلغات أخرى ، فسترى أن الناس يناقشون مشكلات الإنتاج العادية وهياكل البيانات. في دردشة Haskell ، تظهر رسائل monads و lemma من Yoneda و funators المتقدمين وكتابة الأنواع المجنونة وما إلى ذلك أمامك مباشرةً.
ترى على الفور الكثير من الأشياء الجديدة التي لم تكن تعرفها من قبل - المؤلفات المجنونة ، والتحولات الأنيقة والتحولات ، والحلول للمشكلات التي تشغل عشرات الخطوط في اللغات الرئيسية ، تقريبًا في سطر واحد.
يقولون إن المتسللين متعجرفون. صحيح؟
دينيس ميرزوف : نعم. يبدو لي أن الغطرسة ترجع إلى حقيقة أنهم يحبون لغتهم حقًا وينتابهم التقليل من تقديرهم.
جون دو : Nifiga مثل هذا.
Doctor_Ryner : على الأرجح ، ذهب هذا الرأي ، نظرًا لحقيقة أن العديد من المطورين الرئيسيين منزعجون جدًا عندما يبدأ Haskelists في الحديث عن البرمجة الوظيفية ومزاياها. سوء فهم رهيب ، بدوره ، يمكن أن يزعج Haskelist نفسه ، وسوف يبدأ في التسرع في المصطلحات ، والتي يوصم بها من قبل الأسئلة الشائعة.
إيغور شيفنين : الغطرسة قوية جدًا. النقطة المهمة هنا هي أن FP و OOP والفرق بين فئات OOP وأنواع النقابات ومشكلة الامتداد والعديد من المفاهيم الأخرى يضيفون مرة واحدة إلى صورة واضحة جدًا ، وبعد ذلك يصبح من الصعب تصور الأشخاص الذين يحاولون معارضة OOP و FI أو تخيلهم بطريقة أخرى مشكلة واسعة النطاق في منظور ضيق.
لماذا لا تزال لغات FP متخصصة؟
دينيس ميرزوف : لا تزال مزاياها غير كافية
لإثارة اهتمام عدد كبير من المبرمجين. صعوبة في التعلم لا تؤدي إلى شعبية. مشاكل التوليف تخيف الكثير أيضًا ، لكن يبدو لي أن زيادة حجم المجتمع يمكن أن يحل هذه المشكلة. اتضح حلقة مفرغة.
إيغور شيفنين : مكانة المتخصصة تدريجيًا ، ويتم سحب المفاهيم الوظيفية إلى لغات أخرى.
Doctor_Ryner : المبادئ الوظيفية نفسها واللغات التي تدعمها موجودة بالفعل في كل مكان. حتى بالنسبة للأدوات الحادة ، هناك Linq وبعض المكتبات الأخرى. تلك المتخصصة هي لغات وظيفية بحتة ، لأنها تستخدم مفاهيم غير قياسية.
لا تنسَ أنه منذ 20 عامًا ، لم يكن الحديد منتجًا بشكل كافٍ للغات الوظيفية ، لذلك بدأت الوظيفية تدخل التيار الرئيسي في السنوات الأخيرة ، وتزايد الاهتمام بهاسكل.