উত্স কোড জেনারেশন কি একটি বিরোধী নিদর্শন?


118

যদি কিছু উত্পন্ন করা যায়, তবে সেই জিনিসটি কোড নয়, তথ্য is

দেওয়া হয়েছে, সোর্স কোড জেনারেশনের এই পুরো ধারণাটি কি ভুল বোঝাবুঝি নয়? এটি হ'ল যদি কোনও কিছুর জন্য একটি কোড জেনারেটর থাকে, তবে কেন সেটিকে কোনও উপযুক্ত ফাংশন হিসাবে তৈরি করবেন না যা প্রয়োজনীয় প্যারামিটারগুলি গ্রহণ করতে পারে এবং "উত্পন্ন" কোডটি করে যে সঠিক ক্রিয়া করতে পারে?

এটি যদি পারফরম্যান্সের কারণে করা হয়, তবে এটি সংকলকটির অভাব বলে মনে হচ্ছে।

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

আমি কি এখানে কিছু মিস করছি?

আমি জানি যে কোডটিও ডেটা। আমি যা বুঝতে পারি না তা হ'ল সোর্স কোড কেন উত্পন্ন ? কেন এটি এমন কোনও ফাংশন হিসাবে তৈরি করবেন না যা পরামিতিগুলি গ্রহণ করতে পারে এবং সেগুলিতে কাজ করতে পারে?


11
কোডের প্রজন্ম সঙ্গে যুক্ত শব্দই হলো metaprogramming
UselesssCat

4
en.wikedia.org/wiki/Code_as_data , Lisp, FP, पटकथा, metaprogramming, ভন নিউম্যান / পরিবর্তিত হার্ভার্ড আর্কিটেকচার ইত্যাদি। এটি আবশ্যকভাবে আবৃত করা হয়েছে । tl; dr পার্থক্য "উত্স কোড" বনাম "আউটপুট কোড", "কোড" বনাম "ডেটা" ইত্যাদি জিনিসগুলি সরলকরণের উদ্দেশ্যে । এগুলি কখনই গোড়ামীবদ্ধ হওয়া উচিত নয় ।
ভ্যাক্সকুইস

9
@ উটকু, কোড জেনারেশন করার আরও ভাল কারণগুলি প্রায়শই আপনার বর্তমান ভাষা যে ভাষায় প্রকাশ করতে পারে তার চেয়ে উচ্চ স্তরের বর্ণনা প্রদানের সাথে সম্পর্কিত । সংকলকটি কার্যকর কোড তৈরি করতে পারে বা করতে পারে না সেটির সাথে আসলেই কিছু করার নেই। পার্সার জেনারেটরগুলি বিবেচনা করুন - একটি লেসার দ্বারা উত্পাদিত flexবা পার্সার দ্বারা উত্পাদিত bisonপ্রায় নিশ্চিতভাবেই আরও অনুমানযোগ্য, আরও সঠিক, এবং সি-এ হাতের লিখিত সমতুল্যদের তুলনায় প্রায়শই দ্রুত কার্যকর করা হবে; এবং অনেক কম কোড থেকে নির্মিত (এভাবে বজায় রাখার জন্য কম কাজ করা)।
চার্লস ডাফি 1

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

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

উত্তর:


149

উত্স কোড জেনারেশন একটি বিরোধী নিদর্শন?

প্রযুক্তিগতভাবে, যদি আমরা কোড তৈরি করি তবে এটি উত্স নয় যদিও এটি পাঠ্য যা মানুষের দ্বারা পঠনযোগ্য। উত্স কোডটি মূল কোড যা কোনও মানব বা অন্যান্য সত্য বুদ্ধি দ্বারা উত্পাদিত হয়, যান্ত্রিকভাবে অনুবাদ হয় না এবং (সত্য) উত্স থেকে প্রত্যক্ষভাবে পুনরুত্পাদনযোগ্য হয় না (প্রত্যক্ষ বা পরোক্ষভাবে)।

যদি কিছু উত্পন্ন করা যায় তবে সেই জিনিসটির চেয়ে ডেটা, কোড নয়।

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

প্রসেসর মেমরির বাইরে নির্দেশাবলী কার্যকর করে। একই স্মৃতি যা ডেটার জন্য ব্যবহৃত হয়। প্রসেসর নির্দেশাবলী কার্যকর করার আগে, প্রোগ্রামটি ডেটা হিসাবে মেমরিতে লোড হয় ।

সুতরাং, সবকিছু ডেটা , এমনকি কোড

