স্ট্যাটিক টাইপিং কি ট্রেড-অফের মূল্য?


108

আমি পাইথনে কোডিং শুরু করলাম প্রাথমিকভাবে যেখানে কোনও ধরণের সুরক্ষা নেই, তারপরে সি # এবং জাভা যেখানে সেখানে রয়েছে সরিয়ে নিয়েছি। আমি দেখতে পেয়েছিলাম যে পাইথনে আমি আরও দ্রুত এবং কম মাথাব্যথার সাথে কাজ করতে পারি তবে তারপরে আবারও আমার সি # এবং জাভা অ্যাপ্লিকেশন জটিলতার অনেক বেশি মাত্রায় রয়েছে তাই আমি পাইথনকে কখনও সত্যিকারের স্ট্রেস টেস্ট দিইনি বলে মনে করি।

জাভা এবং সি # শিবিরগুলি এটিকে সুরক্ষিত করে তোলে যাতে প্রকারে সুরক্ষা না দেওয়া হয়, বেশিরভাগ লোকেরা ভয়ঙ্কর বাগগুলিতে ডানদিকে চলে যেতে থাকে এবং এটি তার মূল্যের চেয়ে আরও বেশি সমস্যায় পড়ে।

এটি কোনও ভাষার তুলনা নয়, সুতরাং অনুগ্রহ করে সংকলিত বনামের মতো সমস্যার সমাধান করবেন না। প্রকারের সুরক্ষা কি বিকাশের গতি এবং নমনীয়তার জন্য মূল্যবান? কেন?

গতিশীল টাইপিং দ্রুততর যে মতামতের একটি উদাহরণ চেয়েছিলেন এমন লোকদের কাছে:

"বিকাশের সময় একটি গতিশীল টাইপ করা ভাষা ব্যবহার করুন It এটি আপনাকে দ্রুত প্রতিক্রিয়া, ঘুরে দেখার সময় এবং বিকাশের গতি দেয়।" - http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/



8
@ প্রফ্ট প্লাম: আমার কি প্রমাণের প্রয়োজন হতে পারে যে বিকাশের গতি এবং নমনীয়তা আছে? যেহেতু আমরা একটি বিশেষ দিক প্রকার সুরক্ষা সম্পর্কে কথা বলছি , ব্যবহার Javaবা C#অনিবার্য হয়ে উঠব, তাই তাদের সরবরাহের
উপায়টি

32
কঠোর ভাষায় অধ্যবসায় এর মাধ্যমে, আপনি "মাথাব্যাথা" কমান পারেন এবং তারপর আপনি এমনকি গতি দেখতে হতে পারে বৃদ্ধি আইডিই স্বয়ং-সম্পূর্ণতে, কোড প্রজন্ম, এবং কোড হিন্টিং হচ্ছে কারণে।
নিকোল

9
@ প্রফ্ট প্লাম: আমি বুঝতে পেরেছি, আমি আশা করি না যে আপনি (বা আসলেই কেউ) যে কোনও ভাষা তৈরি করেছেন তা সম্পূর্ণরূপে পরীক্ষা করেছেন ^^ সমস্যাটি হ'ল বেশিরভাগ লোকেরা যা আমি প্রোগ্রামিং ভাষার কিছু নির্দিষ্ট দিক সম্পর্কে অভিযোগ করতে দেখেছি (স্ট্যাটিক) টাইপিং প্রায়শই আসে) সাধারণত কোনও নির্দিষ্ট প্রয়োগের বিষয়ে অভিযোগ করা হয় এবং এটি উপলব্ধি করতে ব্যর্থ হয়।
ম্যাথিউ এম।

5
@ প্রফফ প্লাম, সমস্ত ব্লগ পোস্টের গতি সম্পর্কে সত্যই বলতে হবে টাক হ'ল "রুবি বা স্মলটকের মতো আধুনিক গতিময় টাইপের ভাষা নিয়ে যে কেউ গুরুত্ব সহকারে কাজ করেছেন, তারা জানেন যে তারা আরও উত্পাদনশীল।" ব্যবহারিক দিক থেকে এটি কীভাবে দ্রুততর হয় তার কোনও বাস্তব উদাহরণ নেই।
কারসন 63000

উত্তর:


162

এটি এক ধরণের মিথ রূপকথা যে প্রোগ্রামারদের ডায়নামিকালি টাইপ করা ভাষায় টাইপ সম্পর্কে চিন্তা করতে হবে না।

গতিশীলভাবে টাইপ করা ভাষায়:

  • আপনি এখনও অ্যারে, একটি পূর্ণসংখ্যা, একটি স্ট্রিং, একটি হ্যাশ টেবিল, একটি ফাংশন রেফারেন্স, অভিধান, একটি অবজেক্ট, বা যেকোনো কিছু নিয়ে কাজ করছেন কিনা তা এখনও আপনাকে জানতে হবে।

  • যদি এটি কোনও অবজেক্ট হয় তবে আপনাকে এটি জানতে হবে যে এটি কোন শ্রেণীর অন্তর্ভুক্ত।

  • এই ধরণের একটি ভেরিয়েবল বা ফাংশন প্যারামিটারে অন্য ধরণের হিসাবে প্রত্যাশিত প্রায়শই একটি ত্রুটি।

  • একটি নিম্ন স্তরে, বিট সংখ্যা বা স্বাক্ষরিত বনাম প্রায়শই স্বাক্ষরিত এমন জিনিসগুলির জন্য এখনও যদি আপনি কোনও টিসিপি প্যাকেট তৈরি করে থাকেন তবে অবশ্যই তার জন্য দায়বদ্ধ হতে হবে।

  • আপনি যেখানে শূন্য পেলেন সেখানে আপনি সত্যিই একটি খালি স্ট্রিং চেয়েছিলেন এমন সমস্যার মধ্যে পড়ে যেতে পারেন। অন্য কথায়, আপনি এখনও ডিমেগ করছেন প্রকারের অমিল বাগগুলি। একমাত্র আসল পার্থক্য হ'ল সংকলক ত্রুটিগুলি ধরছে না।

  • আমি যুক্তি দিয়ে বলছি যে আপনি এমনকি বেশি টাইপিং সংরক্ষণ করছেন না - কারণ আপনার কোডটিতে নথীকরণের পরিবর্তে আপনার ফাংশন প্যারামিটারগুলি কী ধরণের তা মন্তব্যগুলিতে নথী করতে চান। এ কারণেই ডায়নোজন-স্টাইলের মন্তব্য ব্লকগুলি গতিশীল টাইপড কোডগুলিতে অনুশীলনে অনেক বেশি জনপ্রিয়, যেখানে স্ট্যাটিকালি টাইপ করা ভাষায় আপনি সাধারণত লাইব্রেরির জন্য দেখতে পান।

এটি বলার অপেক্ষা রাখে না যে গতিশীল টাইপ করা ভাষাগুলিতে প্রোগ্রামিং বেশি সুখকর বোধ করে না কারণ সংকলকটি সবসময় আপনার পিঠে থাকে না এবং অভিজ্ঞ প্রোগ্রামাররা স্ট্যাটিক টাইপিং যেভাবেই ধরতে পারে যে ধরণের বাগগুলি খুঁজে পেতে এবং সংশোধন করতে সমস্যা হয় না , তবে এটি দক্ষতার বৃদ্ধির বা বাগের হার হ্রাসের অভিযোগ থেকে সম্পূর্ণ পৃথক সমস্যা, যার জন্য স্থিতিশীল টাইপিংয়ের পরেও গতিশীল টাইপিং সর্বোত্তম।


10
অভিজ্ঞ প্রোগ্রামাররা এই ধরণের বাগগুলি তৈরি / পরিচয় করিয়ে না দেওয়ার বিষয়ে আমাকে কিছুটা প্রতিদ্বন্দ্বিতা করতে হবে। ভাল বিকাশকারী যারা নম্র এবং তাদের ত্রুটি করার সম্ভাবনা স্বীকার করে (এবং অভিজ্ঞ বিকাশকারীরা সবসময় এর মতো হয় না) তাদের ত্রুটিগুলি তৈরি করার সম্ভাবনা কম থাকে।
জয় জয় জয়

12
"আমি যুক্তি দিচ্ছি যে আপনি এমনকি বেশি টাইপিং সংরক্ষণ করছেন না" এর সাথে আরও একমত হতে পারেননি। আপনি মন্তব্যগুলিতে প্রকারগুলি নথীকরণ এবং আপনার পরীক্ষাগুলিতে পরীক্ষা করে দেখেন, যা কিছু হলেও, আরও টাইপিং এবং রক্ষণাবেক্ষণের প্রয়োজন হয় (সর্বোপরি, আপনার মন্তব্যগুলি যখনই আপনার ধরণের পরিবর্তন হয় তখন আপডেট মন্তব্যগুলি আপডেট করতে আপনাকে অবশ্যই মনে রাখতে হবে এবং প্রায়শই আপনি যাবেন না )।
সেভেরিন কোজাক

আমরা আমাদের পাইথন শপ ডকুমেন্টিং টাইপগুলিতে সি # বা জাভা জাতীয় স্ট্র্যাটিলি টাইপ করা ভাষার চেয়ে ভার্বোজের চেয়ে বেশি সময় ব্যয় করি। এটিও লক্ষণীয় যে, নতুন ও প্রজন্মের মতো গো এবং মরচে ব্যবহারের মতো ভাষা ব্যবহার করে, তাই আপনি "অবজেক্ট x = নতুন অবজেক্ট ()" এর পরিবর্তে "x: = new (অবজেক্ট)" টাইপ করছেন।
weberc2

যখন আপনি বলছেন গতিশীল ভাষাটি আরও সুখকর বোধ করে তবে আমি কেন তা জানি না। আপনি কি তার জন্য ব্যাখ্যা আছে?
রডরিগো রুইজ

হ্যাঁ পরিবর্তকের প্রকারটি দেওয়ার পরিবর্তে আপনি পাইথনে ডিফল্ট মান বা ইউনিট পরীক্ষা (ইনলাইন ডকসেট) ব্যবহার করতে পারেন। পাইথনেও কখনও কখনও মিস-স্পেলিংগুলির সাথে আপনার অদ্ভুত ত্রুটি থাকতে পারে [আপনি যদি স্বতঃসম্পূর্ণ ব্যবহার করেন তবে প্রায়শই ব্যবহার করা যায় যদিও ডায়নামিক ভাষায় সব সময় প্রাক্কালে ব্যবহৃত হয় না] এবং স্ব.ব্রেড = 5 প্রবর্তন করছে কিনা তা নির্ধারণ করতে হবে রুটি বা এটি নতুন সংজ্ঞায়িত।
aoeu256

123

প্রকারগুলি আরও শক্তিশালী হওয়ার সাথে সাথে তারা আপনাকে আরও সহায়তা করতে পারে - আপনি যদি লড়াইয়ের পরিবর্তে এগুলি সঠিকভাবে ব্যবহার করেন। আপনার সমস্যার জায়গাটি প্রতিফলিত করতে আপনার ধরণের নকশা করুন এবং লজিক ত্রুটিগুলি রানটাইম ক্র্যাশ বা ননসেন্স ফলাফলের পরিবর্তে সংকলন-টাইম ধরণের মিল নয়।


