গাছের মতো আইআর না করে এলএলভিএমের কেন সমাবেশের মতো আইআর থাকে? বা: প্রকল্পগুলি কেন ঝাঁকুনির এএসটির পরিবর্তে এলএলভিএম আইআরকে লক্ষ্য করে?


14

এলএলভিএমের মধ্যবর্তী প্রতিনিধিত্ব (এলএলভিএম আইআর) গাছের মতো নয় কেন?

বিকল্পভাবে, ভাষা বাস্তবায়ন কেন ঝাঁকুনির এএসটির চেয়ে এলএলভিএম আইআরকে লক্ষ্য করে?

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

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

ক্ল্যাংয়ের এএসটি তৈরি করতে এবং কাজ করার জন্য ক্লাস এবং ফাংশন রয়েছে এবং এটিই একমাত্র ফ্রন্টএন্ড প্রকল্প যা দৃ strongly়ভাবে এলএলভিএম প্রকল্পের সাথে যুক্ত, তাই কেন বজ্রের এএসটি-কার্যকারিতা এলএলভিএমের বাহ্যিক?

আমার মাথার শীর্ষে, আমি জানি যে মরিচা (rustc), D (ldc), এবং হাস্কেল (জিএইচসি) সকলেই ব্যাকএন্ড হিসাবে এলএলভিএম ব্যবহার করতে পারে তবে তারা ক্ল্যাং এএসটি ব্যবহার করে না (যতদূর আমি জানি, আমি পারতাম তুমি ভুল). আমি এই সংকলকগুলির সমস্ত অভ্যন্তরীণ বিবরণ জানি না তবে কমপক্ষে মরিচা এবং ডি অবশ্যই মনে হয় এগুলি ঝাঁকুনির এএসটিতে সংকলিত হতে পারে। সম্ভবত হাস্কেলও পারত, তবে আমি সে সম্পর্কে খুব কম নিশ্চিত।

এটি কি historicalতিহাসিক কারণে (এলএলভিএম মূলত "নিম্ন-স্তরের ভার্চুয়াল মেশিন" এবং পরে ঝনঝন আসার কারণে)? এটি কি কারণ অন্যান্য সীমান্তগুলিতে তারা এলএলভিএমকে যা খাওয়ায় তার চেয়ে বেশি নিয়ন্ত্রণ পেতে চায়? এমন কি মৌলিক কারণ রয়েছে যে ঝাঁকুনির এএসটি "নন-সি-লাইক" ভাষার জন্য অনুপযুক্ত?

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


কিছু সুস্পষ্ট কিন্তু অসন্তুষ্ট উত্তর পূর্বে শূন্য করতে:

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

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

হ্যাঁ, আমি দৃ strongly়ভাবে একমত যে আরও বেশি মডুলার হওয়া ভাল জিনিস, তবে যদি এটিই একমাত্র কারণ, তবে অন্যান্য ভাষার প্রয়োগগুলি কেন ঝড়ের এএসটির পরিবর্তে এলএলভিএম আইআরকে লক্ষ্য করে?

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


যে কেউ আরও সুনির্দিষ্টভাবে জবাব দিতে চাইছেন: গাছের মতো আইআর বনাম অ্যাসেমব্লির মতো আইআর এর সুবিধা এবং অসুবিধাগুলি কী?


1
আমি কোনও এলএলভিএম বিশেষজ্ঞ নই, তবে আমি মনে করি আপনার পক্ষ থেকে কিছুটা ভুল বোঝাবুঝি হয়েছে। এলএলভিএমের আইআর এর মতো এসেম নেই। আসলে এর আইআর গাছের চেয়ে গ্রাফের মতো বেশি। আমি ধরে নিয়েছি যে 'asm-like' দ্বারা আপনি মানব পাঠযোগ্য IR (* .ll ফাইল) উল্লেখ করছেন, যদি তাই হয় তবে এটি কেবল সুবিধার জন্য করা হয়েছে। তবে, আসুন আমরা প্রকৃত বিশেষজ্ঞের জন্য অপেক্ষা করি যিনি আরও ব্যাপক উত্তর দিতে পারেন :)
আলেক্সডেনিসভ

1
একটি গুরুত্বপূর্ণ দিক ইতিহাস হতে পারে: এলএলভিএম মূলত সংকলক সীমানা থেকে সংকলক ব্যাকकेন্ডগুলি ডিকুয়াল করার জন্য ডিজাইন করা হয়েছিল। ধারণাটি ছিল যে সংকলক বিক্রেতারা ভাষা অপ্টিমাইজেশনে প্রতিযোগিতা করবে এবং সিপিইউ বিক্রেতারা নিম্ন-স্তরের অপ্টিমাইজেশনে প্রতিযোগিতা করবে। যেমন মাইক্রোসফ্ট এবং অ্যাপল একে অপরের বিরুদ্ধে প্রতিদ্বন্দ্বিতা করবে যার সি সংকলক সি থেকে "সেরা" বিটকোড তৈরি করে এবং ইনটেল এবং এএমডি একে অপরের বিরুদ্ধে প্রতিযোগিতা করবে যার এলএলভিএম ব্যাকেন্ডে বিটকোড থেকে "সেরা" মেশিন কোড তৈরি করে produces অ্যাপ্লিকেশন বিক্রেতারা তাদের অ্যাপ্লিকেশনগুলি বিটকোডে প্রেরণ করতেন এবং চূড়ান্ত সংকলনটি ব্যবহারকারীর ...
Jörg W Mittag

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

1
আমাকে ক্ষমা করুন, তবে আইআর কী?
অ্যাডাম

উত্তর:


13

এখানে আন্তঃসম্পর্কিত বেশ কয়েকটি প্রশ্ন রয়েছে, আমি তাদের যথাসম্ভব আলাদা করার চেষ্টা করব।

অন্যান্য ভাষা কেন এলএলভিএম আইআর তৈরি করে না কেন এএসটি জঞ্জাল দেয়?

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

তবে, আপনি যদি সি / সি ++ উদাহরণস্বরূপ স্ট্যাটিক বিশ্লেষকদের জন্য টুলিং লিখছেন, তবে এটিএসটি পুনরায় ব্যবহার করা অনেক অর্থবোধ করে কারণ আপনি সি / সি ++ এর সাথে কাজ করছেন যদি কাঁচা পাঠ্যের চেয়ে এটিএসটির সাথে কাজ করা অনেক সহজ if ।

এলএলভিএম আইআর কেন এটি রূপ?

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

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

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

একটি আলাদা আইআর কার্যকর হবে (ঠিক আছে, জিজ্ঞাসা করা হয়নি তবে সাজানো সাজানো)?

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


এলএলভিএমে আসার আগে হাস্কেলের বেশ কয়েকটি আইআর রয়েছে।
ডিলানস্প

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