[উত্পন্ন কোডটি ডেটা হ'ল) ​​দেওয়া, কোড জেনারেশনের এই পুরো ধারণাটি ভুল বোঝাবুঝি নয়?

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

এটি হ'ল যদি কোনও কিছুর জন্য একটি কোড জেনারেটর থাকে, তবে কেন সেটিকে কোনও উপযুক্ত ফাংশন হিসাবে তৈরি করবেন না যা প্রয়োজনীয় প্যারামিটারগুলি গ্রহণ করতে পারে এবং "উত্পন্ন" কোডটি করে যে সঠিক ক্রিয়া করতে পারে?

এটি একটি উপায়, তবে আরও কিছু রয়েছে।


কোড জেনারেশনের আউটপুট হ'ল পাঠ্য, যা কোনও কোনও মানুষের ব্যবহারের জন্য ডিজাইন করা।

সমস্ত পাঠ্য ফর্ম মানুষের ব্যবহারের উদ্দেশ্যে নয়। বিশেষত, উত্পন্ন কোড (পাঠ্য হিসাবে) সাধারণত সংকলক গ্রাহকের জন্য নয় মানুষের ব্যবহারের জন্য তৈরি।


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


1
মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ম্যাপেল_শ্যাফ্ট

65

ব্যবহারিক যুক্তি

ঠিক আছে, আমি জানি যে কোডটিও ডেটা। আমি যা বুঝতে পারি না তা হ'ল সোর্স কোড কেন উত্পন্ন?

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

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

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

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

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

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


1
আমি মনে করি এটি আপ-ভোট দেওয়া উত্তরের চেয়ে ভাল। বিশেষত, জাভা এবং ডাটাবেস প্রোগ্রামিংয়ের সাথে উল্লিখিত উদাহরণটি কোড জেনারেশন কেন ব্যবহার করা হয় এবং এটি একটি বৈধ সরঞ্জাম সেটিকে সম্বোধন করার একটি আরও ভাল কাজ করে।
Panzercrisis

আজকাল, জাভাতে কি কোনও ডিবি থেকে ডায়নামিক টেবিল তৈরি করা সম্ভব? বা কেবল একটি ওআরএম ব্যবহার করে?
নুমেনন

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

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

1
@ ফারাপ, "অবশ্যই দুই দশকেরও বেশি সময় ধরে সি ++ তে এটি সম্ভব ছিল" ... আমাকে কিছুটা ছোঁয়াতে হয়েছিল; আমি সর্বশেষে C ++ কোড করেছিলাম প্রায় 2 দশক পরে। :) তবে সি ++ সম্পর্কে আমার বাক্যটি যাইহোক খারাপভাবে তৈরি করা হয়েছিল। আমি এটি কিছুটা পরিবর্তন করেছি, এখন আমার কী বোঝানো উচিত তা পরিষ্কার হওয়া উচিত।
এএনও

44

কেন কোড জেনারেট?

কারণ পাঞ্চ কার্ড (বা নোটপ্যাডে Alt কোড ) সহ প্রোগ্রামিং করা একটি ব্যথা।

এটি যদি পারফরম্যান্সের কারণে করা হয়, তবে এটি সংকলকটির অভাব বলে মনে হচ্ছে।

সত্য। বাধ্য না হলে আমি পারফরম্যান্সের বিষয়ে চিন্তা করি না।

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

হুম, আপনি কী বলছেন তা ধারণা নেই।

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

এটি ঠিক রাখার আগ পর্যন্ত যা ঠিক আছে। কোন মুহুর্তে আপনি সকলেই মারা যেতে পারেন।

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

এটি একটি কোড বেস যা আমি দাঁড়াতে পারছি না এমন একটি ফ্র্যাঙ্কেনস্টাইন দানব প্যাচওয়ার্কের অর্ধেকটি রেখে গেছে। উত্পন্ন কোডটি অচ্ছুত কোড। অচ্ছুত কোডটি দেখার জন্য আমি ঘৃণা করি। তবুও লোকেরা এটি পরীক্ষা করে রাখে WH কেন? আপনি একই সাথে এক্সিকিউটেবলের মধ্যেও পরীক্ষা করছেন।

ভাল এখন আমি ভাড়া নিচ্ছি। আমার বক্তব্যটি হ'ল আমরা সবাই "জেনারেটিং কোড"। আপনি যখন আমাকে উন্মাদ করে তুলছেন এমন উত্স কোডের মতো উত্পন্ন কোডটির সাথে আপনি আচরণ করেন It's এটিকে উত্স কোড বলে মনে হচ্ছে না কারণ এটি উত্স কোড তৈরি করে না।


41
আপনি যদি এটি উত্পন্ন করেন তবে এটি উত্স কোড নয়। এটি মধ্যবর্তী কোড। আমি এখন কাঁদতে যাচ্ছি।
candied_orange

65
ARG !!! দেখতে কেমন লাগে তাতে কিছু আসে যায় না !!! পাঠ্য, বাইনারি, ডিএনএ, যদি এটি উত্স না হয় তবে পরিবর্তনগুলি করার সময় আপনার যা স্পর্শ করা উচিত তা নয়। আমার সংকলন প্রক্রিয়াটির মধ্যবর্তী ৪২ টি মধ্যবর্তী ভাষা থাকলে এটি কোনও ব্যবসায়িক নয়। তাদের স্পর্শ করা বন্ধ করুন। এগুলি পরীক্ষা করা বন্ধ করুন your উত্সটিতে আপনার পরিবর্তনগুলি করুন।
candied_orange

24
এক্সএমএল পাঠ্য এবং এটি স্পষ্টতই মানুষের ব্যবহারের জন্য নয়। :-)
নিক কেঘলি

38
@utku: "যদি কোনও কিছু মানুষের দ্বারা গ্রাস করা বোঝানো না হয় তবে এটি পাঠ্য হওয়া উচিত নয়": আমি সম্পূর্ণ একমত নই। আমার মাথার উপরের অংশের কয়েকটি পাল্টা উদাহরণ: এইচটিটিপি প্রোটোকল, মাইম এনকোডিংস, পিইএম ফাইলগুলি - যে কোনও কিছুতে বেস 64 ব্যবহার করে anything 7-বিট নিরাপদ প্রবাহে ডেটা এনকোড করার অনেকগুলি কারণ রয়েছে এমনকি কোনও মানুষের এটি দেখা না গেলেও। জিনিসগুলির বৃহত্তর জায়গাগুলির কথা উল্লেখ করা উচিত নয় যা সাধারণত কোনও মানুষের সাথে কখনই ইন্টারঅ্যাক্ট করা উচিত নয়, তবে তারা মাঝে মধ্যে: ফাইলগুলি, /etc/ইউনিক্সে ফাইল ইত্যাদিতে লগ করতে পারে
ড্যানিয়েল প্রাইডেন