37
+1 টি! "লজিক ত্রুটিগুলি রানটাইম ক্র্যাশ বা ননজেস ফলাফলের পরিবর্তে সংকলন-টাইম ধরণের মিল না হওয়ার সম্ভাবনা বেশি": সত্যই ভাল উত্তর! আমি যখন আমার ধরণের ডিজাইন করতে বেশি সময় নিই, তখন কোডটি আরও প্রাকৃতিকভাবে অনুসরণ করে এবং সংকলনের সাথে সাথেই এটি প্রায়শই সঠিক হয়। কোনও প্রকার ডিজাইনের অর্থ একটি ডোমেন এবং এর ক্রিয়াকলাপ বোঝা।
জর্জিও

78

দাবি অস্বীকার: আমি টাইপ-প্রেমিকা;)

আপনার প্রশ্নের উত্তর দেওয়া কঠিন: এই ট্রেড অফগুলি কী কী ?

আমি একটি চরম উদাহরণ গ্রহণ করব: হাস্কেল , এটি স্ট্যাটিকালি টাইপ করা আছে। সম্ভবত বিদ্যমানতমগুলির মধ্যে সবচেয়ে শক্তিশালী টাইপ করা একটি ভাষা।

যাইহোক, হাস্কেল জেনেরিক প্রোগ্রামিংকে সমর্থন করে , এই অর্থে যে আপনি এমন কোনও পদ্ধতি লিখেছেন যা কোনও নির্দিষ্ট ধারণার (বা ইন্টারফেস) অনুসারে যে কোনও ধরণের সাথে কাজ করে।

তদ্ব্যতীত, হাস্কেল প্রকার অনুকরণ ব্যবহার করে , যাতে আপনাকে কখনও আপনার ভেরিয়েবলের প্রকারটি ঘোষণা করতে না হয়। সংকলনের সময় এগুলি স্থিতিশীলভাবে গণনা করা হয় যতটা পাইথন ইন্টারপ্রেটার তাদের প্রোগ্রামটি চালনার জন্য গণনা করবে।

আমি দেখতে পেয়েছি যে বেশিরভাগ লোক স্ট্যাটিক টাইপিংয়ের জন্য কঠোর হন, প্রকৃতপক্ষে অন্য কিছু সম্পর্কে অভিযোগ করছিলেন (শব্দভাবাপন্নতা, অন্যর পক্ষে এক প্রকারের পরিবর্তনের ব্যথা), তবে হাস্যেল স্ট্যাটালি টাইপ করার সময় সেগুলির কোনওটিই প্রদর্শন করেন না ...


বংশবৃদ্ধির উদাহরণ:

-- type
factorial :: Integer -> Integer

-- using recursion
factorial 0 = 1
factorial n = n * factorial (n - 1)

অন্তর্নির্মিত সমর্থন ছাড়াও, ব্রিফার পাওয়া শক্ত।

জেনেরিক প্রোগ্রামিংয়ের উদাহরণ:

> reverse "hell­o" -- Strings are list of Char in Haskell
=> "olleh"
> reverse [1, 2, 3, 4, 5]
=> [5,4,3,2,1]

প্রকারের অনুক্রমের উদাহরণ:

> :t rever­se "hell­o"
:: [Char]

যা সহজেই গণনা করা যায়:

  • "hello"একটি তালিকা Char(হিসাবে প্রকাশিত [Char])
  • reverseএকটি প্রকারে প্রয়োগ করা হয় একটি প্রকার [A]ফেরত দেয়[A]

আপনার ব্রাউজারে এটি ব্যবহার করে দেখুন


4
শয়তানের উকিল খেলতে, গতিশীল ভাষার পক্ষে কমপক্ষে একটি বাণিজ্য বন্ধ (কমপক্ষে প্রোটোটাইপ করার সময়) হ'ল টাইপ ডিক্লেয়ারেশনের মতো ইনফার কিছু ইউনিট পরীক্ষার মতো একই উদ্দেশ্যে কাজ করতে পারে, তারা একইভাবে ইন্টারফেসকে আরও শক্তিশালী করতে পারে যেভাবে ইউনিট পরীক্ষাগুলি করে ( যদিও কম ওভারহেড সহ অবশ্যই)। এছাড়াও, জবরদস্তি ছাড়াই স্ট্যাটিকালি টাইপ করা ভাষাগুলি সুরক্ষিত হওয়ার জন্য স্পষ্টত ধরণের কাস্টিংয়ের প্রয়োজন হয় (বিশেষত যখন কোনও প্রকার যথেষ্ট জেনারিক না হয়), যা নির্গমনতা থেকে বিরত থাকতে পারে।
টিআর

7
আমি হাস্কেলকে চিনি না তবে +1 এর জন্য "আসলে অন্যরকম কিছু নিয়ে অভিযোগ করছিল (শব্দটির কথা, অন্যর পক্ষে এক প্রকারের বদলে যাওয়ার ব্যথা)"
নিকোল

1
@ আইদান: হাস্কেল একটি বিবর্তিত ভাষা। হাস্কেল 98 হাস্কেল ১.৪ এর তুলনায় একটি উন্নতি ছিল; হাস্কেল 2010 এর চেয়েও উন্নতি হয়েছিল। ইতিমধ্যে, এটি লক্ষণীয় যে তার জীবনের বেশিরভাগ ক্ষেত্রে, হাস্কেলের রেইসন ডি'ট্রে ছিল টাইপ সিস্টেমগুলি অন্বেষণে সহায়তা করা ; মাল্টি-প্যারামিটার ধরণের শ্রেণিগুলি এটির একটি উদাহরণ যেখানে এটি একটি দরকারী ধরণের সিস্টেম এক্সটেনশানকে ব্যাখ্যা করতে সফল হয়েছিল। (উল্টো দিকে, কার্যনির্বাহী নির্ভরতাগুলি একটি শেষ প্রান্তের কিছু হতে পারে))
গাইকোসর

4
@ ম্যাথিউইউ: ডাব্লুআরটি "সম্ভবত একটি খুব শক্তিশালী টাইপ করা ভাষা বিদ্যমান যা বাস্তবে বিদ্যমান।", আমি আপনার হাস্কেল দেখব এবং আপনাকে আগদা এবং কোক বাড়িয়ে তুলব । (আমি এটি প্রদান করব যে এটি সম্ভবত সবচেয়ে দৃ strongly়ভাবে টাইপ করা প্রায়োগিক উপযোগী ভাষা))
গাইকোসর

1
@ ম্যাথিউ: প্রুফ অ্যাসিস্ট্যান্টগুলি কারি-হাওয়ার্ডের চিঠিপত্রের প্রত্যক্ষ প্রয়োগ, সুতরাং তারা হার্ট প্রোগ্রামিং ভাষাতে (যদিও সীমাবদ্ধ স্ট্যান্ডার্ড লাইব্রেরি সহ) are তারা নির্ভরশীল ধরণের গবেষণার শীর্ষস্থানীয় কারণ "" প্রপোজেশনস প্রপোজেশনস "চিঠিপত্রের ভাল ব্যবহার করার জন্য আপনার নির্ভরশীল প্রকারের প্রয়োজন।
গীকোসৌর

37

আমি স্ট্যাটিক্যালি টাইপযুক্ত এবং গতিশীল টাইপ করা উভয় ভাষা পছন্দ করি। আমার কাছে টাইপ সুরক্ষার দুটি বৃহত্তম সুবিধা হ'ল:

1) আপনি প্রায়শই কোনও ফাংশন তার ধরণের স্বাক্ষর থেকে খাঁটিভাবে কী করতে পারেন তা হ্রাস করতে পারেন (এটি বিশেষত হাস্কেলের মতো কার্যকরী ভাষায় সত্য)।

2) আপনি যখন উল্লেখযোগ্য চুল্লিটি করেন তখন সংকলক স্বয়ংক্রিয়ভাবে আপনাকে সবকিছু চালিয়ে যাওয়ার জন্য আপনাকে যা করতে হবে তা সব বলে দেয়। আমি যখন সি ++ তে কিছু রিফ্যাক্টর করি তখন আমার পদ্ধতিটি প্রায়শই সহজভাবে একটি হয়) আমি জানি যে অংশটি আমি পরিবর্তন করতে চাই তা পরিবর্তন করুন, তারপর খ) প্রতিটি সংকলনের ত্রুটিটি ঠিক করুন।


আমার সাথে ঠিক একই রকম, এবং যখনই আমি কোনও কিছুর সংশোধন করতে চাই (আমি বেশিরভাগই গোলং / টাইপস্ক্রিপ্ট / জাভা ব্যবহার করি), হ্যাঁ, এই 2 টি পদক্ষেপ যার যার প্রয়োজন হবে। একটি অংশ পরিবর্তন করুন, তারপরে সমস্ত সংকলন ত্রুটি ঠিক করুন :) নিখুঁত উত্তর।
নিশ্চল গৌতম

29

ব্যক্তিগতভাবে, আমি খুঁজে পাই যে এই ধরণের সুরক্ষা আমার বর্তমান চাকরিতে আরও দ্রুত বিকাশ করতে সহায়তা করে। সংকলকটি আমার টাইপ করার সাথে সাথে আমার জন্য প্রচুর পরিমাণে বিচক্ষণতা যাচাই করে থাকে, আমি যে ব্যবসায়িক যুক্তি প্রয়োগ করছি তার প্রতি আমাকে আরও মনোনিবেশ করার অনুমতি দেয়।

আমার পক্ষে নীচের অংশটি হ'ল যদিও আমি কিছুটা নমনীয়তা হারাচ্ছি, তবে আমি কিছুটা সময় অর্জন করি যা অন্যথায় টাইপ সমস্যাগুলি ট্র্যাক করে ব্যয় করতে হবে।


13

বিতর্ক পার্শ্ববর্তী দৃঢ় মতামত অনেকটা আছে কিন্তু সম্ভবত এই আসলে মতামত একটি ব্যাপার নয়, এটা একটি ব্যাপার ঘটনা । সুতরাং আমাদের অভিজ্ঞতামূলক গবেষণার দিকে নজর দেওয়া উচিত । এবং এ থেকে প্রমাণ স্পষ্ট:

হ্যাঁ , স্ট্যাটিক টাইপিং ট্রেড-অফের জন্য মূল্যবান - এবং কেবলমাত্র কিছুটা নয়, তবে বাস্তবে যথেষ্ট পরিমাণে । প্রকৃতপক্ষে, নিখুঁত প্রমাণগুলি দেখায় যে স্থির টাইপিং কমপক্ষে 15% দ্বারা কোডে বাগের সংখ্যা হ্রাস করতে পারে (এবং এটি একটি কম অনুমান, প্রকৃত শতাংশটি প্রায় অবশ্যই আরও বড়)। এটি একটি মর্মান্তিকভাবে উচ্চ সংখ্যা: আমি মনে করি যে স্থির টাইপিংয়ের বেশিরভাগ সমর্থকরাও ভাবেন নি যে এটি এতই তীব্র পার্থক্য করেছে made

