গতিশীল ভাষাগুলির কি আসল সুবিধা আছে? [বন্ধ]


29

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

গতিশীল টাইপ করা ভাষা আপনাকে যে কোনও ভেরিয়েবলের মধ্যে কোনও মান রাখতে দেয়। সুতরাং উদাহরণস্বরূপ আপনি নিম্নলিখিত ফাংশন (psuedocode) লিখতে পারেন:

void makeItBark(dog){
    dog.bark();
}

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

আপাতদৃষ্টিতে, এটি আপনাকে নমনীয়তা দেয়।

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

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

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

আমি কিছু অনুপস্থিত করছি? গতিশীল টাইপ করা ভাষা ব্যবহার করে আমি আসলে কী অর্জন করছি?


6
makeItBark(collections.namedtuple("Dog", "bark")(lambda x: "woof woof"))। এই যুক্তিটি এমনকি কোনও শ্রেণি নয় , এটি একটি নামবিহীন নাম টিপল। হাঁসের টাইপিং ("যদি এটি ... এর মতো ঘেউ ঘেউ করে ...") আপনাকে মূলত শূন্য বিধিনিষেধ এবং কোনও সিনট্যাকটিক ওভারহেড না দিয়ে অ্যাডহক ইন্টারফেস করতে দেয়। আপনি জাভা জাতীয় ভাষায় এটি করতে পারেন, তবে আপনি প্রচুর অগোছালো প্রতিফলন সহ শেষ করেন। জাভাতে কোনও ফাংশনের জন্য যদি অ্যারেলিস্ট প্রয়োজন হয় এবং আপনি এটি অন্য সংগ্রহের ধরণ দিতে চান তবে আপনি এসএল। অজগর যে এমনকি উপরে আসতে পারে না।
ফোশি

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

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

2
@ ফোশি পাইথনের যুক্তিটি এখনও একটি নির্দিষ্ট ধরণের হতে হবে - উদাহরণস্বরূপ, এটি একটি সংখ্যা হতে পারে না। আপনি বস্তুর আপনার নিজের অ্যাড-হক বাস্তবায়ন, যা কিছু কাস্টম মাধ্যমে তার সদস্যদের আহরণ যদি getMemberফাংশন, makeItBarkআপ হাতাহাতি কারণ আপনার নামক dog.barkপরিবর্তে dog.getMember("bark")। কোডটি কী কাজ করে তা হ'ল প্রত্যেকে পাইথনের নেটিভ অবজেক্ট টাইপটি ব্যবহার করতে সুস্পষ্টভাবে সম্মত হয়।
ডোভাল

2
@ ফোশি Just because I wrote makeItBark with my own types in mind doesn't mean you can't use yours, wheras in a static language it probably /does/ mean that.আমার উত্তরে যেমন উল্লেখ করেছেন, সাধারণভাবে এটি হয় না । এটি জাভা এবং সি # এর ক্ষেত্রে, তবে সেই ভাষাগুলিতে পঙ্গু টাইপ এবং মডিউল সিস্টেম রয়েছে যাতে তারা স্ট্যাটিক টাইপিং কী করতে পারে তার প্রতিনিধি না হন। আমি makeItBarkবেশ কয়েকটি স্ট্যাটিক্যালি-টাইপ করা ভাষায় এমনকি সি ++ বা ডি-এর মতো অ-কার্যকরী ভাষাতেও পুরোপুরি জেনেরিক লিখতে পারি
ডোভাল

উত্তর:


35

ডায়নামিকালি-টাইপ করা ভাষাগুলি ইউনিক-টাইপযুক্ত

টাইপ সিস্টেমের সাথে তুলনা করা , গতিশীল টাইপিংয়ের কোনও সুবিধা নেই। ডায়নামিক টাইপিং স্ট্যাটিক টাইপিংয়ের একটি বিশেষ কেস - এটি একটি স্ট্যাটিকালি-টাইপড ভাষা যেখানে প্রতিটি ভেরিয়েবলের একই ধরণের থাকে। আপনি জাভাতে একই জিনিস অর্জন করতে পারেন (বিয়োগ সংক্ষিপ্তকরণ) প্রতিটি ভেরিয়েবলকে টাইপযুক্ত করে Objectএবং "অবজেক্ট" মানগুলি টাইপযুক্ত করে Map<String, Object>:

void makeItBark(Object dog) {
    Map<String, Object> dogMap = (Map<String, Object>) dog;
    Runnable bark = (Runnable) dogMap.get("bark");
    bark.run();
}

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

স্থিতিশীল ভাষায় হাঁসের বাকল তৈরি করা

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

class Barkable a where
    bark :: a -> unit

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

তারপরে আপনি Barkableসীমাবদ্ধতার নিরিখে জেনেরিক ফাংশন লিখতে পারেন :

makeItBark :: Barkable a => a -> unit
makeItBark barker = bark (barker)

এটি বলে যে এটি যে makeItBarkকোনও ধরণের সন্তোষজনক Barkableপ্রয়োজনীয়তার জন্য কাজ করবে । এটি interfaceজাভা বা সি # তে একটির মতো বলে মনে হতে পারে তবে এর একটি বড় সুবিধা রয়েছে - প্রকারগুলিকে কোন ধরণের শ্রেণিগুলি তারা সন্তুষ্ট করে তা নির্দিষ্ট করতে হবে না । আমি বলতে পারি যে টাইপ Duckহয় Barkableযে কোন সময়ে, এমনকি যদি Duckএকটি তৃতীয় পক্ষের টাইপ আমি লিখি নি। প্রকৃতপক্ষে, এতে কোনও ব্যাপার নেই যে লেখক Duckকোনও barkফাংশন লিখেনি - যখন আমি Duckসন্তুষ্ট ভাষায় বলি তখন আমি সত্য ঘটনাটি প্রদান করতে পারি Barkable:

instance Barkable Duck where
    bark d = quack (punch (d))

makeItBark (aDuck)

এটি বলছে যে Duckএস বার্ক করতে পারে এবং তাদের ছাল ফাংশন কোয়াক তৈরির আগে হাঁসের খোঁচা দিয়ে প্রয়োগ করা হয় । উপায়টি অতিক্রম করে, আমরা makeItBarkহাঁসের ডাকতে পারি ।

Standard MLএবং OCamlআরও নমনীয় যে আপনি একই ধরণের শ্রেণি একাধিক উপায়ে সন্তুষ্ট করতে পারেন । এই ভাষাগুলিতে আমি বলতে পারি যে প্রচলিত ক্রমগুলি প্রচলিত ক্রম ব্যবহার করে অর্ডার করা যেতে পারে এবং তারপরে ঘুরিয়ে দিয়ে বলতে পারি যে তারা বিভাজ্যতার দ্বারাও অনুগামী হয় (যেমন 10 > 510 কারণ 5 দ্বারা বিভাজ্য)। হাসকেলে আপনি কেবল একবার টাইপ শ্রেণি ইনস্ট্যান্ট করতে পারেন। (এটি হাস্কেলকে স্বয়ংক্রিয়ভাবে জানতে দেয় যে barkহাঁসের দিকে কল করা ঠিক আছে ; এসএমএল বা ওসিএএমএলে আপনাকে কোন bark ফাংশনটি চান তা সম্পর্কে আপনাকে স্পষ্ট করে বলতে হবে , কারণ একাধিকের বেশি থাকতে পারে))

সংক্ষিপ্ত রুপ

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

সঠিক তবে খারাপ-টাইপ করা প্রোগ্রাম

ন্যায়সঙ্গত হওয়ার জন্য, স্ট্যাটিক টাইপিং অগত্যা কিছু প্রোগ্রামকে নিয়মিত করে দেয় যা প্রযুক্তিগতভাবে সঠিক যা টাইপ চেকার এটি যাচাই করতে পারে না। উদাহরণ স্বরূপ:

if this_variable_is_always_true:
    return "some string"
else:
    return 6

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

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

আপেল এবং কমলা

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


2
আপনি প্রথম অনুচ্ছেদের জন্য আপনার উত্সটি

