একটি গতিশীল ভাষা বিকাশ


11

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

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

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

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

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


1
এর মতো প্রচুর সংস্থান রয়েছে। নোট করুন যে সংকলক এবং দোভাষী এর মধ্যে রেখাটি যতটা আপনি মনে করেন তার চেয়ে বেশি ঝাপসা; সি # 4.0 সংকলক অন্যান্য সংকলকগুলির মতো ডায়নামিক প্রোগ্রামিং সমর্থন করে।
রবার্ট হার্ভে

@ রবার্টহারভে হ্যাঁ, আমি যা বলছি তা হ'ল আমার নিজের রান সময় / দোভাষী / ভার্চুয়াল মেশিন তৈরি করার জন্য সংস্থানগুলি। । নেট দোভাষী আমার পক্ষে বন্ধ স্থাপন করা খুব জটিল!
অস্টিন হেনলি


1
এবং এই এই প্রশ্নটি দেখুন , অন্যান্য প্রশ্নের উল্লেখ সহ বেশ কয়েকটি মন্তব্য রয়েছে যা বেশ আকর্ষণীয় ...
ইয়্যানিস

উত্তর:


4

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

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

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


5

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

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

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

যে কোনও পর্যাপ্ত জটিল সি বা ফোর্টরান প্রোগ্রামে একটি অ্যাডহক রয়েছে, অনানুষ্ঠানিকভাবে নির্দিষ্ট, বাগ-চালিত, সাধারণ লিসপের অর্ধেকের ধীর প্রয়োগ implementation

আমি বলছি না যে আপনার শেষ লক্ষ্যটি লিস্প বাস্তবায়ন হওয়া উচিত; তবে গতিশীল ভাষা প্রয়োগ করতে শেখার সময় হোমোসোনসিটির সুবিধা রয়েছে; আপনি যখন এমন ভাষায় শিখতে পারবেন যেখানে বাক্যবিন্যাস সিনট্যাক্সটি অদলবদল লেশার / পার্সার ব্যবহার করে এমন ভাষার এএসটি একই রকম?

যাইহোক ... কেবল একটি পরামর্শ। তবে এটি ভাল কারণেই যে সি থেকে বেশিরভাগ দুর্দান্ত প্রোগ্রামিং ভাষার কমপক্ষে লিস্প-প্রকৃতি রয়েছে।


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

1
আমি এখন লিস্পের নিজস্ব উপভাষায় আমার ভাষা সংকলন করতে প্রলুব্ধ হই!
অস্টিন হেনলি


0

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

https://repl.it/CdjV/3

উদাহরণ:

        var factorial = (Lambda)language.
            Evaluate
            (@"
                ( => ( n ) (
                        ? ( != n 0 )
                        ( * n ( this ( - n 1 ) ) )
                        1
                    )
                )
            ");

        var sw = new System.Diagnostics.Stopwatch();
        var n = 12;
        var r = 0;
        int k;
        sw.Start();
        for (k = 0; k < 10000; k++)
        {
            r = (int)factorial.Invoke(null, n);
        }
        sw.Stop();
        Console.WriteLine("{0}! = {1}", n, r);
        Console.WriteLine();
        Console.WriteLine("in {0} ms (for {1} times)", sw.ElapsedMilliseconds, k.ToString("0,0"));

'আছে HTH,


0

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

এছাড়াও স্কটের প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রাগম্যাটিক্স , সর্বশেষতম ড্রাগন বুক , জিসি হ্যান্ডবুক , পিয়ার্সের প্রকার ও প্রোগ্রামিং ভাষা পড়ুন

আমি সংকলক থেকে কীভাবে একজন দোভাষীর কাছে যেতে পারি সে সম্পর্কে আমি তথ্য চাই।

তারপরে, আংশিক মূল্যায়ন (& ফুটামুড়া অনুমান) এবং ধারাবাহিকতা-পাসিং শৈলী প্রাসঙ্গিক হতে পারে।

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