Kyiv Go Meetup مئی 2018:
منتظم: - سب کو سلام! یہاں ہونے کا شکریہ! آج ہمارے پاس دو سرکاری اسپیکر ہیں - لیوشا اور وانیا۔ اگر ہمارے پاس کافی وقت ہے تو دو اور ہوں گے۔ پہلا اسپیکر الیکسی گراچیف ہے، وہ ہمیں گوفر جے ایس کے بارے میں بتائے گا۔
Alexey Grachev (اس کے بعد - AG): - میں گو ڈویلپر ہوں، اور میں گو میں ویب سروسز لکھتا ہوں۔ کبھی کبھی آپ کو فرنٹ اینڈ سے نمٹنا پڑتا ہے، کبھی کبھی آپ کو دستی طور پر اس میں داخل ہونا پڑتا ہے۔ میں گو آن دی فرنٹ اینڈ میں اپنے تجربے اور تحقیق کے بارے میں بات کرنا چاہتا ہوں۔
افسانہ یہ ہے: پہلے ہم اس بارے میں بات کریں گے کہ ہم Go کو فرنٹ اینڈ پر کیوں چلانا چاہتے ہیں، پھر ہم بات کریں گے کہ یہ کیسے کیا جا سکتا ہے۔ دو طریقے ہیں - ویب اسمبلی اور گوفر جے ایس۔ آئیے دیکھتے ہیں کہ ان حلوں کی کیا حیثیت ہے اور کیا کیا جا سکتا ہے۔
فرنٹ اینڈ میں کیا خرابی ہے؟
کیا سب اس بات سے متفق ہیں کہ فرنٹ اینڈ کے ساتھ سب کچھ ٹھیک ہے؟
کیا کافی ٹیسٹ نہیں ہیں؟ سست تعمیر؟ ماحولیاتی نظام؟ ٹھیک.
فرنٹ اینڈ کے بارے میں، مجھے وہ اقتباس پسند ہے جو فرنٹ اینڈ ڈویلپرز میں سے ایک نے اپنی کتاب میں کہا تھا:
جاوا اسکرپٹ میں ٹائپ سسٹم نہیں ہے۔ اب میں ان مسائل کا نام دوں گا جن کا مجھے اپنے کام کے دوران سامنا ہوا اور بتاؤں گا کہ ان کو کیسے حل کیا جاتا ہے۔
عام طور پر ٹائپ سسٹم کو Javasript میں شاید ہی ٹائپ سسٹم کہا جا سکتا ہے - ایسی لائنیں ہیں جو آبجیکٹ کی قسم کی نشاندہی کرتی ہیں، لیکن درحقیقت اس کا اقسام سے کوئی تعلق نہیں ہے۔ یہ مسئلہ TypeScript (Javasript میں ایک اضافہ) اور Flow (جاوا اسکرپٹ میں ایک جامد قسم کا چیکر) میں حل ہوتا ہے۔ دراصل، فرنٹ اینڈ پہلے ہی جاوا اسکرپٹ میں خراب قسم کے سسٹم کے مسئلے کو حل کرنے کے مقام پر پہنچ چکا ہے۔
براؤزر میں اس طرح کی کوئی معیاری لائبریری نہیں ہے - براؤزر میں کچھ بلٹ ان اشیاء اور "جادو" فنکشن موجود ہیں۔ لیکن جاوا اسکرپٹ میں ایسی کوئی معیاری لائبریری نہیں ہے۔ یہ مسئلہ پہلے ہی ایک بار jQuery کے ذریعہ حل کیا گیا تھا (ہر ایک نے jQuery کو تمام پروٹو ٹائپس، مددگاروں، فنکشنز کے ساتھ استعمال کیا جن کی کام کرنے کی ضرورت تھی)۔ اب ہر کوئی لوڈاش استعمال کرتا ہے:
کال بیک جہنم۔ میرے خیال میں ہر ایک نے تقریباً 5 سال پہلے جاوا اسکرپٹ کوڈ دیکھا تھا، اور یہ کال بیکس کی ناقابل یقین پیچیدگی کے "نوڈل" کی طرح لگتا تھا۔ اب یہ مسئلہ حل ہو گیا ہے (ES-15 یا ES-16 کے اجراء کے ساتھ)، جاوا اسکرپٹ میں وعدے شامل کیے گئے ہیں اور ہر کوئی تھوڑی دیر کے لیے آسان سانس لے سکتا ہے۔
جب تک پرومیس ہیل نہیں پہنچتا... میں نہیں جانتا کہ فرنٹ اینڈ انڈسٹری کس طرح چلتی ہے، لیکن وہ ہمیشہ اپنے آپ کو کسی عجیب جنگل میں لے جاتے ہیں۔ ہم وعدوں پر بھی جہنم واصل ہوئے۔ پھر ہم نے ایک نیا قدیم - async/await شامل کرکے اس مسئلے کو حل کیا:
مطابقت پذیری کا مسئلہ حل ہو گیا ہے۔ Async/await مختلف زبانوں میں کافی مقبول قدیم ہے۔ Python اور دوسروں کے پاس یہ نقطہ نظر ہے - یہ بہت اچھا ہے۔ مشکل حل ہو گئی.
کونسا مسئلہ حل نہیں ہوتا؟ فریم ورک کی تیزی سے بڑھتی ہوئی پیچیدگی، ماحولیاتی نظام کی پیچیدگی اور خود پروگرام۔
- جاوا اسکرپٹ کا نحو تھوڑا عجیب ہے۔ ہم سب ایک صف اور کسی چیز اور دیگر لطیفوں کو شامل کرنے کے مسائل کو جانتے ہیں۔
- جاوا اسکرپٹ ملٹی پیراڈائم ہے۔ یہ اب ایک خاص طور پر دبانے والا نظام ہے جب ماحولیاتی نظام بہت بڑا ہے:
- ہر کوئی مختلف انداز میں لکھتا ہے - کچھ ساختی طور پر لکھتے ہیں، کچھ عملی طور پر لکھتے ہیں، مختلف ڈویلپر مختلف طریقوں سے لکھتے ہیں۔
- جب آپ مختلف پیکجوں کا استعمال کرتے ہیں تو مختلف پیکجوں سے، مختلف نمونے؛
- Javasript میں فنکشنل پروگرامنگ کے ساتھ بہت "تفریح" ہے - rambda لائبریری نمودار ہوئی اور اب کوئی بھی اس لائبریری میں لکھے گئے پروگرام نہیں پڑھ سکتا۔
- یہ سب ماحولیاتی نظام پر بڑا اثر ڈالتا ہے، اور یہ ناقابل یقین حد تک بڑھ گیا ہے۔ پیکیجز ایک دوسرے سے مطابقت نہیں رکھتے ہیں: کچھ وعدوں پر مبنی ہیں، کچھ async/await پر مبنی ہیں، کچھ کال بیکس پر مبنی ہیں۔ وہ بھی مختلف پیرایہ میں لکھتے ہیں!
- اس سے پروجیکٹ کو برقرار رکھنا مشکل ہو جاتا ہے۔ اگر آپ کوڈ نہیں پڑھ سکتے ہیں تو بگ تلاش کرنا مشکل ہے۔
ویب اسمبلی کیا ہے؟
موزیلا فاؤنڈیشن اور کئی دوسری کمپنیوں کے بہادر لوگ ویب اسمبلی جیسی چیز لے کر آئے۔ یہ کیا ہے؟
- یہ ایک ورچوئل مشین ہے جو براؤزر میں بنائی گئی ہے جو بائنری فارمیٹ کو سپورٹ کرتی ہے۔
- بائنری پروگرام وہاں پہنچ جاتے ہیں اور تقریباً مقامی طور پر عمل میں آتے ہیں، یعنی براؤزر کو ہر بار جاوا اسکرپٹ کوڈ کے تمام "نوڈلز" کو پارس کرنے کی ضرورت نہیں ہوتی ہے۔
- تمام براؤزرز نے حمایت کا اعلان کیا ہے۔
- چونکہ یہ بائی کوڈ ہے، اس لیے آپ کسی بھی زبان کے لیے کمپائلر لکھ سکتے ہیں۔
- چار بڑے براؤزرز پہلے ہی ویب اسمبلی سپورٹ کے ساتھ بھیج چکے ہیں۔
- ہم جلد ہی Go میں مقامی حمایت کی توقع کر رہے ہیں۔ یہ نیا فن تعمیر پہلے ہی شامل کیا جا چکا ہے: GOARCH=wasm GOOS=js (جلد ہی)۔ اب تک، جیسا کہ میں سمجھتا ہوں، یہ فعال نہیں ہے، لیکن ایک بیان ہے کہ یہ یقینی طور پر گو میں ہوگا۔
اب کیا کیا جائے؟ گوفر جے ایس
اگرچہ ہمارے پاس ویب اسمبلی کی حمایت نہیں ہے، گوفر جے ایس جیسا ایک ٹرانسپلر موجود ہے۔
- گو کوڈ کو "خالص" جاوا اسکرپٹ میں منتقل کیا جاتا ہے۔
- تمام براؤزرز میں چلتا ہے - کوئی نئی خصوصیات نہیں ہیں جو صرف جدید براؤزرز کے ذریعہ سپورٹ کی جاتی ہیں (یہ وینیلا جے ایس ہے، جو کسی بھی چیز پر چلتا ہے)۔
- گو کے پاس موجود تقریباً ہر چیز کے لیے سپورٹ موجود ہے، بشمول گوروٹینز اور چینلز... ہر وہ چیز جس سے ہمیں پیار ہے اور بہت کچھ جانتے ہیں۔
- تقریباً پوری معیاری لائبریری سپورٹ کی جاتی ہے، سوائے ان پیکجوں کے جن کو براؤزر میں سپورٹ کرنا کوئی معنی نہیں رکھتا: syscall، net تعاملات (ایک نیٹ/http کلائنٹ ہے، لیکن کوئی سرور نہیں، اور کلائنٹ کو XMLHttpRequest کے ذریعے ایمولیٹ کیا گیا ہے)۔ عام طور پر، پوری معیاری لائبریری دستیاب ہے - یہاں یہ براؤزر میں ہے، یہاں Go کی stdlib ہے، جو ہمیں پسند ہے۔
- گو میں پورا پیکیج ایکو سسٹم، تمام تھرڈ پارٹی سلوشنز (ٹیمپلیٹنگ وغیرہ) کو 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 کا ایک مکمل اینالاگ ہے، لیکن GopherJS کی تفصیلات کے ساتھ صرف Go میں تیار کیا گیا ہے۔
- گیم بیگز ہیں (حیرت!) مجھے دو سب سے زیادہ مقبول ملے:
- اینگو
- ایبٹین۔
میں آپ کو کچھ مثالیں دکھاؤں گا کہ یہ کیسا لگتا ہے اور آپ Go میں پہلے سے کیا لکھ سکتے ہیں:
یا یہ آپشن (مجھے 3D شوٹر نہیں مل سکا، لیکن شاید یہ موجود ہو):
میں کیا پیش کر رہا ہوں؟
اب فرنٹ اینڈ انڈسٹری ایسی حالت میں ہے کہ وہ تمام زبانیں جو پہلے جاوا اسکرپٹ سے پکارتی تھیں وہاں پہنچ جائیں گی۔ اب سب کچھ "ویب اسمبلیوں" میں مرتب کیا جائے گا۔ ہمیں گوفرز کے طور پر وہاں اپنی صحیح جگہ لینے کی کیا ضرورت ہے؟
گو نے روایتی طور پر یہ فرض کیا ہے کہ یہ ایک سسٹم پروگرامنگ زبان ہے، اور UI کے ساتھ کام کرنے کے لیے عملی طور پر کوئی لائبریری نہیں ہے۔ کچھ ہے، لیکن آدھا لاوارث، آدھا غیر فعال ہے۔
اور اب Go میں UI لائبریریاں بنانے کا ایک اچھا موقع ہے جو GopherJS پر چلے گی! آپ آخر کار اپنا فریم ورک لکھ سکتے ہیں! یہ وہ وقت ہے جب آپ ایک فریم ورک لکھ سکتے ہیں، اور یہ سب سے پہلے میں سے ایک ہو گا اور جلد ہی اپنایا جائے گا، اور آپ ایک ستارہ ہوں گے (اگر یہ ایک اچھا فریم ورک ہے)۔
آپ بہت سارے مختلف پیکجوں کو جو پہلے سے ہی گو ایکو سسٹم میں موجود ہیں براؤزر کی خصوصیات کے مطابق ڈھال سکتے ہیں (مثال کے طور پر، ٹیمپلیٹ انجن)۔ وہ پہلے ہی کام کریں گے، آپ آسان پابندیاں بنا سکتے ہیں تاکہ آپ آسانی سے مواد کو براہ راست براؤزر میں رینڈر کر سکیں۔ اس کے علاوہ، آپ مثال کے طور پر، ایک ایسی سروس بنا سکتے ہیں جو سرور اور فرنٹ اینڈ پر ایک ہی کوڈ کا استعمال کرتے ہوئے ایک ہی چیز کو رینڈر کر سکتی ہے - وہ سب کچھ جو فرنٹ اینڈ ڈویلپرز کو پسند ہے (صرف گو میں)۔
آپ ایک کھیل لکھ سکتے ہیں! صرف تفریح کے لئے...
میں بس یہی کہنا چاہتا تھا۔
آپ کے سوالات
سوال (جسے بعد میں Q کہا جاتا ہے): - کیا میں Go یا Js میں لکھتا ہوں؟
AG: – آپ روٹینز، چینلز، ڈھانچے، ایمبیڈنگ لکھتے ہیں – Go میں سب کچھ... آپ کسی ایونٹ کو سبسکرائب کرتے ہیں، وہاں ایک فنکشن پاس کرتے ہیں۔
پر: - تو میں "ننگے" Js میں لکھتا ہوں؟
AG: – نہیں، آپ گو میں گو میں لکھتے ہیں اور براؤزر API سے جڑتے ہیں (API تبدیل نہیں ہوا ہے)۔ آپ اپنی بائنڈنگ لکھ سکتے ہیں تاکہ چینل کو پیغامات بھیجے جائیں - یہ مشکل نہیں ہے۔
پر: - موبائل کے بارے میں کیا ہے؟
AG: - میں نے یقینی طور پر دیکھا: کورڈووا پیچ کے لئے پابندیاں ہیں جو جے ایس چلاتا ہے۔ مقامی ردعمل میں - مجھے نہیں معلوم؛ شاید وہاں ہے، شاید نہیں (مجھے خاص طور پر دلچسپی نہیں تھی)۔ N-go گیم انجن دونوں موبائل ایپلیکیشنز – iOS اور Android دونوں کو سپورٹ کرتا ہے۔
پر: - ویب اسمبلی کے بارے میں سوال۔ کمپریشن اور "زپنگ" کے باوجود، زیادہ سے زیادہ جگہ لی جا رہی ہے... کیا ہم سامنے کی دنیا کو اس طرح سے اور زیادہ نہیں ماریں گے؟
AG: – ویب اسمبلی ایک بائنری فارمیٹ ہے، اور بائنری بطور ڈیفالٹ ٹیکسٹ سے زیادہ حتمی ریلیز میں نہیں ہو سکتی... آپ رن ٹائم کی طرف کھینچے جاتے ہیں، لیکن یہ ویسا ہی ہے جیسا کہ معیاری جاوا اسکرپٹ لائبریری کو گھسیٹنا ہے جب یہ موجود نہیں ہے، لہذا ہم کچھ لوڈاش استعمال کریں۔ مجھے نہیں معلوم کہ لوڈاش کتنا لیتا ہے۔
پر: - ظاہر ہے رن ٹائم سے کم...
AG: - "خالص" جاوا اسکرپٹ میں؟
پر: - جی ہاں. بھیجنے سے پہلے ہم اسے کمپریس کرتے ہیں...
AG: - لیکن یہ متن ہے... عام طور پر، ایک میگا بائٹ بہت زیادہ لگتا ہے، لیکن بس اتنا ہے (آپ کے پاس پورا رن ٹائم ہے)۔ اس کے بعد، آپ اپنی کاروباری منطق لکھیں، جو آپ کی بائنری میں 1% اضافہ کرے گی۔ اب تک میں اس کو فرنٹ اینڈ کو مارتے ہوئے نہیں دیکھ رہا ہوں۔ مزید برآں، ویب اسمبلی واضح وجہ سے جاوا اسکرپٹ سے زیادہ تیزی سے کام کرے گی - اسے پارس کرنے کی ضرورت نہیں ہے۔
پر: - یہ اب بھی ایک متنازعہ نکتہ ہے... ابھی تک "واسما" (ویب اسمبلی) کا کوئی حوالہ نافذ نہیں ہوا ہے تاکہ کوئی غیر واضح طور پر فیصلہ کر سکے۔ تصوراتی طور پر، ہاں: ہم سب سمجھتے ہیں کہ بائنری تیز تر ہونا چاہیے، لیکن اسی V8 کا موجودہ نفاذ بہت موثر ہے۔
AG: - جی ہاں.
پر: - وہاں کی تالیف واقعی بہت عمدہ کام کرتی ہے اور یہ حقیقت نہیں ہے کہ کوئی بڑا فائدہ ہوگا۔
AG: - ویب اسمبلی بھی بڑے لوگوں نے بنائی ہے۔
پر: - مجھے لگتا ہے کہ ویب اسمبلی کا فیصلہ کرنا اب بھی مشکل ہے۔ اب کئی سالوں سے بات چیت ہو رہی ہے، لیکن چند حقیقی کامیابیاں ہیں جنہیں محسوس کیا جا سکتا ہے۔
AG: - شاید. ہم دیکھیں گے.
پر: - ہمیں بیک اینڈ پر مسائل نہیں ہیں... شاید ہمیں ان مسائل کو فرنٹ اینڈ پر چھوڑ دینا چاہئے؟ وہاں کیوں جائیں؟
AG: - ہمیں فرنٹ لائن ورکرز کا عملہ رکھنا ہے۔
کچھ اشتہارات 🙂
ہمارے ساتھ رہنے کے لیے آپ کا شکریہ۔ کیا آپ کو ہمارے مضامین پسند ہیں؟ مزید دلچسپ مواد دیکھنا چاہتے ہیں؟ آرڈر دے کر یا دوستوں کو مشورہ دے کر ہمارا ساتھ دیں،
ایمسٹرڈیم میں Equinix Tier IV ڈیٹا سینٹر میں Dell R730xd 2 گنا سستا؟ صرف یہاں
ماخذ: www.habr.com