এলএলভিএম আসলে কী?


464

আমি সব সময় এলএলভিএম সম্পর্কে শুনি। এটি পার্লে, তারপরে এটি হাস্কেলে, তারপরে কেউ এটি অন্য কোনও ভাষায় ব্যবহার করে? এটা কি?


45
এখানে একটি সুন্দর অধ্যায় রয়েছে যা এখানে সবকিছু সুন্দরভাবে ব্যাখ্যা করেছে: www.aosabook.org/en/llvm.html
ডেভিড ডি সি ই

উত্তর:


369

এলএলভিএম হ'ল একটি লাইব্রেরি যা মধ্যবর্তী এবং / বা বাইনারি মেশিন কোডটি নির্মাণ, অনুকূলিতকরণ এবং উত্পাদন করতে ব্যবহৃত হয়।

এলএলভিএম সংকলক কাঠামো হিসাবে ব্যবহার করা যেতে পারে, যেখানে আপনি "সামনের প্রান্ত" (পার্সার এবং লেক্সার) এবং "ব্যাক এন্ড" (কোড যা এলএলভিএমের প্রতিনিধিত্বকে প্রকৃত মেশিন কোডে রূপান্তর করে) সরবরাহ করে।

এলএলভিএম একটি জেআইটি সংকলক হিসাবেও কাজ করতে পারে - এটি সংকলনের গতির লক্ষ্যে দ্রুত কোড অপ্টিমাইজেশনের সাথে x86 / x86_64 এবং পিপিসি / পিপিসি 64 বিধানসভা প্রজন্মের সমর্থন করে।

আপনি যদি আগ্রহী হন, আপনি তাদের ডেমো পৃষ্ঠায় সিএল বা সি ++ কোড থেকে উত্পন্ন এলএলভিএমের মেশিন কোডের সাথে খেলতে পারেন তবে ডেমো পৃষ্ঠাটি ২০১৩ সাল থেকে বর্তমানে অক্ষম রয়েছে।


39
আপনি যদি এটির সাথে খেলতে চান তবে এই আশ্চর্যজনক নিবন্ধটি দেখুন: gnuu.org/2009/09/18/writing-Your-own-toy-compiler
লিরাুনা

29
উত্তরে প্রদত্ত লিঙ্কটি বলছে "বর্তমানে এলএলভিএম ডেমো পৃষ্ঠা অক্ষম করা আছে।"
06

5
ellcc.org/demo/index.cgi ইন্টারলিডিয়েট কোড সহ বিভিন্ন লক্ষ্যগুলিতে এলএলভিএম এর মাধ্যমে সি / সি ++ সংকলন সহ খেলার আরও একটি উপায়
টম গুডফেলো

1
এর অর্থের প্রকৃত উদাহরণ আপনি দিতে পারেন?
মাইগ্রেট

112

এলএলভিএমের একটি ভাল সংক্ষিপ্তসার হ'ল:

এখানে চিত্র বর্ণনা লিখুন

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

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


39
চিত্রটির হাজার হাজার
শুল্ক

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

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

73

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

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


13
.. সুতরাং ডক্স কী বলার চেষ্টা করছে; যখন LLVM জন্য একটি আদ্যক্ষরা নিম্ন স্তরের ভার্চুয়াল মেশিন , প্রকল্প কেবল নামকরণ করা হয় LLVM না সম্পূর্ণরূপে বানান আউট শব্দ।
জোহেম কুয়েজ্পার্স

2
এর আগে এটি সংক্ষেপে উপরে ছিল তবে পরে এন.ইউইকিপিডিয়া.org
উইকি /

2
মন্তব্য সংক্ষিপ্তসার। "নিম্ন স্তরের ভার্চুয়াল মেশিন (এলএলভিএম)" এর কিছু হওয়া উচিত "এলএলভিএম (যার অর্থ" নিম্ন স্তরের ভার্চুয়াল মেশিন "এর আগে প্রকল্পগুলির
আজীবন শুরু হয়েছিল

52

মতে 'LLVM কোর লাইব্রেরি সঙ্গে শুরু করা হয়েছে' বই (গ):

প্রকৃতপক্ষে, এলএলভিএম নামটি নীচের যে কোনওটিকে বোঝাতে পারে:

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

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

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

  • এলএলভিএম কোর: মধ্যবর্তী ভাষা স্তরে এবং অপেক্ষাকৃত অ্যালগরিদমগুলি যে প্রকল্পটি শুরু হয়েছিল সেগুলি এলএলভিএম কোর গঠন করে The নিম্নলিখিত বাক্যটিতে এলএলভিএমের এই অর্থ রয়েছে: "এলএলভিএম এবং কলং দুটি পৃথক প্রকল্প"।

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


35

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


6
সুতরাং এলএলভিএম কি লাইব্রেরি, এবং ক্ল্যাংটি সংকলক?
আব্দুল

11
ঝনঝন এলএলভিএম এর সি / সি ++ ফ্রন্টএন্ড সংকলক। এটি সি কোডটি এলএলভিএম বিটকোডে রূপান্তর করে, যা ব্যাকএন্ড সংকলক দ্বারা কিছু অ্যাসেম্বলি ভাষায় অনুবাদ করা হয়।
বরিস মুলদার

6

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

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

আপনার নিজের পাস লেখার বিষয়ে আরও তথ্যের জন্য এই http://llvm.org/docs/WritingAnLLVMPass.html দেখুন

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