เขียนแอปพลิเคชันพร้อมกันด้วย Erlang (และ Elixir)

การเปิดเผยข้อมูล: การสนับสนุนของคุณช่วยให้เว็บไซต์ทำงานต่อไป! เราได้รับค่าธรรมเนียมการอ้างอิงสำหรับบริการบางอย่างที่เราแนะนำในหน้านี้.


Erlang เป็นภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปที่ออกแบบมาสำหรับการสร้างแอพพลิเคชั่นพร้อมกัน.

เดิมทีพัฒนาขึ้นสำหรับแอปพลิเคชันด้านการสื่อสารโทรคมนาคมเป็นภาษาที่ปรับขนาดได้และมีฟังก์ชั่นที่เหมาะอย่างยิ่งสำหรับเทเลคอม, เว็บแอพพลิเคชั่น, การคำนวณแบบกระจาย, การส่งข้อความทันที, อีคอมเมิร์ซและบริการอื่น ๆ ที่ต้องการการเชื่อมต่ออย่างต่อเนื่อง แหล่งข้อมูลจำนวนมาก.

Erlang และ Elixir

คุณสมบัติบางประการที่ทำให้ Erlang ดึงดูดนักเขียนโปรแกรมที่ทันสมัย ​​ได้แก่ :

  • การทำงานพร้อมกันทำให้โปรแกรม Erlang รับอินพุตจากหลายแหล่งและฟังก์ชั่นในสภาพแวดล้อมแบบกระจาย.

  • Fault tolerance ช่วยให้ระบบสามารถทำงานต่อไปได้แม้ว่าองค์ประกอบบางอย่างของโปรแกรมจะล้มเหลวหรือมีข้อผิดพลาดทำให้เป็นภาษาที่มีประโยชน์อย่างมากสำหรับสภาพแวดล้อมที่ทำงานตลอดเวลาเช่นชุมชนเว็บหรือแพลตฟอร์มการสื่อสารโทรคมนาคม.

  • การโหลดฮอตโค้ดช่วยให้สามารถแก้ไขโค้ดและอัปเดตโปรแกรมโดยไม่จำเป็นต้องหยุดหรือรีบูตระบบ.

  • ข้อความที่ส่งผ่านแทนที่จะเป็นตัวแปรที่แชร์ทำให้กระบวนการสื่อสารกับการทำงานพร้อมกันในระดับที่สูงขึ้น.

  • การรวบรวมขยะให้การจัดการหน่วยความจำอัตโนมัติเพื่อเพิ่มความเร็วและประสิทธิภาพ.

Erlang นั้นไม่ใช่เรื่องง่ายที่จะข้ามไปเป็นภาษาการเขียนโปรแกรมบางอย่างเนื่องจากไวยากรณ์และการออกแบบฟังก์ชั่นมีความเป็นเอกลักษณ์สูงและสร้างช่วงการเรียนรู้ที่คมชัดสำหรับโปรแกรมเมอร์ใหม่.

ประวัติศาสตร์

ภาษาเออร์แลงได้รับการพัฒนาครั้งแรกในปีพ. ศ. 2529 โดยพนักงานของ Joe Ericsson Armstrong, Robert Virding และ Mike Williams.

ภาษาถูกออกแบบมาเพื่อปรับปรุงแอปพลิเคชันโทรศัพท์ที่มีอยู่และได้รับอิทธิพลอย่างมากจากภาษา PLEX.

รุ่นแรกของ Erlang ถูกนำมาใช้ใน Prolog แต่นี่พิสูจน์แล้วว่าช้าเกินไปสำหรับการแลกเปลี่ยนทางโทรศัพท์ เพื่อแก้ปัญหานั้นทีมพัฒนาเครื่องเสมือน BEAM ในปี 1992.

BEAM รวบรวมรหัส Erlang เป็น C ในอัตราที่เร็วกว่ามากทำให้ Erlang สามารถย้ายจากภาษาต้นแบบไปสู่การใช้งานจริงได้อย่างรวดเร็ว ในปี 1995 Erlang ถูกนำไปใช้ในการแลกเปลี่ยน ATM, AXD.

อย่างไรก็ตามในปี 2541 Ericsson Radio Systems ห้ามการใช้ Erlang ภายในผลิตภัณฑ์ใหม่ใด ๆ เนื่องจากพยายามย้ายผลิตภัณฑ์ทั้งหมดไปเป็นภาษาที่ไม่มีกรรมสิทธิ์.

