স্বয়ংক্রিয় প্রোগ্রামিং: কোড লেখার কোড লিখুন [বন্ধ]


105

দ্যা প্র্যাগমেটিক প্রোগ্রামার বইটি পড়ার পরে , আমার যে যুক্তিগুলির মধ্যে সবচেয়ে আকর্ষণীয় বিষয়টি খুঁজে পেয়েছিল তার মধ্যে একটি ছিল "লিখন কোড যা কোড লেখায়"।

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

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

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


কিছু কোডের উদাহরণগুলি আমাকে এর বাস্তবায়ন আরও ভালভাবে বুঝতে দেওয়ার জন্য প্রশংসা করবে।


মেটা প্রোগ্রামিং, জেনারেটিভ প্রোগ্রামিং এবং কোড জেনারেশন এর মতো বিভিন্ন প্রাসঙ্গিক প্রোগ্রামিং কৌশলগুলির সাথে সম্পর্কিত উইকের পৃষ্ঠাটি এখানে's


32
আমি একবার এমন কোড লিখেছিলাম যা কোড লিখেছিল যা কোড লিখেছিল ... :)
বেনজল

9
@ বেঞ্জল: আপনি লিস্পে লিখছেন?
कंप্যান করুন

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

8
যদি আপনি ইতিমধ্যে না পেয়ে থাকেন তবে এই আইবিএম বিকাশকারী ওয়ার্কস নিবন্ধের সিরিজটি দেখুন: " রূপকর্মের শিল্প " পার্ট 1 , পার্ট 2 এবং পার্ট 3
জন টোবলার

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

উত্তর:


49

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

উত্পাদনশীলতা হিসাবে: আমি আমার প্রায় সব উন্নয়নমূলক কাজে একটি প্রভাবশালী কৌশল হিসাবে রূপকটি ব্যবহার করছি এবং কোডের আকার হ্রাস করা এবং তার পাঠ্যতা বৃদ্ধি করা উভয়ই স্পষ্টতই সহায়তা করে। কীটি ডোমেন সুনির্দিষ্ট ভাষাগুলি ব্যবহারের ক্ষেত্রে রয়েছে এবং এগুলি প্রয়োগের জন্য সবচেয়ে কার্যকর উপায়গুলির মধ্যে একটি রূপকটি metaprogramming।


67

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

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

এই বিষয়টিতে একটি বই পড়ার বিষয়টি আমি উপভোগ করেছি তা হ'ল মেটাপ্রগ্রামিং রুবি (যদি আপনি রুবি ভাষা জানেন)


মন্তব্যে নিম্নলিখিত প্রশ্নের পরে সম্পাদনা করুন:

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

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

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

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

চূড়ান্ত নোট হিসাবে:

মনে করি না "আমি metaprogramming, যেখানে আমি আমার কোডে প্রয়োগ হতে পারে প্রয়োগ করতে চান?"।

মনে "আমি এই প্যাটার্ন যে সব আমার কোড ধরে পুনরাবৃত্তি হয়েছে তা দেখতে, আমি ছোট আরও পুনর্ব্যবহারযোগ্য কিছু কোডটি refactor করতে। একটি উপায় খুঁজে পাচ্ছি না হতে পারে metaprogramming আমাকে সাহায্য করতে পারেন?"


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

2
@ জোসে ফাতি, লিসপ ম্যাক্রোগুলি (বা ক্লোজার, বা নিমেরেল, আপনার প্ল্যাটফর্মের পছন্দ অনুসারে) ঘনিষ্ঠভাবে দেখুন।
এসকে-যুক্তি

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

1
@ জোসে ফাতি: আমি দেখতে পেয়েছি আপনি কিছু পাইথন জানেন। এটিতে রূপক ক্ষমতা রয়েছে, যদিও আমি সত্যিই সেগুলি ব্যবহার করি নি। কটাক্ষপাত বিপজ্জনক উন্নত পাইথন পিডিএফ
কিট