12
আমি মনে করি না "পঞ্চ কার্ডের সাথে প্রোগ্রামিং" এর অর্থ যা বোঝায় তার অর্থ। আমি সেখানে ছিলাম, আমি এটি করেছি এবং হ্যাঁ, এটি একটি ব্যথা ছিল ; তবে "উত্পন্ন কোড" এর সাথে এর কোনও সংযোগ নেই। খোঁচা কার্ডগুলির একটি ডেক হ'ল অন্য ধরণের ফাইল - যেমনটি ডিস্কের কোনও ফাইল বা টেপের কোনও ফাইল, বা এসডি কার্ডের কোনও ফাইল। দিনের মধ্যে, আমরা কার্ডের ডেকগুলিতে ডেটা লিখতাম এবং সেগুলি থেকে ডেটা পড়তাম। সুতরাং, আমরা কোড তৈরি করার কারণটি যদি পাঞ্চ কার্ডগুলির সাথে প্রোগ্রামিং করা একটি ব্যথা হয়, তবে এর থেকে বোঝা যায় যে কোনও ধরণের ডেটা স্টোরেজ সহ প্রোগ্রামিং করা একটি ব্যথা।
সলোমন আস্তে

41

কেন উত্স কোড উত্পন্ন

আমার ক্যারিয়ারে কোড জেনারেটরের জন্য সবচেয়ে ঘন ঘন ব্যবহারের ক্ষেত্রে জেনারেটর ছিল

  • ইনপুট হিসাবে কোনও ধরণের ডেটা মডেল বা ডাটাবেস স্কিমার জন্য কিছু উচ্চ স্তরের মেটা-বিবরণ নিয়েছিল (সম্ভবত কোনও সম্পর্কিত সম্পর্কযুক্ত স্কিমা বা কোনও প্রকারের এক্সএমএল স্কিমা)

  • এবং আউটপুট হিসাবে ডেটা অ্যাক্সেস ক্লাসের জন্য বয়লার-প্লেট সিআরইউডি কোড উত্পাদন করেছে এবং সম্ভবত এসকিউএল বা ডকুমেন্টেশন সম্পর্কিত অতিরিক্ত জিনিস।

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

আমাকে আপনার প্রাথমিক প্রশ্নেও প্রতিক্রিয়া জানাতে দিন

উত্স কোড প্রজন্ম একটি বিরোধী নিদর্শন

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

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


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

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

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

13

কেন উত্স কোড উত্পন্ন?

আমি উত্পন্ন (বিল্ড সময়, এবং কখনই চেক ইন হয়নি) কোডের জন্য দুটি ব্যবহারের মুখোমুখি হয়েছি:

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

15
অনভিজ্ঞ ভাষাগুলিতে উচ্চ পুনরাবৃত্তিমূলক কোড। উদাহরণস্বরূপ আমাকে কোড লিখতে হয়েছিল যে প্রয়োজনীয় অনেকগুলি একই রকম, তবে অভিন্ন তথ্য কাঠামোতে একই কাজ করেছিল। এটি সম্ভবত একটি সি ++ টেমপ্লেট ভালো কিছু সঙ্গে সম্পন্ন থাকতে পারে (হেই নয় যে কোড নির্মাণ?)। তবে আমি সি ব্যবহার করছিলাম কোড প্রজন্ম আমাকে নিকটবর্তী অভিন্ন কোড লিখতে বাঁচিয়েছে।
নিক কেঘলি

1
@ নিককিগলি সম্ভবত আপনার সরঞ্জামচঞ্চ আপনাকে আরও একটি উপযুক্ত ভাষা ব্যবহারের অনুমতি দিচ্ছে না?
উইলসন

7
আপনি সাধারণত আপনার প্রয়োগের ভাষা বাছাই করতে পছন্দ করেন না। প্রকল্পটি সি-তে ছিল, এটি কোনও বিকল্প ছিল না।
নিক কেঘলি

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

4
হ্যাঁ, কোড-জেনারেশন মূলত মেটা-প্রোগ্রামিং। রুবির মতো ভাষা আপনাকে নিজেই ভাষাতে মেটা-প্রোগ্রামিং করতে দেয় তবে সি তা করে না এর পরিবর্তে আপনাকে কোড-জেনারেশন ব্যবহার করতে হবে।
শন বার্টন

13

মূলত কোড-ডেটা দ্বৈততা সম্পর্কে তাঁর ক্লাসিক "কম্পিউটার প্রোগ্রামগুলির কাঠামো এবং ব্যাখ্যা" তে সুসমানের এই জাতীয় জিনিসগুলি সম্পর্কে অনেক বেশি আকর্ষণীয় ছিল।

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

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

এরপরে কিছু সিস্টেম সংকলককে খাওয়ানো পাঠ্য আউটপুট করে আমি সেগুলি সম্পর্কে কোনও চিন্তা না করেই সেই সমস্ত সংকলকগুলির অপটিমাইজেশন এবং সিস্টেম নির্দিষ্ট কনফিগারেশনটি পাই।

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

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

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

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

