কোন প্রোগ্রামিং ল্যাঙ্গুয়েজে সবচেয়ে কম হার্ড-বাগ খুঁজে পাওয়া যায়? [বন্ধ]


54

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

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

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

সম্পাদনা করুন: হার্ড-টু-ফাইন্ড বাগের সম্পূর্ণ নির্বিচারে ব্যাখ্যা: পুনরুত্পাদন করতে 15 মিনিটেরও বেশি সময় নেয়, বা কারণ খুঁজে পেতে এবং ঠিক করতে 1 ঘণ্টারও বেশি সময় লাগে।

এটি যদি সদৃশ হয় তবে আমাকে ক্ষমা করুন, তবে আমি এই নির্দিষ্ট বিষয়ে কিছুই পাইনি।


10
আমি এই বিষয়টিতে কিছু গবেষণা দেখতে চাই! শুধু "আমার উপাখ্যান প্রমাণগুলিই বোঝায় না যে আমি জানি একমাত্র ভাষা রাজা" তবে বড় প্রকল্পগুলি থেকে বাগের রেট ইত্যাদি।
ফ্রাঙ্ক শায়ারার

@ ফ্র্যাঙ্ক .. আপনার যদি খুব বেশি সময় (এবং আমি মানে প্রচুর পরিমাণে) পেতাম তবে আপনি সম্ভবত ওহলোহ থেকে কিছু পরিসংখ্যান খনন করতে পারতেন, তবে আপনি যদি হাজার হাজার কোড রিপোজিটরিগুলি থেকে চিহ্নিত প্যাচগুলি সনাক্ত করতে পারতেন।
টিম পোস্ট

একমাত্র যেখানে মন্তব্য করার অনুমতি রয়েছে। অন্য কোনও নির্দেশ নেই :)
ভিক্টর হুরডুগচি

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

@ উইনস্টন সম্মত হন।
ম্যাগনাস ওলফেল্ট

উত্তর:


58

ভাষার টাইপ সিস্টেমটি যত বেশি শক্তিশালী হবে ততই সংকলনের সময় তত বেশি বাগগুলি ধরা পড়বে।

নিম্নলিখিত চিত্রটি তাদের প্রকারের সিস্টেমের শক্তি, সরলতা এবং সুরক্ষার দিক থেকে কিছু জ্ঞাত প্রোগ্রামিং ভাষার সাথে তুলনা করে। [ উত্স ]

বিকল্প পাঠ

* অনিরাপদ কনস্ট্রাক্টস ব্যবহারের সক্ষমতাতে কারখানা।

"অনিরাপদ" কীওয়ার্ড এবং সম্পর্কিত পয়েন্টার মেশিনের কারণে সি # অনিরাপদ সারিতে স্টাফ হয়ে যায়। তবে আপনি যদি এগুলি এক ধরণের ইনলাইন বিদেশী ফাংশন প্রক্রিয়া হিসাবে ভাবতে চান তবে সি # আকাশের দিকে ঝাঁকুনি মুক্ত মনে করুন।

আমি হাস্কেলকে '98 কে খাঁটি হিসাবে চিহ্নিত করেছি তবে জিএইচসি হাস্কেল কার্যত অনিরাপদ * পরিবারের কারণে খাঁটি নয়। যদি আপনি অনিরাপদ অক্ষম করে থাকেন * তবে সেই অনুসারে জিএইচসি হাস্কেলকে উপরে উঠুন।


8
এটা অসাধারণ!