2
@ ম্যাট রে: ১, আমি ধরে নিই যে এটি গুরুত্বপূর্ণ নয়; আমি এটিকে সংক্ষিপ্ততার অধীনে সম্বোধন করেছি। পুনরায়: 2, যদিও আমি এটি স্পষ্টভাবে কখনই বলেছি না, "ভাল" বলতে আমি বোঝাতে চাইছি "পুরোপুরি টাইপ ইনফারেন্স আছে" এবং "একটি মডিউল সিস্টেম রয়েছে যা আপনাকে জাভা / / এর মতো আপ-ফ্রন্টের মতো নয়, সত্যতার পরে স্বাক্ষরগুলি টাইপ করার কোডটি মেলানোর অনুমতি দেয় " " সি # এর ইন্টারফেস। পুনরায় 3, প্রমাণের বোঝা আপনাকে বোঝানোর জন্য যে কীভাবে দুটি ভাষা সমতুল্য বাক্য গঠন এবং বৈশিষ্ট্য সহ দেওয়া হয়েছে, একটি গতিশীল টাইপযুক্ত এবং অন্যটি সম্পূর্ণ টাইপের অনুমান সহ, আপনি উভয় ক্ষেত্রে সমান দৈর্ঘ্যের কোড লিখতে সক্ষম হবেন না ।
ডোভাল

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

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

1
@ ডোভাল: সত্য। বিটিডাব্লু, ল্যাম্বডে স্বরলিপিটি কেবলমাত্র কার্যকরী প্রোগ্রামিংয়ে ব্যবহৃত হয় না: যতদূর আমি জানি, স্মলটকের অজ্ঞাতনামা ব্লক রয়েছে এবং স্মলটালক যেমনটি পেতে পারে তেমন অবজেক্ট-ভিত্তিক। সুতরাং, প্রায়শই সমাধানটি হ'ল কিছু বেনামে কোডের একটি বেনামে ব্লককে ঘিরে, আমি মনে করি এই দুটি কনস্ট্রাক্টস মূলত দুটি ভিন্ন দৃষ্টিকোণ (কার্যকরী এবং বস্তু-কেন্দ্রিক একটি) থেকে একই ধারণাটি প্রকাশ করে।
জর্জিও

11

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

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

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

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

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

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

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


3
উত্তর করার জন্য ধন্যবাদ. আপনি বলেছিলেন যে কিছু লোকের কী করা উচিত তা সংকলক দ্বারা বলা অপছন্দ করে। [..] তারা একটি অনুসন্ধানের প্রোগ্রামিং স্টাইল পছন্দ করে যেখানে আপনি কোন পরিকল্পনা ছাড়াই প্রকৃত ব্যবসায়ের কোড লিখেন যা কোন ধরণের এবং কী যুক্তি ব্যবহার করবে তা আপনাকে সঠিকভাবে জানায় '' এটি এমন জিনিস যা আমি বুঝতে পারি না: প্রোগ্রামিং বাদ্যযন্ত্রের মতো নয়। সংগীতে আপনি যদি কোনও ভুল নোট আঘাত করেন তবে এটি দুর্দান্ত শোনাতে পারে। প্রোগ্রামিংয়ে, আপনি যদি এমন কোনও ফাংশনে পাস করেন যা না থাকার কথা, তবে সম্ভবত আপনি বাজে বাগ পেতে পারেন। (পরবর্তী মন্তব্যে অবিরত)।
আভিভ কোহন

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

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

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

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

5

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

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


2
লোকেরা কি তাদের ইউনিট পরীক্ষাগুলি (একটি ভাল পরীক্ষার কভারেজ লক্ষ্য করার সময়) দিয়ে একটি বেসিক স্ট্যাটিক টাইপ সিস্টেমটি অবশেষে পুনরায় প্রয়োগ করার ঝোঁক রাখে না?
ডেন

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

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

2
@ ডেন: খুব ভাল পয়েন্ট: আমি প্রায়শই পাইথন কভার ত্রুটিগুলিতে লিখি এমন ইউনিট পরীক্ষাগুলি পর্যবেক্ষণ করি যা স্থিতভাবে টাইপ করা ভাষায় সংকলক দ্বারা ধরা পড়ে be
জর্জিও

@ ম্যাটফেনউইক: আপনি লিখেছেন যে এটি একটি সুবিধা যে "... একটি গতিশীল ভাষার জন্য, একটি স্ট্যাটিক টাইপ সিস্টেমটি ডিজাইন, প্রয়োগ, পরীক্ষা করা এবং রক্ষণাবেক্ষণের প্রয়োজন হয় না।" এবং ডেন পর্যবেক্ষণ করেছেন যে আপনাকে প্রায়শই আপনার কোডগুলিতে সরাসরি আপনার ধরণের ডিজাইন করতে এবং পরীক্ষা করতে হয়। সুতরাং প্রচেষ্টা সরানো হয়নি তবে ভাষা নকশা থেকে অ্যাপ্লিকেশন কোডে সরানো হয়েছে।
জর্জিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.