আপনি অবশ্যই বাইটোকোড বা এমনকি এক্সিকিউটেবল কোড আউটপুট এ জাতীয় জিনিস লিখতে পারেন, তবে আপনি কেন এটি করবেন? আমরা সেইগুলিতে আইআর রূপান্তর করার জন্য সরঞ্জাম পেয়েছি।


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

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

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

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

1
"তারা সাধারণত বিপণনে কাজ করে আরও সুখী হয়" কট্টি, তবে মজার।
dmckee

13

ব্যবহারিক উত্তর: কোড জেনারেশন প্রয়োজনীয় এবং দরকারী? এটি কি এমন কিছু সরবরাহ করে যা প্রকৃত মালিকানাধীন কোডবেজের জন্য অত্যন্ত দরকারী এবং প্রয়োজনীয় জিনিসগুলি উপ-অনুকূল ফলাফলের জন্য আরও বৌদ্ধিক ওভারহেড অবদান রাখার মতো জিনিসগুলি করার অন্য উপায় তৈরি করে বলে মনে হচ্ছে?

ঠিক আছে, আমি জানি যে কোডটিও ডেটা। আমি যা বুঝতে পারি না তা হল কোড কেন? কেন এটি এমন কোনও ফাংশন হিসাবে তৈরি করবেন না যা পরামিতিগুলি গ্রহণ করতে পারে এবং সেগুলিতে কাজ করতে পারে?

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

এদিকে আপনি যদি ওপেনশ্যাডিং ভাষাগুলির মতো কিছু গ্রহণ করেন: https://github.com/imageworks/OpenShadingLanguage

... তাহলে এ জাতীয় প্রশ্ন উত্থাপন করা উচিত না কারণ তাদের চিত্তাকর্ষক ফলাফলগুলি সাথে সাথে উত্তর দেওয়া হয়।

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

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


শেডার নেটওয়ার্কগুলি মেশিন কোডে অনুবাদ করুন । এটি কোনও কোড জেনারেটরের চেয়ে সংকলকের মতো শোনাচ্ছে, না?
উত্কু

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

আমি যে কোনও জেনারেটরের কথা ভাবছিলাম যা উত্স কোড আউটপুট দেয়।
উত্কু

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

... নির্দিষ্ট ডোমেনের জন্য ব্যবহৃত ভাষা (গুলি) উপলভ্য। কিউটি এর মেটা-অবজেক্ট সংকলক (এমওসি) দিয়ে বিতর্কিতদের মধ্যে একটি রয়েছে। এমওসি বয়লারপ্লেট হ্রাস করে যা আপনি সাধারণত বৈশিষ্ট্য এবং প্রতিবিম্ব এবং সংকেত এবং স্লট এবং আরও C ++ এ সরবরাহ করতে পারেন, তবে এর অস্তিত্বের স্পষ্টতই ন্যায়সঙ্গত করার জন্য এতটা নয়। আমি প্রায়শই মনে করি এমওসি কোড জেনারেশনের বোঝা বোঝা ছাড়াই কিউটি আরও ভাল হতে পারত।

8

না, মধ্যবর্তী কোড উত্পন্ন করা কোনও বিরোধী-নিদর্শন নয়। আপনার প্রশ্নের অন্য অংশের উত্তর, "এটি কেন?", একটি খুব বিস্তৃত (এবং পৃথক) প্রশ্ন, যদিও আমি যাইহোক কিছু কারণ দেব will

কখনও কখনও অন্তর্বর্তী মানব-পঠনযোগ্য কোড না থাকার .তিহাসিক পদক্ষেপ

আসুন সি এবং সি ++ উদাহরণ হিসাবে গ্রহণ করুন কারণ সেগুলি সর্বাধিক বিখ্যাত ভাষার মধ্যে রয়েছে।

আপনার খেয়াল করা উচিত যে সি কোড সংকলনের যৌক্তিক মিছিলটি মেশিন কোড নয় বরং মানব-পঠনযোগ্য সমাবেশ কোড আউটপুট করে। তেমনি, পুরানো সি ++ সংকলকগুলি সি কোডে সি ++ কোডটি শারীরিকভাবে সংকলন করতে ব্যবহৃত হত। ইভেন্টের এই শৃঙ্খলে, আপনি মানব পাঠযোগ্য কোড 1 থেকে মানব পাঠযোগ্য কোড 2 থেকে মানব পাঠযোগ্য কোড 3 থেকে মেশিন কোডে সংকলন করতে পারেন। "কেন?" কেন না?

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

কেন অন্তর্বর্তী মানব-পঠনযোগ্য কোড ব্যবহার করবেন?

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

উদাহরণ

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

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

এছাড়াও, স্প্রেডশিটে সমস্ত তথ্য থাকা এক উপায়ে ভাল ছিল: এটি আমাদের কেবলমাত্র ডেটা কোডের ফাইলগুলিতে থাকলে ডেটা উপস্থাপনের সুযোগ করে দেয়।

উদাহরণ 2

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

আর কীভাবে করা উচিত ছিল? সম্ভবত আপনি অন্য উপায় নিয়ে আসতে পারে; সম্ভবত অন্যান্য উপায় আছে। তবে সেই কাজের জন্য, অন্য উপায়ে আমার তৈরি জেনারেল লেক্স / পার্স কোডের চেয়ে ভাল আর কিছু হত না।


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

7

আপনি যা হারিয়েছেন তা পুনরায় ব্যবহার

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

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

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

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

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


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

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

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

7

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

Interoprability / সরলতা

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

বাস্তবায়ন / প্রযুক্তিগত কারণে

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

ব্যবহারে সহজ

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

সম্পাদন করা

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


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

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

