কোনও ভাষা বিকাশের কাঠামোটি ব্যবহার করা কত সহজ হওয়া উচিত?


11

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

স্ট্রাকচারাল টাইপ সম্পর্কিত এটির সাথে সম্পর্কিত অন্য একটি পৃষ্ঠা এখানে দেখা যাবে । কাঠামো এবং পোস্টের যথাযথ স্থান সম্পর্কে তদন্তের সাথে সম্পর্কিত মেটা-বিষয় এখানে পাওয়া যাবে

একটি ভাষা বিকাশ ফ্রেমওয়ার্ক ব্যবহার করা কত সহজ হওয়া উচিত?

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

এটি মাইক্রোসফ্ট দ্বারা রচিত একটি কাঠামো যা সাধারণ কোড কাঠামোগুলি বর্ণনা করে, তবে সাধারণত অনেক কিছু বাদ পড়ে (অভিব্যক্তি জবরদস্তি) এবং নির্দিষ্ট কিছু নির্মাণের উপস্থাপনে কিছুটা বিমূর্ত হতে থাকে, আপনি যা করছেন তার উপর ভিত্তি করে খারাপ কোড নির্মূল করতে: CodeDOM দুর্বল emitting ঘাঁটা PrivateImplementationTypeউপর CodeMemberMethodযখন টাইপ ব্যবহৃত একটি জেনেরিক ইন্টারফেস ছিল। কোডডোম ছিল আমার প্রথম কোড জেনারেটর লেখার মূল কারণ।

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

আমি যে ফ্রেমওয়ার্কটি লিখছি তা কীভাবে কাজ করছে তার একটি তুলনা করে এখানে দেখুন:

//Truncated...
/* *
 * From a project that generates a lexer, this is the 
 * state->state transition character range selection logic.
 * */
var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference()));
//...
char start = rangeElement.B.Value.Start;
char end = rangeElement.B.Value.End;
/* *
 * 'start' <= nextChar && nextChar <= 'end'
 * */
currentExpression = start.LessThanOrEqualTo(nextChar).LogicalAnd(nextChar.LessThanOrEqualTo(end));

ভার্সেস কোডডোম:

//Truncated...
var nextChar = new CodeVariableReferenceExpression("nextChar");
//...
var start = new CodePrimitiveExpression(rangeElement.B.Value.Start);
var end = new CodePrimitiveExpression(rangeElement.B.Value.End);
currentExpression = new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(start, CodeBinaryOperatorType.LessThanOrEqual, nextChar), CodeBinaryOperatorType.BooleanAnd, new CodeBinaryOperatorExpression(nextChar, CodeBinaryOperatorType.LessThanOrEqual, end));

কাঠামোর কেন্দ্রবিন্দু ভাষা উত্সাহীদের পাশাপাশি কোড বা অ্যাপ্লিকেশন তৈরিতে আগ্রহী is সংকলন, কোড উত্পন্নকরণ, এবং ভাষা বিকাশের উপর তার ফোকাস দেওয়া, কাঠামোর ব্যবহারের স্বাচ্ছন্দ্যে বা কাঁচা শক্তির উপর ফোকাস করা উচিত?

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

প্রদত্ত যে আমি কাঠামোর লেখক, "ব্যবহারযোগ্যতা" সম্পর্কে আমার দৃষ্টিভঙ্গি পক্ষপাতদুষ্ট। সুতরাং, আমি অন্যটি জিজ্ঞাসা করতে হবে যদি ফোকাস এবং লক্ষ্য প্রকল্পের সাথে সম্পর্কিত নয় এমন অন্যদের বোঝায়।


1
আপনার এই প্রশ্নটি কোডেরভিউ.সটাকেক্সচেঞ্জ.কম এ জিজ্ঞাসা করা উচিত ।
রবার্ট হার্ভে

6
প্রশ্ন হলো, কিনা একটি কাঠামো কাঁচা ক্ষমতার খরচে ব্যবহার করা সহজ হওয়া উচিত, কোড Review.SE, যেখানে "উচ্চ পর্যায়ের আর্কিটেকচার এবং সফ্টওয়্যার সিস্টেমের নকশা" জন্য সমস্ত একটি হইয়া এ হতে দেখাচ্ছে না অন না বিষয় এখানে, এবং এখানে অন টপিক। কোড পর্যালোচনাটি যখন আপনার কার্যকরী কোড থাকে এবং আপনি একটি সমালোচনা চান তা জন্য।

একটি কোড জেনারেটরের ইনপুটটি অন্য একটি প্রোগ্রামিং ভাষা। কোড তৈরির আকাঙ্ক্ষার অর্থ হ'ল আপনি যে ভাষাটি উত্পন্ন করছেন তা অপর্যাপ্ত শক্তিশালী। আরও ভাল ভাষায় অন্তর্নির্মিত কোড জেনারেটর রয়েছে।
কেভিন ক্লিন

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

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

উত্তর:


2

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

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

ডিএমএসে এখানে একটি প্রযুক্তিগত কাগজ রয়েছে যেমনটি বেশ কয়েক বছর আগে। (আমরা এটি উন্নতি করতে থাকি)

যদিও ডিএমএস নিজেই তৈরি করা শক্ত ছিল, আমরা দেখতে পেয়েছি যে আইবিএম কোবল, সি # 4.0, জাভা 1.7, সি ++ 11 (এবং আরও অনেকগুলি) সহ ডিএমএসের কাছে সত্যিকারের ল্যাংগুলি সংজ্ঞায়িত করতে ইঞ্জিনিয়ারিংয়ের তুলনামূলকভাবে বড় অংশ নেওয়া হয়েছিল।

আমরা মনে করি এটি কী করে (যুক্তিসঙ্গতভাবে ভাল): বিল্ডিং সরঞ্জামগুলির ব্যয়কে 1-2 মাপের অর্ডার দিয়ে কমিয়ে দিন। এর অর্থ হ'ল যে কাজগুলিতে অন্যথায় 1-10 বছর সময় লাগতে পারে তা নিছক মৃত্যুকে 1 মাস-1 বছরের প্রকল্প হিসাবে বিবেচনা করা যেতে পারে। যা এখনও সহজ নয়:

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

সুতরাং, উন্নতির জন্য অনেক জায়গা আছে। অনেক ফুল ফুটুক।


0

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

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


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