फेसबुक PHP कोड को C ++ में क्यों बदलता है? [बन्द है]


42

मैंने पढ़ा कि फेसबुक PHP में शुरू हुआ, और फिर गति प्राप्त करने के लिए, वे अब PHP को C ++ कोड के रूप में संकलित करते हैं। अगर ऐसा है तो वे क्यों नहीं:

  1. सी ++ में बस कार्यक्रम? निश्चित रूप से एक जादुई संकलक बटन मारते समय कुछ त्रुटियाँ / कीड़े होने चाहिए जो PHP को c ++ कोड में पोर्ट करते हैं, है ना?

  2. यदि यह प्रभावशाली कनवर्टर इतनी अच्छी तरह से काम करता है, तो PHP से बिल्कुल भी क्यों चिपके रहें? रूबी या पायथन जैसे कुछ का उपयोग क्यों नहीं करते? नोट - मैंने इन दोनों को यादृच्छिक रूप से चुना, लेकिन ज्यादातर क्योंकि लगभग सभी का कहना है कि उन भाषाओं में कोडिंग एक "आनंद" है। तो क्यों नहीं एक सुपर महान भाषा में विकसित और फिर जादू सी ++ संकलन बटन मारा?


12
आपके दोनों विकल्पों का अर्थ होगा कि सभी PHP कोड, PHP- विशिष्ट उपकरण और विशेषज्ञता, सहायक आधारभूत संरचना का आधा हिस्सा, आदि जो पहले से ही वहां मौजूद हैं और खरोंच से शुरू हो रहे हैं।

क्यों? यदि आप कोड को C ++ में बदल सकते हैं, तो निश्चित रूप से कोई भी अपनी पसंदीदा भाषा का उपयोग कर सकता है, कन्वर्ट बटन दबा सकता है, और क्या यह C ++ कोडबेस के लिए प्रतिबद्ध है। नहीं?
user72245

7
संकलक, द्वारा और बड़े, सभी प्रकार के सार का उल्लेख नहीं करने के लिए काम कर रहे हैं, लेकिन बदसूरत और अप्राकृतिक कोड, और चर नाम, टिप्पणी की तरह पट्टी चीजों का उत्पादन। बड़ी हद तक, यह अपरिहार्य है। हालांकि कुछ परियोजनाएं वास्तव में किसी अन्य भाषा में बनाए रखने योग्य कोडबेस में अनुवाद करने के उद्देश्य से हैं, समस्या बहुत कठिन है, विशेष रूप से व्यापक रूप से अन्य भाषाओं के साथ। इसके अलावा, यहां तक ​​कि पूरी तरह से मुहावरेदार सी + + निकलता है, कोडबेस पर काम करने वाले सभी को सी ++ सीखना होगा या निकाल दिया जाएगा और उन लोगों के साथ बदल दिया जाएगा जो सी ++ जानते हैं। और फिर आपने अभी भी टूलींग को संबोधित नहीं किया है।

1
इसके अलावा (मैंने अभी इसे खुद ही खोजा था, लेकिन यह मेरी आंत की भावना और अन्य गतिशील भाषा कार्यान्वयन के साथ मेरे अनुभव के अनुरूप है), ध्यान दें कि PHP-to-C ++ कंपाइलर को चरणबद्ध किया जा रहा है और इसे HECVM नामक एक बाईटकोड इंटरप्रेटर +IT के साथ प्रतिस्थापित किया जा रहा है ( बाद में उसी अंब्रेला प्रोजेक्ट के हिस्से के रूप में विकसित किया गया) जो बड़े पैमाने पर इसे बेहतर बनाता है और इसमें कम प्रतिबंध हैं। देखें github.com/facebook/hiphop-php/wiki

@ डेलन: खराब संकलक बदसूरत और अप्राकृतिक कोड का उत्पादन करते हैं। लेकिन यह शायद ही अपरिहार्य है। स्मार्ट पर एक नज़र डालें , जो जावास्क्रिप्ट को संकलित करता है। आउटपुट बहुत पठनीय है, जब तक कि आप कोर्स के ओफ़्फ़ैशन और / या मिनिफिकेशन को चालू नहीं करते हैं। <snark>(जे एस के रूप में इन्सोफ़र को कभी भी "पठनीय" कहा जा सकता है, जो है।)</snark>
मेसन व्हीलर

जवाबों:


65