আমি রাজি ... আপনি কি উত্তরে এটি যুক্ত করতে পারেন?
পাওলো ইবারম্যান

@ পাওলোএবারম্যান সম্পন্ন করেছেন
জানু ডোরনিয়াক

6

উত্স কোড জেনারেশন একটি বিরোধী নিদর্শন?

এটি অপর্যাপ্তরূপে ভাবপূর্ণ প্রোগ্রামিং ভাষার জন্য একটি কাজ। এমন ভাষায় কোড উত্পন্ন করার দরকার নেই যাতে পর্যাপ্ত বিল্ট-ইন মেটা-প্রোগ্রামিং রয়েছে।


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

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

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

@ কেভিঙ্কলাইন বলতে কী বোঝাতে চাইছি তা হ'ল কোড যা ডেটাবেস থেকে কিছু ডেটা (এটি থেকে নির্মিত হতে পারে) এর উপর ভিত্তি করে তৈরি হয়েছিল, তবে এটি ডাটাবেস নয়। আমি এক্সেল টেবিল এ কোন সিগন্যাল পেয়েছি সে সম্পর্কে আমার কাছে তথ্য আছে আমার কাছে এই সিগন্যালগুলি সম্পর্কিত তথ্য সহ একটি ডাটাবেস বি রয়েছে etc. কোডটি চালায় এমন মেশিনে ডাটাবেস বা এক্সেল শীটের কোনও সংযোগ নেই। একটি সাধারণ কোড জেনারেটরের পরিবর্তে সংকলনের সময় এই কোডটি তৈরি করতে সত্যই জটিল সি ++ টেম্প্লেটিং ব্যবহার করে। আমি কোডজেন বাছাই করব।
কোডমনকি

6

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

তবে যদি কেউ জেনেরিকের মতো বৈশিষ্ট্যগুলি প্রতিস্থাপনের জন্য উত্স কোড জেনারেশন ব্যবহার করে থাকে তবে তা অ্যান্টি-প্যাটার্ন।


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

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

6

আমি কি এখানে কিছু মিস করছি?

মধ্যবর্তী কোডটি সাফল্যের কারণ হিসাবে প্রমাণিত হতে পারে এমন একটি ভাল উদাহরণ হতে পারে? আমি আপনাকে এইচটিএমএল অফার করতে পারেন।

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

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

এটি হ'ল যদি কোনও কিছুর জন্য একটি কোড জেনারেটর থাকে, তবে কেন সেটিকে কোনও উপযুক্ত ফাংশন হিসাবে তৈরি করবেন না যা প্রয়োজনীয় প্যারামিটারগুলি গ্রহণ করতে পারে এবং "উত্পন্ন" কোডটি করে যে সঠিক ক্রিয়া করতে পারে?

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


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

@ কেভিঙ্কলাইন আমি বলছি না যে এইচটিএমএলটি কোনও ত্রুটি ছাড়াই, আমি উল্লেখ করছিলাম যে এই ক্ষেত্রে মার্কআপ ভাষা (যা কোনও প্রোগ্রাম দ্বারা উত্পন্ন করা যেতে পারে) প্রবর্তন করা খুব ভালভাবে কাজ করেছে very
ডিউরিস

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

3

কেন উত্স কোড উত্পন্ন?

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

সাধারণ ব্যবহারের ক্ষেত্রে:

  • গোলাপ বা ভিজ্যুয়াল দৃষ্টান্তের মতো মডেলিংয়ের সরঞ্জামগুলি;
  • উচ্চ- Er এমবেডেড এসকিউএল অথবা একটি ইন্টারফেস সংজ্ঞা ভাষা যে কিছু compilable মধ্যে preprocessed করা আবশ্যক মত স্তরের ভাষা;
  • ফ্লেক্স / বাইসনের মতো লেক্সার এবং পার্সার জেনারেটর;

আপনার "কেন এটি কেবল একটি ফাংশন হিসাবে তৈরি করবেন না এবং এটিতে সরাসরি প্যারামিটারগুলি কেন পাস করবেন না", নোট করুন যে উপরের কোনওটিই তাদের এবং নিজের মধ্যে সম্পাদনের পরিবেশ নয়। আপনার কোডগুলি তাদের বিরুদ্ধে লিঙ্ক করার কোনও উপায় নেই।


2

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

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

মানুষ চাইলে বিক্ষোভকারী / উদাহরণ উত্স কোড উপলব্ধ।


1

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

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


1

উত্পন্ন কোড, মাত্র একবার

সমস্ত উত্স কোড জেনারেশন কিছু কোড উত্পন্ন করার ক্ষেত্রে হয় না এবং তারপরে কখনও এটি স্পর্শ করে না; তারপরে যখন এটি আপডেট করার দরকার হয় তখন এটি মূল উত্স থেকে পুনঃজেনেট করা।

কখনও কখনও আপনি ঠিক একবার কোড তৈরি করেন এবং তারপরে মূল উত্সটি বাতিল করুন এবং নতুন উত্স বজায় রেখে এগিয়ে চলেছেন।

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

একটি সাধারণ কেসটি হ'ল কোড জেনারেটরটি এটি করার জন্য লিখন, কেবলমাত্র 90% কোডটি সঠিকভাবে অনুবাদ করতে পারে। এবং তারপরে শেষ 10% হাত দ্বারা স্থির করা দরকার। যা হাতে 100% অনুবাদ করার চেয়ে অনেক দ্রুত faster