7
আমি গ্রাফিকটিতে কমন লিস্পটি খুঁজে পাইনি: (let ((itbe '())) ... )...
ডুরোস

7
কি? পিএইচপি করার জন্য বাম পাশে কোনও স্থান অবশিষ্ট ছিল না?
পেস্তাa

7
সি # নিরাপদ পয়েন্টারগুলিকে অনুমতি দেয় : সমস্ত পয়েন্টার গাণিতিক চেক করা হয়। অতএব, আমি বিশ্বাস করি এটি জাভা নিয়েই হওয়া উচিত।
অ্যালেক্স দশ ব্রিংক

11
@ মিসিংফ্যাক্টর: আমার ধারণা সি # ভাল অবস্থানে নেই। সি # নিরাপদ প্রোগ্রামিং শৈলীর অনুমতি দেয় এবং প্রচার করে। এটি মঞ্জুরি দেয় এমন সবচেয়ে খারাপ জিনিস দিয়ে এটি পরিমাপ করা উচিত নয়।
back2dos

20

আমার মতে হাস্কেল আপনাকে কিছু সাধারণ ত্রুটিগুলি এড়াতে সহায়তা করে:

  • এটি নিখুঁতভাবে কার্যকরী: ফাংশনগুলির (অনিচ্ছাকৃত) পার্শ্ব-প্রতিক্রিয়া থাকতে পারে না এবং এটি মাল্টিকোর প্রোগ্রামিং সহজ এবং কম ত্রুটি-প্রবণ করে তোলে
  • এটি দৃ strongly়ভাবে টাইপ করা হয়েছে: আপনি যেমন দুর্ঘটনাক্রমে বুল, চর, ইনট এবং ফ্লোট মানগুলি মিশ্রিত করতে পারবেন না
  • এটি স্ট্যাটিকালি টাইপ করা হয়েছে: সংকলনের সময় অনেক প্রোগ্রামিং ত্রুটি ধরা পড়ে
  • nullমান ধরণের সংজ্ঞাগুলির অংশ নয়: এর মাধ্যমে আপনি বিলিয়ন ডলারের ভুল এড়াতে পারেন
  • অনেকগুলি তৈরি উচ্চ-অর্ডার ফাংশন রয়েছে যা আপনি নিজের লেখার পরিবর্তে পুনরায় ব্যবহার করতে পারেন, সম্ভবত ত্রুটিযুক্ত, বাস্তবায়ন
  • এটিতে আবর্জনা সংগ্রহকারী রয়েছে: মেমরির ত্রুটিগুলি প্রায় নির্মূল হয়েছে (অলস মূল্যায়নের কৌশলটির কারণে "স্পেস লিক" ব্যতীত)

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

5
অনেক ভাল পয়েন্ট, তবে কিছু শ্রেণীর ত্রুটি সরিয়ে দেওয়ার সময় (অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া, অপ্রত্যাশিত ধরণের রূপান্তর) হাস্কেল ত্রুটির সম্পূর্ণ নতুন শ্রেণি যুক্ত করেছে: স্থান ফাঁস। (এছাড়াও যদিও এটি না nullথাকলেও রয়েছে undefined, যা প্রতিটি ধরণের সদস্য))
j_random_hacker

5
@ মেসন: আপনি যদি এটি না লিখে থাকেন তবে এতে আপনার বাগ থাকতে পারে না :)
মাইকেল কে

2
আমি অনুমান করি যে নিখরচায় দুপুরের খাবারের মতো কোনও জিনিস নেই - আপনার কাছে সহজে খুঁজে পাওয়া যায় এমন বাগ, বা লিখতে সহজ কোড থাকতে পারে তবে দুটোই নয় :)
বেনজল

6
@ ম্যাসন একটি "গড় প্রোগ্রামার" ঠিক কী? প্রশ্নটি "কী প্রোগ্রামিং ভাষা ..." দিয়ে শুরু হয়, "সি, সি ++ এবং জাভাগুলির মধ্যে কোনটি নয় ...";)
অ্যাগোস

18

Ditionতিহ্যগতভাবে বাগগুলি খুঁজে পাওয়া সবচেয়ে শক্তিশালী হ'ল বহু-থ্রেড অ্যাপ্লিকেশনগুলিতে রেস-শর্ত

  • পুনরুত্পাদন প্রায় অসম্ভব
  • খুব সূক্ষ্ম হতে পারে

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

আমার বোঝার জন্য, আপনার একটি কার্যকরী ভাষা প্রয়োজন কারণ "নো পার্শ্ব প্রতিক্রিয়া" এমন জিনিস যা প্রথম স্থানে দুটি বুলেট পয়েন্ট দূরে সরিয়ে দেয়। আমি দেখেছি যে হাস্কেলকে একটি দক্ষ মাল্টি-থ্রেড ল্যাঙ্গুয়েজ করার জন্য স্বচ্ছভাবে কাজ চলছে এবং আমি বিশ্বাস করি যে ফোরট্রেসকে দক্ষ সমান্তরাল ভাষা হিসাবে স্থল থেকে তৈরি করা হয়েছে।


