การแข่งขันเขียนโปรแกรมแก้โจทย์ปัญหาระดับอุดมศึกษา ACM-ICPC รองรับการส่งคำตอบด้วยภาษาโปรแกรม Python และ Kotlin สำหรับรอบการแข่งขันรอบชิงแชมป์โลก 2018 แล้ว
การรองรับภาษา Python นั้นเริ่มตั้งแต่ปีที่ผ่านมา โดยผู้เข้าแข่งขันสามารถเลือกได้ว่าจะใช้ Python 3.5 พร้อม interpreter จากผู้พัฒนาภาษาเพื่อความสามารถใหม่ๆ หรือจะถอยไปใช้ Python 2.7 ที่รันบน PyPy อีกที เพื่อเร่งความเร็วในการคำนวณก็ย่อมได้
ส่วนภาษา Kotlin 1.1 ที่เพิ่งเพิ่มเข้ามาในปีนี้ ก็ทำให้การแข่งขันดังกล่าวรองรับการส่งคำตอบมากถึง 5 ภาษา ซึ่งภาษาอื่นๆ ได้แก่ C, C++ และ Java ที่อยู่คู่การแข่งขันมาอย่างยาวนานนั่นเอง
การรองรับภาษาเหล่านี้ เป็นเพียงข้อกำหนดสำหรับรอบชิงแชมป์โลกเท่านั้น การแข่งขันในรอบภูมิภาคอาจใช้กฏการแข่งขันที่แตกต่างออกไป
อนึ่ง การเลือกใช้ภาษาที่ประมวลผลได้ช้ากว่า จะไม่ได้รับการผ่อนปรนด้านข้อจำกัดทางเวลาแต่อย่างใด และกรรมการจะตรวจทานโจทย์ด้วยการเขียนเฉลยใน 2 ภาษา คือ C/C++ และ Java เท่านั้น
การรองรับหรือยกเลิกภาษาโปรแกรมในการแข่งขันดังกล่าวไม่ได้เกิดขึ้นเป็นครั้งแรก เพราะในปี 1988 ก็มีการยกเลิกภาษา FORTRAN เนื่องจากไม่สามารถเขียน recursion ได้ และปี 2007 ก็ยกเลิกภาษา Pascal ปิดตำนานหนึ่งในสองภาษาดั้งเดิมที่การแข่งขันนี้รองรับ
การแข่งขันรอบชิงแชมป์โลก 2018 จะจัดขึ้นในวันที่ 15-20 เมษายน 2018 ณ มหาวิทยาลัยปักกิ่ง โดยปีนี้บริษัท JetBrains เป็นสปอนเซอร์ด้านเครื่องมือเขียนโปรแกรมครับ
อ้างอิง: คู่มือสภาพแวดล้อมเครื่องสำหรับการแข่งขัน ACM-ICPC ปี 2017 และปี 2018 , บล็อกคุณ redviper บน Codeforces , กระทู้คุณ shahriar_manzoor บน UVa Online Judge
Comments
Python 2 มันเร็วกว่า Python 3 หรอครับ
tl;dr ถ้า เป็นการแข่งครั้งนี้ แล้ว Python 2 เร็วกว่า Python 3 ครับ
อันที่จริงถ้าจะพูดให้รัดกุมเนี่ย เราไม่สามารถเปรียบเทียบความเร็วของ "ภาษา" ใดๆ ได้เลยครับ เพราะว่าภาษาเหล่านี้เป็นแค่ abstract spec เท่านั้นว่า เมื่อเจอ syntax แบบนี้โปรแกรมจะทำงานอย่างไร
เครื่องมือที่ทำให้ภาษาเหล่านี้ทำงานได้จริงๆ (และเอามาวัดความเร็วเทียบกันได้) ก็คือตัว "แปลภาษา" ครับ ซึ่งบางโปรแกรมก็ใช้ชื่อว่า compiler บางอันก็ใช้ชื่อว่า interpreter ซึ่งในภาษาเดียวเนี่ยอาจจะมีตัวแปลภาษามากกว่าหนึ่งตัวก็ได้ อย่างเช่นภาษา Python ที่มีตัวแปลภาษาทั้ง CPython, IronPython, Jython, PyPy ฯลฯ
แต่ทีนี้เวลาเราพูดถึงภาษาโปรแกรมโดยทั่วไปเนี่ย เราก็มักจะ refer ถึงตัวแปลภาษาที่ได้รับความนิยมมากที่สุด (ซึ่งไม่จำเป็นต้องเร็วที่สุด) อย่าง Python ก็คือ CPython ซึ่งเป็นตัวแปลภาษาตัวแรกที่ผู้สร้างภาษา Python เขียนขึ้นมานั่นเอง (ส่วนภาษาอื่นๆ อย่าง C++ ก็มักนึกถึง GCC, Java นึกถึง Oracle JDK เป็นต้น)
ในโลกการทำงานจริง CPython ถูกนำไปใช้งานได้อย่างไม่มีปัญหาอะไร แม้ว่ามันจะใช้เวลาประมวลผลมากกว่าภาษาอื่นๆ อย่าง C++/Java ก็ตาม แต่ก็แลกมากับ code ที่เรียบง่าย เรียนรู้ได้อย่างรวดเร็ว เขียนโปรแกรมได้สั้นกระชับกว่าภาษาอื่นๆ
ปัญหาของ CPython มันจะเกิด เมื่อต้องนำไปใช้งานที่เน้นความเร็วในการประมวลผลเป็นสำคัญ (บางที่ก็แก้ด้วยการเปลี่ยนไปเขียนภาษาอื่นเลย) หนึ่งในทางแก้คือเปลี่ยนไปใช้ตัวแปลภาษาตัวอื่นที่ทำงานได้เร็วกว่านั่นเอง
PyPy ก็เป็นตัวแปลภาษา Python ที่เร่งการประมวลให้เร็วกว่าการใช้ CPython ได้ แต่ว่า PyPy ยังรองรับแค่ Python 2.7 เท่านั้น การรองรับ Python 3 ยังอยู่ในสถานะ beta ทำให้การแข่งครั้งนี้ code ที่เป็น Python 2 สามารถใช้ประโยชน์จากการเร่งความเร็วด้วย PyPy ได้ แต่ Python 3 ยังต้องใช้ CPython ที่ช้ากว่าไปก่อนนั่นเองครับ
c/c++ และ java เป็นอะไรที่เป็นตัวหลักๆ จริงๆ
ตระกูลC..ทรงพลังประสิทธิภาพ
มิน่า Kotlin ถึงมา ?