এই জাতীয় কোড জেনারেটর প্রায়শই পুরো ভাষা অনুবাদক (যেমন সিথন বা f2c) উত্পাদনকারী কোড জেনারেটরের ধরণের থেকে খুব আলাদা very যেহেতু লক্ষ্যটি হয় একবার কোড বজায় রাখা। তাদের প্রায়শই 1 টি হিসাবে তৈরি করা হয়, ঠিক যা করতে হবে তা করতে। বিভিন্ন উপায়ে এটি পোর্ট কোডে একটি রেজিেক্স / ফাইন্ড-রিপ্লেস ব্যবহারের পরবর্তী স্তরের সংস্করণ। আপনি বলতে পারেন "সরঞ্জাম সহায়তায় পোর্টিং"।

উত্পন্ন কোড, ঠিক একবারে, যেমন কোনও ওয়েবসাইট স্ক্র্যাপ।

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

DataDeps.jl ব্যবহারকারীদের ডেটা ডাউনলোড করতে সহায়তা করে (স্ট্যান্ডার্ড এমএল ডেটাসেটের মতো)। এটি করার জন্য এটিটিকে আমরা একটি রেজিস্ট্রেশনব্লক বলি needs এটি এমন কিছু কোড যা কিছু মেটাডেটা নির্দিষ্ট করে, যেমন ফাইলগুলি কোথা থেকে ডাউনলোড করতে হবে এবং একটি চেকসাম, এবং ব্যবহারকারীকে কোনও শর্তাদি / কোডডিশন / ডেটাতে লাইসেন্সিংয়ের স্থিতি কী তা বোঝানো একটি বার্তা।

ব্লকগুলি লিখতে বিরক্তিকর হতে পারে। এবং সেই তথ্যগুলি প্রায়শই (কাঠামোগত বা কাঠামোগত) অন ওয়েবসাইটগুলিতে ডেটা হোস্ট করা হয় সেখানে পাওয়া যায়। সুতরাং ডেটাডেপসজেইনরেটরস.জে.এল, বেশ কয়েকটি ডেটা হোস্ট করে এমন কিছু সাইটের জন্য রেজিস্ট্রেশনব্লককোড তৈরি করতে একটি ওয়েবস্রাপার ব্যবহার করে।

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

গুরুত্বপূর্ণভাবে, ডেটাডেপস.জেএল এর সাথে কাজ করা ব্যবহারকারী / ডেভেলগুলি তৈরি হওয়া রেজিস্ট্রেশনব্লক কোডটি ব্যবহার করার জন্য ওয়েবস্ক্র্যাপ ইনস্টল বা ব্যবহার করার প্রয়োজন নেই। (এবং কোনও ওয়েব-স্ক্র্যাপার ডাউনলোড এবং ইনস্টল করার দরকার নেই এ এ ন্যায্য সময় সাশ্রয় করে particularly বিশেষত সিআই রানের জন্য)

উত্স কোড একবার উত্পন্ন করা কোনও অ্যান্টিপ্যাটার্ন নয়। এবং এটি সাধারণত রূপান্তরিত করে প্রতিস্থাপন করা যায় না।


"রিপোর্ট" একটি ইংরেজি শব্দ যার অর্থ "বন্দর আবার" ব্যতীত অন্য কিছু। এই বাক্যটিকে আরও পরিষ্কার করার জন্য "পুনঃবন্দর" চেষ্টা করুন। (প্রস্তাবিত সম্পাদনার জন্য খুব ছোট বলে মন্তব্য করা হচ্ছে))
পিটার

আমি পিটারকর্ডসকে ভাল উত্তর দিয়েছি
লিন্ডন হোয়াইট

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

1
সম্ভাব্য, সম্ভাব্য না। কোড জেনারেটরগুলির ধারণার ক্ষেত্রে এটি দোষ নয় যে কিছু কোড জেনারেটর অ-রক্ষণাবেক্ষণযোগ্য কোড তৈরি করে। বিশেষত, একটি হাতের তৈরি কারিগর সরঞ্জাম, যা প্রতিটি ক্ষেত্রেই ধরতে হয় না প্রায়শই পুরোপুরি দুর্দান্ত কোড তৈরি করতে পারে। যদি কোডের 90% কেবল অ্যারে ধ্রুবকগুলির তালিকার উদাহরণ হিসাবে থাকে তবে সেই অ্যারে কনস্ট্রাক্টরকে একটি অফ হিসাবে উত্পাদন করা তুচ্ছভাবে খুব সুন্দরভাবে করা যায়, এবং কম প্রচেষ্টা করা যায়। (অন্যদিকে সাইথনের সি কোড আউটপুট মানুষের দ্বারা বজায় রাখা যায় না Because কারণ এটি করার ইচ্ছা ছিল না Just ঠিক যেমনটি আপনি f2cদিনের পিছনে বলেছিলেন )
লিন্ডন হোয়াইট

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

1

"উত্স" কোড উত্পন্ন হ'ল উত্পন্ন ভাষাটি হ্রাসের ইঙ্গিত। এটিকে কী বিরোধী-প্যাটার্ন অতিক্রম করতে সরঞ্জামগুলি ব্যবহার করা হচ্ছে? একেবারে না - আমাকে ব্যাখ্যা করতে দিন।

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

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

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

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

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


0

উত্স কোড জেনারেশনটির অর্থ হ'ল উত্পন্ন কোডটি ডেটা। তবে এটি প্রথম শ্রেণির ডেটা, ডেটা যা বাকি প্রোগ্রামটি ম্যানিপুলেট করতে পারে।

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

