কীভাবে এত দ্রুত সংকলন হয়?


217

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


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

55
এই প্রশ্নের হতাশাবাদী সংস্করণটি হ'ল "কেন সি ++ এত আস্তে সংকলন করে?" stackoverflow.com/questions/588884/...
dan04

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

ছোট প্রকল্পগুলির জন্য, গো আমার কাছে ধীর বলে মনে হচ্ছে। এটি কারণ আমি মনে করি যে টার্বো-পাস্কেল এমন একটি কম্পিউটারে অনেক বেশি দ্রুত গতিতে ছিল যা সম্ভবত কয়েক হাজার গতি কম ছিল। prog21 . دادgum.com/47.html?repost=true । প্রতিবার আমি "গো বিল্ড" টাইপ করি এবং কয়েক সেকেন্ডের জন্য কিছুই হয় না বলে আমি মনে করি ক্রাস্টই পুরানো ফোর্টরান সংকলক এবং পাঞ্চ কার্ডগুলিতে ফিরে আসি। YMMV। টিএলডিআর: "ধীর" এবং "দ্রুত" হ'ল আপেক্ষিক পদ।
রেডগ্রিটিব্রিক

নিশ্চিতভাবে dave.cheney.net/2014/06/07/five-things-that-make-go- অধিকতর বিস্তারিত অন্তর্দৃষ্টিগুলির জন্য পড়ার পরামর্শ দিন
কার্ত্তিক

উত্তর:


193

নির্ভরতা বিশ্লেষণ।

যান প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী নিচের বাক্যটি ধারণ ব্যবহৃত:

গো সফ্টওয়্যার নির্মাণের জন্য এমন একটি মডেল সরবরাহ করে যা নির্ভরতা বিশ্লেষণকে সহজ করে তোলে এবং সি-স্টাইলের ওভারহেডের অনেকগুলি এড়ায় ফাইল এবং লাইব্রেরি।

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

দ্রুত সংকলনের মূল কারণ এটি। এবং এটি নকশা দ্বারা।


এই বাক্যাংশটি এখন আর এফএকিউ-তে নেই, তবে সি / সি ++ এবং পাস্কাল / মডুলা / গো পদ্ধতির তুলনা করে "নির্ভরতা বিশ্লেষণ" বিষয়টির আরও বিশদ বিবরণ টক- এ গুগল
লভ্যাংশ

76

আমি মনে করি এটা না যে যান কম্পাইলার হয় দ্রুত , এটা যে অন্যান্য কম্পাইলার হয় এর ধীর

সি এবং সি ++ সংকলককে প্রচুর পরিমাণে শিরোলেখ পার্স করতে হয় - উদাহরণস্বরূপ, সি ++ "হ্যালো ওয়ার্ল্ড" সংকলনের জন্য 18k লাইন কোডের সংকলন প্রয়োজন, যা উত্সের প্রায় অর্ধ মেগাবাইট!

$ cpp hello.cpp | wc
  18364   40513  433334

জাভা এবং সি # সংকলকগুলি একটি ভিএম-তে চালিত হয় যার অর্থ তারা যে কোনও কিছু সংকলন করার আগে অপারেটিং সিস্টেমকে পুরো ভিএম লোড করতে হবে, তারপরে তাদের বাইটোকড থেকে নেটিভ কোডে জেআইটি-সংকলন করতে হবে, যার সবকটিতে কিছুটা সময় লাগে।

সংকলনের গতি বিভিন্ন কারণের উপর নির্ভর করে।

কিছু ভাষাগুলি দ্রুত সংকলন করার জন্য ডিজাইন করা হয়েছে। উদাহরণস্বরূপ, পাসকাল একটি সিঙ্গল-পাস সংকলক ব্যবহার করে সংকলন করার জন্য ডিজাইন করা হয়েছিল।

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


19
মাইক্রোসফ্ট এর সি # সংকলক একটি ভিএম মধ্যে চলমান না। এটি এখনও মূলত পারফরম্যান্সের কারণে সি ++ এ লেখা।
blucz

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

7
কোডের 18 কে লাইন (সঠিক হতে 18364) হয় 433334 বাইট (~ 0,5MB)
el.pescado

9
সি # সংকলকটি ২০১১ সাল থেকে সি # দিয়ে সংকলিত হয়েছে anyone কেউ যদি পরে এটি পড়ে তবে কেবলমাত্র একটি আপডেট।
কার্ট কলার

3
উত্পাদিত এমএসআইএল চালিত সি # সংকলক এবং সিএলআর হ'ল আলাদা জিনিস। আমি মোটামুটি নিশ্চিত যে সিএলআর সি # তে লেখা নেই।
জোকুল