সম্পাদনা করুন: জাভাতে Executorsআরও বেশি শক্ত অংশ হ্যান্ডেল করুন । আপনার স্বতন্ত্র কাজগুলি Callableইন্টারফেসের সাথে সামঞ্জস্য করা দরকার ।


5
++ রেসের শর্তাদি। তুমি ওটা আবার বলতে পারো।
মাইক ডুনলাভে 18

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

এরলং সম্পর্কে কী?
মালফিস্ট

@ মালফিস্ট, এর জবাব দেওয়ার জন্য আমি এড়লং সম্পর্কে যথেষ্ট জানিনা। আপনি যদি সত্যিই জানতে চান তবে আপনার একটি প্রশ্ন খোলা উচিত?

2
এরলং হ'ল মাল্টিথ্রেডিং সহজ এবং সুরক্ষিত করার জন্য ডিজাইন করা একটি কার্যকরী প্রোগ্রামিং। আপনি পরিবর্তনশীল ভাগ করবেন না, আপনি বার্তা পাস। এটি উইকিপিডিয়া পৃষ্ঠা পড়ুন।
ম্যালফিস্ট

13

অ্যাডা এমনভাবে তৈরি করা হয়েছে যাতে রান-টাইমের পরিবর্তে যতটা সম্ভব কমপ্লাই-টাইমে ধরা পড়ে। এর অর্থ হ'ল এটি প্রায়শই জাভাতে সমমানের তুলনায় অ্যাডায় একটি প্রোগ্রাম পেতে প্রায় 10x বেশি সময় নেয়, তবে এটি সংকলন করার সময় আপনি আরও বেশি আত্মবিশ্বাসী হতে পারেন যে প্রোগ্রামটির সময় পুরো ক্লাস বাগগুলি নিজেকে প্রকাশিত করতে পারে না চালানো।


7
+1 লক্ষ করার জন্য, সঠিকভাবে, যে আডা অন্য ভাষাগুলি উপেক্ষা করে এমন সংকলকটিতে এমন জিনিসগুলি ক্যাচ করে। -1 এর অর্থের জন্য যে এর অর্থ একটি অ্যাডা প্রোগ্রামটি সংকলন করতে 10x বেশি সময় নেয়। অ্যাডা প্রোগ্রামার কে পুরষ্কার দেয় কে ডিজাইন করে !!! তার কোড, যারা মনে করে !!! তিনি পাগল টাইপ শুরু করার আগে তিনি কী করছেন সে সম্পর্কে। প্রতিরক্ষা কাজের জন্য আডায় প্রোডাকশন প্রোগ্রামিং করা আমার ব্যক্তিগত অভিজ্ঞতাটি হ'ল যে সি / সি ++ বা ফোরট্রান লাগে তার চেয়ে কম সংকলন করতে অ্যাডা কোড পেতে বেশি সময় লাগেনি, তবে অ্যাডা কোডটি পরে উল্লেখযোগ্যভাবে কম সমস্যা হয়েছিল। প্র্যাট এবং হুইটনি অনুরূপ কিছু লক্ষ্য করেছেন।
জন আর স্ট্রোহ্ম

1
@ জোহান আর স্ট্রোহম, আমি যা বুঝতে পেরেছি সে থেকে, তিনি কম্পাইলারকে কোড সংকলন করতে যে সময় লাগে তার চেয়ে বেশি কথা বলছেন না, কোডটি সংকলনযোগ্য করার জন্য সময় বলেছিলেন।
মালফিস্ট

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

@ টলেমি, যদি নৌকার নাম মহিলাদের নামে দেওয়া যায় (দৃশ্যত মার্কিন বাহক ছাড়া) তবে প্রোগ্রামিং ভাষাগুলিও পারে। বরং এটি "ইউএসএস রোনাল্ড রিগান" এর চেয়ে "অ্যাডা" নামকরণ করেছেন :)

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