অরিজিনাল (1984) ম্যাকের সাথে কাজ করার সময়, একটি রিসোস সম্পাদক ব্যবহার করে ডায়ালগ এবং উইন্ডো সংজ্ঞা তৈরি করা হয়েছিল যা ডেটা বাইনারি বিন্যাসে রেখেছিল। "বাইনারি ফর্ম্যাট" পাস্কাল থাকলে আপনার অ্যাপ্লিকেশনটিতে এই সংস্থানগুলি ব্যবহার করা আরও শক্ত ছিল।

সুতরাং, না, সোর্স কোড জেনারেশন কোনও অ্যান্টি-প্যাটার্ন নয়, এটি অ্যাপ্লিকেশনটির ডেটা অংশ তৈরি করতে দেয়, যা এটি সহজ ব্যবহার করে।


0

কোড জেনারেশন একটি বিরোধী-প্যাটার্ন হয় যখন এটি সম্পাদন করার চেয়ে বেশি ব্যয় করে। প্রজন্ম A থেকে B পর্যন্ত প্রায় একই ভাষা হিসাবে উপস্থিত হয় যেখানে পরিস্থিতি দেখা দেয়, তবে কিছু কাস্টম টুলিংয়ের চেয়ে কম চেষ্টা করে A এ কোডিং করে এবং A থেকে B এর স্টেজিং তৈরি করে এমন কিছু ছোট এক্সটেনশান দিয়ে করা যেতে পারে generation ।

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

দরিদ্র বাণিজ্য বন্ধ পরিমাণে ব্যবহারের পরিমাণও করতে পারে। ভাষা এ বি থেকে যথেষ্ট আলাদা হতে পারে তবে কাস্টম কোড জেনারেটর সহ পুরো প্রকল্পটি কেবল এক বা দুটি ছোট জায়গায় A ব্যবহার করে, যাতে জটিলতার মোট পরিমাণ (A এর ছোট বিট, আরও A -> বি কোড জেনারেটর, প্লাস পার্শ্ববর্তী বিল্ড স্টেজিং) সবেমাত্র বি তে করা কোনও সমাধানের জটিলতা ছাড়িয়ে গেছে

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


আপনি "যখন বার্জন স্ট্রস্ট্রপ প্রথমে সি ++ ..." অনুচ্ছেদটি সরিয়ে ফেললেন? আমি মনে করি এটি আকর্ষণীয় ছিল।
উত্কু

@ উটকু অন্যান্য উত্তরগুলি এটি একটি সম্পূর্ণ, পরিশীলিত ভাষা সংকলনের দৃষ্টিকোণ থেকে কভার করে, যেখানে একটি প্রকল্পের বাকি অংশ সম্পূর্ণ লেখা থাকে। আমি মনে করি না যে এটি "কোড জেনারেশন" নামে পরিচিত তার সংখ্যাগরিষ্ঠের প্রতিনিধি।
কাজ

0

আমি এটি পরিষ্কারভাবে দেখিনি (আমি এটি দুটি বা দুটি উত্তর দ্বারা স্পর্শ করতে দেখেছি, তবে এটি খুব পরিষ্কার মনে হয়নি)

কোড উত্পন্ন করা (যেমন আপনি বলেছেন যে এটি ডেটা ছিল) কোনও সমস্যা নয় - এটি গৌণ উদ্দেশ্যে একটি সংকলক পুনরায় ব্যবহার করার উপায়।

উত্সাহিত কোড সম্পাদনা করা আপনার পক্ষে যে কোনও এক সবচেয়ে কুখ্যাত, অশুভ, ভয়াবহ অ্যান্টি-প্যাটার্নগুলি আসবে is এটা করো না.

সর্বোপরি, উত্পন্ন কোড সম্পাদনা করা আপনার প্রকল্পের মধ্যে একগুচ্ছ দুর্বল কোডকে টানছে (কোডের ENTRE সেটটি এখন সত্যিকারের উত্স কোড) - আর ডেটা নেই। সবচেয়ে খারাপভাবে আপনার প্রোগ্রামে টানা কোডটি অত্যন্ত রিন্ডন্ড্যান্ট, খারাপ নামযুক্ত আবর্জনা যা প্রায় সম্পূর্ণ অনিবার্য।

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

আপনার সরঞ্জামটি যদি উত্পন্ন কোডের যে কোনও সম্পাদনা না করার পক্ষে যথেষ্ট স্মার্ট হয় তবে এর জন্য যান। যদি তা না হয় তবে আমি এটিকে ওখানকার সবচেয়ে খারাপ অ্যান্টি-প্যাটার্নগুলির মধ্যে একটি বলব।


0

কোড এবং ডেটা উভয়ই: তথ্য।

ডেটা হ'ল আপনার প্রয়োজনীয় ফর্মের (এবং মান) সঠিকভাবে তথ্য। কোডও তথ্য, তবে পরোক্ষ বা মধ্যবর্তী আকারে। সংক্ষেপে, কোডও ডেটাগুলির একটি ফর্ম।

আরও সুনির্দিষ্টভাবে, কোডগুলি মেশিনগুলির জন্য সমস্ত তথ্য নিজেরাই প্রক্রিয়াজাতকরণ থেকে মানবকে লোড করার জন্য তথ্য information

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

কেন উত্স কোড উত্পন্ন? কেন এটি এমন কোনও ফাংশন হিসাবে তৈরি করবেন না যা পরামিতিগুলি গ্রহণ করতে পারে এবং সেগুলিতে কাজ করতে পারে?

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