3
@ ফ্যালকন: আইএমও এটি কোড উত্পন্ন করার জন্য সবচেয়ে খারাপ উপায়; এটি অন্তর্নির্মিত মেটা-প্রোগ্রামিং সুবিধা নেই এমন ভাষার জন্য খুব খারাপ কাজ। জাভা বা সি # তৈরির পরিবর্তে, সেই কোডটি একটি উচ্চ-স্তরের JVM বা .NET ভাষায় লেখাই ভাল।
কেভিন ক্লাইনে

19

আরও ভাল, অন্য কেউ লিখেছেন এমন কোডটি ব্যবহার করুন যা আপনার জন্য আপনার কোড লিখেছিল।

কোড অটোমেশনটি সাধারণত ওআরএম এবং অন্যান্য ডাটাবেস ইন্টারঅ্যাকশন কোড এবং অবশ্যই পুনরাবৃত্তিযুক্ত তবে অনুরূপ কোড বিল্ডিংয়ের জন্য ভাল।

অবশ্যই, যদি আপনি প্রচুর অনুরূপ ক্লাস তৈরি করে থাকেন তবে সম্ভবত আপনি গতিময় ভাষায় একই জিনিসটি খুব তাড়াতাড়ি সম্পন্ন করতে পারতেন, তবে আমি ডিগ্রি করি।

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

কোডস্মিথ এবং মাই জেনারেশনের মতো সংস্থাগুলি এবং পণ্যগুলি দেখুন বা এই উইকিপিডিয়া নিবন্ধটি ব্রাউজ করুন: http://en.wikedia.org/wiki/Compistance_of_code_generation_tools


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

@ এসকে-যুক্তি: ওআরএম উত্পন্ন কোড সম্পর্কে কী? এটি অন্য সরঞ্জাম / লাইব্রেরি দ্বারা উত্পাদিত এবং এখনও প্রকল্পের প্রয়োজনীয়তা পূরণ করে।
ডেভিড

@ ডেভিড, সত্যি কথা বলতে, আমি জেনেরিক ওআরএম নিয়ে যথেষ্ট বিশ্বাস করি না। অতীতে তাদের সাথে আমার অনেক সমস্যা ছিল, প্রায়শই পরিবর্তে আমার সামান্য নিজস্ব নির্দিষ্ট ওআরএম বাস্তবায়নে অবলম্বন করি।
এসকে-যুক্তি

1
@ জর্ডান, এই সমস্ত সরঞ্জামগুলি খুব নির্দিষ্ট (এবং আরও খারাপ - পাঠ্য ভিত্তিক, অর্থাত, নকশার দ্বারা নিকৃষ্ট)। আমি এর পরিবর্তে যথাযথ রূপক সম্পর্কে কথা বলছি।
এসকে-লজিক

1
@ আতিলা ওজগুর, তারা "খুব ভাল" হতে পারে, সত্য। তবে তারা ইডিএসএল এর চেয়ে ভাল কিছু নয়। একক কোড জেনারেশন স্পষ্টতই অনেক বেশি সীমিত এবং ম্যাক্রো মেটাপ্রগ্রামিংয়ের তুলনায় অনেক কম নমনীয়।
এসকে-যুক্তি

16

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

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

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

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

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


এটি একটি দুর্দান্ত দৃশ্য। সব মিলিয়ে প্রোগ্রামাররা তাদের ক্রিয়াকলাপটি সহজ করার জন্য সিনট্যাক্স কোড বিশদের পরিবর্তে উচ্চতর স্তরের কোডিংয়ে ফোকাস দেওয়ার জন্য ব্যবহার করার চেষ্টা করে এমন অনেকগুলি পদ্ধতির মধ্যে অন্য একটি।
জোসে ফাতি

1
Faeti @Jose Wikipedia নিবন্ধটি en.wikipedia.org/wiki/Automatic_programming আরো কিছু বিবরণ মধ্যে আগ্রহী হলে বিভিন্ন সরঞ্জাম লিঙ্ক আছে। আমি লেক্স এবং ইয়্যাক পড়ার পরামর্শ দেব, কারণ তাদের জন্য বেশ কিছু ডকুমেন্টেশন এবং বিবরণ রয়েছে।
স্পেনসার রথবুন