7

প্রথম সংজ্ঞা: হার্ড-টু-ফাইন্ড বাগ, যা আমি বুঝতে পেরেছি, এটি একটি বাগ যা পুনরুত্পাদন করা যেতে পারে তবে কারণটি খুঁজে পাওয়া শক্ত।

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

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

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

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

এই সমস্ত বিষয় বিবেচনা করে, আমি বলব যে জাভা এবং সি #, এবং জেভিএম এবং। নেট ওয়ার্ল্ডের অনেকগুলি ভাষাগুলি, হার্ড-টু-সন্ধানের বাগগুলি এড়াতে উপযুক্ত।


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

ফ্র্যাঙ্ক: কমপক্ষে লক করা যথেষ্ট সহজ তাই কোনও দিন ব্যয় না করে সবাই এটি করতে পারে, কোন API ব্যবহার করতে হবে তা নির্ধারণ করে
ইউজার 281377

তারপরে এমন দৃষ্টিভঙ্গি রয়েছে যে "একত্রে সরল যাতে প্রত্যেকে এটি করতে পারে" এর সমাধানের সমাধানটি প্রাক-স্কুলবাসীদের টেবিল করাত দেওয়ার মতো।
ডেভিড থর্নলি

@ ডেভিড: আমি আপনার বক্তব্যটি দেখতে পাচ্ছি, তবে অনেক ক্ষেত্রে একটি সহজ সমাধান আসলে যা লাগে তা সবই। উদাহরণস্বরূপ, কেবলমাত্র মুষ্টিমেয় ব্যবহারকারীদের দ্বারা ব্যবহৃত একটি সার্ভলেট বিবেচনা করুন, যা একটি ভাগ করা সংস্থান (যেমন ডাটাবেস সংযোগ) ব্যবহার করতে হবে। সিঙ্ক্রোনাইজেশন ছাড়াই, রেসের শর্তগুলি এখন এবং তারপরে ঘটে; তবে সমস্ত ডাটাবেস অ্যাক্সেস ক্রিয়াকলাপকে একটি সিঙ্ক্রোনাইজড (সংযোগ) {} ব্লকের মধ্যে রাখা ঠিক রকেট বিজ্ঞান নয়।
ব্যবহারকারী 281377

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

7

এক্সেল যেহেতু সর্বাধিক ব্যবহৃত ডিএসএল, তাই আমি এক্সেলের সাথে যাব। (অবশ্যই ভিবিএ বাদে)

এটি বিল ফিট করে:

  • এটি পুনরুত্পাদন করা সর্বদা সহজ (এখানে একটি স্প্রেডশিট - এটি কাজ করছে না)
  • এটি সম্পূর্ণরূপে "কার্যকরী" - ত্রুটিটি খুঁজে পাওয়া বেশ সহজ - যে ঘরটি ভুল তা দিয়ে শুরু করুন এবং এর সমস্ত নির্ভরতা সন্ধান করুন।

এটি ততক্ষণ সত্য হতে পারে যতক্ষণ আপনি সন্ধানে সহজে বাগগুলি যোগ না করেন।
mouviciel

+1 এক্সেল যেহেতু একটি ডেটা, কোনও ভাষা নয় A আমাকে একটি ভাল হাসি উপহার দিয়েছে :)
recursion.ninja

2
@ ওয়াশবার্ন - ওহ, আমি জানি না আমি মনে করি এটি একটি ভাষা হিসাবে যোগ্যতা অর্জন করে। প্রতিটি ঘর একটি "পরিবর্তনশীল"। প্রতিটি ভেরিয়েবল ঘোষিতভাবে আক্ষরিক (যেমন 123বা ABC) বা কোনও ফাংশন ( =SUM(A2:A5)) হিসাবে সেট করা হয় । এক্সেল তারপরে সমস্ত পরিবর্তনশীলগুলি মূল্যায়ন করে, নির্ভরতাগুলি সমাধান করার জন্য কী আদেশ ইত্যাদি নির্ধারণ করে It's এটি অবশ্যই কেবল ডেটা নয়।
স্কট হুইটলক

