কৌণিক সংকলক "সংকলন" কী করে?


88

আমাকে আজ জিজ্ঞাসা করা হয়েছিল এবং সঠিক উত্তর দিতে সক্ষম ছিল না।

টাইপস্ক্রিপ্ট জেএস এ স্থানান্তর। তারপরে গাছের কাঁপুনি রয়েছে, "কম" (alচ্ছিক) এবং স্থাপনার প্রক্রিয়াতে আর কী আছে। তবে "সংকলন" এর মতো (আফাইক) কিছুই করার নেই। সবকিছু বান্ডিল হয়ে যায় এবং ভারি অনুকূলিত হয়, তবে এটি আসলে সংকলিত হয় না, তাই না?

এখানে একটি "সময়ের আগে" -গোলক রয়েছে, যা সত্যই লক্ষণীয় কাজ করে। আমি কী মিস করি?

জাভাস্ক্রিপ্ট নিজেই এখনও ব্যাখ্যা করা হয়, তাই না?


6
আমি "সত্যই সংকলন করছি না" এর সাথে একমত। মূলত, এটি সংকলনের সংজ্ঞার বিষয় । কিছু শব্দ ব্যবহার পছন্দ transpilation জাভাস্ক্রিপ্ট টাইপ করা বিষয় থেকে রূপান্তর চিহ্নিত করতে। তবে হ্যাঁ, সংক্ষেপে, টাইপসক্রিপ্ট সংকলকটির ভূমিকা কেবল টাইপস্ক্রিপ্ট থেকে জাভাস্ক্রিপ্ট তৈরি করা।
প্যাক0

6
@ Pac0 আমি এখানে কিছু ভুল বুঝতে পারি, তবে জাভাস্ক্রিপ্ট থেকে টাইপস্ক্রিপ্ট যদি প্রতিস্থাপন হয়, তবে জিসিসি কোনও সি-টু মেশিন কোড ট্রান্সপ্লেলার নয়? আপনি কীভাবে ট্রান্সপ্লেলার এবং সংকলকের মধ্যে পার্থক্যটি সংজ্ঞায়িত করবেন?
11684


4
দেখুন লোকেরা "ট্রান্সপ্লার" বলার অর্থ কী? (এবং "আমার প্রথম পনেরোটি সংকলক" ) অনুসরণ করুন (যিনি সংকলকটিতে কাজ করেন তার কাছ থেকে), যে যুক্তি দেয় যে "সংকলক" এই জাতীয় জিনিসগুলির জন্য ব্যবহার করার জন্য একটি ভাল শব্দ।
শ্রীভাতসার

4
জাভাস্ক্রিপ্ট নিজেই এখনও ব্যাখ্যা করা হয়, তাই না? - আর কিছু নয়, এটি
ফ্লাইতে

উত্তর:


91

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

এটি বলেছিল, আমি এর জন্য আরও ভাল শব্দটি বলতে পারি ট্রান্সপ্লাইং । আমি পরামর্শ দেব যে টাইপস্ক্রিপ্ট সংকলকটি ট্রান্সপ্লেলার হিসাবে আরও ভালভাবে বর্ণিত।

পার্থক্যটি সূক্ষ্ম এবং একটি ট্রান্সপ্লারকে এক ধরণের সংকলক হিসাবে ভাবা যেতে পারে; তবে একটি (খাঁটি) সংকলিত ভাষা হ'ল (সাধারণত) সি # উদাহরণের মতো একটি উচ্চ-স্তরের ভাষাকে নিম্ন (এআর) স্তরের ভাষা (মেশিন কোডের নিকটে) পরিণত করা। একটি ট্রান্সপ্লারার একটি উচ্চ-স্তরের ভাষাকে একই স্তরের (বিমূর্ততার) ভাষায় পরিণত করে (উচ্চ স্তরেরও)। *

সংকলিত কোডের ফলাফলটি সাধারণত কোনও ভাষা নয় যা আপনি নিজেরাই লিখতেন । ট্রান্সপ্লেলারটির ফলাফল হ'ল অন্য উচ্চ-স্তরের ভাষা। তত্ত্বের ক্ষেত্রে, আপনি আইএল লিখতে পারেন (উদাহরণ হিসাবে) তবে এটি সত্যিই একটি সংকলক দ্বারা উত্পাদিত করার জন্য ডিজাইন করা হয়েছে এবং এটি করার জন্য কোনও সরঞ্জাম বা সমর্থন নেই, আপনি কেবল # # / vb.net সংকলন করে আইএল উত্পাদন করেন। যদিও জাভাস্ক্রিপ্টটি তার নিজস্বভাবে ব্যবহারযোগ্য (এবং ব্যবহৃত) প্রোগ্রামিং ভাষা।