পর্যাপ্ত শক্তিশালী ভাষায় (যেমন C ++ C এর বিপরীতে), লেক্স এবং ইয়্যাকের মতো বাহ্যিক সরঞ্জামগুলি অপ্রয়োজনীয়।
কেভিন ক্লিন

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

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

13

Metaprogramming

অনেক দোকানে মেটাপগ্রোমিং একটি বিতর্কিত কৌশল। কারণটি হ'ল যে কোনও শক্তিশালী সরঞ্জামের মতো, সাহায্য বা আহত হওয়ার পরিমাণটি বিশাল।

পেশাদাররা

  • আরও উদ্বেগজনক, লিখতে ও বজায় রাখতে কম কোড (প্রায়শই প্রস্থের অর্ডার বা আরও বেশি করে)
  • ধারাবাহিকতা, কোডের সাথে আপনার সমস্যার সমাধানের শ্রেণীর উপর আরও সুসংগত আচরণ
  • বৃহত্তর সমস্যার জায়গার সমাধানের জন্য উত্পাদনশীলতা, কম কোড

কনস

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

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

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


দরকারী বিবেচনার জন্য ধন্যবাদ! আপনি কি আমাকে একটি সহজ এবং মৌলিক কাজটি প্রস্তাব করতে পারেন যে আমি রূপক ব্যবহার করে প্রয়োগ করতে সক্ষম হব, যা আমার কোডিংয়ের সাথে আমার সময় সাশ্রয় করবে, একটি সামান্য কোড উদাহরণ?
জোসে ফাতি

হাহাহা আমাকে কয়েক বছর আগে জিসিসির সাথে আমার একটি ত্রুটি স্মরণ করিয়ে দেয়। আমার স্ক্রিনে ত্রুটি বার্তা রাখার জন্য 162 টি লাইন। পুনরাবৃত্তিমূলক metaprogramming এফটিডাব্লু!
ডেডালনিক্স

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

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

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

9

বেশিরভাগ কোড কোড লেখেন। উদাহরণস্বরূপ পিএইচপি কোড HTML লিখতে সহায়তা করে। পিএইচপি পিডিও লাইব্রেরি এসকিউএল কল লিখতে সহায়তা করে। ওএসের সাথে যোগাযোগের জন্য ফাইল I / O ফাংশন কোড লেখায় write এমনকি একটি নিয়মিত ফাংশন কল হ'ল কোডের অন্য একটি ব্লকের একটি উল্লেখ যা কার্যকর করা হয়। সুতরাং আপনার ফাংশন কল কোড লিখন হয়।

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


3
আমি এইচটিএমএলকে প্রোগ্রামিং ভাষা বলব না। এটি নথির একটি বাক্য গঠন
সাইমন বার্গোট

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

5

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

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

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

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


5

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


উদাহরণস্বরূপ ভিজ্যুয়াল স্টুডিওর মতো কিছু আইডিইতে কোড স্নিপেটের মতো কিছু পাওয়া যায়?
জোসে ফাতি

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

5

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

প্রকৃতপক্ষে, আপনি যুক্তি দিতে পারেন যে প্রতিটি সংকলক হ'ল অন্য একটি রূপক-তারা প্রোগ্রামের পাঠ্য এবং আউটপুট মেশিন বা ভিএম কোড নেয়। এবং, সংকলক ছাড়া জীবন? Owch।


এটা ঠিক, তবে আপনি আপনার উত্পাদনশীলতা বাড়াতে আপনি কীভাবে এটি আপনার নিজের প্রোগ্রামিং ভাষায় বাস্তবায়ন করতে পারেন? এটাই আমি মিস করছি।
জোসে ফেইতি

5

আমার অতীত থেকে একটি দৃ concrete় উদাহরণ এখানে।

আমি এমন একটি সাইটে কাজ করছিলাম যেখানে ডেটা অ্যাক্সেসের জন্য বিডিই ব্যবহার করে প্রায় 50MB ডেলফি সোর্স কোড ছিল। তারা বিডিই সমর্থিত সর্বোচ্চ সংস্করণ (8i আমি সঠিকভাবে স্মরণ করিয়ে দিলে) দ্বারা সমর্থিত কোনও ওরাকল আপগ্রেডকে অনুমতি দেওয়ার জন্য ডাইরেক্ট ওরাকল অ্যাক্সেস ব্যবহার করে স্যুইচ করতে চেয়েছিলেন।