นโยบายใหม่นี้ทำให้ Joe Armstrong ในหมู่โปรแกรมเมอร์ Erlang คนอื่นต้องลาออกและท้ายที่สุดก็นำไปสู่ทีมที่ปล่อย Erlang สู่โลกโอเพนซอร์ซในปีนั้น.

ไม่มีสินค้าที่เป็นกรรมสิทธิ์อีกต่อไปและดึงดูดความสนใจในโลกโทรคมนาคมอีริคสันกลับมามีจุดยืนต่อ Erlang และอาร์มสตรอง.

ขณะนี้ Erlang มีการใช้งานอย่างแข็งขันโดย บริษัท โทรคมนาคมทั่วโลกรวมถึง T-Mobile, Whatsapp, Ubiquiti และ IDT Corp. Ericsson ยังคงรักษาภาษาและใช้งานในโหนดการสนับสนุนและเครือข่ายมือถือของ Ericsson รวมถึงเครือข่าย LTE ของพวกเขา.

ทรัพยากร

ด้วยความต้องการอย่างไม่น่าเชื่อสำหรับการเขียนโปรแกรมพร้อมกันด้วยเทคโนโลยีบนเว็บและมือถือที่ขยายตัวอยู่ตลอดเวลา Erlang ยังคงได้รับความนิยมเพิ่มขึ้นเรื่อย ๆ.

เป็นผลให้มีแหล่งข้อมูลออนไลน์ฟรีมากมายเพื่อช่วยให้คุณเริ่มต้นใช้งานและให้ความช่วยเหลือตลอดเส้นทาง.

  • Erlang.org: เว็บไซต์อย่างเป็นทางการของ Erlang หน้านี้รวมถึงการดาวน์โหลดซอฟต์แวร์เอกสารประกอบและคู่มือผู้ใช้ลิงก์ไปยังแหล่งข้อมูลออนไลน์และชุมชนและข้อมูลเกี่ยวกับข่าวล่าสุดและกิจกรรม Erlang ที่กำลังจะจัดขึ้น.

  • Erlang Central: เว็บไซต์ที่ขับเคลื่อนด้วยชุมชนแห่งนี้มีทุกสิ่งที่คุณต้องการในการเริ่มต้นและสร้างความรู้ Erlang ของคุณต่อไป มันเป็นเจ้าภาพการสอน, วิดีโอ, Wiki, กระดานงานและฟอรัมชุมชน.

  • ส่วนใหญ่ Erlang: พอดคาสต์ปกติที่ทุ่มเทให้กับทุกสิ่ง Erlang พวกเขาหารือเกี่ยวกับแนวคิดการเขียนโปรแกรมพื้นฐานสัมภาษณ์ผู้สร้างนวัตกรรมที่สำคัญและให้คำแนะนำแก่โปรแกรมเมอร์ Erlang ใหม่และมีประสบการณ์.

  • โรงงาน Erlang: การประชุมทางเทคนิคประจำปีนี้เป็นการรวมตัวกันของนักพัฒนา Erlang จากทั่วโลกเพื่อหารือเกี่ยวกับนวัตกรรมและทฤษฎีใหม่ ๆ และมีชุดหลักสูตรการฝึกอบรมแบบเข้มข้น 3 วันซึ่งเป็นทางเลือก.

หนังสือ