2
আমি আমার বক্তব্যটি প্রত্যাহার করি, এটি প্রমাণিত হয় যে এক্সেল টিউরিং সম্পূর্ণ ... ... আমি পুরোপুরি আনসেটলিং কিছু শিখেছি ...
recursion.ninja

1
"... সত্যিকারের [লিস্প] মাস্টার বুঝতে পেরেছেন যে সমস্ত ডেটা কোড।" সম্ভবত এটি এক্সেলের ক্ষেত্রেও প্রযোজ্য, যথেষ্ট পরিমাণে যথেষ্ট পরিমাণে। ব্লগস.এমএসএন
জেমস মিশ্র

7

এটি একটি কঠিন প্রশ্ন কারণ বেশিরভাগ বাগগুলি নিজেই ভাষার দোষ নয় - বরং তারা কীভাবে ভাষাটি ব্যবহার করে সে ক্ষেত্রে ভুল করার বিকাশকারীদের দোষ।

আমি বিশ্বাস করি ভাষা বৈশিষ্ট্যের বিভিন্ন দিক রয়েছে যা বাগের সম্ভাবনাগুলিকে প্রভাবিত করে:

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

  • উদ্দীপনা - কোডটি যদি ছোট হয় এবং কম বয়লারপ্লেট / ঘটনাগত জটিলতা থাকে তবে বাগ / যুক্তি ত্রুটিগুলি দেখতে আরও সহজ।

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

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

  • কার্যকরী প্রোগ্রামিং - রাইটিং কোডের কার্যকরী পদ্ধতির প্রভাব / ইন্টারঅ্যাকশনগুলির জটিল ক্রমগুলির সাথে অবজেক্ট ওরিয়েন্টেড কোডের চেয়ে বেশি "সম্ভাব্য সঠিক" হতে থাকে। আমার অভিজ্ঞতা হ'ল এফপি কৌশলযুক্ত বাগগুলি এড়াতে সহায়তা করে - আমি বিশ্বাস করি যে কোথাও কোথাও এমন একাডেমিক গবেষণা রয়েছে যা আমি বর্তমানে এটি খুঁজে পাচ্ছি না this

  • সংকেত সমর্থন - সংমিশ্রনের সমস্যাগুলি সনাক্ত করা এবং ডিবাগ করা বিশেষত কঠিন কারণ এটি কেন এত গুরুত্বপূর্ণ। ম্যানুয়াল লকিংয়ের যে কোনও কিছুর অবশেষে ব্যর্থ হওয়ার পরিণাম রয়েছে (এবং এতে সম্মতিতে প্রতিটি বস্তু কেন্দ্রিক দৃষ্টিভঙ্গি অন্তর্ভুক্ত রয়েছে )। আমি এই বিষয়ে সেরা ভাষাগুলি জানি ক্লোজিউর - এটি সম্মিলিত ব্যবস্থাপনার এক অনন্য দৃষ্টিভঙ্গি রয়েছে যা একটি উপন্যাস, নির্ভরযোগ্য এবং কম্পোজেবল সম্মিলন কাঠামোটি পেতে অপরিবর্তনীয় ডেটা কাঠামোর সাথে সফ্টওয়্যার লেনদেনের মেমরির সংমিশ্রণ করে। আরও অন্তর্দৃষ্টিগুলির জন্য http://www.infoq.com/preferencesations/Value-Identity-State-Rich-Hickey দেখুন


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

1
এখন পর্যন্ত সেরা উত্তর! আমি মনে করি এটি বাগের ফ্রিকোয়েন্সি নিম্নলিখিত দুটি বিশ্লেষণ দ্বারা সমর্থিত: ইচ্ছাকৃত- সফ্টওয়্যার . com/safety-rank-part-2 এবং macbeth.cs.ucdavis.edu/lang_study.pdf । তারা উভয়ই দেখায় যে খাঁটি, তত বেশি কার্যকরী, ততই বাগচক্র বেশি ভাষা এবং নিরাপদ। একইভাবে, তারা উভয়ই দেখায় যে ক্লোজিউর এবং রুবি সুরক্ষা নিয়ম থেকে রেহাই পেয়েছেন, সম্ভবত আপনি ইঙ্গিত করেছেন ইন্টারেক্টিভিটির সমান প্রভাব রয়েছে বলে ইঙ্গিত দেয়।
দিদিয়ার এ