সুতরাং, কোডারদের একটি দলকে প্রতিটি ফর্ম এবং ডেটা মডিউলের মাধ্যমে প্রতিটি উপাদান ম্যানুয়ালি পরিবর্তন করার পরিবর্তে আমি একটি পিআরএল স্ক্রিপ্ট লিখেছিলাম: -

  1. ডিএফএম (ফর্ম ফাইল) পার্স করে এবং টিক্যারি, টিটিবেল, টিস্টোরড প্রসেসর এবং টি ডাটাবেস অবজেক্টের সমস্ত চিহ্নিত করে - আইটেমগুলিকে একটি তালিকায় সংরক্ষণ করে।

  2. পিএএস (কোড) পার্স করা হয়েছে এবং অবজেক্টের ব্যবহার শনাক্ত করে - কি টিকুইরিস আপডেটগুলি বা নির্বাচনগুলি করছিল? এছাড়াও, এটি আইডিইতে ফর্মের পরিবর্তে কোডে তৈরি যে কোনও বিষয় চিহ্নিত করেছে।

  3. DFM এবং PAS অবজেক্টের ধরণগুলি যথাযথভাবে পরিবর্তন করে (যেমন TTable -> TOQLleDataSet এসকিউএল সম্পত্তি "থেকে * নির্বাচন করুন" ইত্যাদি সেট করে ইত্যাদি) এবং পদ্ধতি কলগুলিতে পুনরায় লিখুন। এছাড়াও, প্যারামিটারগুলি বন্ধ, খুলুন এবং সেট করা উপযুক্ত হলে অতিরিক্ত পদ্ধতি কলগুলি যুক্ত করা হয়েছিল।

সংক্ষেপে, weeks মাস ধরে কাজ করা 5+ বিকাশকারীদের আসল অনুমানের পরিবর্তে বিভিন্ন কোডিং শৈলীর সাথে বিভিন্ন দল দ্বারা লিখিত বিভিন্ন অ্যাপ্লিকেশনগুলিতে কাজ করার জন্য 3 সপ্তাহের কাজ স্ক্রিপ্ট টিক করে।

এবং যে পদ্ধতির ব্যবহার সম্পর্কে আমি এমনকি ভেবে দেখেছিলাম তা ছিল প্র্যাগমেটিক প্রোগ্রামার পড়ার মাধ্যমে


এটি দুর্দান্ত, আমি এখন বেশ কয়েকদিন ধরে পার্লে এসেছি এবং কেবলমাত্র "ওয়ার্কস্পেস তৈরি করুন" টাইপ করে সমস্ত ডিরেক্টরি, ফাইল ইত্যাদি দিয়ে ওয়েব বিকাশের জন্য বেসিক ওয়ার্কস্পেস তৈরির জন্য ইতিমধ্যে কিছু উত্পাদনশীলতা সরঞ্জাম তৈরি করেছি! :)
জোসে ফেটি

1
@ জোসে এই ধারণা। পুনরাবৃত্ত উপাদানগুলি স্বয়ংক্রিয় করতে স্ক্রিপ্টিং ভাষা ব্যবহার করুন। এটি এমন এক সময়ের জন্য হতে পারে যেখানে আপনি 8x উত্পাদনশীলতা বৃদ্ধি পান বা আপনার ক্ষেত্রে এমন কিছু সময় প্রয়োজন হয় যা আপনি আবার এবং আবার করতে পারবেন do
ম্যাকটল

4

আপনি উদাহরণ জিজ্ঞাসা করুন ....

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

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


3

সিএল (কমন লিপস) ম্যাক্রোগুলি একবার দেখুন। আমার মতে এটি আপনি চান ঠিক কি। ঠোঁট রূপক মধ্যে নিখুঁত।