39

বেশিরভাগ সি / সি ++ কম্পাইলারের তুলনায় গো সংকলকটি আরও দ্রুতগতির একাধিক কারণ রয়েছে:

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

  • শীর্ষ কারণ : দ্রুত সংকলনের গতি সচেতন পছন্দ ছিল গো সংকলক এবং গো ভাষায়

  • গো সংকলকটিতে সি / সি ++ সংকলকগুলির চেয়ে সহজতর অপ্টিমাইজার রয়েছে

  • সি ++ এর বিপরীতে গো এর কোনও টেম্পলেট নেই এবং কোনও ইনলাইন ফাংশন নেই। এর অর্থ হ'ল গো-তে কোনও টেম্পলেট বা ফাংশন ইনস্ট্যান্টেশন করার দরকার নেই।

  • গো সংকলকটি শীঘ্রই নিম্ন-স্তরের সমাবেশ কোড উত্পন্ন করে এবং অপ্টিমাইজারটি এসেম্বলি কোডে কাজ করে, যখন একটি সাধারণ সি / সি ++ সংকলকটিতে অপ্টিমাইজেশনটি মূল উত্স কোডের অভ্যন্তরীণ উপস্থাপনায় কাজটি পাস করে। সি / সি ++ সংকলকটিতে অতিরিক্ত ওভারহেডটি অভ্যন্তরীণ উপস্থাপনা উত্পন্ন করার প্রয়োজন থেকে আসে।

  • গো প্রোগ্রামের চূড়ান্ত লিঙ্কিং (5l / 6l / 8l) কোনও সি / সি ++ প্রোগ্রামের লিঙ্ক করার চেয়ে ধীর হতে পারে, কারণ গো সংকলক ব্যবহৃত সমস্ত সমাবেশ কোডের মধ্য দিয়ে যাচ্ছে এবং সম্ভবত এটি অন্যান্য অতিরিক্ত ক্রিয়াও করছে যা সি / সি ++ লিঙ্কাররা করছে না

  • কিছু সি / সি ++ সংকলক (জিসিসি) পাঠ্য আকারে নির্দেশাবলী উত্পন্ন করে (এসেম্বলারের কাছে প্রেরণ করা হবে), গো সংকলক বাইনারি আকারে নির্দেশাবলী উত্পন্ন করে। বাইনারি রূপান্তর করার জন্য অতিরিক্ত কাজ (তবে খুব বেশি নয়) করা দরকার।

  • গো সংকলক কেবলমাত্র সংখ্যক সিপিইউ আর্কিটেকচারকে লক্ষ্যবস্তু করে, অন্যদিকে জিসিসি সংকলক বিপুল সংখ্যক সিপিইউকে লক্ষ্য করে ts

  • যে সংকলকগুলি উচ্চ সংকলনের গতি যেমন জাইকস হিসাবে লক্ষ্য নিয়ে ডিজাইন করা হয়েছিল তারা দ্রুত। একটি 2GHz সিপিইউতে, জিক্স প্রতি সেকেন্ডে 20000+ জাভা কোডের লাইন সংকলন করতে পারে (এবং সংকলনের বর্ধিত মোডটি আরও কার্যকর)।


17
গো এর সংকলক ছোট ফাংশনগুলি ইনলাইন করে। আমি নিশ্চিত না যে কীভাবে সংখ্যক সিপিইউগুলিকে টার্গেট করা আপনাকে দ্রুত ধীর করে তোলে ... আমি ধরে নিয়েছি আমি x86 এর জন্য কম্পাইল করার সময় জিসিসি পিপিসি কোড তৈরি করছে না।
ব্র্যাড ফিৎসপ্যাট্রিক

@ ব্র্যাডফিজপ্যাট্রিক একটি পুরানো মন্তব্য পুনরুত্থিত করতে ঘৃণা করে তবে সংকলকটির সংখ্যক প্ল্যাটফর্ম ডেভেলপারদের লক্ষ্য করে এটি প্রতিটিটির জন্য আরও বেশি সময় ব্যয় করতে পারে।
অধ্যবসায়

একটি মধ্যবর্তী ফর্ম ব্যবহার আপনাকে অনেক বেশি আর্কিটেকচার সমর্থন করতে দেয় যেহেতু এখন আপনাকে কেবল প্রতিটি নতুন স্থাপত্যের জন্য একটি নতুন ব্যাকএন্ড লিখতে হবে
ফুক্লভ

34

সংকলন দক্ষতা একটি প্রধান নকশা লক্ষ্য ছিল:

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