@DidierA। দুর্ভাগ্যক্রমে ucdavis লিঙ্কটি নষ্ট হয়ে গেছে (কোনও ডাব্লুবিএম সংরক্ষণাগার ছাড়াই) - আমি মনে করি আপনি এটি প্রেম দেবানবুর পৃষ্ঠা থেকে পেয়েছেন যা এখন একটি আপডেট লিংকের দিকে নির্দেশ করেছে:
গিথুবে

5

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

জাভা এবং সি # এর মতো উচ্চ-স্তরের ভাষা সি ++ এর মতো নিম্ন স্তরের ভাষার চেয়ে কম বাগ তৈরি করবে।

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


4
+1 এর জন্য "একটি ভাষা যতটা শক্তিশালী হয় তত কম বিকল্পগুলি আপনাকে নিজের পায়ে গুলি চালায়।"
মাইকেল কে

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

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

3
ভাষা যদি দুর্বল হয় তবে আপনার আরও বড় পা দরকার।

7
@ মিসিংফ্যাক্টর, কারণ এটি পায়ে নিজেকে গুলি করা একটি পার্শ্ব প্রতিক্রিয়া।

3

কোন ভাষায়, আপনার মতে, গড় প্রোগ্রামার কমপক্ষে হার্ড-টু-বগ বাগ সহ ফিচারগুলি আউটপুট করতে দেয়?

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

  • শক্তিশালী টাইপিং এবং একটি কঠোর সংকলক যা অনেকগুলি সাধারণ ত্রুটি ধরা দেয়।
  • স্বজ্ঞাত সিন্ট্যাক্স যা সাধারণ ত্রুটিগুলিকে উত্সাহ দেয় না। ("বিশ্বের সর্বশেষ বাগ," if (alert = RED) {LaunchNukes;}সংকলন করবে না, উদাহরণস্বরূপ।)
  • একটি সু-নকশিত অবজেক্ট মডেল যা প্রচুর সাধারণ সি ++ ওওপি ত্রুটিগুলি দূর করে।
  • সুরক্ষা সমস্যার সম্ভাবনা একেবারে হ্রাস করে , ভাষায় নির্মিত বাউন্ড চেকিং এবং রেঞ্জ চেকিং
  • সম্ভবত মানুষকে জানা সবচেয়ে দ্রুততম সংকলক, যা আপনার উত্পাদনশীলতা বাড়ায় এবং বিল্ডের অপেক্ষার সময় আপনার চিন্তার ট্রেনটি হারাতে আরও শক্ত করে তোলে।
  • ডিবাগার ভিজ্যুয়াল স্টুডিওর ডিবাগারটি যখন বড় হয় তখন তার মতো হতে চায়।
  • মেমরি ম্যানেজারের মধ্যে সরাসরি অন্তর্নির্মিত ফাঁস ট্র্যাকিং, মেমরি ফাঁসকে তুচ্ছ ও সন্ধানের এবং ফিক্সিং তৈরি করে।
  • একটি বৃহত, পরিপক্ক স্ট্যান্ডার্ড গ্রন্থাগার আপনার নিজের, সম্ভবত বগি বাস্তবায়ন না করেই সাধারণ কাজগুলি সম্পাদনের প্রাক-বিল্ট এবং প্রাক-পরীক্ষিত উপায় সরবরাহ করে।
  • কার্যকর ট্র্যাকিং ডাউন করতে আরও কার্যকর সরঞ্জাম, যেমন একটি শক্তিশালী লগিং সিস্টেম এবং একটি প্রোফাইলার সহ জাহাজ।
  • শক্তিশালী তৃতীয় পক্ষের সহকারী লাইব্রেরি সহ স্ট্যান্ডার্ড লাইব্রেরিতে নেই এমন সাধারণ সমস্যার জন্য শক্তিশালী সম্প্রদায় সমর্থন ।