* এই শব্দের সংজ্ঞা এবং তাদের ব্যবহার হিসাবে প্রচুর সতর্কতাগুলি অস্পষ্ট


12
টাইপস্ক্রিপ্টের চেয়ে জাভাস্ক্রিপ্ট কি কঠোরভাবে স্তর নয়?
বার্গি

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

4
অন্য একটি প্রোগ্রাম তৈরি করার জন্য একটি সংকলককে পুরো প্রোগ্রামটি মূলত বুঝতে হবে (যা সাধারণত একই জিনিসটি করে তবে অন্য ভাষায় - এতে মেশিন কোড অন্তর্ভুক্ত থাকে)।
থরবজর্ন রাভন অ্যান্ডারসন

8
আমি কেবল এটি দু'বার পড়েছি এবং এখানে প্রশ্নের উত্তর খুঁজে পাইনি। উত্তর ঠিক নীচে।
kuncevic.dev

4
ওপি জিজ্ঞাসাবাদযুক্ত প্রশ্নটি জিজ্ঞাসা করেছিল, যে কারণে তারা এটিকে মেনে নিয়েছিল, "কৌণিক সংকলককে সংকলক বলা কি সঠিক?" - এবং এই উত্তরটি এর উত্তর দেয়। সুতরাং আমার কাছ থেকে +1 এছাড়াও দেখুন লোকেরা "ট্রান্সপ্লার" বলার অর্থ কী? এবং অনুসরণ "আমার প্রথম পনেরটি সংকলক"
শ্রীভাতসার

70

আপনি একটিতে তিনটি প্রশ্ন জিজ্ঞাসা করছেন বলে মনে হচ্ছে:

  • সংকলক এবং ট্রান্সপ্লেলার মধ্যে পার্থক্য কী?
  • কৌণিক এবং টাইপস্ক্রিপ্ট কি সংকলক বা ট্রান্সপোর্টারগুলি প্রয়োগ করে?
  • একটি পৃথক কৌণিক সংকলক আছে? এটি কি সংকলন করে?

একটি সংকলক এবং ট্রান্সপ্লেলার মধ্যে পার্থক্য কি?

@ জার্গডব্লিউমিতাগ এই প্রশ্নের একটি খুব ভাল উত্তর সরবরাহ করেছেন

কৌণিক এবং টাইপস্ক্রিপ্ট কি সংকলক বা ট্রান্সপোর্টারগুলি প্রয়োগ করে?

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

কৌণিক সংকলক প্রকৃতপক্ষে টাইপস্ক্রিপ্ট সংকলক সম্পর্কিত নয়। এগুলি খুব আলাদা সংকলক।

একটি পৃথক কৌণিক সংকলক আছে? এটি কি সংকলন করে?

কৌণিকের দুটি সংকলক রয়েছে:

  • সংকলক দেখুন
  • মডিউল সংকলক

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

টেমপ্লেট রূপান্তর এছাড়া দৃশ্য কম্পাইলার এছাড়াও মত টেকনিক আকারে বিভিন্ন মেটাডাটা তথ্য প্রনয়ন @HostBinding, @ViewChildইত্যাদি

মনে করুন আপনি কোনও উপাদান এবং এর টেমপ্লেটকে এর মতো সংজ্ঞায়িত করেছেন:

@Component({
  selector: 'a-comp',
  template: '<span>A Component</span>'
})
class AComponent {}

এই ডেটা ব্যবহার করে সংকলক নিম্নলিখিত সামান্য সরলীকৃত উপাদান ফ্যাক্টরি উত্পন্ন:

function View_AComponent {
  return jit_viewDef1(0,[
      elementDef2(0,null,null,1,'span',...),
      jit_textDef3(null,['My name is ',...])
    ]

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

আমি দৃ articles়ভাবে এই নিবন্ধগুলি পড়ার পরামর্শ দিচ্ছি:

এছাড়াও, কৌণিক এওটি এবং জেআইটি সংকলকটির মধ্যে পার্থক্য কী রয়েছে তার উত্তর দেখুন

মডিউল সংকলকটির কাজ হল একটি মডিউল কারখানা তৈরি করা যা মূলত সরবরাহকারীদের মার্জড সংজ্ঞা ধারণ করে।

আরও তথ্যের জন্য, পড়ুন:


4
@ কোডপ্লেব, বার্গির এই উত্তরটি
ম্যাক্স কোরেটস্কিই

4
@ কোডপ্লেব নোট করুন যে জিসিসি এবং আরও অনেক সংকলক মেশিন কোড তৈরি করে না। অনুশীলনে, জিসিসি স্বয়ংক্রিয়ভাবে সিস্টেমগুলিকে মেশিন কোড তৈরি করতে কল করে তবে এটি বাহ্যিক সাহায্য ব্যতীত যে কোডটি উত্পন্ন করে তা কেবল সমাবেশ, যা পরে বাহ্যিক সমাবেশের হাতে দেওয়া হয়।
পেশাদাররা

7
@ কোডপ্লেব এই উত্তরটি অনেক উচ্চতর এবং আসলে আপনার প্রশ্নের উত্তর দেয়। আপনার মূল রায়টি পুনর্বিবেচনা করার এখনও সময় আছে।
async

4
@ কোডেপ্লেব "ট্রান্সপ্লার" শব্দটির অস্তিত্ব বা কখনও অস্তিত্ব থাকার কোনও সঠিক কারণ নেই, এটি সমস্তই বিভ্রান্তিপূর্ণ।
লুশেনকো

4
@ স্টম, দুঃখিত, প্রশ্নটি খুব বিস্তৃত।
সর্বাধিক উত্সাহিত

54

প্রকারের লিখনটি জেএসে স্থানান্তর করে। তারপরে গাছের কাঁপুনি রয়েছে, "কম" (alচ্ছিক) এবং স্থাপনার প্রক্রিয়াতে আর কী what তবে "সংকলন" এর মতো (আফাইক) কিছুই করার নেই। সবকিছু বান্ডিল হয়ে যায় এবং ভারি অনুকূলিত হয়, তবে এটি আসলে সংকলিত হয় না, তাই না?

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

সংকলনটির অর্থ সহজভাবে একটি প্রোগ্রাম A থেকে ভাষা B তে অনুবাদ করা । এটিই এর অর্থ। (এছাড়াও লক্ষ করুন যে এবং বি এর একই ভাষা হওয়া পুরোপুরি সম্ভব ))

কিছু ক্ষেত্রে, আমাদের কাছে A এবং B কী হয় এবং সংকলকটি কী করে তার উপর নির্ভর করে নির্দিষ্ট ধরণের সংকলকগুলির জন্য আরও বিশেষজ্ঞের নাম রয়েছে :

  • যদি একটি সমাবেশ ভাষা হিসেবে প্রমাণিত হয় এবং বি মেশিন ভাষা হিসেবে প্রমাণিত হয়, তাহলে আমরা এটি একটি কল প্রতীকী ভাষান্তর ,
  • যদি একটি মেশিন ভাষা হিসেবে প্রমাণিত হয় এবং বি সমাবেশ ভাষা হিসেবে প্রমাণিত হয়, তাহলে আমরা এটি একটি কল disassembler ,
  • যদি একটি কম-স্তরের হিসেবে প্রমাণিত হয় বি , তাহলে আমরা এটি একটি কল decompiler ,
  • যদি এবং বি একই ভাষা হয়, এবং ফলস্বরূপ প্রোগ্রামটি কোনও উপায়ে দ্রুত বা হালকা হয়, তবে আমরা একে অপ্টিমাইজার বলি ,
  • যদি এবং বি একই ভাষা হয়, এবং ফলস্বরূপ প্রোগ্রামটি ছোট হয়, তবে আমরা একে মিনিফায়ার বলি ,
  • যদি A এবং B একই ভাষা হয়, এবং ফলস্বরূপ প্রোগ্রামটি কম পঠনযোগ্য হয়, তবে আমরা একে অপ্রচলিত বলি ,
  • যদি A এবং B মোটামুটি বিমূর্ততার একই স্তরের বলে মনে হয়, তবে আমরা এটিকে ট্রান্সপ্লার বলি এবং
  • যদি A এবং B মোটামুটি বিমূর্ততার একই স্তরের বলে মনে হয় এবং ফলস্বরূপ প্রোগ্রামটি বিন্যাস, মন্তব্য এবং প্রোগ্রামার অভিপ্রায় সংরক্ষণ করে যে ফলস্বরূপ প্রোগ্রামটি মূল প্রোগ্রাম হিসাবে একই ফ্যাশনে বজায় রাখা সম্ভব হয়, তবে আমরা কল করি এটি একটি পুনরায় প্রকৌশল সরঞ্জাম

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

আপনি "ভাষা প্রসেসর" শব্দটি জুড়ে হোঁচট খেতে পারেন। এর সংজ্ঞা সংজ্ঞা অনুসারে একটি সংকলক, একটি দোভাষী বা উভয় সংকলক এবং দোভাষী হতে পারে।

জাভাস্ক্রিপ্ট নিজেই এখনও ব্যাখ্যা করা হয়, তাই না?

জাভাস্ক্রিপ্ট একটি ভাষা। ভাষাগুলি যৌক্তিক নিয়ম এবং বিধিনিষেধের একটি সেট। ভাষার ব্যাখ্যা বা সংকলন হয় না are ভাষা ঠিক আছে

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

এই দুটি পদ বিমূর্ততার বিভিন্ন স্তর সম্পর্কিত belong ইংরাজী যদি কোনও টাইপ করা ভাষা হত তবে "ইন্টারপ্রিটেড-ল্যাঙ্গুয়েজ" টাইপ ত্রুটি হত।

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

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

কেস পয়েন্ট: বর্তমানে বিদ্যমান প্রতিটি মূলধারার জাভাস্ক্রিপ্ট প্রয়োগের একটি সংকলক রয়েছে।

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

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

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

আপনি একটি মন্তব্যে লিখেছেন:

আমি সত্যিই ভাবছিলাম যে মেশিন কোডটি কোথাও জড়িত।

"মেশিন কোড" এর অর্থ কী?

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

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

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


4
সংকলনের ধারণার গভীর ব্যাখ্যার জন্য +1 এবং আমি যদি পারতাম তবে এই বুলেট পয়েন্টগুলির জন্য আরও একটি +1 করুন। খুব উপকারী.
পেড্রো এ

4
যদিও, আমার বলতে হবে, প্রযুক্তিগতভাবে এটি শিরোনামে প্রশ্নের উত্তর দেয় না ... যদিও আমার কাছ থেকে প্রাপ্য +1, যদিও!
পেড্রো এ

আমি সম্মত এটি সম্মত, কিন্তু শিরোনামে প্রশ্নের উত্তর হ'ল সংক্ষিপ্ত বিবরণ সংকলন না হিসাবে ওপি তালিকাভুক্ত সমস্ত কিছুই কৌনিক সংকলন কি "।
Jörg ডব্লু মিটাগ

এটি আসলে পার্থক্যটির পরিবর্তে নামকরণ কনভেনশন সম্পর্কে কীভাবে রয়েছে তার সত্যিকারের ভাল ব্যাখ্যা। মাইক্রোকোড উল্লেখ করে সম্ভবত উন্নতি করা যেতে পারে - এটি উল্লেখ করার জন্য যে মেশিন কোডের স্তরেও আপনি '
ধাতুতে

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

18

একটি ব্রাউজারে চালানোর জন্য আপনি যে কোডটি লিখেছেন তা পেতে দুটি জিনিস জড়িত:

1) Transpiling জাভাস্ক্রিপ্ট মধ্যে টাইপ করা বিষয় । এটি একধরণের সমাধান সমস্যা। আমি মনে করি তারা কেবল ওয়েবপ্যাক ব্যবহার করে।

