Kyiv Go Meetup மே 2018:
முன்னணி: - அனைவருக்கும் வணக்கம்! இங்கு இருப்பதற்கு நன்றி! இன்று எங்களிடம் இரண்டு அதிகாரப்பூர்வ பேச்சாளர்கள் உள்ளனர் - லியோஷா மற்றும் வான்யா. எங்களுக்கு போதுமான நேரம் இருந்தால் இன்னும் இரண்டு இருக்கும். முதல் பேச்சாளர் அலெக்ஸி கிராச்சேவ், அவர் கோபர்ஜேஎஸ் பற்றி எங்களிடம் கூறுவார்.
அலெக்ஸி கிராச்சேவ் (இனி - ஏஜி): – நான் ஒரு Go டெவலப்பர், மேலும் Go இல் இணைய சேவைகளை எழுதுகிறேன். சில சமயங்களில் முன்பக்கத்தை கையாள வேண்டும், சில சமயங்களில் கைமுறையாக அதில் நுழைய வேண்டும். Go on the frontend பற்றிய எனது அனுபவம் மற்றும் ஆராய்ச்சி பற்றி பேச விரும்புகிறேன்.
புராணக்கதை இதுதான்: முதலில் நாம் ஏன் முன்பகுதியில் Go ஐ இயக்க விரும்புகிறோம் என்பதைப் பற்றி பேசுவோம், பின்னர் இதை எப்படி செய்வது என்பது பற்றி பேசுவோம். இரண்டு வழிகள் உள்ளன - Web Assembly மற்றும் GopherJS. இந்த தீர்வுகளின் நிலை என்ன, என்ன செய்யலாம் என்று பார்ப்போம்.
முந்தானையில் என்ன தவறு?
முன்பக்கம் எல்லாம் நன்றாக இருக்கிறது என்பதை அனைவரும் ஒப்புக்கொள்கிறார்களா?
போதுமான சோதனைகள் இல்லையா? மெதுவாக உருவாக்கவா? சுற்றுச்சூழல் அமைப்பு? நன்றாக.
ஃபிரண்டென்ட் குறித்து, ஃபிரண்டெண்ட் டெவலப்பர்களில் ஒருவர் தனது புத்தகத்தில் கூறிய மேற்கோள் எனக்கு மிகவும் பிடித்திருக்கிறது:
ஜாவாஸ்கிரிப்ட்டில் ஒரு வகை அமைப்பு இல்லை. இப்போது எனது வேலையின் போது நான் சந்தித்த பிரச்சனைகளை பெயரிட்டு அவை எவ்வாறு தீர்க்கப்படுகின்றன என்பதை விளக்குகிறேன்.
பொதுவாக வகை அமைப்பை ஜாவாஸ்ரிப்டில் ஒரு வகை அமைப்பு என்று அழைக்க முடியாது - பொருளின் வகையைக் குறிக்கும் கோடுகள் உள்ளன, ஆனால் உண்மையில் இது வகைகளுடன் எந்த தொடர்பும் இல்லை. இந்தச் சிக்கல் டைப்ஸ்கிரிப்ட் (ஜாவாஸ்ரிப்ட்டிற்கான துணை நிரல்) மற்றும் ஃப்ளோ (ஜாவாஸ்கிரிப்ட்டில் நிலையான வகை சரிபார்ப்பு) ஆகியவற்றில் தீர்க்கப்படுகிறது. உண்மையில், ஜாவாஸ்கிரிப்டில் உள்ள மோசமான வகை அமைப்பின் சிக்கலைத் தீர்க்கும் புள்ளியை முன்பக்கம் ஏற்கனவே அடைந்துவிட்டது.
உலாவியில் நிலையான நூலகம் இல்லை - உலாவிகளில் சில உள்ளமைக்கப்பட்ட பொருள்கள் மற்றும் "மேஜிக்" செயல்பாடுகள் உள்ளன. ஆனால் ஜாவாஸ்கிரிப்ட்டில் அதுபோன்ற நிலையான நூலகம் இல்லை. இந்தப் பிரச்சனை ஏற்கனவே ஒருமுறை jQuery மூலம் தீர்க்கப்பட்டது (அனைவரும் வேலை செய்யத் தேவையான அனைத்து முன்மாதிரிகள், உதவியாளர்கள், செயல்பாடுகளுடன் jQuery ஐப் பயன்படுத்தினர்). இப்போது அனைவரும் Lodash பயன்படுத்துகின்றனர்:
நரகத்தில் திரும்ப அழைக்கவும். எல்லோரும் 5 ஆண்டுகளுக்கு முன்பு ஜாவாஸ்கிரிப்ட் குறியீட்டைப் பார்த்தார்கள் என்று நினைக்கிறேன், மேலும் இது நம்பமுடியாத சிக்கலான கால்பேக்குகளின் "நூடுல்" போல் இருந்தது. இப்போது இந்த சிக்கல் தீர்க்கப்பட்டது (ES-15 அல்லது ES-16 வெளியீட்டில்), ஜாவாஸ்கிரிப்டில் வாக்குறுதிகள் சேர்க்கப்பட்டுள்ளன, மேலும் அனைவரும் சிறிது நேரம் எளிதாக சுவாசிக்க முடியும்.
ப்ரோமிஸ் ஹெல் வரும் வரை... முன்-இறுதித் தொழில் எப்படி நிர்வகிக்கிறது என்று எனக்குத் தெரியவில்லை, ஆனால் அவர்கள் எப்போதும் ஏதோ விசித்திரமான காட்டுக்குள் தங்களைத் தாங்களே ஓட்டிக் கொள்கிறார்கள். வாக்குறுதிகளின் பேரில் நாமும் நரகத்தை உருவாக்கினோம். ஒரு புதிய பழமையான - ஒத்திசைவு/காத்திருப்பைச் சேர்ப்பதன் மூலம் இந்தச் சிக்கலைத் தீர்த்தோம்:
ஒத்திசைவின்மை பிரச்சனை தீர்க்கப்படுகிறது. Async/waiit என்பது பல்வேறு மொழிகளில் மிகவும் பிரபலமான பழமையானது. பைதான் மற்றும் பிறருக்கு இந்த அணுகுமுறை உள்ளது - இது மிகவும் நல்லது. பிரச்சினை தீர்ந்துவிட்டது.
என்ன பிரச்சனை தீரவில்லை? கட்டமைப்பின் அதிவேகமாக அதிகரித்து வரும் சிக்கலானது, சுற்றுச்சூழல் அமைப்பு மற்றும் நிரல்களின் சிக்கலானது.
- ஜாவாஸ்கிரிப்ட் தொடரியல் சற்று விசித்திரமானது. ஒரு வரிசை மற்றும் ஒரு பொருளை சேர்ப்பதில் உள்ள சிக்கல்கள் மற்றும் பிற நகைச்சுவைகளை நாம் அனைவரும் அறிவோம்.
- ஜாவாஸ்கிரிப்ட் பல முன்னுதாரணமாகும். சுற்றுச்சூழல் அமைப்பு மிகப் பெரியதாக இருக்கும் போது இது குறிப்பாக அழுத்தமான அமைப்பாகும்:
- எல்லோரும் வெவ்வேறு பாணிகளில் எழுதுகிறார்கள் - சிலர் கட்டமைப்பு ரீதியாக எழுதுகிறார்கள், சிலர் செயல்பாட்டு ரீதியாக எழுதுகிறார்கள், வெவ்வேறு டெவலப்பர்கள் வெவ்வேறு வழிகளில் எழுதுகிறார்கள்;
- வெவ்வேறு தொகுப்புகளில் இருந்து, வெவ்வேறு தொகுப்புகளைப் பயன்படுத்தும் போது வெவ்வேறு முன்னுதாரணங்கள்;
- Javasript இல் செயல்பாட்டு நிரலாக்கத்துடன் நிறைய "வேடிக்கை" உள்ளது - rambda நூலகம் தோன்றியது, இப்போது இந்த நூலகத்தில் எழுதப்பட்ட நிரல்களை யாரும் படிக்க முடியாது.
- இவை அனைத்தும் சுற்றுச்சூழல் அமைப்பில் பெரிய தாக்கத்தை ஏற்படுத்துகின்றன, மேலும் அது நம்பமுடியாத அளவிற்கு வளர்ந்துள்ளது. தொகுப்புகள் ஒன்றுக்கொன்று ஒத்துப்போகாதவை: சில வாக்குறுதிகளை அடிப்படையாகக் கொண்டவை, சில ஒத்திசைவு/காத்திருப்பு அடிப்படையிலானவை, சில திரும்பப் பெறுதல் அடிப்படையிலானவை. அவர்களும் வெவ்வேறு முன்னுதாரணங்களில் எழுதுகிறார்கள்!
- இதனால் திட்டத்தை பராமரிப்பதில் சிக்கல் ஏற்பட்டுள்ளது. குறியீட்டைப் படிக்க முடியாவிட்டால் பிழையைக் கண்டறிவது கடினம்.
வெப் அசெம்பிளி என்றால் என்ன?
மொஸில்லா அறக்கட்டளை மற்றும் பல நிறுவனங்களின் துணிச்சலான தோழர்கள் வெப் அசெம்பிளி போன்ற ஒரு விஷயத்தைக் கொண்டு வந்தனர். இது என்ன?
- இது பைனரி வடிவமைப்பை ஆதரிக்கும் உலாவியில் கட்டமைக்கப்பட்ட மெய்நிகர் இயந்திரமாகும்.
- பைனரி நிரல்கள் அங்கு வந்து கிட்டத்தட்ட சொந்தமாக செயல்படுத்தப்படுகின்றன, அதாவது, உலாவி ஒவ்வொரு முறையும் ஜாவாஸ்கிரிப்ட் குறியீட்டின் அனைத்து "நூடுல்ஸ்"களையும் அலச வேண்டியதில்லை.
- அனைத்து உலாவிகளும் ஆதரவை அறிவித்துள்ளன.
- இது பைட்கோட் என்பதால், எந்த மொழிக்கும் கம்பைலரை எழுதலாம்.
- நான்கு முக்கிய உலாவிகள் ஏற்கனவே வலை சட்டசபை ஆதரவுடன் அனுப்பப்பட்டுள்ளன.
- Go வில் சொந்த ஆதரவை விரைவில் எதிர்பார்க்கிறோம். இந்த புதிய கட்டமைப்பு ஏற்கனவே சேர்க்கப்பட்டுள்ளது: GOARCH=wasm GOOS=js (விரைவில்). இதுவரை, நான் புரிந்து கொண்டபடி, இது செயல்படவில்லை, ஆனால் அது நிச்சயமாக கோவில் இருக்கும் என்று ஒரு அறிக்கை உள்ளது.
இப்போது என்ன செய்ய? கோபர்ஜேஎஸ்
Web Assemblyக்கான ஆதரவு எங்களிடம் இல்லை என்றாலும், GopherJS போன்ற டிரான்ஸ்பைலர் உள்ளது.
- கோ குறியீடு "தூய" ஜாவாஸ்கிரிப்ட்டில் மாற்றப்பட்டது.
- எல்லா உலாவிகளிலும் இயங்குகிறது - நவீன உலாவிகளால் மட்டுமே ஆதரிக்கப்படும் புதிய அம்சங்கள் எதுவும் இல்லை (இது வெண்ணிலா JS, இது எதையும் இயக்கும்).
- Go வில் உள்ள எல்லாவற்றுக்கும் ஆதரவு உள்ளது, goroutines மற்றும் சேனல்கள் உட்பட... நாம் மிகவும் விரும்புகின்ற மற்றும் அறிந்த அனைத்தும்.
- உலாவியில் ஆதரவளிப்பதில் அர்த்தமில்லாத தொகுப்புகளைத் தவிர, கிட்டத்தட்ட முழு நிலையான நூலகமும் ஆதரிக்கப்படுகிறது: syscall, net interactions (ஒரு net/http கிளையன்ட் உள்ளது, ஆனால் சேவையகம் இல்லை, மேலும் கிளையன்ட் XMLHttpRequest வழியாக பின்பற்றப்படுகிறது). பொதுவாக, முழு நிலையான நூலகமும் கிடைக்கிறது - இங்கே அது உலாவியில் உள்ளது, இதோ Go's stdlib, இது எங்களுக்குப் பிடித்திருக்கிறது.
- Go இல் உள்ள முழு தொகுப்பு சுற்றுச்சூழல் அமைப்பு, அனைத்து மூன்றாம் தரப்பு தீர்வுகள் (டெம்ப்ளேட்டிங் போன்றவை) GopherJS ஐப் பயன்படுத்தி தொகுக்கப்பட்டு உலாவியில் இயக்கப்படும்.
GopherJS பெறுவது மிகவும் எளிதானது - இது வழக்கமான Go தொகுப்பு மட்டுமே. நாங்கள் பெறுவோம், மேலும் பயன்பாட்டை உருவாக்க ஒரு GopherJS கட்டளை உள்ளது:
இது ஒரு சிறிய ஹலோ உலகம்...
...ஒரு வழக்கமான Go நிரல், ஒரு வழக்கமான நிலையான லைப்ரரி fmt தொகுப்பு மற்றும் Binding Js உலாவி API ஐ அடைய. Println இறுதியில் கன்சோல் பதிவாக மாற்றப்படும் மற்றும் உலாவி "Hello gophers" என்று எழுதும்! இது மிகவும் எளிது: நாங்கள் GopherJS பில்ட் செய்கிறோம் - அதை உலாவியில் தொடங்குகிறோம் - எல்லாம் வேலை செய்கிறது!
தற்போது உங்களிடம் என்ன இருக்கிறது? பிணைப்புகள்
அனைத்து பிரபலமான js கட்டமைப்புகளுக்கும் பிணைப்புகள் உள்ளன:
- JQuery;
- Angular.js;
- D3.js பெரிய தரவுகளுடன் திட்டமிடுவதற்கும் வேலை செய்வதற்கும்;
- React.js;
- VueJS;
- எலக்ட்ரானுக்கான ஆதரவு கூட உள்ளது (அதாவது, எலக்ட்ரானில் டெஸ்க்டாப் பயன்பாடுகளை ஏற்கனவே எழுதலாம்);
- மேலும் வேடிக்கையான விஷயம் WebGL (3D கிராபிக்ஸ், இசை மற்றும் அனைத்து இன்னபிற பொருட்களுடன் கூடிய கேம்கள் உட்பட முழு-கிராஃபிக் பயன்பாடுகளை நாங்கள் உருவாக்கலாம்);
- மற்றும் அனைத்து பிரபலமான ஜாவாஸ்கிரிப்ட் கட்டமைப்புகள் மற்றும் நூலகங்களுடன் பல பிணைப்புகள்.
கட்டமைப்பின்
- GopherJS - Vecty க்காக ஏற்கனவே உருவாக்கப்பட்ட வலை கட்டமைப்பு உள்ளது. இது React.js இன் முழு அளவிலான அனலாக் ஆகும், ஆனால் GoferJS இன் பிரத்தியேகங்களுடன் Go இல் மட்டுமே உருவாக்கப்பட்டது.
- விளையாட்டு பைகள் உள்ளன (ஆச்சரியம்!). நான் மிகவும் பிரபலமான இரண்டைக் கண்டேன்:
- எங்கோ;
- எபிடென்.
அது எப்படி இருக்கும் என்பதற்கும், Goவில் நீங்கள் ஏற்கனவே என்ன எழுதலாம் என்பதற்கும் சில உதாரணங்களை நான் உங்களுக்குக் காட்டுகிறேன்:
அல்லது இந்த விருப்பம் (என்னால் 3D ஷூட்டரைக் கண்டுபிடிக்க முடியவில்லை, ஆனால் அது இருக்கலாம்):
நான் என்ன வழங்குகிறேன்?
ஜாவாஸ்கிரிப்டிலிருந்து முன்பு அழுத அனைத்து மொழிகளும் அங்கு விரைந்து செல்லும் வகையில் இப்போது முன்-இறுதித் தொழில் ஒரு நிலையில் உள்ளது. இப்போது எல்லாம் "வெப் அசெம்பிளிகள்" என்று தொகுக்கப்படும். கோபர்களாக நமக்கு உரிய இடத்தைப் பிடிக்க என்ன தேவை?
கோ பாரம்பரியமாக இது ஒரு கணினி நிரலாக்க மொழி என்று கருதுகிறது, மேலும் UI உடன் பணிபுரிய நடைமுறையில் நூலகங்கள் இல்லை. ஏதோ இருக்கிறது, ஆனால் அது பாதி கைவிடப்பட்டது, பாதி செயல்படாதது.
GopherJS இல் இயங்கும் UI நூலகங்களை Goவில் உருவாக்க இப்போது ஒரு நல்ல வாய்ப்பு! நீங்கள் இறுதியாக உங்கள் சொந்த கட்டமைப்பை எழுதலாம்! நீங்கள் ஒரு கட்டமைப்பை எழுதக்கூடிய நேரம் இது, மேலும் இது முதன்மையான ஒன்றாக இருக்கும் மற்றும் ஆரம்பகால தத்தெடுப்பைப் பெறுவீர்கள், மேலும் நீங்கள் ஒரு நட்சத்திரமாக இருப்பீர்கள் (அது ஒரு நல்ல கட்டமைப்பாக இருந்தால்).
உலாவியின் பிரத்தியேகங்களுக்கு (உதாரணமாக, டெம்ப்ளேட் எஞ்சின்) Go சுற்றுச்சூழல் அமைப்பில் ஏற்கனவே உள்ள பல்வேறு தொகுப்புகளை நீங்கள் மாற்றியமைக்கலாம். அவை ஏற்கனவே வேலை செய்யும், நீங்கள் வசதியான பிணைப்புகளை உருவாக்கலாம், இதன் மூலம் நீங்கள் உலாவியில் நேரடியாக உள்ளடக்கத்தை எளிதாக வழங்கலாம். கூடுதலாக, எடுத்துக்காட்டாக, ஒரே குறியீட்டைப் பயன்படுத்தி, சேவையகத்திலும் முன்-இறுதியிலும் ஒரே விஷயத்தை வழங்கக்கூடிய ஒரு சேவையை நீங்கள் செய்யலாம் - முன்-இறுதி டெவலப்பர்கள் விரும்பும் அனைத்தையும் (இப்போது மட்டும் Go இல்).
நீங்கள் ஒரு விளையாட்டை எழுதலாம்! சும்மா வேடிக்கைக்காக…
அவ்வளவுதான் நான் சொல்ல விரும்பினேன்.
உங்கள் கேள்விகள்
கேள்வி (இனி கே என குறிப்பிடப்படுகிறது): – நான் Go அல்லது Js இல் எழுதுகிறேனா?
AG: – நீங்கள் நடைமுறைகள், சேனல்கள், கட்டமைப்புகள், உட்பொதித்தல் - எல்லாம் Go இல் எழுதுகிறீர்கள்... நீங்கள் ஒரு நிகழ்விற்கு குழுசேர்ந்து, அங்கு ஒரு செயல்பாட்டை நிறைவேற்றுகிறீர்கள்.
IN: - எனவே நான் "நிர்வாண" Js இல் எழுதுகிறேன்?
AG: – இல்லை, நீங்கள் Go இல் இருப்பது போல் எழுதி, உலாவி API உடன் இணைக்கவும் (API மாறவில்லை). உங்கள் சொந்த பிணைப்புகளை நீங்கள் எழுதலாம், இதனால் சேனலுக்கு செய்திகள் அனுப்பப்படும் - இது கடினம் அல்ல.
IN: - மொபைல் பற்றி என்ன?
AG: - நான் நிச்சயமாகப் பார்த்தேன்: Js இயங்கும் கோர்டோவா பேட்சுக்கான பிணைப்புகள் உள்ளன. React Native இல் - எனக்குத் தெரியாது; ஒருவேளை இருக்கலாம், ஒருவேளை இல்லை (நான் குறிப்பாக ஆர்வம் காட்டவில்லை). N-go கேம் இன்ஜின், iOS மற்றும் Android ஆகிய இரண்டு மொபைல் பயன்பாடுகளையும் ஆதரிக்கிறது.
IN: - இணைய சட்டசபை பற்றிய கேள்வி. அமுக்கி, “ஜிப்பிங்” செய்தாலும், மேலும் மேலும் இடம் பிடிக்கப்படுகிறது.
AG: – வெப் அசெம்பிளி என்பது ஒரு பைனரி வடிவமாகும், மேலும் பைனரி இயல்பாகவே இறுதி வெளியீட்டில் உரையை விட அதிகமாக இருக்க முடியாது... நீங்கள் இயக்க நேரத்திற்கு இழுக்கப்படுகிறீர்கள், ஆனால் இது நிலையான ஜாவாஸ்கிரிப்ட் லைப்ரரி இல்லாதபோது அதை இழுத்துச் செல்வதற்கு சமம், எனவே நாங்கள் சில Lodash பயன்படுத்தவும். Lodash எவ்வளவு எடுக்கிறது என்று எனக்குத் தெரியவில்லை.
IN: - வெளிப்படையாக இயக்க நேரத்தை விட குறைவாக...
AG: - "தூய" ஜாவாஸ்கிரிப்டில்?
IN: - ஆம். அனுப்பும் முன் அதை சுருக்கி விடுகிறோம்...
AG: – ஆனால் இது உரை... பொதுவாக, ஒரு மெகாபைட் நிறைய தெரிகிறது, ஆனால் அவ்வளவுதான் (உங்களிடம் முழு இயக்க நேரமும் உள்ளது). அடுத்து, நீங்கள் உங்கள் சொந்த வணிக தர்க்கத்தை எழுதுகிறீர்கள், இது உங்கள் பைனரியை 1% அதிகரிக்கும். இதுவரை நான் இந்த முன்பக்கத்தை கொல்ல பார்க்கவில்லை. மேலும், வெப் அசெம்பிளி வெளிப்படையான காரணத்திற்காக ஜாவாஸ்கிரிப்டை விட வேகமாக வேலை செய்யும் - இது பாகுபடுத்தப்பட வேண்டிய அவசியமில்லை.
IN: – இது இன்னும் ஒரு சர்ச்சைக்குரிய புள்ளியாக உள்ளது... “வஸ்மா” (வலைப் பேரவை) இன்னும் எந்த குறிப்பும் செயல்படுத்தப்படவில்லை, இதனால் ஒருவர் சந்தேகத்திற்கு இடமின்றி தீர்ப்பளிக்க முடியும். கருத்துப்படி, ஆம்: பைனரி வேகமாக இருக்க வேண்டும் என்பதை நாம் அனைவரும் புரிந்துகொள்கிறோம், ஆனால் அதே V8 இன் தற்போதைய செயல்படுத்தல் மிகவும் திறமையானது.
AG: - ஆம்.
IN: - அங்கு தொகுத்தல் மிகவும் அருமையாக வேலை செய்கிறது மற்றும் ஒரு பெரிய நன்மை இருக்கும் என்பது உண்மையல்ல.
AG: – வெப் அசெம்பிளி கூட பெரிய ஆட்களால் உருவாக்கப்பட்டது.
IN: – வெப் அசெம்பிளியை தீர்ப்பது இன்னும் கடினம் என்று எனக்குத் தோன்றுகிறது. இப்போது பல ஆண்டுகளாக உரையாடல்கள் உள்ளன, ஆனால் சில உண்மையான சாதனைகளை உணர முடியும்.
AG: - இருக்கலாம். நாம் பார்ப்போம்.
IN: - பின்தளத்தில் எங்களுக்கு பிரச்சனைகள் இல்லை... ஒருவேளை இந்த பிரச்சனைகளை முன்முனையில் விட்டுவிடலாமா? ஏன் அங்கு செல்ல வேண்டும்?
AG: - முன் வரிசை ஊழியர்களின் பணியாளர்களை நாங்கள் வைத்திருக்க வேண்டும்.
சில விளம்பரங்கள் 🙂
எங்களுடன் தங்கியதற்கு நன்றி. எங்கள் கட்டுரைகளை விரும்புகிறீர்களா? மேலும் சுவாரஸ்யமான உள்ளடக்கத்தைப் பார்க்க வேண்டுமா? ஒரு ஆர்டரை வைப்பதன் மூலம் அல்லது நண்பர்களுக்கு பரிந்துரை செய்வதன் மூலம் எங்களை ஆதரிக்கவும்,
ஆம்ஸ்டர்டாமில் உள்ள Equinix Tier IV தரவு மையத்தில் Dell R730xd 2 மடங்கு மலிவானதா? இங்கே மட்டும்
ஆதாரம்: www.habr.com