वे नहीं करते। अब और नहीं, कम से कम। यह ऐसा करने से पता चलता है कि इस तरह से बहुत सारी समस्याएं होती हैं, जिनमें तैनाती सिरदर्द भी शामिल है और पहली जगह में एक स्क्रिप्टिंग भाषा का उपयोग करने के प्रमुख लाभों में से एक को रोकना - स्क्रिप्ट को फिर से खोलने की आवश्यकता के बिना बदलने में सक्षम होना - इसलिए उन्होंने हिपहॉप सिस्टम को नया रूप दिया एक पारदर्शी JIT चरण के साथ एक VM वास्तुकला, और C ++ संकलक को हटा दिया गया।

दिलचस्प रूप से पर्याप्त है, जाहिरा तौर पर यह इस तरह से कर रहा है के बारे में भी मूल C ++ ट्रांस-संकलन दृष्टिकोण के रूप में तेजी से (के रूप में) में दो बार है।


4
मुझे बस इतना है कि डेवलपर की क्षमताओं के खिलाफ व्यापार की जरूरतों को संतुलित करने में फेसबुक एक मुश्किल समय है। सभी समान रूप से दिलचस्प है, हालांकि मैं यह जोड़ना चाहूंगा कि एक देशी से अधिक जेआईटी समाधान से बेहतर प्रदर्शन हो रहा है, इसका मतलब है कि उनके PHP-> C ++ jiggerypokery वास्तव में पैंट में था।
जेम्स

7
@James जबकि मुझे संदेह है कि "हिपहॉपक" अब तक का सबसे बड़ा अनुकूलन कंपाइलर था, वह विशेष परिणाम यह नहीं दिखाता है कि वे कंपाइलर को लिखते हैं, यह सिर्फ दिखाता है कि गतिशील भाषाओं का स्थिर संकलन गतिशील संकलन की तुलना में बहुत कम प्रभावी है। जो लोगों द्वारा बार-बार सच पाया गया था, जो निश्चित रूप से जानते हैं कि कैसे अनुकूलन अनुकूलन लिखते हैं। एक जेआईटी कंपाइलर ऑप्टिमाइज़ेशन के धन का प्रदर्शन आसानी से कर सकता है। एक एओटी संकलक (बहुत महंगा पूरे-प्रोग्राम विश्लेषण के बिना) वास्तव में गतिशीलता को हटाए बिना, व्याख्या के ओवरहेड को हटाने की तुलना में बहुत अधिक कर सकता है।

2
@delnan खैर, हाँ, यदि आप AOT कंपाइलर (पूरे समय का विश्लेषण) को इंगित करके AOT कंपाइलर (पूरे समय का विश्लेषण करने में बहुत समय लगाते हैं) के मुख्य लाभ को अपंग करते हैं, तो यकीन है, यह तुलना करेगा एक JIT कर रहा है जो एक JIT में अच्छा है (त्वरित peekhole अनुकूलन)। लेकिन यह शायद ही उचित है, अब यह है?
ऐलिस

2
@delnan यह केवल सच नहीं है, या कम से कम बौद्धिक रूप से बेईमानी नहीं है। अनुकूलन करने के लिए AOT की तुलना में JIT के पास बेहद सीमित समय है; जावा ने रजिस्टर आवंटनकर्ताओं पर कागजात लिखे जो आदर्श से कम हैं, लेकिन जेआईटी के उपयोग के लिए पर्याप्त तेजी से हैं। SSA का उपयोग करने से मुफ्त में बहुत अधिक मात्रा में अनुकूलन की अनुमति मिलती है जो कि JIT के अधिकांश संघर्ष को बनाए रखने के लिए है। एओटी के सिद्ध प्रकार के अनुमान एल्गोरिदम (हिंदले-मिलनर और एल्गोरिदम डब्ल्यू) का उपयोग किया जा सकता है, जो जटिल नहीं हैं, जबकि एक जेआईटी को बिल्कुल नहीं मिलता है, स्मृति के संदर्भ में मुफ्त भुगतान करना। एक JIT कुछ अनुकूलन बेहतर कर सकता है, और इसलिए AOT कर सकता है।
ऐलिस