এটি বিবেচনা করুন: যদি কেউ আপনাকে বলে যে আপনার প্রকল্পের বাগগুলি রাতারাতি 15% হ্রাস করার একটি সহজ উপায় ছিল, তবে এটি কোনও অ-বুদ্ধিমান হওয়া উচিত। 1 এটি প্রায় প্রবাদ বাক্য রূপালী বুলেট।

প্রবন্ধটি টাইপ করতে বা টাইপ করতে হবে না: কাগজটিতে জাভাস্ক্রিপ্টে সনাক্তকরণযোগ্য বাগগুলি জাং গাও, ক্রিশ্চিয়ান বার্ড এবং আর্ল টি। বার দ্বারা প্রমান করা হয়েছে । আমি সবাইকে এটি পড়তে উত্সাহিত করি, এটি একটি লিখিত কাগজ যা অনুকরণীয় গবেষণা উপস্থাপন করে।

লেখকরা কতটা দৃously়তার সাথে তাদের বিশ্লেষণ সম্পাদন করেছেন তা সংক্ষিপ্তভাবে সংক্ষিপ্ত করে বলা খুব কঠিন তবে এখানে একটি (খুব রুক্ষ) রূপরেখা দেওয়া হয়েছে:

টাইপস্ক্রিপ্ট এবং ফ্লো জাভাস্ক্রিপ্টের উপর ভিত্তি করে দুটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যা অন্যথায় সামঞ্জস্যপূর্ণ থাকার পরেও টাইপ হিন্টিং এবং স্ট্যাটিক টাইপ চেকিং যুক্ত করে। এটি প্রকারভেদে বিদ্যমান কোডকে বাড়ানোর অনুমতি দেয় এবং তারপরে এটি পরীক্ষা করে টাইপ করে।

গবেষকরা গিটহাব থেকে জাভাস্ক্রিপ্টে লিখিত ওপেন সোর্স প্রকল্পগুলি সংগ্রহ করেছেন, সমাধান করা বাগের প্রতিবেদনগুলি দেখেছেন এবং প্রতিবেদনিত প্রতিটি বাগকে কোডের টুকরোতে হ্রাস করার চেষ্টা করেছেন যা টাইপস্ক্রিপ্ট বা প্রবাহের স্ট্যাটিক ধরণের পরীক্ষক দ্বারা ধরা পড়বে। এটি তাদের স্থিতিশীল টাইপিং ব্যবহার করে বাগের শতাংশের কম পরিমাণ নির্ধারণ করতে পারে।

গবেষকরা তাদের বিশ্লেষণে কোনও টাইপযুক্ত সম্পর্কিত বাগটিকে প্রকারের সাথে সম্পর্কিত বলে বিবেচনা করবেন না তা নিশ্চিত করার জন্য কঠোর সতর্কতা অবলম্বন করেছিলেন। 2

বিগত অধ্যয়নের তুলনায় এই নতুন গবেষণার বিশেষ শক্তি রয়েছে:

  • একটি নেই সরাসরি স্ট্যাটিক তুলনা বনাম গতিশীল টাইপিং, কয়েক (যদি থাকে) বিভ্রান্তি কারণের সঙ্গে, যেহেতু জাভাস্ক্রিপ্ট এবং টাইপ করা বিষয় / ফ্লো মধ্যে একমাত্র পার্থক্য টাইপ করছে।
  • তারা টাইপস্ক্রিপ্ট এবং প্রবাহ উভয়ই (যেমন বিভিন্ন ধরণের সিস্টেম) পরীক্ষা করে এবং বিভিন্ন লোককে বাগগুলি ঠিক করার জন্য (ম্যানুয়াল) প্রকারের টীকাটি পুনরুত্পাদন করে একাধিক মাত্রা জুড়ে প্রতিলিপি সম্পাদন করে। এবং তারা বিভিন্ন প্রকল্পের কোড সংখ্যক সংখ্যক জুড়ে এটি সম্পাদন করে।
  • কাগজ স্থিরযোগ্য বাগের উপর স্ট্যাটিক টাইপিংয়ের সরাসরি প্রভাবের পরিমাপ করে (আরও কিছু অস্পষ্ট মানের চেয়ে)।
  • লেখকরা কী পরিমাপ করবেন এবং কীভাবে আপ-ফ্রন্টের একটি কঠোর মডেল নির্ধারণ করেন। তদুপরি, তাদের বিবরণ অবিশ্বাস্যভাবে পরিষ্কার এবং ত্রুটিগুলির জন্য বিশ্লেষণ করা সহজ করে তোলে (যখন কোনও গবেষণামূলক কাগজ আক্রমণগুলির জন্য নিজেকে খোলে তখন সর্বদা উত্তম: যদি কোনও আক্রমণগুলি তার যুক্তিগুলিকে আটকানো পরিচালনা না করে তবে তা আরও শক্তিশালী হয়)। 3
  • তারা যথাযথ শক্তি বিশ্লেষণ করে যাতে তাদের নমুনার আকার পর্যাপ্ত হয় এবং তাদের পরবর্তী পরিসংখ্যান বিশ্লেষণটি বায়ুচঞ্চল।
  • বিস্ময়কর ব্যাখ্যাগুলি বাদ দিতে তারা অত্যধিক রক্ষণশীল, এবং কেবল একটি চলমান অংশ পরিমাপ করে। তদুপরি, তারা প্রকারগুলি অন্তর্ভুক্ত করে তাত্ক্ষণিকভাবে স্থিরযোগ্য বাগগুলিতে তাদের বিশ্লেষণকে সীমাবদ্ধ করে এবং টাইপিংয়ের সাথে সামঞ্জস্য করার জন্য আরও উন্নত রিফ্যাক্টরিংয়ের প্রয়োজন হতে পারে এমন কোনও কিছু বাদ দেয়। সুতরাং বাস্তবে, প্রভাবটি প্রশংসনীয়ভাবে অনেক বড়, তবে তারা যা বলেছিল তার চেয়ে কোনও ছোট নয়।
  • এবং পরিশেষে, তারা একটি সামান্য প্রভাব কিন্তু একটি বিস্ময়কর পার্থক্য খুঁজে না। তাদের অত্যধিক রক্ষণশীল প্রক্রিয়া সত্ত্বেও, এমনকি 95% আত্মবিশ্বাসের ব্যবধানের স্বল্প প্রান্তে তারা দেখতে পান যে কমপক্ষে 10% বাগ রয়েছে যা খুব কম সংখ্যক প্রকারের চেকগুলি দিয়ে কেবল অদৃশ্য হয়ে যায়।

কাগজটিতে এখনও কেউ আবিষ্কার করেনি এমন মৌলিক ত্রুটি না থাকলে কাগজটি প্রায় কোনও ব্যয়েই স্থির টাইপিংয়ের বৃহত সুবিধা দেখায়। 4


একটি noteতিহাসিক নোটে, প্রোগ্রামিংয়ে শাখাগুলি টাইপ করার বিষয়ে গবেষণার এক জোরালো শুরু হয়েছিল কারণ দীর্ঘদিন ধরে, প্রমাণগুলি মোটেই পরিষ্কার ছিল না । এর কারণ হ'ল স্থির বনাম গতিশীল টাইপিংয়ের প্রভাব পরীক্ষা করার জন্য নিয়মতান্ত্রিক পরীক্ষা-নিরীক্ষা করা সহজ নয়: একটি পদ্ধতিগত পরীক্ষা অবশ্যই আমাদের তদন্তের প্রভাবকে আলাদা করতে হবে। এবং দুর্ভাগ্যক্রমে আমরা টাইপিং শৃঙ্খলার প্রভাবটি আলাদা করতে পারি না, কারণ এটি প্রোগ্রামিং ভাষার সাথে আবদ্ধ tied

বাস্তবে এমন কোনো ছিলেন প্রোগ্রামিং ভাষা (সঙ্গে যেমন ভিবি বিভিন্ন উপভাষা উভয় স্ট্যাটিক এবং ডাইনামিক টাইপিং অনুমতি Option Strict Onবা Off, বা স্ট্যাটিক্যালি পাতার মর্মর টাইপ করা)। যাইহোক, এগুলি সরাসরি তুলনার জন্য উপযুক্ত ছিল না, সর্বাধিক গুরুত্বপূর্ণ কারণ কোনও বিদ্যমান, পর্যাপ্ত বৃহত কোড বেস ছিল না যা সরাসরি তুলনা করতে দেয়। সর্বোপরি আমরা তাদের "পরীক্ষাগার সেটিংসে" তুলনা করতে পারি, যেখানে পরীক্ষার বিষয়গুলি এলোমেলোভাবে ভাষার কোনও স্ট্যাটিক বা গতিশীল টাইপ করা রূপগুলিতে কোনও কাজ সমাধান করে solve

দুর্ভাগ্যক্রমে এই কৃত্রিম প্রোগ্রামিং অ্যাসাইনমেন্টগুলি বাস্তব-জগতের ব্যবহারের পক্ষে মডেল দেয় না। বিশেষত, তাদের মধ্যে অনেকগুলি স্কোপ ছোট এবং একটি সংজ্ঞায়িত সমস্যা সমাধান করুন যা পাঠ্যের অর্ধেক পৃষ্ঠায় সংক্ষিপ্ত করা যেতে পারে।

ভাগ্যক্রমে এটি অতীতে ছিল, কারণ টাইপস্ক্রিপ্ট, ফ্লো এবং জাভাস্ক্রিপ্ট প্রকৃত স্ট্যাটিক টাইপিং ব্যতীত একই ভাষা এবং কারণ এখানে কোড এবং বাগগুলির থেকে একটি নমুনা দেওয়ার জন্য একটি বিস্তৃত বাস্তব-বিশ্বের ডেটাসেট রয়েছে sample


1 মূল কাগজ থেকে একটি উদ্ধৃতি দ্বারা অনুপ্রাণিত।

2 আমি এতে পুরোপুরি সন্তুষ্ট নই: স্ট্যাটিক্যালি টাইপ করা ভাষার অন্যতম প্রধান শক্তি হ'ল স্থিরভাবে টাইপ-সম্পর্কযুক্ত সমস্যাগুলিকে স্ট্যাটিকালি টাইপ-চেক করা যায় এমন পদ্ধতিতে অঙ্কিত করা যায়। এটি অনেক যুক্তি ত্রুটিগুলিকে টাইপ ত্রুটিতে রূপান্তরিত করে, যা স্থির টাইপের দ্বারা ধরা পড়তে পারে এমন ব্যাগের হারকে মারাত্মকভাবে বাড়ায়। প্রকৃতপক্ষে, কাগজটি মোটামুটি টাইপ-সম্পর্কযুক্ত বাগগুলিকে শ্রেণিবদ্ধ করে এবং আমি দাবি করি যে বাস্তবে এগুলির একটি বড় শতাংশ স্থির টাইপিংয়ের দ্বারা ধরা যেতে পারে।