Erlang ค่อนข้างแตกต่างจากภาษาส่วนใหญ่และแม้แต่โปรแกรมเมอร์ที่มีประสบการณ์ก็อาจต้องการคู่มือที่มีประโยชน์ในการติดตามความผิดปกติบางอย่าง ไม่ว่าคุณจะเขียนโปรแกรมมาหลายปีหรือคุณกำลังออกแบบโปรแกรมมือถือขนาดใหญ่ตัวต่อไปจะมีชื่อ Erlang สำหรับคุณ:

  • Programming Erlang: ซอฟต์แวร์สำหรับโลกที่เกิดขึ้นพร้อมกันโดย Joe Armstrong: เขียนโดยหนึ่งในผู้เขียนดั้งเดิมของ Erlang นี่คือคำแนะนำที่ชัดเจนเกี่ยวกับภาษาและการใช้งานในสภาพแวดล้อมที่พร้อมกันเช่นแอปพลิเคชั่นคลาวด์เกมผู้ใช้หลายคน เว็บไซต์ หนังสือเล่มนี้ได้รับการออกแบบมาสำหรับบุคคลที่มีประสบการณ์มาก่อนเล็กน้อยในการเขียนโปรแกรมการทำงานหรือขนานและสอนแนวคิดเหล่านี้ผ่านแบบฝึกหัดและตัวอย่างจริง.

  • การสร้างแอปพลิเคชั่นเว็บด้วย Erlang โดย Zachary Kessin: ออกแบบมาสำหรับนักพัฒนาเว็บที่มีประสบการณ์ด้วยความรู้พื้นฐาน Erlang หนังสือเล่มนี้นำเสนอโปรแกรมเมอร์ผ่านชุดโปรแกรมการเขียนโปรแกรมเว็บเซอร์วิสที่เรียบง่ายเตรียมความพร้อมในการสร้างเว็บแอปพลิเคชัน.

  • เรียนรู้คุณ Erlang เพื่อประโยชน์ที่ดี! โดย Fred Herbert: ตามชื่อเรื่องตลกแนะนำว่าหนังสือเล่มนี้ยอมรับว่าไวยากรณ์ของ Erlang นั้นผิดปกติโครงสร้างของข้อมูลนั้นผิดปกติและระบบประเภทของหนังสือมักจะไม่เข้ากับผู้มาใหม่หลายคน – ซึ่งเป็นเหตุผลที่คุณต้องการคำแนะนำที่ผิดปกติ แต่ทรงพลังอนุสัญญา มันเริ่มต้นช้าด้วยเทคนิคขั้นพื้นฐานและสร้างแนวคิดการเขียนโปรแกรมที่ซับซ้อนมากขึ้นเมื่อผู้อ่านปรับให้เข้ากับความซับซ้อนของภาษาใหม่ หากคุณไม่ต้องการสำเนาจริงผู้แต่งยังจัดทำหนังสือเล่มนี้ให้ออนไลน์ฟรี.

  • แนะนำ Erlang: เริ่มต้นใช้งานฟังก์ชั่นการเขียนโปรแกรมโดย Simon St Laurent: หนังสือเล่มนี้อุทิศเวลามากในการติดตั้งและเชลล์ของ Erlang ทำให้แน่ใจว่าโปรแกรมเมอร์ใหม่ (หรือผู้ที่ใหม่กับ Erlang) นั้นคุ้นเคยกับอินเตอร์เฟสบรรทัดคำสั่งแล้ว เพื่อแบ่งภาษาออกเป็นแนวคิดพื้นฐานมากและแสดงให้เห็นถึงการสร้างโปรแกรมอย่างง่าย.

  • การออกแบบเพื่อขยายขีดความสามารถด้วย Erlang / OTP โดย Cesarini และ Vinoski: หนังสือเล่มนี้มีไว้สำหรับโปรแกรมเมอร์ Erlang ที่มีประสบการณ์ที่ต้องการเพิ่มความเข้าใจและใช้แพลตฟอร์ม Open Telecom (OTP) เพื่อออกแบบและสร้างระบบเชิงพาณิชย์ที่มีความซับซ้อนและปรับขนาดได้.

Beyong Erland: Elixir

Elixir เป็นภาษาที่ค่อนข้างใหม่ แต่มีประวัติยาวนาน และมันเริ่มต้นด้วย Erlang.

ประวัติ Exlixer

ตั้งแต่กลางทศวรรษ 1980 Erlang ทำงานได้ดีในสิ่งที่ออกแบบมาเพื่อทำโดยส่วนใหญ่จะออกแบบแอปพลิเคชันโทรศัพท์ แต่ไปข้างหน้าอย่างรวดเร็วสามทศวรรษและคิดเกี่ยวกับความต้องการของเว็บแอปพลิเคชันที่ปรับขนาดได้อย่างมาก.

ตัวอย่างเช่น Pinterest ส่งการแจ้งเตือน 14,000 ครั้งต่อวินาที Facebook ต้องได้รับการอัปเดตจากและส่งข้อความกลับไปที่ 1.6 พันล้านผู้ใช้งาน (ด้วย B!) การทำงานพร้อมกันสูงและความพร้อมใช้งานสูงนี้เป็นสิ่งที่ Erlang ได้รับการออกแบบมาอย่างดี.

