চঞ্চল বিকাশের জন্য গতিশীল ভাষা কি অসুবিধে রয়েছে?


12

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

দেখে মনে হচ্ছে স্থিরভাবে টাইপ করা ভাষাগুলি রিফ্যাক্টরিং এবং বিপরীত প্রকৌশলকে আরও সহজ করে তুলবে।

গতিশীল টাইপ করা ভাষায় রিফ্যাক্টরিং বা (স্বয়ংক্রিয়) বিপরীত প্রকৌশল কি কঠিন নয়? বাস্তব বিশ্বের প্রকল্পগুলি চতুর পদ্ধতি পদ্ধতির জন্য গতিময় টাইপ করা ভাষার ব্যবহার সম্পর্কে কী বলে?


5
চিত্রের মধ্যে ইঞ্জিনিয়ারিং কোড বিপরীত? আপনি কেন এলেলে করবেন?
ক্যাফগিকে

7
চঞ্চল মানে "কোড আগে, নথি পরে" নয়।
রোবট

@ ক্যাফগেক: কয়েকটি সুপারিশকৃত বই হ'ল হোয়াইটবোর্ডে ডায়াগ্রামগুলি আঁকার পরামর্শ দেয়, তারপরে কোড এবং শেষের সভার জন্য ইঞ্জিনিয়ার কোডটি ডায়াগ্রামে বিপরীত করে।
গেরেনুক

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

@ উইনস্টনওয়ার্ট - ভাল কল, আমি ট্যাগগুলিতে পরিবর্তন করেছি dynamic-typingএবংstatic-typing
কারসন 63000 3

উত্তর:


11

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

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

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

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


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

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

14

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

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


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

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

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