পার্সিং সম্পর্কিত নির্দিষ্ট ভাষা বৈশিষ্ট্যগুলির ক্ষেত্রে ভাষা FAQ খুব আকর্ষণীয়:

দ্বিতীয়ত, ভাষাটি বিশ্লেষণ করা সহজ করার জন্য ডিজাইন করা হয়েছে এবং প্রতীক টেবিল ছাড়াই পার্স করা যায়।


6
এটা সত্যি না. প্রতীক টেবিল ছাড়া আপনি গো উত্স কোডটি পুরোপুরি বিশ্লেষণ করতে পারবেন না।

12
আবর্জনা সংগ্রহ কেন কম্পাইলের সময় বাড়ায় তাও আমি দেখতে পাই না। এটা ঠিক না।
দ্য ব্লাস্টন

3
এগুলি এফএকিউ এর উদ্ধৃতিগুলি: golang.org/doc/go_faq.html আমি তাদের লক্ষ্য (প্রতীক টেবিল) অর্জন করতে ব্যর্থ হয়েছে বা তাদের যুক্তি ত্রুটিপূর্ণ (জিসি) হয়েছে কিনা তা আমি বলতে পারি না।
ল্যারি ওব্রায়েন

5
থেকে @FUZxxl যান golang.org/ref/spec#Primary_expressions এবং দুই সিকোয়েন্স [প্রতীক, কল] এবং [রূপান্তর] বিবেচনা। উদাহরণ গো উত্স কোড: সনাক্তকারী 1 (সনাক্তকারী 2)) প্রতীক টেবিল ছাড়া এটি সিদ্ধান্ত নেওয়া অসম্ভব যে এই উদাহরণটি কল বা রূপান্তর। | যে কোনও ভাষা প্রতীক টেবিল ছাড়াই কিছু পরিমাণে পার্স হতে পারে। এটি সত্য যে গো উত্স কোডের বেশিরভাগ অংশটি একটি প্রতীক টেবিল ছাড়াই পার্স করা যায়, তবে এটি সত্য নয় যে গোলং স্পেসে বর্ণিত সমস্ত ব্যাকরণের উপাদানগুলি সনাক্ত করা সম্ভব।

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

26

উপরের বেশিরভাগটি সত্য হলেও, একটি খুব গুরুত্বপূর্ণ বিষয় রয়েছে যা প্রকৃতপক্ষে উল্লেখ করা হয়নি: নির্ভরতা ব্যবস্থাপনা।

কেবলমাত্র আপনার সরাসরি আমদানি করা প্যাকেজগুলি অন্তর্ভুক্ত করতে হবে (যাঁরা ইতিমধ্যে তাদের যা প্রয়োজন প্রয়োজন তা আমদানি করে )। এটি সি / সি ++ এর সম্পূর্ণ বিপরীতে যেখানে প্রতিটি একক ফাইল x শিরোনাম সহ শুরু হয়, এতে y শিরোনাম ইত্যাদি অন্তর্ভুক্ত থাকে নীচের লাইন: গো এর সংকলনটি আমদানিকৃত প্যাকেজগুলির সংখ্যার সাথে লিনিয়ার টাইম আর্ট নেয়, যেখানে সি / সি ++ ব্যয়কর সময় নেয়।


22

সংকলকের অনুবাদ দক্ষতার জন্য একটি ভাল পরীক্ষা হ'ল স্ব-সংকলন: কোনও সংকলক নিজেই সংকলন করতে কতক্ষণ সময় নেয়? সি ++ এর জন্য এটি খুব দীর্ঘ সময় (ঘন্টা?) সময় নেয়। তুলনা করে, একটি পাস্কাল / মডুলা -২ / ওবেরন সংকলক আধুনিক মেশিনে এক সেকেন্ডেরও কম সময়ে নিজেকে সংকলন করবে [1]।

গো এই ভাষাগুলি দ্বারা অনুপ্রাণিত হয়েছে, তবে এই দক্ষতার কয়েকটি কারণের মধ্যে রয়েছে:

  1. দক্ষ স্ক্যানিং এবং পার্সিংয়ের জন্য একটি স্পষ্টভাবে সংজ্ঞায়িত বাক্য গঠন যা গাণিতিকভাবে শব্দ sound

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

  3. একটি দক্ষ সংকলক বাস্তবায়ন (উদাহরণস্বরূপ একক-পাস, পুনরাবৃত্ত-বংশোদ্ভূত শীর্ষ-ডাউন পার্সিং) - যা অবশ্যই উপরের 1 এবং 2 পয়েন্টের সাহায্যে ব্যাপকভাবে সহায়তা করে।