এছাড়াও আমি নিমেরিকে পরামর্শ দিচ্ছি যদি আপনি নিখুঁত মেটাপ্রোগ্র্যামিং সমর্থন (ম্যাক্রো সহ) সহ নেট নেট পেতে চান

তবে আপনি যদি সত্যিকারের কোড-প্রজন্মের ইঞ্জিনটি চান তবে অ্যাপাচি থ্রাইফ্টটি একবার দেখুন


3

আমি কেবল এই জাতীয় সরঞ্জামে কাজ করছি। আমাদের বিশেষ ক্ষেত্রে আমরা ডেটাবেজে ফাংশনের স্বাক্ষরের উপর ডেটা লেয়ারের ভিত্তিতে ভিবি.এনইটি কোড উত্পন্ন করি।

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

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

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

আশা করি যে সাহায্য করে,
আইপিপি


উত্তরের জন্য ধন্যবাদ! আপনার উদাহরণের নিয়মগুলি বাস্তবে কীভাবে প্রয়োগ করা হয়?
জোসে ফেইতি

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

3

আমার একটি পিএইচপি মডিউল রয়েছে যা জাভাস্ক্রিপ্ট কোড যুক্ত একটি ওয়েব পৃষ্ঠা দেয় যা এইচটিএমএল উত্পন্ন করে। এটি তিনটি স্তর ঠিক আছে। ছেলে যে পড়তে খুব কষ্ট!

একটি প্রোগ্রামিং ক্লাসে, আমাদের এমন একটি প্রোগ্রাম লিখতে হয়েছিল যা ব্যবহারকারীর কাছ থেকে একটি সূত্রের স্ট্রিং নেবে এবং এটি বিশ্লেষণ করবে এবং মানটি প্রদর্শন করবে। সবচেয়ে চিত্তাকর্ষক সলভার সহজেই ব্যবহারকারীর ইনপুট নিয়েছিল, মূল () {প্রিন্টফ ("% d", ...); pped এ এটি জড়িয়ে রাখে এবং এটি সংকলন, লিঙ্ক এবং চালানোর জন্য একটি স্ক্রিপ্ট চালায়। সে পার্সার লিখেনি! আজ আপনি এটি একটি এসকিউএল নির্বাচন বিবৃতিতে করতে পারেন।

এটি এমন একটি সরঞ্জাম যা আপনার সাথে বাজানো উচিত, তারপরে এটি কার্যকর হবে এমন কিছু ভবিষ্যতের দিনের জন্য রেখে দিন।


বাস্তবে আমি একই জিনিসটি প্রয়োগ করার চেষ্টা করছিলাম! :) তবে তারপরে আমি পার্লকে অফলাইনে কোড করার সিদ্ধান্ত নিয়েছি এবং এটি দুর্দান্ত কাজ করছে। আমার কাছে এমন একটি বৈশিষ্ট্য রয়েছে যা আমি যুক্ত করতে চাই!
জোসে ফাতি

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

3

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

আমি মনে করি কোড-রাইটিং-কোড যুক্তির পক্ষে এই দৃশ্যটি একটি দুর্দান্ত মামলা case


3

বিষয় সম্পর্কে আপনার কী ধারণা?

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

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

ওয়েব সাইটগুলিতে, বেশিরভাগ মিথস্ক্রিয়া চারটি মূল ক্রিয়ায় ঘুরতে থাকে:

  • একটি উপাদান তৈরি করুন
  • উপাদানগুলির একটি সেট পুনরুদ্ধার করুন (সম্ভাব্য ফিল্টারিং সহ)
  • নতুন বৈশিষ্ট্য সহ একটি উপাদান আপডেট করুন
  • উপাদানগুলির একটি সেট মুছুন

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

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

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

এটি কি এমন কিছু যা সত্যই আপনার উত্পাদনশীলতা বাড়িয়ে তুলবে?

আমি বিশ্বাস করি যে নিম্ন স্তরের কাজের (ফ্রেমওয়ার্ক, ক্যাশিং, সংকলক, ইত্যাদি) রূপকগুলি অত্যন্ত গুরুত্বপূর্ণ তবে এমন কিছু যা আমরা অবশ্যই ব্যবসায়ের স্তরে কাজ করতে পারলে অতি সতর্কতার সাথে যোগাযোগ করতে হবে।

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