আমি ফেরার পথে একটি ডেলফি জকি, কিন্তু এটি পাস্কাল শিকড়গুলি থেকে দূরে চলে গেছে যখন এটি আমাকে অন্য কোনও কিছুতে টাইপকাস্ট করার অনুমতি দেয়, একটি লা সি / সি ++:var I: Integer; Pointer(I)^ := $00;
জেসি সি স্লিকার

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

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

1
@ জেসি: পাস্কালের মূল উইথ সংস্করণটি বৈকল্পিক রেকর্ডকে মঞ্জুরি দেয়নি? আইআইআরসি তারা শেষ পর্যন্ত শক্তিশালী টাইপিং বিকৃত করতে এত বেশি ব্যবহৃত হয়ে যায় যে বোরল্যান্ড এবং অন্যরা কেবলমাত্র টাইপকাস্টগুলি আরও সহজ করে তোলার জন্য সিদ্ধান্ত নিয়েছে কারণ প্রত্যেকে যেভাবেই এটি করছে it
ম্যাসন হুইলারের

en.wikipedia.org/wiki/Pascal_(programming_language)#Divisions এবং en.wikipedia.org/wiki/Pascal_(programming_language)#Criticism সেইসাথে pascal-central.com/ppl/chapter3.html মনে ইঙ্গিত এটা অংশ ছিল 1983 সালে প্রথম মান। আমি ১৯৯৪ সালের তারিখে মনে হয় রাইনের কিছু উল্লেখ দেখতে পাই, তাই আমি হ্যাঁ বলি এটি হয়েছে did আমি মনে করি সমস্যাযুক্ত অংশটি এটিকে এ জাতীয় রূপান্তরিত করার অনুমতি দিচ্ছিল (একই ধরণের মেমরি গ্রহণকারী রূপগুলির ক্ষেত্রগুলি সি এর ইউনিয়নের মতো)। এগুলি যদি কেবল কোনও স্কোপিং প্রক্রিয়া হিসাবে ব্যবহৃত হয় এবং মেমরি লেআউট সুপারসেটের জন্য হয় তবে এটি আরও শক্তিশালী টাইপ করা উচিত।
জেসি সি স্লিকার 15

2

এক্ষেত্রে বিবেচনার জন্য একটি বিষয় হল সময় ঘুরানো।

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

আমি জাভার চেয়ে পার্লের চেয়ে বেশি উত্পাদনশীল।

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

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


1

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


1
"বয়সের সাথে সাথে হার্ডওয়্যারটির পরিধান এবং টিয়ার চারপাশের কাজ" ...?
j_random_hacker

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

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

1
আমি এটি উল্লেখ করার জন্য উল্লেখ করেছি যে একা প্রোগ্রামগুলি বাগের উত্স নাও হতে পারে, এটি হার্ডওয়্যার বা অন্যান্য বাহ্যিক কারণও হতে পারে।
vpit3833

1

ভাষাগুলি নিয়ে কথা বলার পরিবর্তে ভাষা-বৈশিষ্ট্যগুলি নিয়ে কী কথা বলা

  • জাভা আপনাকে ব্যতিক্রমগুলি সম্পর্কে চিন্তা করতে বাধ্য করে (নিক্ষেপ ...) এবং আপনাকে অবশ্যই এই ব্যতিক্রমগুলি প্রকাশ বা পরিচালনা করতে হবে। এটি কি সত্যই আমাকে ত্রুটিগুলি ভুলে যাওয়া থেকে বিরত রাখছে বা আমি সিস্টেম এক্সেক্সশন থেকে প্রাপ্ত আরও ব্যতিক্রমগুলি ব্যবহার করছি যা এই পরিচালনার প্রয়োজন নেই?
  • "চুক্তি অনুসারে নকশা" (http://en.wikedia.org/wiki/Design_by_contract) সম্পর্কে কী যা আমাকে প্রাক ও পোস্টকন্ডিশন সম্পর্কে ভাবতে বাধ্য করে। আমি সি # -4.0 দিয়ে এখন সম্ভব এটি পড়েছি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.