1
@Alice हम अत्यधिक गतिशील भाषाओं के बारे में बात कर रहे हैं। पायथन या जावास्क्रिप्ट जैसी भाषाओं के लिए कोई सरल और प्रभावी एओटी (यानी स्थैतिक) प्रकार के अनुमान एल्गोरिदम नहीं हैं। जटिल ऑन-लाइन / रन-टाइम एल्गोरिदम (उदाहरण के लिए स्पाइडरमोंकी में उपयोग किए गए) प्रभावी हैं, और जटिल एओटी एल्गोरिदम (जैसे स्टार्किलर) हैं जो अब तक खुद को प्रभावी साबित करने में विफल रहे हैं। एल्गोरिथ्म डब्ल्यू भी गतिशील भाषाओं की जटिलताओं को संबोधित करना शुरू नहीं करता है।

34

फेसबुक के वरिष्ठ अभियंता हैपिंग झाओ शायद आपके सवालों का सबसे अच्छा जवाब देते हैं

  1. हिपहॉप प्रोग्रामेटिक रूप से आपके PHP स्रोत कोड को अत्यधिक अनुकूलित C ++ में बदल देता है और फिर इसे संकलित करने के लिए g ++ का उपयोग करता है। हिपहॉप स्रोत कोड को शब्दार्थ रूप से समतुल्य तरीके से कार्यान्वित करता है और बेहतर प्रदर्शन के बदले में कुछ दुर्लभ रूप से उपयोग की जाने वाली सुविधाओं जैसे - इवैल () का त्याग करता है।

  2. इन अक्षमताओं को दूर करने का एक सामान्य तरीका यह है कि आप अपने PHP अनुप्रयोग के अधिक जटिल भागों को सीधे C ++ में PHP एक्सटेंशन के रूप में फिर से लिखें। यह मुख्य रूप से PHP को आपके फ्रंट एंड HTML और C लॉजिक में एप्लिकेशन लॉजिक के बीच ग्लू लैंग्वेज में बदल देता है। एक तकनीकी दृष्टिकोण से यह अच्छी तरह से काम करता है, लेकिन उन इंजीनियरों की संख्या को काफी कम कर देता है जो आपके पूरे आवेदन पर काम करने में सक्षम हैं।

बाकी ब्लॉग पोस्ट एक अच्छा पढ़ा है, और मैं इसे सुझाता हूं। यह उन प्रोग्रामिंग चुनौतियों में कुछ अंतर्दृष्टि देता है, जिनसे फेसबुक निपटता है, और वे उन समस्याओं को कैसे हल करने की कोशिश कर रहे हैं।


7
ध्यान दें कि यह अप्रचलित है; यह उनकी पहली कोशिश थी, लेकिन फेसबुक अब ऐसा नहीं करता है। मेरा जवाब, नीचे देखें।
मेसन व्हीलर

@MasonWheeler - बढ़िया लिंक और अपडेट।

19

सी ++ में बस कार्यक्रम? निश्चित रूप से एक जादुई संकलक बटन मारते समय कुछ त्रुटियाँ / कीड़े होने चाहिए जो PHP को c ++ कोड में पोर्ट करते हैं, है ना?

ठीक है, लेकिन C ++ में प्रोग्रामिंग उनके पूरे मौजूदा कोडबेस की जगह ले लेगी- एक विचार विश्व-प्रसिद्ध है जो पूरी तरह से बेवकूफ और विनाशकारी है।

यदि यह प्रभावशाली कनवर्टर इतनी अच्छी तरह से काम करता है, तो PHP से बिल्कुल भी क्यों चिपके रहें? रूबी या पायथन जैसे कुछ का उपयोग क्यों नहीं करते? नोट - मैंने इन दोनों को यादृच्छिक रूप से चुना, लेकिन ज्यादातर क्योंकि लगभग सभी का कहना है कि उन भाषाओं में कोडिंग एक "आनंद" है। तो क्यों नहीं एक सुपर महान भाषा में विकसित और फिर जादू सी ++ संकलन बटन मारा?

क्योंकि, फिर से, उनके मौजूदा PHP कोडबेस की जगह लेगा।

एक आदर्श दुनिया में, वे खरोंच से सी ++ में कोड करेंगे। दुर्भाग्य से, क्योंकि उनके पास PHP में मौजूदा कोड का एक लोड है, यह संभव नहीं है। इसके बजाय, वे समस्या के आसपास हैक करते हैं। यह सिर्फ इतना सस्ता है।


