(পাইথন) ভাষার পরিবর্তনগুলি ধরে রাখার কৌশল


16

রাইটিং কোড যা এখনও থেকে বছর চলবে

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

উদাহরণস্বরূপ আমি পাইথন ব্যবহার করছি, তবে বিষয়টি বিশেষত পাইথনের মধ্যে সীমাবদ্ধ নয়।

পাইথন সামঞ্জস্যতা সংক্রান্ত নথি

পাইথনের ক্ষেত্রে, পিছনে-অসামঞ্জস্যিত পরিবর্তনের জন্য নথির কয়েকটি রূপরেখা রয়েছে।

PEP-5

পিইপি 5 অনুযায়ী :

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

ব্যক্তিগতভাবে, আমি বিবেচনা করি যে এক বছর বরং সংক্ষিপ্ত। এর অর্থ আমি কিছু কোড লিখতে পারি এবং এখন থেকে 1½ বছর পরে এটি আর চলবে না।

পিইপি 291

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

পিইপি 387

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

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

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

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

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

পোর্টিং নির্দেশিকা

নথি উপরে বর্ণিত ছাড়াও, প্রতিটি পাইথন সংস্করণ একটি পোর্টিং গাইডলাইন সাথে আসে: পাইথন 3.2 থেকে porting , পাইথন 3.3 পোর্ট , ইত্যাদি

দরকারী সামঞ্জস্য

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

প্রোগ্রামারদের দৃষ্টিকোণ থেকে

একজন প্রোগ্রামার হিসাবে, আমি জানি যে পাইথন ভবিষ্যতে পরিবর্তিত হবে এবং লোকেরা - বিশেষত আমি নিজে - আমার কোডটি এখন থেকে কয়েক বছর ধরে একটি পাইথন সংস্করণে চালানোর চেষ্টা করবে যা এক, দুটি বা সম্ভবত তিনটি ছোটখাটো সংস্করণ up সবকিছুই সামঞ্জস্যপূর্ণ হবে না এবং বাস্তবে এটি ব্যর্থ হবে এমন কোডের সাথে উপস্থিত হওয়া সহজ (আমি একবার কোড স্টেটিংয়ের মুখোমুখি হয়েছি if sys.version[:3] != '2.3': print 'Wrong version, exiting')। আমি যা খুঁজছি তা হ'ল ভবিষ্যতে আমার কোডটি নিরবচ্ছিন্নভাবে চালিত হওয়ার সম্ভাবনা বাড়ানোর জন্য কী করা উচিত এবং কী করবেন না সে সম্পর্কে একটি নির্দেশিকা of

এরকম কোনও নির্দেশিকা আছে কি? আমি পাইথন কোডটি কীভাবে লিখব যা ভবিষ্যতে এখনও চলবে?

আমার প্রশ্ন, পাইথন কোর উভয় সম্পর্কিত তার আদর্শ লাইব্রেরিতে, কিন্তু সাধারণভাবে ব্যবহার করা অ্যাড-অন লাইব্রেরি, বিশেষ করে numpy, scipy, matplotlib


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

  • import moduleএর চেয়ে বেশি ভবিষ্যত-প্রমাণ from module import *, কারণ moduleএক বা একাধিক নতুন ফাংশন / শ্রেণি বৃদ্ধি পেলে পরবর্তীকৃত কোডটি ভেঙে দিতে পারে ।

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

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

উত্তর:


13

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

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

  • ইউনিট পরীক্ষা লিখুন। এমনকি আপনি জানেন এমন জিনিসগুলির জন্যও তাদের প্রয়োজন হয় না।

  • জনপ্রিয় / ভাল-নকশা করা / স্থিতিশীল লাইব্রেরি এবং প্রযুক্তি ব্যবহার করে, অজনপ্রিয় (এ কারণেই শীঘ্রই অসমর্থিত হওয়ার সম্ভাবনা রয়েছে) এড়ানো

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

  • সহজ, স্পষ্ট কোড লিখুন যা এর অনুমানগুলি সম্পর্কে সুস্পষ্ট

  • মডুলার, কমপোজেবল কোড লিখুন। যদি কিছু কোড অবশ্যই বিপজ্জনক কিছু করে (ভবিষ্যত-প্রমাণ অর্থে), এটিকে আলাদা করুন যাতে এটি পরিবর্তন করতে হয়, বাকি কোডটি না করে।

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

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

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


4

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


0

পাইথন 2 -> পাইথন 3 এর জন্য একটি পাইথন 2to3 গ্রন্থাগার ইতিমধ্যে ইনস্টল করা আছে (এটি আসল পাইথন প্যাকেজ সহ আসে)।

তার ভিত্তিতে, নতুন সংস্করণ প্রকাশের সাথে সাথেই, একই সাথে নতুন লাইব্রেরি থাকা উচিত যা প্রতিটি নতুন সংস্করণের সাথে আসে। তবে, মার্তিজান যেমন বলেছিলেন, এগুলির মতো গ্রন্থাগারগুলি কেবলমাত্র প্রধান সংস্করণগুলির জন্য প্রকাশিত হবে (সংস্করণ 3.0.০) তবে ছোটখাটো সংস্করণ নয় (যেমন ৩.২)। তবে, 3.0 এবং 3.2 (বা অন্য কোনও ছোটখাটো সংস্করণ) এর মধ্যে কোনও সামঞ্জস্যের সমস্যা হওয়া উচিত নয়, সুতরাং 3.0 সংস্করণে রূপান্তর করা ভাল হওয়া উচিত।

এছাড়াও, আমি আপনাকে এই প্রশ্নটি দেখুন পরামর্শ দিই ।


1
না, 2to3 আপনাকে কেবলমাত্র মূল সংস্করণ ব্যবধানে কোড আপগ্রেড করতে সহায়তা করে; ছোটখাটো সংস্করণ জুড়ে কোড আপগ্রেড করার জন্য কোনও লাইব্রেরি নেই (প্রয়োজনীয়)।
মার্টিজন পিটারস

@ মার্তিজজনপিটার্স মাইনর সংস্করণগুলিতে সামঞ্জস্যতা সংক্রান্ত সমস্যাগুলি হওয়া উচিত নয়, কারণ সেখানে অত্যধিক বড় পরিবর্তন হওয়া উচিত নয়। যদি সামঞ্জস্যের সমস্যা এবং বড় পরিবর্তন হয় তবে সম্পূর্ণ নতুন সংস্করণ প্রকাশ করা উচিত।

0

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

একে ছয় (পিপি পৃষ্ঠা) বলা হয় । এটি পাইথন লাইব্রেরিটি অজগর 2 এবং অজগর 3 উভয়কেই কোড লিখতে সাহায্য করার জন্য নিবেদিত I've আমি জালটি ঘেঁষে ধরে বেশ কয়েকটি প্রকল্পে এটি নিয়োজিত দেখেছি, তবে নামগুলি এই মুহূর্তে আমার হাত থেকে রক্ষা পেয়েছে।


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