এই নীতিগুলি ইতিমধ্যে মেসা, অ্যাডা, মডিউলা -2 / ওবেরন এবং বেশ কয়েকটি অন্যান্য ভাষায় 1970 এবং 1980 এর দশকে পরিচিত এবং পুরোপুরি প্রয়োগ করা হয়েছে এবং এখন (2010 এর দশকে) গো (গুগল) এর মতো আধুনিক ভাষায় তাদের পথ খুঁজে পেয়েছে , সুইফ্ট (অ্যাপল), সি # (মাইক্রোসফ্ট) এবং আরও বেশ কয়েকজন।

আসুন আশা করি এটি শীঘ্রই ব্যতিক্রম নয়, আদর্শ হবে। সেখানে যাওয়ার জন্য দুটি জিনিস হওয়া দরকার:

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

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

যাই হোক না কেন, এটি এমন প্ল্যাটফর্ম যা ভাষা গ্রহণকে চালিত করে, অন্যভাবে নয় not

তথ্যসূত্র:

[1] http://www.inf.ethz.ch/personal/wirth/ProjectOberon/PO.System.pdf , পৃষ্ঠা 6: "সংকলক প্রায় 3 সেকেন্ডের মধ্যে নিজেকে সংকলন করে"। এই উদ্ধৃতিটি স্বল্প মূল্যের জিলিনিক্স স্পার্টান -৩ এফপিজিএ বিকাশ বোর্ডের জন্য একটি ঘড়ির ফ্রিকোয়েন্সি 25 মেগাহার্টজ চলমান এবং 1 মেগাবাইট মূল স্মৃতি বিশিষ্ট। সহজেই করতে পারে 1 গিগাহার্জ ওপরে একটি ঘড়ির ফ্রিকোয়েন্সি চলমান একটি আধুনিক প্রসেসরের এবং সহজেই বেশিরভাগ গিগাবাইটের প্রধান মেমরির (যেমন জিলিনেক্স স্পার্টান -৩ এফপিজিএ বোর্ডের চেয়ে বেশি শক্তিশালীতার কয়েকটি অর্ডার) এক্সট্রোপোলেট করা যায়, এমনকি I / O গতি অ্যাকাউন্টে নেওয়ার সময়ও। ইতিমধ্যে 1990 সালে যখন ওবারন 2 মেগাবাইট প্রধান মেমরির 25MHz এনএস 32X32 প্রসেসরে চালিত হয়েছিল, তখন সংকলকটি কয়েক সেকেন্ডের মধ্যেই নিজেকে সংকলন করেছিল। আসলে অপেক্ষা করার ধারণাসংকলকটির জন্য একটি সংকলন চক্র শেষ করতে ওবারন প্রোগ্রামারদের তখনও সম্পূর্ণ অজানা ছিল। টিপিক্যাল প্রোগ্রাম, এটি সবসময় বেশি সময় নিয়ে নিলো মাউস বাটন যে সংকলন মাত্র আলোড়ন সৃষ্টি সম্পূর্ণ করার জন্য কম্পাইলার জন্য অপেক্ষা করতে চেয়ে কম্পাইল কমান্ড আলোড়ন থেকে আঙুল মুছে ফেলার জন্য। এটি ছিল সত্যিকারের তাত্ক্ষণিক সন্তুষ্টি, প্রায় শূন্য অপেক্ষা অপেক্ষা সময় সহ। এবং উত্পাদিত কোডের গুণমান, যদিও তত্ক্ষণাত্ সর্বোত্তম উপলব্ধ সংকলকগুলির সাথে সর্বদা সমান হয় না, বেশিরভাগ কাজের জন্য অসাধারণ ছিল এবং সাধারণভাবে বেশ গ্রহণযোগ্য।


1
একটি পাস্কাল / মডিউলা -২ / ওবেরন / ওবেরন -২ সংকলক আধুনিক মেশিনে এক সেকেন্ডেরও কম সময়ে নিজেকে সংকলন করবে [উদ্ধৃতি প্রয়োজন]
কফিঅ্যান্ডকোড

1
উদ্ধৃতি যোগ করা হয়েছে, দেখুন [1]।
আন্দ্রেয়াস

1
"... নীতিগুলি ... গো (গুগল), সুইফ্ট (অ্যাপল) এর মতো আধুনিক ভাষায় তাদের পথ সন্ধান করছে" সুইচ কীভাবে সেই তালিকায় তৈরি হয়েছিল তা নিশ্চিত নয়: সুইফট সংকলক হিমবাহমান । সাম্প্রতিক কোকোহাইডস বার্লিন মিটআপে, কেউ মাঝারি আকারের কাঠামোর জন্য কিছু নম্বর সরবরাহ করেছিল, তারা প্রতি সেকেন্ডে 16 এলওসি তে এসেছিল।
mpw

