কোডের সংরক্ষণাগার দীর্ঘায়ু বৃদ্ধি


11

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

কোনও গবেষণার সম্পর্কে জানুন (বা সেই অভাবের উদাহরণ / উপাখ্যান) যা সাধারণ বৈজ্ঞানিক কোড বা অন্যান্য সফ্টওয়্যারটির অর্ধ-জীবন অনুমান করার চেষ্টা করেছে (এটি যদি কোনও যুক্তিসঙ্গত প্রশ্নও হয়?)


উত্তর:


8

টেক্সের পরিকল্পিত দীর্ঘায়ু মনে আসে:

“১৯ 1977 সালে এই শুরু হওয়ার পরে, আমি যে টেক্স গবেষণা প্রকল্প শুরু করেছি তা দুটি বড় লক্ষ্য দ্বারা পরিচালিত হয়েছিল। প্রথম লক্ষ্যটি ছিল গুণমান: আমরা এমন দস্তাবেজগুলি তৈরি করতে চেয়েছিলাম যা কেবল খুব ভাল ছিল না, তবে আসলে সেরা। (…) দ্বিতীয় প্রধান লক্ষ্য ছিল সংরক্ষণাগার: প্রিন্টিং প্রযুক্তিতে যতটা সম্ভব পরিবর্তন থেকে স্বাধীন হতে পারে এমন সিস্টেম তৈরি করা। পরবর্তী প্রজন্মের মুদ্রণ ডিভাইসগুলি যখন আসে তখন আমি নতুনভাবে সমস্ত সমস্যার সমাধান না করে ইতিমধ্যে অর্জন করা একই গুণটি ধরে রাখতে সক্ষম হতে চাই। আমি এমন কিছু ডিজাইন করতে চেয়েছিলাম যা 100 বছরেও ব্যবহারযোগ্য হবে। ”- ডোনাল্ড ই নুথ: ডিজিটাল টাইপোগ্রাফি, পি। 559 ( http://de.wikedia.org/wiki/TeX থেকে উদ্ধৃত )

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

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

টেক্সের জন্য, 1990 এর নিবন্ধে হিমায়িত ঘোষণা করা হয়েছে

টেক্স এবং মেটাফন্টের ভবিষ্যত http://www.ntg.nl/maps/05/34.pdf

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

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

যদি আমি আসল প্রশ্ন থেকে খুব বেশি হতাশ হই তবে আমাকে ক্ষমা করুন। [ক্রস পোস্ট 'প্রজননযোগ্য গবেষণার জন্য বিজ্ঞানীদের' দ্বারা পোস্ট করেছেন, reproducible-research@googlegroups.com]


ম্যাথিয়াসের উপরে এটি আনার জন্য ধন্যবাদ। এবং scicomp স্বাগতম!
অরন আহমদিয়া

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

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

4

এমন অনেক প্রযুক্তিগত চ্যালেঞ্জ রয়েছে যা গণনা ফলাফলের যথার্থ বিট-বিট প্রজননযোগ্যতা অর্জন করা অত্যন্ত কঠিন।

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

নিম্ন স্তরে, কোডটি নতুন সংকলক সহ বা বিভিন্ন সংকলক অপ্টিমাইজেশন চালু করে কোড দ্বারা ব্যবহৃত কোনও লাইব্রেরি পুনরায় সংযোগ করা সমস্যার কারণ হতে পারে। একটি কারণ হ'ল কোডটি পুনরায় সংযুক্ত করার সময় কোডে বিভিন্ন ক্রিয়াকলাপ একটি ভিন্ন ক্রমে সম্পাদিত হতে পারে। যেহেতু ভাসমান পয়েন্ট সংযোজনটি মিশ্রণযোগ্য নয় (a + b) + c <> a + (b + c), এটি বিভিন্ন ফলাফল দিতে পারে।

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

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

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

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


যাইহোক, বিভিন্ন সংকলক সংস্করণ সহ সমস্যাটি ব্যাখ্যা করে যে কেন উত্স কোডের একটি "হিমায়িত" সংস্করণ বিতরণ করার পক্ষে এটি পর্যাপ্ত নয় produced সংকলিত কোডটি যা উত্পাদিত হয় তা সংকলকটির কোন সংস্করণ ব্যবহৃত হয় তার উপর নির্ভর করে পরিবর্তিত হতে পারে এবং এটি পারে বিভিন্ন ফলাফল হতে পারে।
ব্রায়ান বোর্চারস

2

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

আমি যেমন বলেছি, আমি এই উত্তরটি অসন্তুষ্টির সাথে খুঁজে পাই। আমি বিশ্বাস করি যে একটি ক্ষেত্র হিসাবে, গণনা বিজ্ঞান এমন সাহিত্য তৈরি করতে খুব বেশি সফল হয়নি যেটি বিশ্বাস প্রকাশ করে যে আমরা প্রকাশিত ফলাফলগুলি সঠিক এবং পুনরুত্পাদনযোগ্য। একই সাথে, আমি জিনিসগুলি আরও ভাল করার উপায়গুলি নিয়ে আসতে পারি না। নিশ্চিতভাবেই, উত্স কোডটি প্রকাশ করা যা কোনও কাগজের সাথে যায় সেগুলি কার্যকর। একই সময়ে, সৎ ব্যক্তি প্রত্যেকে সম্মত হবেন যে কোনও কাগজের ফলাফলগুলি সাধারণত কোডের বিভিন্ন সংস্করণ দ্বারা উত্পাদিত হবে যা বেশিরভাগ ক্ষেত্রে বিভিন্ন সীমানা পরিস্থিতি, ডান হাতের বিভিন্ন অংশ ইত্যাদি বর্ণনা করে এমন হ্যাক থাকে A একই কোড বিভিন্ন সংস্করণ সঙ্গে আসা। এটি পাঠকের পক্ষে শুরু হওয়া বিশ্রীকর, কোডটি আজ বৃহত্তর হিসাবে বড় আকারে হয় তবে এটি সম্পূর্ণরূপে অনুপ্রেরণামূলক - আমার দুটি সাম্প্রতিক কাগজপত্রে কোডগুলি প্রায় 20,000 লাইনের এবং চুক্তিতে নির্মিত কোড ব্যবহার করেছে usedI (কোডের 600০০,০০০ লাইন) এবং ট্রিলিনোস (১.৫ এম লাইন) কোড)) এটি কোনও সম্ভাব্য পাঠকের কী তথ্য সরবরাহ করে? (আমার বলা উচিত যে আমার কোডগুলি তবুও উপলভ্য)


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

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

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

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