ดังนั้นภาษาเทเลคอมสมัยก่อนก็กลายเป็นเทรนด์และเป็นที่นิยมอีกครั้ง ยกเว้นในรูปแบบใหม่.

ปรากฎว่า Erlang ยากต่อการอ่านและเขียน ไม่น่าแปลกใจเลยที่มันถูกพัฒนาขึ้นเมื่อหลายสิบปีก่อน ก่อนหน้านี้“ ความสนุกในการใช้” เป็นข้อพิจารณาที่สำคัญในการออกแบบภาษา.

Erlang ไม่เหมาะสำหรับนักพัฒนารุ่นที่เติบโตบน Ruby และ JavaScript นอกจากการใช้งานแล้ว Erlang ยังไม่มีคุณสมบัติทั้งหมดที่อาจจำเป็นสำหรับแอปพลิเคชันเว็บที่ทันสมัย.

ดังนั้นในปี 2012 José Valim จึงสร้าง Elixir รหัส Elixir คอมไพล์กับ Erlang bytecode และทำงานในรันไทม์ Erlang คุณสามารถรวมรหัส Erlang ใน Elixir ได้โดยตรง (ค่อนข้างคล้ายกับวิธีที่คุณสามารถรวม JavaScript ใน CoffeeScript).

Valim เป็นส่วนหนึ่งของทีมพัฒนา Ruby on Rails และยังเขียนหนังสือเกี่ยวกับการพัฒนา Rails อีกด้วย ทีมงาน Ruby on Rails ให้ความสำคัญกับประสบการณ์ของนักพัฒนาเป็นอย่างมากและความกังวลนั้นมีอิทธิพลต่อการออกแบบของ Elixir.

ไวยากรณ์คล้ายกับ Ruby และสามารถอ่านได้มากกว่า Erlang นอกจากไวยากรณ์ที่ง่ายขึ้นแล้ว Elixir ยังขยายขีดความสามารถของ Erlang เพื่อรวม metaprogramming (เหนือสิ่งอื่นใด), polymorphism และเอกสารอินไลน์.

บทนำบทสรุปเกี่ยวกับการโปรแกรมเชิงฟังก์ชัน

Elixir เช่น Erlang เป็นภาษาโปรแกรมที่ใช้งานได้ สิ่งนี้แตกต่างจากภาษาอื่นส่วนใหญ่เล็กน้อยซึ่งเกือบจะเป็นสิ่งจำเป็นและมักจะเป็นเชิงวัตถุ.

ภาษาโปรแกรมส่วนใหญ่มีไวยากรณ์โค้ดบล็อกบางประเภทที่เรียกว่า “ฟังก์ชั่น” หรือในภาษาเชิงวัตถุบางภาษาพวกเขาถูกเรียกว่า “วิธีการ” แต่ทุกคนรู้ว่าวิธีการนั้นเป็นเพียง “ฟังก์ชั่น” ที่แนบมากับวัตถุ.

แต่ฟังก์ชั่นเป็นฟังก์ชั่นจริงๆ?

ในการพัฒนาซอฟต์แวร์เราคุ้นเคยกับฟังก์ชั่นที่ทำอะไรบางอย่าง เราเรียกสิ่งเหล่านี้ว่า“ ผลข้างเคียง”

แต่ในวิชาคณิตศาสตร์ฟังก์ชั่นไม่มีผลข้างเคียง คุณไม่ได้กำหนดวงกลมด้วยฟังก์ชันที่ลงจุดทุกจุดของวงกลมและเปลี่ยนหมายเลขหลักสูตรสำหรับ Intro to Hypothical Geometry.

ในคณิตศาสตร์ฟังก์ชันจะถูกกำหนดไว้ เนื่องจากอินพุตเฉพาะ x ใด ๆ มันจะส่งคืนเอาต์พุตที่แน่นอนเสมอและจะไม่ทำสิ่งอื่นใด.

โดยการยอมรับผลข้างเคียงในการเขียนโปรแกรมเราแนะนำสถานะ – สภาพปัจจุบันของสภาพแวดล้อมการทำงานของโปรแกรม และปัญหาของรัฐคือมันสามารถเปลี่ยนแปลงได้ตลอดเวลา.