0

যদি কিছু উত্পন্ন করা যায়, তবে সেই জিনিসটি কোড নয়, তথ্য is

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

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

দেওয়া হয়েছে, সোর্স কোড জেনারেশনের এই পুরো ধারণাটি কি ভুল বোঝাবুঝি নয়?

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

এটি হ'ল যদি কোনও কিছুর জন্য একটি কোড জেনারেটর থাকে, তবে কেন সেটিকে কোনও উপযুক্ত ফাংশন হিসাবে তৈরি করবেন না যা প্রয়োজনীয় প্যারামিটারগুলি গ্রহণ করতে পারে এবং "উত্পন্ন" কোডটি করে যে সঠিক ক্রিয়া করতে পারে?

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

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

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

"কোড জেনারেটর" বলতে আপনাকে কী বোঝায় তাও আপনার বিবেচনা করা উচিত। আমি সি প্রিপ্রোসেসিং এবং সি ++ টেম্পলেটগুলির ইনস্ট্যান্টেশনকে কোড উত্পন্নকরণের অনুশীলন হিসাবে বিবেচনা করব; আপনি এই আপত্তি না? যদি তা না হয় তবে আমি মনে করি যে এগুলি গ্রহণ করার ক্ষেত্রে কিন্তু কোড জেনারেশনের অন্যান্য স্বাদগুলি প্রত্যাখ্যান করে যুক্তিযুক্ত করার জন্য আপনাকে কিছু মানসিক জিমন্যাস্টিক সম্পাদন করতে হবে।

এটি যদি পারফরম্যান্সের কারণে করা হয়, তবে এটি সংকলকটির অভাব বলে মনে হচ্ছে।

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

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

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

আমি কি এখানে কিছু মিস করছি?

বেশ কিছু জিনিস, আমি মনে করি।

আমি জানি যে কোডটিও ডেটা। আমি যা বুঝতে পারি না তা হ'ল সোর্স কোড কেন উত্পন্ন? কেন এটি এমন কোনও ফাংশন হিসাবে তৈরি করবেন না যা পরামিতিগুলি গ্রহণ করতে পারে এবং সেগুলিতে কাজ করতে পারে?

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

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


0

আপনার মন্তব্যের প্রসঙ্গে প্রশ্নের উত্তর দেওয়া:

সংকলকের দায়িত্ব হ'ল মানব-পঠনযোগ্য ফর্মটিতে লিখিত একটি কোড নেওয়া এবং এটি মেশিন-পঠনযোগ্য ফর্মে রূপান্তর করা। সুতরাং, যদি সংকলকটি কার্যকর এমন কোনও কোড তৈরি করতে না পারে তবে সংকলকটি সঠিকভাবে তার কাজ করছে না। এটা কি ভুল?

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

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

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

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

আমরা যদি কোড জেনারেশনটি ব্যবহার করতাম তবে মানব পাঠযোগ্য ত্রুটি সহ আমাদের আরও অনেক শক্তিশালী ত্রুটি পরিচালনা করার ক্ষমতা থাকতে পারে had সি'স্ট লা ভি।


0

কোড জেনারেশন ব্যবহারের কয়েকটি ভিন্ন উপায় রয়েছে। এগুলি তিনটি বড় গ্রুপে বিভক্ত করা যেতে পারে:

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

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

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

এটি হ'ল যদি কোনও কিছুর জন্য একটি কোড জেনারেটর থাকে, তবে কেন সেটিকে কোনও উপযুক্ত ফাংশন হিসাবে তৈরি করবেন না যা প্রয়োজনীয় প্যারামিটারগুলি গ্রহণ করতে পারে এবং "উত্পন্ন" কোডটি করে যে সঠিক ক্রিয়া করতে পারে?

কারণ সুরক্ষা এবং কোড সমাপ্তি এমন বৈশিষ্ট্য যা আপনি সংকলনের সময় (এবং কোনও আইডিইতে কোড লেখার সময়) চান, তবে নিয়মিত ফাংশন কেবল রানটাইম এ কার্যকর করা হয়।

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


0

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


-3

যদি কিছু উত্পন্ন করা যায়, তবে সেই জিনিসটি কোড নয়, তথ্য is

আপনি এটি ভুল উপায়ে পেয়েছেন। এটা পড়া উচিত

যদি কোনও ব্যাখ্যার জন্য জেনারেটরে কিছু খাওয়ানো যায় তবে সেই জিনিসটি কোড নয়, ডেটা নয়।

এটি সংকলন পর্যায়ে উত্স ফর্ম্যাট এবং সিঙ্ক ফর্ম্যাটটি এখনও কোড।


1
উত্স কোডের ভুল সংজ্ঞা । উত্স কোডটি বেশিরভাগ ক্ষেত্রে এটিতে কাজ করা মানুষের জন্য (এবং এটি নিছক সত্যই এটি সংজ্ঞায়িত করে, এফএসএফ দ্বারা বিনামূল্যে সফ্টওয়্যার কী তাও দেখুন )। এর সাথে উত্পন্ন এসেমব্লার কোডটি gcc -fverbose-asm -O -Sউত্স কোড নয় (এবং কেবলমাত্র বা বেশিরভাগ ডেটা নয়) এমনকি এটি কিছু পাঠ্য ফর্ম যা সর্বদা জিএনইউকে খাওয়ানো হয় asএবং কখনও কখনও মানুষের দ্বারা পড়া হয়।
বেসাইল স্টারিঙ্কেভিচ

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

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

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

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