2) জাভাস্ক্রিপ্ট মধ্যে কৌণিক বিমূর্ততা সংকলন । আমি একটি উপাদান, পাইপ, নির্দেশিকা, টেমপ্লেট ইত্যাদির মতো জিনিসগুলি বোঝাতে চাইছি এটিই কৌণিক মূল দল কাজ করে।

আপনি যদি দ্বিতীয় বিটটিতে সত্যই আগ্রহী হন তবে কৌণিক সংকলক, ঘড়ির সংকলক লেখক টোবিয়াস বশ অ্যাঙ্গুলার সংযোগ 2016 এ কৌণিক সংকলকটি ব্যাখ্যা করুন

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


1

কৌণিক সংকলক

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

ধরা যাক আমরা মোতায়েনের জন্য একটি অ্যাপ্লিকেশন তৈরি করতে চাই এবং নিম্নলিখিত কমান্ডটি চালাতে চাই:

ng build --prod

কয়েকটি জিনিস ঘটে: উত্পাদনের সংস্করণ, সংক্ষিপ্তকরণ, বান্ডিল সম্পদ, ফাইলের নাম হ্যাশিং, গাছের কাঁপুন, এওটি ... (আমরা পতাকাগুলি ব্যবহার করে এটি সক্ষম / অক্ষম করতে পারি, প্রাক্তন আওট = মিথ্যা)। সংক্ষেপে, প্রোড ফ্ল্যাগটি ব্রাউজারের জন্য প্রস্তুত অপ্টিমাইজড কোড তৈরি করতে এনজিসি (কৌণিক সংকলক) ব্যবহার করে এওটি সংকলন করে অ্যাপ্লিকেশনটির একটি অনুকূলিত বান্ডেল তৈরি করে ( হ্যাঁ, এটি টেমপ্লেটগুলি প্রাক-সংকলন করে) )।