3 আমি বিশ্লেষণে শৃঙ্খলাবদ্ধ ত্রুটিগুলি খুঁজে পাওয়ার চেষ্টা করার জন্য যে কাউকে, বিশেষত গতিশীল টাইপিংয়ের প্রবক্তাদের আমন্ত্রণ জানাচ্ছি। আমি মনে করি না অনেকগুলি আছে (যদি থাকে) এবং আমি বিশ্বাস করি যে কোনও সম্ভাব্য ত্রুটি বস্তুগতভাবে ফলাফলকে পরিবর্তন করবে না।

4 আমি সন্দেহ করি যে বাস্তব, বৃহত আকারের প্রকল্পগুলিতে স্ট্যাটিক টাইপিংয়ের প্রকৃত ব্যয় অস্তিত্বহীন, যেহেতু এটি পরে আর্কিটেকচারের একটি প্রাকৃতিক অঙ্গ হয়ে যায় এবং এমনকি পরিকল্পনাটি আরও সরল করে তুলতে পারে । স্থির ধরণের ত্রুটিগুলি স্থির করতে সময় লাগে তবে পরে অনুসন্ধান করা ত্রুটির চেয়ে অনেক কম। এটি ব্যাপকভাবে গবেষণামূলকভাবে অধ্যয়ন করা হয়েছে এবং কয়েক দশক ধরে এটি পরিচিত (উদাহরণস্বরূপ কোড সম্পূর্ণ )।


3
আমি জানি এটি এই প্রশ্নের দেরী উত্তর তবে আমি বিশ্বাস করি যে নতুন প্রমাণ (যা আমি এখানে ব্যাখ্যা করি) সম্পূর্ণ স্ট্যাটিক-বনাম-গতিশীল বিতর্ককে পরিবর্তন করে।
কনরাড রুডলফ

2
এটি অবশ্যই আকর্ষণীয়, তবে আমি আশ্চর্য হয়েছি এটি জাভাস্ক্রিপ্টের নির্দিষ্ট টাইপ সিস্টেমের সাথে কতটা সম্পর্কিত। পাইথনের (বিশেষত পাইথন 3) টাইপ সিস্টেমটি অনেক কম প্রকট রূপান্তর সহ আরও কঠোর।
পিটার গ্রিন

@ পিটারগ্রিন হ্যাঁ, এটি কোনও সন্দেহ ছাড়াই সত্য। সম্ভবত আমরা ভাগ্যবান এবং পাইথনের ধরণের ইঙ্গিতগুলি রাস্তায় একই রকম বিশ্লেষণের দিকে নিয়ে যাবে (যদিও আমি এটি সন্দেহ করি, যেহেতু PEP484 এবং PEP526 এ প্রকাশিত উদ্দেশ্য স্থির টাইপিং বাস্তবায়ন না করা)।
কনরাড রুডল্ফ

1
কেবল বিমূর্তটি পড়ে আমি ইতিমধ্যে বলতে পারি পদ্ধতিটি মূলত ত্রুটিযুক্ত। আপনি একটি শৃঙ্খলা ব্যবহার করে লিখিত কোডবেস ব্যবহার করতে পারবেন না এবং তারপরে সম্পূর্ণ ভিন্ন শৃঙ্খলে যুক্তি ন্যায়সঙ্গত করার জন্য কেবল প্রকারগুলি যুক্ত করুন। স্ট্যাটিক শৃঙ্খলা হিসাবে লিখিত কোডটি গতিশীল শৃঙ্খলার চেয়ে মৌলিকভাবে খুব আলাদা দেখায়, আপনার জাভাতে পাইথন না লেখার মতোই পাইথনে জাভা লেখা উচিত নয়। এমনকি টাইপসক্রিপ্ট এবং জাভাস্ক্রিপ্ট মৌলিকভাবে পৃথক ভাষা, অতিমাত্রায় মিল থাকলেও are
মিথ্যা রায়ান

2
@ লিআরয়ান যদি বিশ্লেষণকে অত্যধিক রক্ষণশীল করে থাকে তবে তা আমার বিবরণে এবং অন্য কোথাও উল্লিখিত হয়েছে। এটি কোনওভাবেই বিশ্লেষণকে বাতিল করে দেয়। আপনার 1% প্রাক্কলনটি হ'ল সত্যই, হাস্যকর। এটি পুরোপুরি বন্ধ, আপনার স্বজ্ঞাততা আপনাকে হতাশ করে দিচ্ছে। তেমনি, স্ট্যাটিক টাইপিংয়ের সাথে সম্পর্কিত সমস্যাগুলির আপনার বৈশিষ্ট্য গতিশীল টাইপিংয়ের একজন অনুশীলনের সাধারণ, যাকে আধুনিক স্ট্যাটিক টাইপিংয়ের (যেমন কেবল জাভা নয়) খুব কম অভিজ্ঞতা ছিল।
কনরাড রুডল্ফ

12

প্রকারের সুরক্ষা কি বিকাশের গতি এবং নমনীয়তার জন্য হিট?

সুতরাং সত্যিই এটি আপনি যা করছেন তা নেমে আসে। আপনি যদি প্রোগ্রামিংয়ে বলছেন, বিমানগুলির জন্য ব্যাকআপ সিস্টেমগুলি, টাইপ সুরক্ষা সম্ভবত যাওয়ার উপায়।

গতিশীল ভাষা বনাম স্ট্যাটিক ল্যাঙ্গুয়েজ প্রোগ্রামিং আসলে দুটি ভিন্ন প্রাণী। তারা উভয়ের একে অপরের থেকে মৌলিকভাবে পৃথক পদ্ধতির প্রয়োজন। আপনি বেশিরভাগ স্থিতিশীল এবং গতিশীল মধ্যে পদ্ধতির পোর্ট করতে পারেন, তবে আপনি অন্যটির সুবিধা হারাবেন।

এটা সত্যিই একটি মানসিকতা। এক অন্য চেয়ে ভাল? এটি সত্যই নির্ভর করে আপনি কে এবং আপনি কীভাবে চিন্তা করেন। যাদের সাথে আমি কাজ করি তাদের বেশিরভাগই কখনই গতিশীল ভাষার স্পর্শ করতে পারে না যদি তাদের না হয়, কারণ তারা মনে করে যে এখানে ত্রুটির খুব বেশি জায়গা রয়েছে। তারা কি এই ভেবে ভুল করছেন? না, অবশ্যই তা নয়, তবে এর অর্থ এই যে তারা বুঝতে পেরেছেন যে তাদের কোডিং শৈলীর প্রয়োগের তাদের পদ্ধতির গতিশীল পরিবেশে কাজ করবে না। আমি অন্যান্য ব্যবহারকারীদের সাথে ব্যবহারকারীর গোষ্ঠীতে যাচ্ছি তারা হুবহু বিপরীত। তারা স্ট্যাটিক টাইপিংকে খুব জটিল মনে করে, কারণ এটি নির্দিষ্ট ধরণের সমস্যা সমাধানে তাদের পদ্ধতির সীমাবদ্ধ করে।

আমি সত্যি বলতে পারি, আমি জাভাস্ক্রিপ্ট এবং সি # এর মধ্যে অনেকটা লাফাই। এখন, উভয় ভাষায় জানা এবং কাজ করা কিছুটা অন্যকে প্রভাবিত করে, তবে সত্যিকার অর্থে, প্রতিটি ক্ষেত্রে আমি যে কোডটি লিখি তা অন্যটির থেকে সম্পূর্ণ আলাদা দেখায়। তাদের একটি পৃথক পদ্ধতির প্রয়োজন, কারণ তারা মূলত পৃথক। আমি যা পেয়েছি তা হ'ল যদি আপনি নিজেকে ভাবছেন, "ম্যান এটি এক্স ভাষায় এটি করা এতই কঠিন," আপনার পদ্ধতির সম্ভবত কিছুটা দূরে। এখানে একটি উদাহরণ দেওয়া আছে, লোকেরা "পাইথোনিক" জিনিসগুলি করার পদ্ধতি সম্পর্কে কথা বলে। এর অর্থ হ'ল সমস্যাটি আরও সহজ করার জন্য পাইথন ভাষা কাজ করার একটি উপায় রয়েছে। এটি অন্য কোনও উপায়ে করা সাধারণত কঠোর এবং আরও জটিল। কোনও ভাষা কীভাবে কাজ করে তা সত্যিই এটি আপনার পক্ষে কাজ করে তা জানার কুঁচকে উঠতে হবে আপনাকে। এটা '


আমি কিছুক্ষণ ধরে ছাপ ফেলেছি যে প্রোগ্রামিং ভাষাগুলি কেবল আপনার কোডের এমন বৈশিষ্ট্যগুলি লুকিয়ে রাখতে হবে যা আপনাকে কখনও ভাবার দরকার নেই। এটি জাভা জাতীয় উচ্চ স্তরের জন্য সমস্ত উপায়ে মেশিন কোড পাওয়ার জন্য ধারণ করে কারণ বাস্তবায়নের নিম্ন স্তরের এমনটি যা আপনাকে মূলত কখনই মোকাবেলা করার প্রয়োজন হয় না। এটি বস্তুর ধরণের ক্ষেত্রে নয়। আমার মতে ডায়নামিক-টাইপিং কেবল প্রোগ্রামিংকে আরও শক্ত করে তোলে কারণ এটি আপনাকে নিজেকে আটকাতে হবে এমন একটি সম্পূর্ণ শ্রেণীর ত্রুটির পরিচয় দেয়।
MCllorf

7

সম্প্রতি একটি অনুরূপ প্রশ্ন করা হয়েছিল: ওয়েবসাইটগুলির জন্য ডায়নামিক বনাম স্ট্যাটিকালি টাইপ করা ভাষা

আমার উত্তরের মূলটি পুনরুদ্ধার করতে:

সিস্টেমগুলি বড় হওয়ার সাথে সাথে, স্থিতিযুক্ত টাইপ করা ভাষাগুলি উপাদান স্তরের দৃust়তা এবং এটি সিস্টেমের স্তরে নমনীয়তা নিশ্চিত করে।