ตัวแปรอาจหมายถึงสิ่งหนึ่งตอนนี้และอีกสิบนาทีจากนี้ และนั่นหมายความว่าการเรียกใช้ฟังก์ชันเฉพาะกับอินพุต x อาจส่งคืนค่า y ที่แตกต่างกันสองค่าในเวลาที่ต่างกันสองครั้ง.

นั่นเป็นปัญหาหรือไม่? ขึ้นอยู่กับว่า ไม่มีภาษาที่ใช้ในการพัฒนาที่ได้รับความนิยมสูงสุดนั้นสามารถใช้งานได้อย่างหมดจดดังนั้นจึงเป็นไปได้อย่างชัดเจนที่จะสร้างสิ่งต่าง ๆ (หรือเกือบทุกอย่าง) โดยใช้ภาษาที่พึ่งพาผลข้างเคียงและสถานะโลก.

อย่างไรก็ตามในระบบที่กระจายอยู่ตลอดเวลาซึ่งอาจเป็นปัญหาได้ หากระบบมีการแพร่กระจายไปทั่วคอมพิวเตอร์ทางกายภาพหลายโหล (หรือหลายพัน) คุณจะเผยแพร่การเปลี่ยนแปลงในสถานะสากลไปยังพวกเขาทั้งหมดได้อย่างไร?

หากระบบล้มเหลวคุณจะเรียกคืนสถานะโกลบอลอย่างรวดเร็วได้อย่างไร? หากการเรียกใช้ฟังก์ชันอาจส่งคืนค่าที่แตกต่างกันในเวลาต่างกันคุณจะมั่นใจได้อย่างไรว่าการทดสอบที่คุณเรียกใช้ในวันนี้จะยังคงผ่านไปในวันพรุ่งนี้?

ฟังก์ชั่นการเขียนโปรแกรมพยายามที่จะหลีกเลี่ยงปัญหาเหล่านี้โดยการไร้สัญชาติ โปรแกรมที่ออกแบบตามหน้าที่คือชุดของฟังก์ชั่นที่กำหนดไว้อย่างสมบูรณ์ซึ่งหมายความว่าระบบโดยรวมนั้นเป็นสิ่งที่กำหนดได้ เมื่อกำหนดอินพุตเฉพาะใด ๆ เอาต์พุตจะรับประกัน.

ความบริสุทธิ์ทางคณิตศาสตร์แบบนี้เป็นที่สนใจของนักวิทยาศาสตร์คอมพิวเตอร์ในเชิงวิชาการมานาน แต่โลกแห่งความเป็นจริงของการพัฒนาซอฟต์แวร์นั้นไม่ได้สนใจอะไรมากจนกระทั่งในทันใดเนื่องจากความต้องการของอินเทอร์เน็ตทุกคนต่างให้ความสนใจ.

ฟังก์ชั่นการเขียนโปรแกรมเป็นหนึ่งในแนวโน้มปัจจุบันที่สำคัญที่สุดในการพัฒนาโปรแกรมประยุกต์บนเว็บ.

ทรัพยากรการเขียนโปรแกรมเชิงหน้าที่

หากคุณต้องการมุ่งหน้าไปที่ Elixir จริงๆคุณจะต้องได้รับความสนใจจาก Programming Programming นี่คือจุดเริ่มต้น.

  • บทความ

    • บทความการเขียนโปรแกรมฟังก์ชั่นที่วิกิพีเดีย: ภาพรวมในเชิงลึกของเรื่อง.

    • อย่ากลัวการเขียนโปรแกรมฟังก์ชั่น: คำอธิบายที่ค่อนข้างง่ายต่อการเข้าใจของฟังก์ชั่นการเขียนโปรแกรมที่เขียนขึ้นสำหรับนักพัฒนา JavaScript.

    • การแนะนำเชิงปฏิบัติเกี่ยวกับการตั้งโปรแกรมการทำงาน

    • พื้นฐานการเขียนโปรแกรมเชิงหน้าที่: ทุกอย่างเกี่ยวกับอะไร?

    • การเขียนโปรแกรมฟังก์ชั่นคืออะไร?.

  • วิดีโอ

    • ฟังก์ชั่นการเขียนโปรแกรม; อะไร? ทำไม? เมื่อไหร่?

    • การเขียนโปรแกรมฟังก์ชั่นจากหลักการแรก

    • ความสุขของการเขียนโปรแกรมฟังก์ชั่น

    • เพลย์ลิสต์: การเขียนโปรแกรมฟังก์ชั่น – แนวคิดพื้นฐานอธิบาย.

  • หนังสือ

    • โครงสร้างข้อมูลที่ทำงานได้อย่างหมดจด

    • อัลกอริทึม: วิธีการเขียนโปรแกรมการทำงาน

    • บทนำของการโปรแกรมเชิงหน้าที่ผ่านแคลคูลัสแลมบ์ดา

    • การคิดเชิงหน้าที่: กระบวนทัศน์ผ่านทางไวยากรณ์

    • กลายเป็นหน้าที่

    • คณิตศาสตร์ไม่ต่อเนื่องและการโปรแกรมเชิงฟังก์ชัน.