2
+1 के लिए: "तो इसके बजाय, वे समस्या के आसपास हैक करते हैं। यह सिर्फ इतना सस्ता है।" यह सच है - अगर उनके पास अपने उत्पाद पर काम करने वाले 3500 इंजीनियर हैं, तो इसका तरीका सस्ता है कि एक अच्छी PHP-> C ++ कंपाइलर लिखने पर 5-50 लोगों की एक छोटी सी टीम मिल जाए, जबकि पूरी इंजीनियरिंग टीम 6 साल के कोड को फिर से लिखना चाहती है। ।
सुमन

क्षमा करें, मैं भ्रमित हूं। उन्हें फिर से क्यों लिखना पड़ेगा । आपने अभी-अभी यह कहा है कि आपका - हिपहॉप सभी कोड को C ++ में कनवर्ट करता है। तो बस इसे रूपांतरित करें, फिर C ++ में छड़ी करें।
user72245

16
@ user72245 सिर्फ इसलिए कि यह इसे C ++ में कनवर्ट करता है इसका मतलब यह नहीं है कि यह इसे पठनीय या
प्राप्य

यह क्यों है they hack around the problem? C ++ या असेंबली का उपयोग करके कोड ऑप्टिमाइज़ करना बिल्कुल भी नया नहीं है, क्योंकि पीसी होने से पहले यह कर रहा था।
स्टीव

यह भी ध्यान रखें कि फेसबुक प्रोग्रामर PHP प्रोग्रामर हैं। सुनिश्चित करें कि आप इसे C ++ में बदल सकते हैं और C ++ में प्रोग्रामिंग शुरू कर सकते हैं, लेकिन आपके मौजूदा प्रोग्रामर को इस भाषा का कोई अनुभव नहीं है। विकास को जारी रखने के लिए आपको उन्हें पुनः प्राप्त करने या नए प्रोग्रामर को नियुक्त करने की आवश्यकता होगी।
गेविन

8

"वास्तव में, क्यों नहीं सीधे विधानसभा में काम करते हैं, क्योंकि C ++ कोड अंततः मशीन कोड निर्देशों में अनुवादित है?"

- कि, इसके सार में, तर्क क्या घटता है। और उम्मीद है कि यह स्पष्ट करता है कि ऐसा क्यों नहीं किया गया है:

  • विधानसभा (C ++) की तुलना में C ++ (PHP) में प्रोग्राम करने के लिए विभिन्न कौशल सेटों की आवश्यकता होती है।
  • यह संभावित रूप से कई कारणों से कार्यक्रम के लिए कठिन है
  • कोडांतरक / संकलक द्वारा निर्मित कोड मानव-पठनीय (बोलने योग्य: बनाए रखने योग्य) नहीं हो सकता है, भले ही आप स्क्रैच से, असेंबली में पठनीय प्रोग्राम लिख सकते हैं (C ++)।

2
मैंने एक बार 1970 के दशक में विधानसभा में लिखित बीमा आवेदन को बनाए रखा। अक्टूबर में, मुझे "हैप्पी होलिडेज" के बराबर कहने के लिए बधाई को एक "पत्र" में बदलने का काम सौंपा गया था। यह केवल जटिलता के कारण अगले साल फरवरी में पूरा हुआ था। मैं असेंबली में बहुत कुशल हो गया और इष्टतम कोड लिख सकता था, बशर्ते यह हजारों लाइनों में से एक से अधिक न हो। हालाँकि, COBOL और C कंपाइलर्स ने मेरे गधे को लात मारी और जिस मंच पर हम चल रहे थे उसके लिए और अधिक इष्टतम कोड का उत्पादन किया, विशेष रूप से विधानसभा के 1 मीटर से अधिक सिस्टम के लिए। यह कोई व्यावसायिक समझ नहीं है।
ब्लौद्रक

5

मैं फेसबुक पर नहीं हूं, लेकिन मेरा सबसे अच्छा अनुमान "महत्वपूर्ण जोखिम से बचने के लिए" होगा। इस बिंदु पर, एक अलग भाषा में स्विच करना अब एक प्रौद्योगिकी निर्णय नहीं है: सबसे ऊपर, यह एक व्यावसायिक निर्णय है।