হ্যাঁ, জাভা কঠোরভাবে টাইপ করা হয়েছে এবং হ্যাঁ, জাভা চুষছে (কোনও অপরাধ নয় it's এটি মারাত্মক।
তবে এ থেকে অনুমান করা যে, কঠোর টাইপিং টাইপ করা কেবল একটি মিথ্যাচার। এটি পিএইচপি দেখানোর মতো এবং গতিশীল টাইপিং আনফারিংয়ের মতো (আবার কোনও অপরাধ নয় slowly এটি ধীরে ধীরে উন্নতি হচ্ছে, আমি আপনাকে এটি দিই)।

ব্যক্তিগতভাবে, আমি আমার বেশিরভাগ বিকাশ হ্যাক্সে করি , যার স্ট্যাটিক টাইপ সিস্টেম রয়েছে। এটি জাভা-এর চেয়ে তাৎপর্যপূর্ণরূপে আরও উদ্বেগজনক নয় এবং টাইপ ইনফারেন্সের কারণে এটির জন্য খুব কম পরিশ্রমের প্রয়োজনও নয়, এটি alচ্ছিকও। এটি যদি কখনও আপনার পথে আসে তবে আপনি কেবল এটিকে বাইপাস করুন।

প্রকার নিরাপত্তা একটি বৈশিষ্ট্য (এই কিছু অনেক কল্পনানুসারে উচ্চ স্তরের ভাষা ডান পাবেন না হয়) জন্য আপনাকে সাহায্য করতে পায়ে নিজেকে শুটিং প্রতিরোধ
এবং যে কোনও সফলফুল সম্পর্কে গতিসম্পন্ন টাইপ করা ভাষা কেবলমাত্র আরও ভাল হতে পারে, যদি আপনার বিকল্পটি থাকে তবে আপনার কোড টাইপটি ইচ্ছামত চেক করা হয়েছিল।
উদাহরণস্বরূপ, আমি অবশ্যই রুবির পরীক্ষা-নিরীক্ষা উপভোগ করেছি, তবে এটি বেশিরভাগ কারণেই ছিল যে রুবি সম্পূর্ণরূপে অবলম্বনযুক্ত, যা একটি সংকলন টাইম সিস্টেমের উপস্থিতিতে সম্পূর্ণরূপে অর্থেগোনাল।

আমি মনে করি, দাবিটি, যে স্ট্যাটিক টাইপ সিস্টেমগুলি অবসন্ন হয় কেবল ভাল স্ট্যাটিক টাইপ সিস্টেমগুলির জ্ঞানের অভাবের ভিত্তিতে। এখানে বেশ কয়েকটি ভাষা রয়েছে যা এটি সঠিকভাবে করে, হ্যাক্স সেগুলির মধ্যে একটি এবং যুক্তিযুক্তভাবে সে ক্ষেত্রে সেরাও নয়।

হ্যাক্স কোড উদাহরণ:

class Car {
    public function new();
    public function wroom() trace('wroooooooom!')
}
class Duck {
    public function new();
    public function quack(at) trace('quackquack, ' + at + '!')
}

function letQuack(o) o.quack();
letQuack(new Car());
letQuack(new Duck());

এটি একটি সংকলন সময় ত্রুটি উত্পাদন করবে:

Car should be { quack : Void -> Unknown<0> }
Car has no field quack
For function argument 'o'
Duck should be { quack : Void -> Unknown<0> }
Invalid type for field quack :
to : String -> Void should be Void -> Unknown<0>
For function argument 'o'

আপনি সত্যিই দাবি করতে পারবেন না আমাকে প্রকারের সুরক্ষায় অনেক প্রচেষ্টা করতে হয়েছিল।

এই বলে যে আপনার টাইপ সুরক্ষার দরকার নেই, কারণ আপনার পরীক্ষা রয়েছে আরও বোকা। লেখার পরীক্ষা বোরিং এবং পুনরাবৃত্তিযোগ্য। এবং আমি সত্যিই একটি পরীক্ষা লিখতে চাই না, কেবল এটি অনুসন্ধান করতে যে কারের একটি দৃষ্টান্ত কাঁপবে না এবং একটি হাঁসের কারও কারও কাছে ঝাঁকুনির প্রয়োজন নেই।

দিনের শেষে, আপনি দেখতে পাবেন, ওভারহেড প্রকারের সুরক্ষা আপনাকে যতটা মূল্যায়িত করেছিল, তা অবশেষে তা গোপন করে দেওয়া হয় (এমনকি জাভাতেও - যদিও তা খুব শীঘ্রই নয়)।


পাইথন নথিতে ডকুমেন্টস এবং পরে যাচাইয়ের উত্স হিসাবে কেবল repl / শেল থেকে অনুলিপি করা এবং আটকানো হয়। docs.python.org/3/library/doctest.html
aoeu256

5

যে কারণেই হোক না কেন, আমি প্রায়শই আর কোনও বস্তুর ধরণের সাথে সম্পর্কিত ত্রুটি করি না। সি # এর মতো ভাষাগুলিতে আমি রানটাইম ক্যাসেট সম্পর্কিত ত্রুটিগুলি করার চেয়ে বেশি সংখ্যার চেয়ে কম কম্পাইলার-শনাক্তযোগ্য ধরণের সুরক্ষা ত্রুটি করতে পারি, যা আমি মঞ্জুর করি, সাধারণত মাঝে মাঝে স্থিতিশীলতার স্থিরতার আশপাশে কাজ করার প্রয়োজন হয় caused টাইপ করা ভাষা আমি যখন রুবি লিখি, কোডটি কোনও জিনিসের ধরণ এবং একটি আরএইপিএল এর উপলব্ধতার পক্ষে খুব দৃ pretty়তার সাথে ইঙ্গিত দেয় means এর অর্থ হ'ল আমি ইতিমধ্যে পরীক্ষামূলকভাবে যাচাই করেছিলাম যে পছন্দসই পদ্ধতি / বৈশিষ্ট্যগুলি বিদ্যমান আছে, বা আমার একটি ইউনিট পরীক্ষা হবে মূলত একই জিনিস, তাই আমি খুব কমই রুবিতে টাইপ সুরক্ষা সমস্যা মধ্যে চালানো।

তবে এটি স্ট্যাটিকালি টাইপ করা সিস্টেমগুলি তার চেয়ে ভাল আর হতে পারে না তা বলার অপেক্ষা রাখে না।

স্ট্যাটিকালি টাইপ করা ভাষাগুলির মধ্যে, টাইপ সিস্টেমটি আসলে অনেক বেশি গুরুত্বপূর্ণ। উদাহরণস্বরূপ, কার্যকরী ভাষায় কিছু মোনাডের মতো কিছু (টাইপ <সোমে>: = হ্যাঁ এক্স | না), আপনি সংকলন-সময় চেকগুলি অর্জন করেন যা মূলত বেশিরভাগ টাইপ সিস্টেমে ড্রেড নালরফেরেন্সএক্সেপশনকে প্রতিরোধ করে; যখন প্যাটার্ন ম্যাচিং কোডটি চালিত হয়, আপনি সঙ্কলনের সময় ত্রুটিগুলি পেয়ে যাবেন যে আপনি নাল শর্তটি হ্যান্ডেল করতে ব্যর্থ হয়েছেন (যদি আপনি এই পদ্ধতিটি প্রকারটি ঘোষণা করার জন্য ব্যবহার করেন)। আপনি যখন F # তে পাইপলাইন অপারেটরের মতো জিনিস ব্যবহার করেন আপনি একই ধরণের ত্রুটিও হ্রাস করেন।

স্ট্যাটিক টাইপিংয়ের হিন্ডলি – মিলার traditionতিহ্যে, আপনি এমন কিছু জিনিস তৈরি করতে পারেন যা আপনাকে গ্যারান্টি থেকে অনেক বেশি দেয় যে কোনও ধরণের ইন্টারফেস এক্সকে সমর্থন করে বলে দাবি করে, এবং একবার আপনি এই জিনিসগুলি পেয়ে গেলে, আমি বলতে পারি যে স্ট্যাটিক্যালি টাইপ করা সিস্টেমটি অনেক হয়ে যায় অধীক মূল্যবান.

যখন এটি কোনও বিকল্প নয়, ডিজিটাল বাই কন্ট্রাক্ট এক্সটেনশানগুলি সি # তে স্ট্যাটিক টাইপ সিস্টেমের মান বাড়ানোর জন্য আরও একটি ব্যবস্থার যোগ করতে পারে তবে তাদের এখনও কার্যকরী দৃষ্টান্তগুলির তুলনায় আরও শৃঙ্খলার প্রয়োজন।


5

এটা নির্ভর করে.

মানুষের ব্যর্থতা মোড প্রায়শই পরিসংখ্যানগত হয়। শক্তিশালী ধরণের চেকিং কিছু নির্দিষ্ট ধরণের মানব ব্যর্থতার সম্ভাবনা হ্রাস করে (বগী কোড তৈরি করে)। তবে কেবলমাত্র আপনি ব্যর্থ হতে পারার অর্থ সর্বদা আপনি করবেন না (মরফি অ-প্রতিরোধ না করা)।

সম্ভাব্য ব্যর্থতার প্রতিকূলতার মধ্যে এই হ্রাস কি মূল্য নির্ভর করে।

আপনি যদি পারমাণবিক বিদ্যুৎ কেন্দ্র বা এটিসি সিস্টেমের জন্য কোড লিখছেন তবে যে কোনও মানব ব্যর্থতা মোড হ্রাস অত্যন্ত গুরুত্বপূর্ণ হতে পারে । আপনি যদি এমন কোনও ওয়েবসাইট ধারণার দ্রুত প্রোটোটাইপ করছেন যার কোনও নির্দিষ্ট ধারণা নেই এবং শূন্যতার ব্যর্থতার পরিণতি রয়েছে, তবে ব্যর্থতা মোড বা সম্ভাবনা হ্রাস আপনাকে কোনও কিছু কিনতে পারে বা নাও পারে, তবে আপনার উন্নয়নের সময় ব্যয় করতে পারে (আরও কীস্ট্রোক ইত্যাদি), এবং মস্তিষ্কের কোষগুলিতে প্রয়োজনীয় প্রকারের গুলি মুখস্থ করে বিভ্রান্ত করা।


3
আপনার দ্রুত প্রোটোটাইপিংয়ের দৃশ্যটি মার্কিন নৌবাহিনীর একটি গবেষণা সম্পর্কে পল হুডাকের গবেষণাপত্রে ভুল হওয়ার ইঙ্গিত দেওয়া হয়েছে যার জন্য বিভিন্ন ভাষায় একটি এজিআইএস-জাতীয় সিমুলেশন বিকাশ করা দরকার, যার মধ্যে একটি হাস্কেল ছিল। এটি আপনার প্রায় সমস্ত মানদণ্ড পূরণ করে: এটি ছিল দ্রুত প্রোটোটাইপিং, যেখানে প্রয়োজনীয় সংজ্ঞা দেওয়া হয়েছিল এবং ব্যর্থতার ব্যয়টি শূন্যের কাছাকাছি ছিল (এটি একটি অত্যন্ত অনানুষ্ঠানিক পরীক্ষা) experiment হাস্কেল ইভটি বিভাগে বিজয়ী হয়ে উঠেছিলেন: বিকাশের সময়, প্রয়োজনীয়তা অতিক্রম করে, কম এলওসি প্রয়োজন, এবং সমস্ত প্রতিযোগীদের মধ্যে একমাত্র কাজের উদাহরণ তৈরি করে !
আন্দ্রেস এফ।

2
কাগজ: হাস্কেল বনাম ..., সফটওয়্যার প্রোটোটাইপিং প্রোডাকটিভিটির একটি পরীক্ষা - পল হুডাক এবং মার্ক পি। জোন্স । এটি এআরপিএ এবং ইউএস নেভি দ্বারা অর্ডার করা একটি পরীক্ষার ফলাফল বর্ণনা করে।
অ্যান্ড্রেস এফ।

বিজয়ী রিলেশনাল লিস্প ছিল না? ম্যান, আমি আশা করি যে শেনের মতো সমস্ত অদ্ভুত শক্তিশালী এক্সটেনশনের সাথে লিস্পে লোকেরা কোডিংয়ের জিনিসগুলি দেখিয়েছিল এমন একটি ভিড ছিল (এমন একটি যুক্তি-সম্পর্কযুক্ত কাঠামো যা আপনাকে টাইপবিহীন কোডের সাথে কোড এবং মিশ্রণ এবং মিলের টাইপ কোডকে নির্ভরশীল প্রকারগুলি দিতে দেয় ),
প্রিিকেট

4

লিস্পে অনেক জটিল সিস্টেম লেখা হয়েছে এবং আমি কোনও লিস্টারকে অভিযোগ করতে শুনিনি যে তারা স্থির টাইপিং চেয়েছিল। আমি যখন এটির সাথে কাজ করেছি তখন আমার কোনও সমস্যা মনে নেই যা আমাকে এতটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরস্থির হয়ে উঠতে পারে।

তদ্ব্যতীত, মূলধারার স্ট্যাটিক্যালি টাইপ করা ভাষাগুলি ত্রুটিগুলি ধরার জন্য উপযুক্ত বলে মনে হয় না। একটি লেআউট ডিজাইন কী গুরুত্বপূর্ণ যে একটি নির্দিষ্ট সংখ্যক পৃষ্ঠায় একটি উল্লম্ব পরিমাপ, না তা হয় int, unsigned, float, অথবা double। অন্যদিকে, সংকলকটি প্রায়শই এটি অনিরাপদ বলে মনে করে ধরণের রূপান্তরকে পতাকাঙ্কিত করবে এবং আনন্দের সাথে আমাকে একটি উল্লম্ব পরিমাপ এবং একটি স্ট্রিংয়ের অক্ষরের সংখ্যা যুক্ত করতে দিন। স্ট্যাটিক টাইপ সিস্টেমের এই দুর্বলতা ছিল সিমোনির হাঙ্গেরিয়ান স্বরলিপিটির পিছনে মূল ধারণা, এটি কুৎসিত অকেজোতায় পরিণত করার আগে।


4

প্রকারভেদগুলি ইন্টারফেসের ক্ষেত্রে সীমাবদ্ধতা, তাই আপনি ইউনিট পরীক্ষাগুলির মাধ্যমে যা পরীক্ষা করতে চাইতে পারেন তার একটি উপসেট এবং তাই প্রচুর ট্রেড-অফ একই রকম:

  • স্থিতিশীল প্রকারগুলি কোডটি ন্যূনতম কার্যকরভাবে কিছু তৈরির প্রতিক্রিয়া বিলম্বের বিনিময়ে (গ্রাহকের প্রতিক্রিয়া বা উচ্চতর স্তরের পরীক্ষার মতো) প্রয়োজনীয়তাগুলি পূরণ করে কিনা সে সম্পর্কে পূর্ববর্তী প্রতিক্রিয়া দেয়।
  • কোডটি নির্দিষ্ট প্রয়োজনীয়তা পূরণ করে তা জেনে রিফ্যাক্টরিং এবং ডিবাগিং সহজতর করতে পারে তবে এটি ইন্টারফেস এবং পরিবর্তনের প্রয়োজনীয়তাকে পরিবর্তন করতে ওভারহেড যুক্ত করে।
  • বিশেষত যদি কোনও স্ট্যাটিকালি টাইপ করা ভাষায় জবরদস্তির অভাব থাকে, তবে এটি ডেটা ব্যবহার করা কোডের বিরুদ্ধে অতিরিক্ত সুরক্ষা সরবরাহ করে যা বাগের কারণ হতে পারে (শর্তাধীন এবং দৃser়তার প্রয়োজনীয়তা হ্রাস করে), তবে অতিরিক্ত বাধা-নিষেধাজ্ঞাগুলি ব্যবহারকারীর তাদের ডেটা ম্যাসেজ করার জন্য আরও কোড লিখতে হবে গ্রহণযোগ্য ফর্ম (যেমন সুস্পষ্ট ধরণের ingালাই)।
  • স্পষ্টত ধরণের টীকাগুলি কোড পড়ার সময় বুঝতে সহায়তা করতে পারে, বা এটি অপ্রয়োজনীয় বা অপ্রয়োজনীয় তথ্য সহ কোডটিকে বিশৃঙ্খলা করতে পারে।
  • বাস্তবায়নের উপর নির্ভর করে, এটি নির্লজ্জতা থেকে বিরত থাকতে পারে। এটি টাইপ এনোটেশনগুলি প্রয়োজনীয় বা অনুমান করা যায় কিনা, টাইপ সিস্টেমটি জেনেরিক প্রকার / ইন্টারফেস, সিনট্যাক্সটি কতটা ভালভাবে প্রকাশ করতে পারে এবং টাইপ সিস্টেমের দ্বারা প্রকাশ করা যেতে পারে এমন প্রতিবন্ধকতাগুলির জন্য আপনি পরীক্ষা করতে চেয়েছিলেন কিনা তা নির্ভর করে (যেমন, ইউনিট পরীক্ষার চেয়ে একই বৈশিষ্ট্যটি ভাষা বৈশিষ্ট্য হিসাবে আরও সংশ্লেষিত হতে পারে তবে আপনি এটি পরীক্ষার উদ্দেশ্যে নাও থাকতে পারেন)।
  • অতিরিক্তভাবে (তবে টিডিডির সাথে সম্পর্কিত নয়), স্ট্যাটিক প্রকারগুলি টাইম চেক করার প্রয়োজনে (এবং তাদের পরীক্ষা করার জন্য সময় নেওয়ার জন্য এবং অপ্টিমাইজেশানগুলি সম্পাদন করার জন্য) ব্যয় করে সময় অপ্টিমাইজেশনকে সহায়তা করতে পারে এবং ডেটা টাইপগুলিতে সীমাবদ্ধ থাকলে আরও ভাল অপ্টিমাইজেশন করা যেতে পারে হার্ডওয়্যার ভাল মানচিত্র। পারফরম্যান্স প্রয়োজনীয়তার সাথে কোডে এটি বিকাশ সহজতর করে তবে কোডের জন্য সমস্যা হতে পারে যা এই সীমাবদ্ধতাগুলিকে ভালভাবে ফিট করে না (পয়েন্ট 3 অনুসারে)।

সংক্ষিপ্তসার হিসাবে, আমি যুক্তি দিয়েছি যে গতিশীল ভাষাগুলি প্রোটোটাইপিংয়ের জন্য বিশেষত কার্যকর, তবে আপনার কোডটি সঠিক কিনা তা আপনার যদি নিশ্চিত হওয়া দরকার তবে আপনার একটি শক্তিশালী টাইপ সিস্টেমের পক্ষে হওয়া উচিত।


3

হ্যাঁ, অবশ্যই। আপনি দু'টি দৃ strongly়ভাবে টাইপ করা ভাষা এবং পাইথন (পাইথনকে দৃ .়ভাবে টাইপ করা হয়েছে) ব্যবহার করার সময় একটি জিনিস আপনি দেখতে পাবেন যে ডায়নামিক ভাষাগুলিতে সর্বাধিক লিখিত কোড যাইহোক দৃ strongly়ভাবে টাইপিত কোড হিসাবে প্রচুর একই কনভেনশন অনুসরণ করে। ডায়ামিক টাইপিং সিরিয়ালাইজেশন এবং ডিসেরায়ালাইজেশনের জন্য খুব দরকারী, তবে বেশিরভাগ অন্যান্য ক্ষেত্রে এটি সত্যিকার অর্থে খুব বেশি সুবিধা দেয় না। এবং যদি না আপনার বেশিরভাগ কোড সিরিয়ালাইজেশন সম্পর্কিত হয় তবে নিখরচায় ত্রুটি-পরীক্ষা কেন বাদ দিন?


4
প্রতিবিম্বের ব্যবহারের মাধ্যমে জাভা এবং সি # এর মতো শক্তিশালী-টাইপযুক্ত ভাষাগুলি স্বয়ংক্রিয়ভাবে ডিসরিয়ালিশন হ্যান্ডেল করে।
ম্যাথিউ এম।

3

মরগান, আপনার চেষ্টা করার জন্য আমি একটি আকর্ষণীয় ধারণা পেয়েছি: স্ট্যাটিক + ডায়নামিক টাইপিং। আপনি পাইথন, সি # এবং জাভা উল্লেখ করেছেন। আপনি কি অবগত ছিলেন যে নেট এবং জাভা উভয়ই পাইথনের বেশ কয়েকটি ভাল বন্দর রয়েছে? উভয় ক্ষেত্রেই, পোর্টগুলি আপনাকে সেই প্ল্যাটফর্মগুলির লাইব্রেরিগুলি ব্যবহার করতে দেয় এবং / অথবা বিদ্যমান কোডটি দিয়ে আন্তঃব্যবস্থা করতে পারে। এটি আপনাকে বেশ কয়েকটি সম্ভাবনা দেয়:

  1. স্থিতিশীল, জটিল ভাষায় লিগ্যাসি কোড রাখুন। নতুন জিনিসগুলির জন্য পাইথন ব্যবহার করুন।
  2. পরিপক্ক প্ল্যাটফর্মগুলির শীর্ষে নতুন স্টাফ প্রোটোটাইপ করতে পাইথন ব্যবহার করুন। আপনি আরও পরিপক্ক ভাষায় যে উপাদানগুলি রাখতে চান তা পুনরায় কোড করুন।
  3. আপনি প্রায়শই পরিবর্তিত অংশগুলির জন্য গতিময় ভাষা ব্যবহার করুন।
  4. চলমান কোড সংশোধন করার মত ধারণাগুলি সহ খেলতে গতিশীল ভাষা সম্ভবত ব্যবহার করুন।
  5. গতিশীল ভাষাতে সমস্ত কিছু করুন যেখানে আপনি দৃ typ়ভাবে টাইপ করা ভাষা ব্যবহার করেন সেই সমালোচনামূলক অংশগুলি ব্যতীত।

সি / সি ++ এর বিকাশের ব্যথা ঘটাতে 90 এর দশকের শেষের দিক থেকে আমি এই পদ্ধতিগুলি ব্যবহার করেছি। আমার নেটিভ লাইব্রেরি এবং মাঝে মাঝে পারফরম্যান্সের প্রয়োজন ছিল। তবুও, আমি আরও ভাল সিনট্যাক্স, নমনীয়তা, সুরক্ষা ইত্যাদি চেয়েছিলাম। সুতরাং, কৌশলটি সাবধানে সঠিক ট্রেডফক্স পেতে তাদের সংযুক্ত করছিল। এটি অন্য ভাষা / প্ল্যাটফর্মের জন্য পুরো ভাষা এবং উত্তরাধিকারের কোডটি ফেলে দেওয়ার চেয়ে অনুশীলনে প্রায়শই ভাল ছিল।

(দ্রষ্টব্য: একটি উত্তর ইতিমধ্যে এটি বলেছে, তবে আমি সেই গতিশীল টাইপিংকেও আবার জোর দিতে চাই! = কোন / দুর্বল টাইপিং Many একটি ভেরিয়েবল টাইপ রানটাইম সময়ে নির্ধারিত হয়, টাইপ টিকা প্রয়োজন হয় না, এবং / অথবা রানটাইম পরিবর্তিত হতে পারে।


2

আপনি এর সত্যিকারের উদ্দেশ্যমূলক উত্তর পেতে যাচ্ছেন না, তবে আমার অভিজ্ঞতা হ'ল টাইপ-সুরক্ষা অমূল্য, যতক্ষণ না আপনি টিডিডি অর্জন করেন। আপনার ভারী ইউনিট-পরীক্ষা কভারেজ হয়ে যাওয়ার পরে, কোডগুলির আগে পরীক্ষাগুলি লেখা হয়েছিল, সংকলক-চেকিং একটি ব্যথা হয়ে যায় এবং আসলে আপনার পথে আসতে শুরু করে।


এটি একটি বিষয়গত QA তাই আমি যে ঠিক আছে।
মরগান হের্লোকার

1
ডাউন-ভোট বোঝাতে কি কেউ যত্নশীল?
পিডিআর

আপনাকে ব্যাখ্যাটি সাহায্য করতে পারে না তবে আমি আপনাকে একটি +1 দিয়েছি, আমি মনে করি এটি একটি দরকারী অবদান। ডায়নামিক টাইপিংয়ের অন্যতম প্রধান আশঙ্কা হ'ল আপনি স্থিরভাবে টাইপিত ভাষায় সংকলক দ্বারা প্রয়োগ করেছিলেন এমন অনুমানের কারণে আপনি কোথাও একটি পরিবর্তন আনবেন এবং অন্য কোথাও কিছু ভেঙে ফেলবেন। ভারী ইউনিট-পরীক্ষা কভারেজ আপনাকে এখানে রক্ষা করবে।
কারসন 63000

5
আপনি কোনও বৈধ বিন্দু তৈরি করার সাথে সাথে আমি কমে যাইনি, যদিও কোনও অপরাধের উদ্দেশ্যে নয়, তবে আপনার পোস্টটি সামান্য টিডিডি ফ্যানবয়াইশ হিসাবে এসেছে, সম্ভবত এই কারণেই ডাউনভোটগুলি।
কার্ল বিলেফেল্ট

@ কার্ল, কোনও অপরাধ নেওয়া হয়নি, এটি একটি আসল প্রশ্ন ছিল। আমি অপ্রত্যাশিতভাবে টিডিডিপন্থী হতে পারি, আমি স্বীকার করি
পিডিআর

2

আমি দেখতে পাচ্ছি যে এই প্রশ্নটি পুরোপুরি উঠে এসেছে এবং আমি মনে করি যে আপনার সফ্টওয়্যার মানের (এবং ত্রুটির অভাব) আপনার বিকাশ প্রক্রিয়া, আপনার সিস্টেমটি কীভাবে আর্কিটেক্ট করা হয়েছে এবং কোড মানের প্রতি আপনার এবং আপনার সমবয়সীদের প্রতিশ্রুতিবদ্ধতার সাথে আরও অনেক কিছু করতে পারে।

আমার শেষ কাজটি বেশিরভাগই অজগর বিকাশ ছিল। আমি একটি বৃহত্তর, আন্তর্জাতিক ওয়েব হোস্টিং সংস্থার জন্য কাজ করেছি এবং আমাদের মার্কিন যুক্তরাষ্ট্র, কানাডা এবং দক্ষিণ কোরিয়ায় দল ছিল। ফ্রন্ট এন্ড গ্রাহক অ্যাপ্লিকেশনটির জন্য কাস্টম পাইথন ওয়েব কাঠামো যা ব্যবহারকারীদের তাদের ডোমেন নাম এবং ওয়েব হোস্টিং অ্যাকাউন্ট পরিচালনা করতে দেয়। ব্যাকএন্ড: সমস্ত অজগরও। পাইথন ওয়েব সার্ভিস যেমন কোনও নতুন ওয়েব হোস্টিং সাইট সরবরাহের ব্যবস্থা করা, একটি নতুন ব্লগ তৈরি করা, আমাদের নাম পরিষেবা সিস্টেমে ডিএনএস এন্ট্রি তৈরি করা জাতীয় জিনিসগুলির জন্য পৃথক সার্ভারগুলির সাথে কথা বলতে; ইত্যাদি ইত্যাদি আমার বর্তমান চাকরিতে ক্লায়েন্ট আমাদের সকলকে জাভা হিসাবে অ্যাপ্লিকেশন দেয়; আমাদের প্রধান পণ্যটি জাভা এবং ফ্ল্যাশের মিশ্রণ। আমাদের পুরানো অ্যাপ্লিকেশনগুলির জন্য কাস্টম জাভা ওয়েব কাঠামো, আমাদের নতুন অভ্যন্তরীণ সরঞ্জামগুলির জন্য উইকেট।

উভয় ক্ষেত্রেই কাজ করার পরে, আমাকে বলতে হবে যে আমি যখনই এটি দেখছি তখনই এই প্রশ্নটি আমাকে বুগ করে তোলে। যদি আপনি একটি গতিশীল টাইপ করা ভাষা ব্যবহার করে থাকেন এবং প্রকৃতপক্ষে আপনার কোডটি পরীক্ষা করেন আপনি ভাল হয়ে যাবেন। যদি সিস্টেমটি ভালভাবে ডিজাইন করা হয় এবং আপনি মানগুলি অনুসরণ করেন তবে আপনি ভাল থাকবেন। সংকলক পরীক্ষার ধরণের অভাবের কারণে এখানে প্রচুর বাগ কখনও আসে নি। বেশিরভাগ বাগগুলি আজ আমার জাভা কাজের মতোই যৌক্তিক ত্রুটি ছিল।


2

প্রকারের সুরক্ষা কি বিকাশের গতি এবং নমনীয়তার জন্য মূল্যবান? কেন?

স্ট্যাটিক টাইপিং হ'ল সফ্টওয়্যারটির জীবনকাল জুড়ে বিকাশের গতি এবং নমনীয়তা একটি নেট বৃদ্ধি । এটি মোট প্রচেষ্টা এবং অসুবিধা হ্রাস করে, তবে প্রচুর প্রচেষ্টা এবং অসুবিধার সম্মুখিন করে, যেখানে এটি আরও লক্ষণীয়। ওয়ার্কিং কোড রাখার ক্ষেত্রে প্রবেশের বাধা বেশি, তবে একবার আপনি এই বাধাটি পেরে গেলে (প্রকারের পরীক্ষককে সন্তুষ্ট করে), কোডটি প্রসারিত ও বজায় রাখার ক্ষেত্রে খুব কম কাজ লাগে।

সফ্টওয়্যার বিকাশে সর্বদা কিছু মাথাব্যথা থাকবে কারণ:

  • আপনি যা সম্পাদনের চেষ্টা করছেন তার অন্তর্নিহিত জটিলতা

  • মানুষের সহজাত অবক্ষয়, বিশেষত বিবেচনা করে যে আমরা যখন আরও জটিল কিছু করার চেষ্টা করি তখন আমরা আরও বেশি ভুল করি

যত তাড়াতাড়ি বা পরে, এই চ্যালেঞ্জগুলি মোকাবেলায় আপনার কিছুটা সময় নেওয়া উচিত। এর আশেপাশে কোনও লাভ নেই। স্ট্যাটিক টাইপিং এই চ্যালেঞ্জগুলিকে খুব শীঘ্রই পরবর্তী সময়ের চেয়ে সমাধান করে। শীঘ্রই পরবর্তী সময়ের চেয়ে ভাল, কারণ পরবর্তীতে আপনি একটি ভুল আবিষ্কার করেছেন ( যদি , তবে কখন নয় ) এর একটি প্রশ্ন নয় , ভুলটি সংশোধন করতে আরও বেশি খরচ হয় costs

রানটাইমের সময় উত্থাপিত টাইপ-সম্পর্কিত ব্যতিক্রম ডিবাগ করার জন্য টাইপ চেকারের দ্বারা রিপোর্ট করা ভুল সংশোধন করার জন্য এটির তুলনায় অনেক কম ব্যয়। রানটাইমকে টাইপ-চেকিংয়ের বিষয়টি কেবল জালিয়াতির নীচে সমস্যাটি ছড়িয়ে দিচ্ছে।


1

এটি কেবল আমার নিজের মতামত, তবে না, আমি মনে করি না যে এই ধরণের সুরক্ষার পক্ষে এটি উপযুক্ত। এমনকি এক সেকেন্ডের জন্যও নয়।

আমি দীর্ঘদিন ধরে বিকাশকারী হয়েছি। সি ++, সি # দিয়ে শুরু করে, তারপর জাভাস্ক্রিপ্টে সরানো হয়েছে (নোড.জেএস এর মাধ্যমে সম্মুখভাগ এবং ব্যাকএন্ড)। যেহেতু আমি জাভাস্ক্রিপ্টে বিকাশ করছি আমার উত্পাদনশীলতা আকাশে-ছড়িয়ে পড়েছে, এ পর্যন্ত যে আমি টাইপ-ভিত্তিক ভাষা ব্যবহার করে প্রকট আকার ধারণ করি। আমিও সংকলনের বিপক্ষে, আমি চাই এখনই সবকিছু রান-টাইমে থাকুক। অনুবাদিত ভাষাগুলি হ'ল সত্যই যেখানে আমি প্রোগ্রামিংয়ের প্রতি আমার ভালবাসা পেয়েছি।

প্রকারের হিসাবে আমি কেবল কোনও সুবিধা দেখছি না। আমি এখন মেমরি ম্যানেজমেন্ট দেখতে একইভাবে প্রকারগুলি দেখি। সম্পূর্ণ অপ্রয়োজনীয়। আগামীকালকের ভাষাগুলি বিকাশকারীদেরকে প্রকার সম্পর্কে কোনও কিছু থেকে সম্পূর্ণরূপে রক্ষা করা উচিত। কম্পিউটারের প্রকারগুলি বুঝতে হবে এবং বিকাশকারীকে এটিকে ছেড়ে দেওয়া উচিত।

এখানে একটি উদাহরণ। আমি কেবল সুইফ্ট (অ্যাপলের নতুন ভাষা) ব্যবহার করছি এই আশায় যে এটি আসলে একদিন আগে এর নামটি বেঁচে থাকবে এবং করার চেষ্টা করেছিল: var n = 1/2 কাজ করে না। আমি এখানে ছিল কি মত ছিল। এবং তার পরে দুঃখের সাথে বুঝতে পারলাম আমাকে var n করতে হবে: ফ্লোট = 1/2। এটি আমাকে স্মরণ করিয়ে দিয়েছে যে আমি টাইপ সিস্টেমগুলিকে কতটা ঘৃণা করি এবং সেগুলি কতটা অপ্রয়োজনীয় উত্তেজনা।

এমনকি আমি আরও এক মাইল যেতে চাই যে আমি এমনকি ব্যবহারকারী সংজ্ঞায়িত প্রকারগুলি (যেমন ক্লাস) চাই না। আমি মোটেই টাইপ চাই না। আমি চাই সমস্তই ভ্যার ও অবজেক্ট। যেখানে যে কোনও অবজেক্টকে যে কোনও অবজেক্ট হিসাবে ব্যবহার করা যেতে পারে। এবং অবজেক্টগুলি গতিশীল এবং ক্রমাগত পরিবর্তনশীল। এটি কোনটি কাজ করে এবং কী করে না তা রানটাইম ইস্যুতে পরিণত হয়।

বিকাশকারীরা বলতে খুব পছন্দ করেন যে কীভাবে আলগাভাবে টাইপ করা ভাষা বড় প্রকল্পগুলির জন্য ভাল না n't তবে আমি বলব এটি এর বিপরীত। প্রবলভাবে টাইপ করা ভাষা বড় প্রকল্পগুলির জন্য ভয়ঙ্কর। এবং যদি আপনি বলেন যে জাভাস্ক্রিপ্ট বড় প্রকল্পগুলির জন্য কাজ করে না, তবে উবারকে একটি 40 বিলিয়ন+ কোম্পানী জিজ্ঞাসা করুন যা নোট.জেএস / জাভাস্ক্রিপ্ট, বা পিএইচপি দিয়ে শুরু হওয়া ফেসবুকের সমস্ত ব্যাকএন্ড চালায়।

যতদূর স্থায়ীভাবে টাইপ করা ভাষা এটি আজকের দ্রুত পুনরাবৃত্তির জন্য ভাল নয় good এখানে একটি সাধারণ উদাহরণ রয়েছে, আপনার 10 বিকাশকারী একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভারের সাহায্যে নেট প্রকল্পে কাজ করছেন, একজন বিকাশকারী একটি ভুল জমা দেয় এবং পুরো বিল্ডটি ভেঙে যায়, যদিও 10 বিকাশকারী বিভিন্ন বিষয়ে কাজ করছেন যা তারা এখন সব বন্ধ করে অপেক্ষা করছেন আপত্তিজনক বিকাশকারীকে তার ভুল সংশোধন করার জন্য। দক্ষ হাহ সম্পর্কে কথা বলুন? প্রকারের সিস্টেম / স্থির ভাষাগুলি সেভাবে পরস্পর নির্ভরশীল এবং আপনার কোডকে আন্তঃনির্ভর করে তোলে। তবে স্ক্রিপ্ট ফাইলগুলি কখনই পারস্পরিক নির্ভরশীল নয়। স্ক্রিপ্টগুলির মধ্যে একটিতে যদি সমস্যা হয় তবে এটি উত্পাদন থামায় না, আপনি যে সমস্ত সমস্যা দেখতে পাচ্ছেন তা রানটাইমের বাকি রয়েছে। এবং রানটাইম কখনও থামে না। এটি কখনও ভাঙে না। এটি ভুল আউটপুট উত্পাদন করতে পারে কিন্তু এটি না


1
প্রচুর "আমি", যুক্তির অনেকগুলি উপাদান নয় not এবং যাইহোক, কোনও ত্রুটি "ব্রেক" হওয়া বা না করা, স্থির বনাম গতিশীলের সাথে বিল্ডটির কোনও সম্পর্ক নেই। যদি আপনার ইউনিট পরীক্ষা হয় এবং একটি ব্যর্থ হয় তবে "আপনার বিল্ডটি ভেঙে গেছে" এবং আশা করা যাচ্ছে যে এটি সংশোধন না হওয়া পর্যন্ত উত্পাদনে স্থাপন করা হবে না
এনএফজিজি

আপনি কী ভাবছেন যে আমি এই জাতীয় কোনও বিষয়কে বোঝাচ্ছি?
এনএফজি

জাভাস্ক্রিপ্টে আপনার উত্পাদনশীলতা আকাশচুম্বী হয়নি কারণ জাভাস্ক্রিপ্টে ধরণের অভাব রয়েছে। আপনি উত্পাদনশীলতা আকাশ ছোঁয়া কারণ সি ++ এবং সি # ভারী ভাষা। জাভাস্ক্রিপ্ট + প্রকারগুলি প্রকৃতপক্ষে আরও আরও আপনার উত্পাদনশীলতার স্ক্রোরকেট তৈরি করবে। কেউ বলেনি যে বড় প্রকল্পগুলির জন্য জাভাস্ক্রিপ্ট অসম্ভব। বড় প্রকল্পগুলিতে জাভাস্ক্রিপ্ট অবশ্যই সক্ষম is তবে এটি আদর্শ নয়। ইউনিট পরীক্ষাগুলি টাইপ চেকিংয়ের জায়গা নেয়, ইউনিট পরীক্ষাগুলিতেও সীমাবদ্ধ প্রকারের কভারেজ থাকে যখন টাইপ চেকিংয়ের ক্ষেত্রে 100% কভারেজ থাকে।
ব্রায়ান ইয়ে

1
@ ব্রায়ানইহ সি ++ এবং সি # হ'ল ভারী ভাষা কারণ এগুলি বিভিন্ন ধরণের কেন্দ্রিক। আমি সবেমাত্র আমার চাকরিতে রিএ্যাকটিজ ব্যবহার শুরু করেছি এবং প্রকার এবং উপাদানগুলিতে অবিচ্ছিন্নভাবে ব্যবহারের কারণে আমার উত্পাদনশীলতা আবার ডুবে গেছে। আপনি যদি টাইপ এবং ইউনিট পরীক্ষা পছন্দ করেন তবে আপনার পক্ষে ভাল। আমরা সকলেই এই প্রোগ্রামিং স্টাইলটি ভাগ করি না।

1
@ ফরেয়েজ রিঅ্যাকটজগুলির কোনও প্রকার নেই। আপনি সম্ভবত প্রবাহের কথা উল্লেখ করছেন। ইউনিট পরীক্ষাগুলি টাইপ চেকিংয়ের জায়গা নেয় তাই আপনার যদি টাইপ চেকিং না থাকে তবে আপনার আরও ইউনিট পরীক্ষার প্রয়োজন। ইউনিট পরীক্ষা এবং প্রকারগুলি বিরোধী বাহিনী। আপনার উত্পাদনশীলতা হ্রাস একটি বিভ্রম। কোনও প্রকার নিরাপদ ভাষাতে আপনি যে কোনও ধরণের ত্রুটি ধরেন তা হ'ল গতিশীল টাইপ করা ভাষায় অন্যথায় ত্রুটিযুক্ত ত্রুটি। এটি কেবল দ্রুত প্রদর্শিত হয়। নিরাপদ ভাষা টাইপ আপনাকে সামনে এই ত্রুটিগুলি মোকাবেলা করতে বাধ্য করে।
ব্রায়ান ইয়ে

0

হ্যাঁ.

আমি পিএইচপি অ্যাপ্লিকেশনগুলিতে কাজ করেছি, যেখানে প্রকারভেদ জাভা বা সি # এর মতো "শক্তিশালী" নয়। সাধারণত আমি "সিমুলেটিং টাইপস" শেষ করেছি, কারণ, স্বয়ংক্রিয় রূপান্তরগুলি বা ডেটা বৈধকরণ এড়াতে।

গতিশীল প্রকারের ভাষাগুলি ওএস স্ক্রিপ্ট এবং দ্রুত ছোট অ্যাপ্লিকেশানের জন্য ভাল,

সংক্ষিপ্তসার: যদি আমাকে একটি জটিল, ব্যবসায়িক অ্যাপ্লিকেশনের জন্য "দুর্বল প্রকার" বা "ডায়নামিক টাইপ" প্রোগ্রামিং ভাষা বা "স্ট্রং টাইপ" প্রোগ্রামিং ল্যাঙ্গুয়েজের মধ্যে চয়ন করতে হয় তবে আমি "স্ট্রং টাইপ" প্রোগ্রামিং ভাষাটি বেছে নিই ।


0

আমি মনে করি যে এটি একটি পদক্ষেপ ফিরে নিতে এবং ডায়নামিক টাইপিং কখন সমস্যা সৃষ্টি করে তা বিবেচনা করার জন্য অর্থ প্রদান করে।

একটি ক্ষেত্রে হ'ল যেখানে কোনও কোড শাখা একেবারেই পরীক্ষা করা হয় না, তবে প্রকৃতপক্ষে কোড যা পরীক্ষা করা হয় না সেগুলি গতিশীল টাইপিং ব্যবহারের ক্ষেত্রে রয়েছে কিনা তা বগি হওয়ার সম্ভাবনা রয়েছে।

অন্য একটি সূক্ষ্ম সমস্যা যদিও অসম্পূর্ণ পরিবর্তনযোগ্যতা।

যদি কোনও প্রকার পুরোপুরি ভুল হয় তবে নির্দিষ্ট কোড পাথটি কখনও ব্যবহার না করা হলে এটি দ্রুত সনাক্ত হওয়ার সম্ভাবনা রয়েছে।

অন্যদিকে যদি কোনও প্রকারটি একটি অপূর্ণ বিকল্প হয় তবে কোডটি বেশিরভাগ ক্ষেত্রে কাজ করতে পারে তবে সূক্ষ্ম উপায়ে ভেঙে যেতে পারে যা পরবর্তীকালে সনাক্ত করা যায় না।

প্রোগ্রামিংয়ের সবচেয়ে সাধারণ দুটি ধরণের নাম এবং স্ট্রিং। অনেক গতিশীল ল্যাঙ্গগুলিতে তারা একে অপরের অপূর্ণ বিকল্প। জাভাস্ক্রিপ্ট বা পিএইচপি বলুন যদি আপনি এমন একটি নম্বর সরবরাহ করেন যেখানে স্ট্রিংটি প্রত্যাশিত হয় বা তদ্বিপরীত আপনার প্রোগ্রামটি ত্রুটি না বাড়িয়ে চলে তবে বরং সাবটুল উপায়ে দুর্ব্যবহার করতে পারে।

পাইথন সেই বিশেষ সমস্যাটি এড়িয়ে গিয়েছিল, সংখ্যা এবং স্ট্রিং কোনওভাবেই একে অপরের বিকল্প হয় না এবং যেখানে অন্যের প্রত্যাশা থাকে সেখানে একটি ব্যবহার করার চেষ্টা করা সাধারণত দ্রুত ব্যর্থতার দিকে পরিচালিত করে।

তবে এটি সম্পূর্ণরূপে অসম্পূর্ণ সংবেদন সমস্যা এড়াতে পারেনি। বিভিন্ন ধরণের সংখ্যা একে অপরের অপূর্ণ বিকল্প হতে পারে, তাই বিভিন্ন ধরণের ক্রম হতে পারে।


আমি এখানে যা পাচ্ছি তা হ'ল জেনেরিক উপায়ে স্থিতিশীল এবং গতিশীল টাইপিংয়ের সুবিধাগুলি এবং ব্যয়ের তুলনা করা সম্ভব বলে আমি মনে করি না, কারণ আমি মনে করি সুবিধা এবং ব্যয় উভয়ই কোনও ভাষার স্থিতিশীল বা গতিশীল টাইপের নির্দিষ্ট পরিবর্তনের উপর নির্ভর করে ব্যবহারসমূহ.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.