ทรัพยากร Elixir

มีทรัพยากรมากมายในหลายรูปแบบเพื่อช่วยให้คุณเชี่ยวชาญ Elixir.

แหล่งข้อมูลออนไลน์

ที่แรกที่เริ่มมองหา Elixir ออนไลน์เป็นเว็บไซต์ภาษา Elixir อย่างเป็นทางการ.

สอน
  • คู่มือการเริ่มต้นอย่างเป็นทางการ

  • 30 วันแห่งยาอายุวัฒนะ

  • โรงเรียน Elixir: บทเรียนเกี่ยวกับภาษาโปรแกรม Elixir.

  • คู่มือวิดีโอเพื่อ Elixir

  • Étudesสำหรับ Elixir

  • แผ่นโกง Elixir.

เครื่องมือ
  • Phoenix: กรอบการพัฒนาเว็บไซต์สำหรับ Elixir และอย่าพลาดหนังสือที่ยอดเยี่ยมนี้ในฟินิกซ์ที่ประพันธ์โดยผู้สร้างฟีนิกซ์และผู้สร้าง Elixir.

  • สุดยอดยาอายุวัฒนะ: รายชื่อโครงการที่ยอดเยี่ยมสำหรับยาอายุวัฒนะ.

ชุมชนและการเรียนรู้อย่างต่อเนื่อง
  • ฟอรั่ม Elixir

  • Elixir Subreddit

  • น้ำพุ Elixir

  • Digest Elixir ประจำสัปดาห์

  • เรดาร์น้ำทิพย์.

หนังสือเกี่ยวกับยาอายุวัฒนะ

  • การเขียนโปรแกรม Elixir: Functional |> พร้อมกัน |> ในทางปฏิบัติ |> สนุก

  • Metaprogramming Elixir: เขียนโค้ดให้น้อยลงทำมากขึ้น (และสนุก!)

  • Elixir in Action

  • แนะนำ Elixir: เริ่มต้นใช้งานฟังก์ชั่นการเขียนโปรแกรม

  • การเรียนรู้น้ำอมฤต

  • ตำรายาอายุวัฒนะ.

ฉันควรเรียนรู้น้ำอมฤต?

หากคุณสนใจที่จะทำงานกับเว็บแอพพลิเคชั่นที่ทันสมัยโดยเฉพาะผู้ที่ให้บริการกับผู้ใช้งานจำนวนมากพร้อมกัน Elixir ก็คุ้มค่าที่จะรู้.

ข้อสรุป

ในขณะที่ยังคงเป็นภาษาการเขียนโปรแกรมที่ค่อนข้างหายากชุมชน Erlang กำลังเติบโตอย่างรวดเร็วโดยเฉพาะอย่างยิ่งเมื่อความต้องการโซลูชันมือถือเว็บแอปพลิเคชันและการทำงานร่วมกันออนไลน์ที่ราบรื่นเพิ่มขึ้น.

แม้ว่าจะไม่ธรรมดาในหลาย ๆ ด้าน แต่การสนับสนุนในตัวสำหรับการทำงานพร้อมกันและการกระจายความยืดหยุ่นที่สูงและการยอมรับข้อผิดพลาดทำให้ Erlang เป็นภาษาที่น่าดึงดูดใจอย่างมากในโลกที่เชื่อมต่อกันของเรา.

แต่มันอาจจะดีกว่าที่จะมุ่งเน้นไปที่ยาอายุวัฒนะ ขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ พวกเขาเป็นทั้งภาษาที่ยอดเยี่ยม.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map