जब आप एक बड़ी कंपनी होते हैं, जो FB के आकार में व्यवस्थित रूप से बढ़ती है, तो आप धीरे-धीरे ऐसे लोगों को आकर्षित करते हैं जो तब आपके प्रोग्रामिंग प्लेटफॉर्म में विशेषज्ञता प्राप्त करते हैं (FB के मामले में, यह PHP है)। एक के बाद एक, आपको PHP में महान विशेषज्ञता वाले कुछ हजार कर्मचारी मिलते हैं। इस बिंदु पर, किसी भी अन्य भाषा पर स्विच करना बहुत खतरनाक हो जाता है: आपके इंजीनियर नए पारिस्थितिकी तंत्र पर गति करने के लिए नहीं होंगे, और उन्हें अपने वर्तमान नौकरियों द्वारा मांग की गई विशेषज्ञता के स्तर को प्राप्त करने के लिए एक महत्वपूर्ण समय की आवश्यकता हो सकती है, अकेले अपने कौशल में सुधार करें।

PHP की सापेक्ष खूबियों और वैकल्पिक भाषाओं को छोड़ दें, तो FB में PHP तकनीक में किए गए निवेश की मात्रा के साथ यह सोचना भी अहंकारी होगा कि एक स्विच दर्द रहित होगा, और इसे आज़माने के लिए बहुत मूर्खतापूर्ण होगा। व्यवसाय में, प्रौद्योगिकी एक अंत का मतलब है, इसलिए प्रोग्रामिंग का "आनंद" भी चर्चाओं में प्रवेश नहीं करता है।


4

मैं केवल एक प्रमुख वेबसाइट के बारे में सोच सकता हूं जिसे C ++ में लागू किया गया था। H2G2

फिर भी वर्तमान में लागू आयन वास्तव में एक बड़ी संख्या में पाठ और डेटाबेस हेरफेर कार्यों के साथ बनाया गया है (जो कि PHP और शुरुआती PHP की तरह एक सा नहीं लगता है)।

फेसबुक अपनी वेबसाइट की कार्यक्षमता से काफी खुश है। वे सिर्फ उस बिंदु पर बढ़े हैं जहां वेनिला PHP उन प्रक्रियाओं का समर्थन नहीं कर सकता है जो वे प्रक्रिया करते हैं। इसलिए PHP का C ++ थेंस मशीन कोड में संकलन। PHP के लिए एक पूर्ण संकलक लिखा जा सकता था, लेकिन वे 20 वर्षों के सूक्ष्म अनुकूलन से चूक गए होंगे जो कि जीसीसी संकलक स्टैक में चले गए हैं। बिंदु यह है कि "C ++" कोड का अर्थ मानव पठनीय नहीं है या मशीन कोड के रास्ते पर इसके मध्यवर्ती चरण को बनाए रखने योग्य नहीं है।

इस साइट पर कई प्रोग्रामर की तरह मुझे लगता है कि आपको एचटीई बिजनेस लॉजिक में निवेश किए गए काम की मात्रा और मौजूदा अनुप्रयोगों में एम्बेडेड कार्यक्षमता, और, अपने स्वयं के लिए मूल्य कोड का मूल्यांकन करना चाहिए।


मैं दर्जनों के बारे में सोच सकता हूं, अब जब डब्ल्यूटी सफल है।
ऐलिस

@ ऐलिस - दिलचस्प! लेकिन मैं किसी को भी उच्च मात्रा साइट के लिए इसका उपयोग नहीं कर सकता। प्लस हैलो दुनिया PHP कोड की 5 लाइनों को करने के लिए कोड की कुछ 30 लाइनें।
जेम्स एंडरसन

एक "हैलो वर्ल्ड" उदाहरण की तुलना करना हास्यास्पद है। 100 से कम लाइनों में, मैं एक वेबसोकेट को सेट कर सकता हूं, जो लंबे पोल फॉल बैक, उत्तरोत्तर इष्टतम एसईओ के साथ उन्नत विजेट, AJAX का उपयोग किए बिना पूर्ण पृष्ठ भार के बिना स्वचालित स्वच्छ URL और एक छोटा CPU / RAM पदचिह्न है। PHP, कम से कम विशिष्ट विन्यास में, बिना वेबस्कॉक, लंबे पोल, मदद के बिना स्वच्छ URL, बिल्कुल AJAX के साथ स्वच्छ URL नहीं कर सकता, और यह निश्चित रूप से RAM / CPU की एक विशाल (तुलनात्मक रूप से) राशि का उपयोग करेगा। वेबएप और सरल उदाहरणों के लिए, WT और C ++ काफी बेहतर हैं, और C ++ 11 के साथ, लंबाई में तुलनीय हैं।
एलिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.