আমি যথেষ্ট নিশ্চিত যে আপনি আজ কাজ করার জন্য 15 বছর আগে লিখিত কোডটি পেতে পারেন, যদি খুব ভাল কাজের সাথে থাকে। আমি নিশ্চিত যে আপনি আজ থেকে 15 বছরের মধ্যে চালিত কোডগুলি পেতে পারেন।
ওল্ফগ্যাং ব্যাঙ্গার্থ

2

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

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


1

আমি বিশ্বাস করি যে ভাষার পছন্দ যতদূর যায় একটি মানক (যেমন সি / ফোর্টরান / সি ++) ব্যবহার করে "সেরা অনুশীলন" হিসাবে যোগ্যতা অর্জন করবে qual যদি একটি প্যাকেজ 10 টি অন্যান্য লিবস / প্যাকেজগুলির উপর নির্ভর করে, বিশেষত অস্পষ্ট ভাষায় লেখা থাকে তবে তা অবশ্যই দীর্ঘায়ু জন্য খারাপ। অনেক প্রকল্প কিছু সময়ের পরে এতিম হয়ে যায়। আমি মনে করি না যে বিএলএএস / ল্যাপাক, পিইটিএসসি, এফএফটিডাব্লু, এমপিআই ইত্যাদির মতো বড় লিবিস / এপিআই যে কোনও সময় শীঘ্রই অদৃশ্য হয়ে যাবে। BLAS ইতিমধ্যে বেশ পুরানো।

নিম্নলিখিত কোডের টুকরোটি ( http://www.math.utah.edu/software/c-with-fortran.html থেকে চুরি করা হয়েছে ) ফোর্টরান pred 77 এর পূর্বাভাস দিয়েছে, চার হেরফের জন্য হলিরিথ ধ্রুবক ব্যবহার করে তবে ঠিক ৪০-৫০ বছর পরে সংকলন করে জিএনইউ ফোর্টরান সংকলক:

stali@x61:~$ cat olde.f

       CALL S(12HHello, world, 12)
       END
       SUBROUTINE S(MSG,N)
       INTEGER K, N, M
       INTEGER MSG(1)
       M = (N + 3) / 4
       WRITE (6,'(20A4)') (MSG(K), K = 1,M)
       END

stali@x61:~$ gfortran -std=legacy olde.f; ./a.out
Hello, world

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


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