টাইপস্ক্রিপ্ট সংকলক

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

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

  • সমস্ত ধরণের টিকা মুছে দিন
  • জাভাস্ক্রিপ্টের পুরানো সংস্করণগুলির জন্য নতুন জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি সংকলন করুন।
  • প্রকারের স্ক্রিপ্ট বৈশিষ্ট্যগুলি সঙ্কলন করুন যা মানক জাভাস্ক্রিপ্ট নয়।

এটি চালু করে, সংকলক tsconfig.json এ লোড করা কনফিগারেশনের জন্য অনুসন্ধান করে (ডিফল্ট মান সহ সমস্ত সংকলক বিকল্পের বিশদ তালিকা এখানে পাওয়া যাবে )।

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

দ্রষ্টব্য : tsc এবং ngc এর বিভিন্ন উদ্দেশ্য রয়েছে এবং এটি একে অপরের উপরে নির্বাচন করা নয়। এই উত্তরটি আগ্রহী হতে পারে

এই উত্তরটি নিম্নলিখিত বইগুলির সামগ্রীর উপর ভিত্তি করে তৈরি হয়েছিল

  • ক্লো, এম (2018)। "কৌণিক 5 প্রকল্প: 70+ প্রকল্প ব্যবহার করে একক পৃষ্ঠা ওয়েব অ্যাপ্লিকেশন তৈরি করতে শিখুন"।

  • দেউই, বি।, গ্রসনিক্লাউস, কে।, জাপিক্সে, পি। (2017)। "ভিজ্যুয়াল স্টুডিও 2017 সহ ওয়েব অ্যাপ্লিকেশনগুলি বিল্ডিং: .NET কোর এবং আধুনিক জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক ব্যবহার করে"।

  • ফ্রিম্যান, এ (2019)। "এসেনশিয়াল টাইপস্ক্রিপ্ট: প্রারম্ভিক থেকে প্রো"।

  • গিয়া, পি। (2018)। "টাইপস্ক্রিপ্ট মাইক্রোসার্ভেসিস"।

  • ইস্কান্দার, এ।, শিবুকুলু, এস। (2019)। "কৌণিক এবং বুটস্ট্র্যাপের সাথে ওয়েব বিকাশ - তৃতীয় সংস্করণ"।

  • হেনেসি, কে।, অরোরা, সি (2018)। "উদাহরণ অনুসারে কৌণিক 6"।

  • জ্যানসেন, আর।, ওল্ফ, আই।, ভ্যান, ভি। (2016)। "টাইপস্ক্রিপ্ট: আধুনিক জাভাস্ক্রিপ্ট বিকাশ"।

  • মোহাম্মদ, জেড। (2019) "কৌণিক প্রকল্প"।

  • শেেশাদ্রি, এস (2018)। "কৌণিক: আপ এবং চলমান"।

  • উইলকেন, জে। (2018)। "কৌনিক ইন অ্যাকশন"।

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