বই, ব্লগ, স্লাইডশো ইত্যাদির মধ্যে বিষয়টিতে কিছু ভাল সংস্থান কী কী?

প্রোগ্রামিং বোঝার সেরা উত্স হ'ল সর্বদা ভাল এবং ভাল মন্তব্য করা উত্স কোড। আমি যা বলতে চাই মধ্যে খুঁজছেন RubyOnRails এবং Symfony অ্যাডমিন জেনারেটর একটি ভাল ধারণা।


3

যদিও এখানে অনেকগুলি উত্তর মেটা প্রোগ্রামিং হিসাবে পরিচিত যা বোঝায়, আসলে এআই এর সাথে যুক্ত এমন একটি ক্ষেত্র ছিল যা স্বয়ংক্রিয় প্রোগ্রামিং নামে পরিচিত যা প্রোগ্রামগুলি বোঝার বা সংশ্লেষিত প্রোগ্রামগুলি সম্পর্কে ছিল [1]।

যে কোনও সংকলক (বা মেটা-প্রোগ্রাম, কোড জেনারেটর, অনুবাদক, ম্যাক্রো সিস্টেম, ...) রূপান্তরগুলির সাথে কাজ করে, রূপান্তরটির নির্দিষ্ট অ্যালগরিদম চালিয়ে একটি ইনপুট থেকে আউটপুট উত্পন্ন করে। তবে একটি traditionalতিহ্যবাহী সংকলক বা মেটা-প্রোগ্রাম কোনও তালিকা বাছাইয়ের সংজ্ঞা, বর্ণনা বা উদাহরণ দেয় না (উদাহরণস্বরূপ [[5, 3, 9] => [3,5,9]), বাছাই করা অ্যালগরিদম তৈরি করে না। এই সমস্যা যেখানে এই "স্বয়ংক্রিয় প্রোগ্রামিং" ক্ষেত্র আগ্রহী।

[1] - প্রোগ্রাম-বোঝার সিস্টেমগুলির উপর অগ্রগতি প্রতিবেদন ftp://db.stanford.edu/pub/cstr/reports/cs/.../CS-TR-74-444.pdfShare


2

মেটা প্রোগ্রামিং বজায় রাখা খুব কঠিন হতে পারে। প্রথমে এটি মার্জিত দেখায়, তবে আপনি যখন কোণার কেসগুলিতে চলতে শুরু করেন, ত্রুটিগুলি দেরিতে ধরা পড়ে (কোডটি তৈরি করা হয়েছিল) এবং পুরো জিনিসটি ব্যবহার / ডিবাগ করার জন্য একটি দুঃস্বপ্ন হয়ে ওঠে।

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


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

পাইথন এএসটি সম্পর্কে আপনার বক্তব্যটিতে আমি আগ্রহী। আপনি কি মেটা প্রোগ্রামিংয়ের উদ্দেশ্যে টেম্পিট ব্যবহার করেছেন?
সাইমন বার্গোট

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

2

ওপি রিসোর্স চেয়েছে।

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

[ওপির প্রশ্নের একটি মন্তব্য অনুসরণ করতে, যখন কোনও নির্দিষ্ট রূপান্তর সরঞ্জাম তৈরি করতে ব্যবহৃত হয়, ডিএমএস হ'ল এমন একটি পণ্য লাইন যা কোড লেখায়, কোড লিখে:]

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

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

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


2

ফিলিপ গ্রিনস্পানের সমস্যাটি এমআইটি কোর্স 9.৯১16 থেকে ৪ ম সেট করুন: ইনোভেটিভ ওয়েব সার্ভিসেসের সফটওয়্যার ইঞ্জিনিয়ারিং ( http://philip.greenspun.com/teaching/psets/ps4/ps4.adp )।

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

এটি সম্ভাব্য আরসডিজিটা ( http://en.wikedia.org/wiki/ArsDigita ) নিয়োগকারীদের প্রথম বুদবুদগুলির সময় সমাধানের জন্য প্রয়োজনীয় সমস্যার একটি সেট করে ।

পিএসটিতে ফিলিপ রেফারেন্স সম্পর্কিত "এসকিউএল ফর ওয়েব নর্দস" বইটি ( http://philip.greenspun.com/sql/ ) এ সরানো হয়েছে ।


2

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

2 সপ্তাহ পরে, আমি একটি কোড জেনারেটর নিয়ে কাজ করেছি যা আইডিএল / ওডিএল ডাম্প করবে এবং ব্যবসা এবং ডেটা অবজেক্টগুলিও ছড়িয়ে দেবে। এই জিনিসগুলি ডিবাগিং এবং টেস্টিংয়ের পর্যায়ে পৌঁছানোর জন্য এটি লোকটিকে 2 বছর ব্যবসা এবং ডেটা লেয়ার অবজেক্ট তৈরি করেছে। 2 সপ্তাহের মধ্যে, কোড জেনারেশন সহ, আমাদের একই আউটপুট ছিল, তবে এটি সমস্ত উত্পন্ন হওয়ার কারণে এটি বেশ ভাল বাগ-মুক্ত।

এই কোড জেনারেটর (নিম্ন-স্তরের সিএএসই সরঞ্জাম) প্রায় 8 থেকে 10 বছর ধরে আমাকে বিভিন্ন ধরণের পুনরাবৃত্তির মধ্য দিয়ে অনুসরণ করেছিল, কারণ নীতিটি এত সহজ ছিল: আপনি ডাটাবেসের সাথে কথা বলার সময় কিছু করা দরকার যা খুব সুন্দর it's অনেক পুনরাবৃত্ত কোডিং, এবং একবার এটি ঠিক হয়ে গেলে আপনাকে আর এটি নিয়ে আর চিন্তা করতে হবে না।

সুতরাং, হ্যাঁ: একটি কোড জেনারেটর ব্যবহার করুন, বিশেষত যখন কোডিং পুনরাবৃত্তি হয় এবং একটি ভাল সংজ্ঞায়িত প্যাটার্ন ফিট করে।

আমি লোকেদের অনুরূপ জিনিসগুলি করতে রেজিএক্স ম্যাক্রোগুলি ব্যবহার করতে, বা অনুরূপ জিনিসগুলি করতে এক্সেল সূত্রগুলি ব্যবহার করতে জানি (আমি এটিও করি)।


2

একটি রূপক উদাহরণ

আমার কাছে কর্তৃপক্ষ নামে একটি রুবি অনুমোদনের পাঠাগার রয়েছে । এটি বিকাশকারীদের current_user.can_read?(@post)এবং এর মতো পদ্ধতিগুলির সাথে তাদের অ্যাপ্লিকেশনটিতে প্রশ্ন জিজ্ঞাসা করতে দেয় @post.readable_by?(current_user)। এই প্রশ্নগুলির উত্তর কেন্দ্রীয় লেখক শ্রেণীর দ্বারা দেওয়া হয়।

এটি অত্যন্ত গুরুত্বপূর্ণ অংশ: কর্তৃপক্ষ কোনও পদ্ধতি কীভাবে সংজ্ঞায়িত করতে পারে তা ব্যবহারকারীর কনফিগারেশনটি না দেখলে জানে না । ব্যবহারকারীর কনফিগারেশনে থাকতে পারে:

config.abilities =  {
  ...
  :read      => 'readable',
  :microwave => 'microwavable',  # user-defined
  ...
}

সেক্ষেত্রে একটি পদ্ধতির মতো হওয়া দরকার current_user.can_microwave?(@post)

ধাতব প্রোগ্রামিং এটিকে সম্ভব করে তোলে: কনফিগারেশন পড়ার পরে, আমি জানি কোন পদ্ধতিগুলি সংজ্ঞায়িত করতে হবে :

Authority.verbs.each do |verb|
  class_eval <<-RUBY, __FILE__, __LINE__ + 1 # allows for a nice bracktrace
    def can_#{verb}?(resource)
      resource.#{Authority.abilities[verb]}_by?(self)
    end
  RUBY
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.