13

গো দ্রুত হওয়ার জন্য ডিজাইন করা হয়েছিল এবং এটি দেখায়।

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

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


পয়েন্ট (4) সম্পূর্ণ সত্য নয়। একে অপরের উপর নির্ভরশীল মডিউলগুলি ক্রস-মডিউল ইনলাইনিং এবং স্টাফগুলিকে অনুমতি দেওয়ার জন্য নির্ভরতার ক্রমে সংকলন করা উচিত।
ফুজ

1
@FUZxxl: এটি কেবলমাত্র অপ্টিমাইজেশনের পর্যায়ে উদ্বেগ প্রকাশ করেছে, যদিও আপনার ব্যাকএন্ডের আইআর প্রজন্মের মধ্যে নিখুঁত সমান্তরালতা থাকতে পারে; কেবল ক্রস-মডিউল অপ্টিমাইজেশনই এইভাবে উদ্বিগ্ন, যা লিঙ্ক পর্যায়ে করা যেতে পারে এবং লিঙ্কটি যাইহোক সমান্তরাল নয়। অবশ্যই, আপনি যদি আপনার কাজের সদৃশ করতে চান না (পুনর্বিবেচনা), আপনি "জালিয়াতি" উপায়ে সংকলন করা ভাল: 1 / কোনও মডিউল নির্ভরতা নেই, কেবলমাত্র (1), 3 / মডিউলগুলির উপর নির্ভর করে 2 / মডিউলগুলি শুধুমাত্র (1) এবং (2) এর উপর নির্ভর করে ...
ম্যাথিউ এম।

2
যা মেকফিলের মতো বেসিক ইউটিলিটিগুলি ব্যবহার করে পুরোপুরি সহজ।
ফুজ

12

অ্যালান ডোনভান এবং ব্রায়ান কর্নিগানের " দ্য গো প্রোগ্রামিং ল্যাঙ্গুয়েজ " বইটি উদ্ধৃত করে:

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


9

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

তবে কোনও সংকলককে ধীর করা শক্ত নয় to

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

উত্পন্ন কোডটি অনুকূলকরণের ক্ষেত্রে, সেই পর্যায়ে কত প্রসেসিং যুক্ত করা যায় তার কোনও সীমা নেই।


7

কেবল (আমার নিজের ভাষায়), কারণ সিনট্যাক্সটি খুব সহজ (বিশ্লেষণ এবং বিশ্লেষণের জন্য)

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

উদাহরণস্বরূপ এই কোডের উদাহরণস্বরূপ: "ইন্টারফেস" সংকলকটি যায় না এবং পরীক্ষা করে যে প্রকারটি সেই ধরণের বিশ্লেষণের সময় প্রদত্ত ইন্টারফেসটি প্রয়োগ করে কিনা । এটি ব্যবহার না করা (এবং যদি এটি ব্যবহার করা হয়) কেবল পরীক্ষা করা হয় the

অন্য উদাহরণস্বরূপ, সংকলকটি আপনাকে বলছে যে আপনি কোনও ভেরিয়েবল ঘোষণা করছেন এবং এটি ব্যবহার করছেন না (বা যদি আপনি কোনও ফেরতের মান রাখেন এবং আপনি না হন)

নিম্নলিখিতটি সংকলন করে না:

package main
func main() {
    var a int 
    a = 0
}
notused.go:3: a declared and not used

এ জাতীয় প্রয়োগ ও নীতিমালা ফলাফলের কোডটিকে আরও সুরক্ষিত করে এবং সংকলকটিকে প্রোগ্রামার যে অতিরিক্ত বৈধতা প্রয়োগ করতে পারে তা করতে হয় না।

এই সমস্ত বিবরণ বৃহত্তর একটি ভাষাকে পার্স করা আরও সহজ করে তোলে যার ফলে দ্রুত সংকলন হয়।

আবার আমার নিজের কথায়।


3

আমি মনে করি গো সংকলক তৈরির সাথে সমান্তরালে ডিজাইন করা হয়েছিল, তাই তারা জন্ম থেকেই সেরা বন্ধু ছিল। (আইএমও)


0
  • সমস্ত ফাইলের জন্য একবার আমদানি নির্ভরতা যান , তাই প্রকল্পের আকারের সাথে আমদানির সময় দ্রুত বৃদ্ধি পায় না।
  • সরল ভাষাতত্ত্ব অর্থ তাদের ব্যাখ্যা করা কম কম্পিউটিং লাগে।

আর কি?

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