1
@ উইনস্টোনওয়ার্ট "তবে আপনি ম্যানুয়ালি রিফ্যাক্টর করতে পারেন, এবং গতিশীল ভাষাগুলি আসলে এটি মোটামুটি সহজ করে তোলে" - না, ম্যানুয়াল রিফ্যাক্টরিং স্কেল করে না। রিফ্যাক্টরিং 100% স্বয়ংক্রিয় না হওয়াতেও রিফ্যাক্টরিংয়ের জন্য সরঞ্জাম সমর্থন সবকিছু পরিবর্তিত করে (নীচের কেস স্টাডি স্নিপেটগুলি দেখুন - প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জারএইভি
166594/4334

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

8

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

আমি সত্যিই কোন সমস্যা দেখতে পাচ্ছি না।


"টাইপিংয়ের ক্ষেত্রে পাইথনের চেয়ে স্মার্টটাক এতটা আলাদা নয় tool যদিও, এটি টুলিংয়ের ক্ষেত্রে উল্লেখযোগ্যভাবে আলাদা" " - সম্ভবত এটির
igouy

3

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

গতিশীল টাইপযুক্ত ভাষার সাথে সরবরাহিত একটি রিফ্যাক্টরিং সরঞ্জামের শিল্প ব্যবহারের কেস স্টাডি এখানে দেওয়া হয়েছে:

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

বিশ্লেষণে দেখা গেছে যে গতিশীল চেহারা ক্লায়েন্টের মৃত্যুর সময় 40% ব্যয় করেছে, এটি অপ্রয়োজনীয় ছিল।

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

একটি ইন্টারফেসের রূপান্তরটি তৈরি করা এবং পরীক্ষার সময় বিকাশের অধীনে একটি বৃহত অ্যাপ্লিকেশন কোড হিমায়িত করতে পারে না। আমাদের মূল বিকাশ প্রবাহ থেকে কোড সংগ্রহের সমান্তরাল শাখায় রূপান্তরগুলি তৈরি এবং পরীক্ষা করতে হয়েছিল। যখন রূপান্তরটি পুরোপুরি পরীক্ষা করা হয়েছিল, তখন এটি একটি একক ক্রিয়ায় মূল কোড স্ট্রিমে প্রয়োগ করা হয়েছিল।

17,100 পরিবর্তনগুলিতে 35 টিরও কম বাগ পাওয়া গেছে। তিনটি সপ্তাহের মধ্যে সমস্ত বাগ দ্রুত সমাধান করা হয়েছিল।

পরিবর্তনগুলি যদি ম্যানুয়ালি করা হয় তবে আমরা অনুমান করি যে রূপান্তরের নিয়মগুলি বিকাশ করতে 235 ঘন্টার তুলনায় এটি 8,500 ঘন্টা সময় নিয়েছে।

পুনর্লিখন বিধিমালা ব্যবহার করে প্রত্যাশিত সময়ের 3% কাজটি শেষ হয়েছিল। এটি 36 এর একটি ফ্যাক্টর দ্বারা উন্নতি।

"একটি অ্যাপ্লিকেশন ডেটার স্তরের রূপান্তর" থেকে উইল লো-ব্লোজার ওপসলা 2002 2002

এছাড়াও - "অসম্ভব পরিবর্তন আনার সরঞ্জাম - বৃহত্তর ছোট্টালক প্রোগ্রামগুলিকে রূপান্তর করার জন্য একটি সরঞ্জামের সাথে অভিজ্ঞতা"


1

আপনার নীতিগুলি ভেবেছিল আমাকে সঠিক বলে মনে হচ্ছে ।

সি # এর মতো দৃ strongly়ভাবে টাইপ করা ভাষাগুলি এমন একটি কোড বেসের জন্য ভাল প্রার্থী যার জন্য ক্রমাগত পুনরায় ফ্যাক্টরিং প্রয়োজন। মূলত বাজারে বেশিরভাগ রি-ফ্যাক্টরিং সরঞ্জামগুলি (যেমন রেশার্পার, জাস্টকোড ইত্যাদি ..) স্ট্যাটিকালি টাইপড প্রোগ্রামিং ভাষায় খুব কার্যকর।

বাস্তব বিশ্বের প্রকল্পগুলি চতুর পদ্ধতি পদ্ধতির জন্য গতিময় টাইপ করা ভাষার ব্যবহার সম্পর্কে কী বলে?

বিকাশকারী দলের জন্য যা চতুর / স্ক্রাম পদ্ধতি অনুশীলন করে এটি বর্মের নীচে পুনঃ ফ্যাক্টরিং সরঞ্জামগুলির ভাল সেট থাকা খুব সহায়ক (এমনকি সমালোচনামূলক)। অন্যথায়, আসন্ন স্প্রিন্টে সমস্ত হঠাৎ পরিবর্তনগুলি সংশোধন বা পুনরায় নকশা করার একটি দুঃস্বপ্ন হতে পারে।

সুতরাং, চতুর পদ্ধতিটি স্থিতিযুক্ত টাইপ করা ভাষাগুলি বা গতিশীল একবারে সুবিধা দেয় না। এটি যা সরবরাহ করে তা হ'ল একটি শক্ত অ্যাপ্লিকেশন তৈরির পুনরাবৃত্তি পদ্ধতি।


4
গতিশীল ভাষাগুলিতে সি # এমনকি অস্তিত্বের অনেক আগে অটোমেটেড রিফ্যাক্টরিং সরঞ্জাম ছিল এবং যখন নোটপ্যাড এখনও জাভা আইডিই সবচেয়ে শক্তিশালী ছিল।
Jörg ডব্লু মিটাগ

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

1
আপনি কেন এমনটি ভাবছেন, উদাহরণস্বরূপ জাভাস্ক্রিপ্ট একটি গতিশীল ভাষা, তবে রি-শার্পার সি # এর সাথে একই ধরণের কাজ করে না। দ্বিতীয়ত, আমি বলিনি যে "গতিশীল ভাষাগুলি জিনিসগুলি করতে ধীরে ধীরে"।
ইউসুবভ

যে সমস্ত লোক আপনাকে ইন্টেলিজ আইডিএ এনেছে - পাইচার্ম - "পুনর্নবীকরণকারী রিফ্যাক্টরিং নিরাপদে এবং তাত্ক্ষণিকভাবে বিশ্বব্যাপী কোড পরিবর্তনগুলি সম্পাদন করতে দেয় a একটি ফাইলের মধ্যে স্থানীয় পরিবর্তনগুলি জায়গায় জায়গায় সঞ্চালিত হয় plain কোনও পদ্ধতির মধ্যে কোডের কাঠামো উন্নত করার জন্য ফিল্ড / কনস্ট্যান্ট এবং ইনলাইন লোকাল, পদ্ধতিগুলি এবং ক্লাসগুলি স্থানান্তর করতে দীর্ঘতর পদ্ধতিগুলি ভেঙে ফেলার জন্য এক্সট্র্যাক্ট পদ্ধতি, সুপারক্র্লাস এক্সট্র্যাক্ট করুন, পুশ আপ করুন, ডাউন টানুন এবং সরান "" jetbrains.com/pycharm/features/index.html
igouy

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