ไมโครซอฟท์มีส่วนขยาย C/C++ ให้กับ Visual Studio Code มานานแล้ว (และเป็นส่วนขยายยอดนิยมอันดับ 2 ของ VS Code รองจาก Python) ล่าสุดไมโครซอฟท์ออกเวอร์ชัน 1.0 ของส่วนขยายตัวนี้สักที
ของใหม่ที่สำคัญในเวอร์ชันนี้คือ รองรับการใช้งานบนลินุกซ์สถาปัตยกรรม ARM/ARM64 ทำให้สามารถใช้ VS Code เขียนแอพ C++ บนอุปกรณ์อย่าง Raspberry Pi ได้แล้ว, เพิ่มตัวปรับแต่งคอนฟิก C++ IntelliSense และตั้งค่าฟอร์แมตของโค้ด C++ แบบเดียวกับ Visual Studio ตัวเต็มได้
กลุ่มมาตรฐาน ISO ลงมติเอกฉันรับรอง C++20 เข้าเป็นมาตรฐาน โดยฟีเจอร์ทั้งหมดได้รับเห็นชอบแล้ว และจะตีพิมพ์เผยแพร่ตัวมาตรฐานเป็นเล่มสมบูรณ์ภายในปลายปีนี้ โดยฟีเจอร์สำคัญ 4 ประการของ C++20 ได้แก่
บริการ AWS Lambda เปิดตัวเมื่อปี 2014 และเป็นผู้บุกเบิกการประมวลผลแบบ serverless ที่ไม่ต้องเปิดเครื่องค้างไว้รอรับคำสั่งตลอดเวลา ก่อนหน้านี้ Lambda รองรับโค้ดภาษา Java, Node.js, C#, Python และเมื่อต้นปีนี้คือ Go
ล่าสุด AWS Lambda ประกาศรองรับการนำเข้ารันไทม์ภาษาใดก็ได้แล้ว (custom runtime) พร้อมทั้งประกาศรองรับภาษาใหม่คือ Ruby, C++ และ Rust ผ่านระบบรันไทม์ใหม่นี้
มาตรฐาน C++ ในช่วงหลังๆ มีพัฒนาการอย่างต่อเนื่องหลายอย่างนับแต่ C++11 เป็นต้นมา แต่หลายครั้งคอมไพลเลอร์ก็รองรับไม่ครบหรือบางฟีเจอร์ก็ใช้งานได้ยาก ตอนนี้กูเกิลเปิดตัวไลบรารี Abseil สำหรับการทำ abstract เพื่อรองรับฟีเจอร์ใหม่ๆ
CERT หน่วยงานแจ้งเตือนช่องโหว่ความปลอดภัยซอฟต์แวร์ภายใต้สถาบันวิศวกรรมซอฟต์แวร์ (Software Engineering Institute - SEI) ประกาศปล่อยมาตรฐานการเขียนโค้ดให้ปลอดภัยสำหรับภาษา C++ ที่รวมกฎ 83 รายการสำหรับการเขียนโค้ดให้ปลอดภัย หลังจากก่อนหน้านี้ทาง CERT เคยปล่อยคู่มือสำหรับ ภาษา C, ภาษาจาวา, ภาษา Perl, และการเขียนแอปบนแอนดรอยด์
กฎบางข้อจะตรงกันหลายภาษาเช่นเช็คอินพุตว่าปิดท้ายสตริงด้วย null เสมอ แต่บางข้อก็จะค่อนข้างเฉพาะเช่นการใช้ lambda ในภาษา C++14
ทุกกฎมีตัวอย่างโค้ดที่มักเขียนผิดให้ แม้จะค่อนข้างยาวแต่ก็อ่านไม่ยากนัก ผู้สนใจน่าลองไล่จากต้นจนจบกัน
ไมโครซอฟท์เปิดซอร์สของแพลตฟอร์ม .NET มาตั้งแต่สองปีที่แล้ว แต่การพอร์ตไปใช้งานบนแพลตฟอร์มใหม่ๆ ก็ยังทำได้ยาก ตอนนี้ทีมงาน .NET ก็ออกมาระบุว่ากำลังทดลองแนวทางใหม่คือการแปลงโค้ด .NET ให้เป็น C++
แนวทางนี้ทำให้กระบวนการคอมไพล์ได้ไฟล์ executatable ของระบบปฎิบัติการโดยตรง ไม่ใช่ไฟล์ที่ต้องรันบนรันไทม์ของ .NET อีกที แม้ว่าจะต้องใช้รันไทม์ในรูปแบบไลบรารีอยู่ก็ตาม
การทดลองนี้ยังอยู่ในขั้นต้น ปัญหาหลายอย่างยังไม่มีทางออกอย่างตกผลึก การแปลงโค้ดยังไม่สมบูรณ์ อย่างไรก็ดีหากการแปลงโค้ดทำได้สำเร็จ โค้ดที่ได้จะสามารถไปรันบนทุกแพลตฟอร์มที่คอมไพล์เลอร์ C++ ไปถึง
หลังจากไมโครซอฟท์ซื้อ MinecraftEDU (คนละส่วนกับตัวเกมหลัก) แล้วเตรียมออก Minecraft: Education Edition เพื่อบุกภาคตลาดการศึกษา
ล่าสุด Jack Schofield จาก ZDNet รายงานว่าตัวเกมจะเขียนขึ้นด้วยภาษา C++ ต่างจากตัวเกมหลักที่เขียนขึ้นด้วยภาษา Java ซึ่งทำให้ม็อดเก่าๆ ใช้งานไม่ได้ และอาจกระทบกับสังคมผู้เล่นเกม ที่เป็นหนึ่งในตัวแปรสำคัญของการประสบความสำเร็จของ Minecraft
การเปลี่ยนมาใช้ภาษา C++ จะช่วยแก้ปัญหาอาการกินสเปคหนักที่เกิดขึ้นในเกมเวอร์ชัน Java และจะรองรับการรันบนหลายแพลตฟอร์ม ตัวเกมจะมีฟีเจอร์อย่างการรองรับโหมดผู้เล่นหลายคนแบบ peer-to-peer ในห้องเรียน และผู้สอนสามารถใส่คำสั่งต่างๆ ได้มากกว่าเดิม
โครงการนำ Clang มาใช้คอมไพล์โค้ดภาษา C++ ของไมโครซอฟท์ มีความก้าวหน้าอย่างจับต้องได้อีกขั้นเมื่อไมโครซอฟท์ได้นำเสนอวิธีการคอมไพล์โค้ดวินโดวส์แอพด้วย Clang ในงาน CPPCon 2015 ที่ผ่านมา และคาดว่าจะเพิ่มวิธีการคอมไพล์นี้ในชุดอัพเดตสำหรับ Visual C++ ที่จะออกมาในเดือนหน้าด้วย
Bjarne Stroustrup บิดาภาษา C++ ร่วมกับ Herb Sutter ออกคู่มือแกนของภาษา C++ เพื่อสนับสนุนให้คนเขียนภาษา C++ ในรูปแบบสมัยใหม่ โดยจะเปิดเป็นโครงการโอเพนซอร์สที่เปิดให้คนอื่นๆ มาดัดแปลงไปเป็นข้อแนะนำในองค์กรได้
นอกจากคำแนะนำในการเขียนโปรแกรมแล้ว โครงการนี้ยังมาพร้อมกับโครงการคู่ขนานอีกสองโครงการ ได้แก่
Avi Kivity นักพัฒนาผู้สร้าง KVM เปิดตัวระบบฐานข้อมูล NoSQL ที่ชื่อว่า ScyllaDB ทำงานเข้ากับฐานข้อมูล Cassandra ผ่าน CQL
ความต่างของ ScyllaDB คือมันพัฒนาด้วยภาษา C++ บนเฟรมเวิร์ค Seastar ขณะที่ Cassandra พัฒนาด้วยจาวา
ในงาน Cassandra Summit ทาง Avi นำเสนอผลการทดสอบประสิทธิภาพของ ScyllaDB เทียบกับ Cassandra แสดงให้เห็นว่าประสิทธิภาพการทำงานดีขึ้นกว่า 8 เท่าตัว
ตอนนี้โครงการอยู่ในสถานะเบต้า และคาดว่าจะปล่อยตัวเต็มได้ภายในเดือนมกราคมนี้
ที่มา - ScyllaDB
Matt Bierner สาธิตการใช้ Template ในภาษา C++ ด้วยการเขียนเกม Tetris ที่ต้องเล่นขณะ "คอมไพล์" เท่านั้นโดยโค้ดที่ได้จะแสดงหน้าจอล่าสุดของเกมออกมา ชื่อว่า Super Template Tetris
ไฟล์เซฟของเกมนี้เป็นไฟล์ header ในภาษา C++ ที่ใช้ template อย่างหนักเพื่อเก็บสถานะล่าสุดของตัวเอง (ดูตัวอย่างไฟล์เริ่มต้นเกมใหม่)
ผู้เล่นจะควบคุมการเคลื่อนไหวของบล็อคด้วยการประกาศ define ให้กับคอมไพล์เลอร์ขณะที่กำลังคอมไพล์โปรแกรม เช่น -D RIGHT เพื่อไปทางขวา และ -D LEFT เพื่อไปทางซ้าย
โค้ดทั้งหมดอยู่บน GitHub ดาวน์โหลดมาเล่นกันได้
เมื่อไม่นานนี้ นายลี เซียนลุง นายกรัฐมนตรีสิงคโปร์ ได้กล่าวปาฐกถาในงาน Founders Forum โดยส่วนหนึ่งของปาฐกถามีเรื่องราวที่ตนเองเขียนโปรแกรมภาษา C++ เพื่อแก้ Sudoku ด้วยตัวเอง
หลังจากนั้นไม่นาน นายลีก็ได้โพสต์ภาพ source code ของโปรแกรมดังกล่าวลงใน Facebook page ของตนเอง พร้อมเสียงตอบรับล้นหลามจากผู้ติดตาม
( ชมภาพ source code ท้ายข่าว )
เขาระบุในโพสต์ว่า โปรแกรมนี้เป็นโปรแกรมง่ายๆ สามารถรันบน DOS ได้ วิธีใช้คือให้ใส่ข้อมูลของกระดาน Sudoku บรรทัดต่อบรรทัด หลังจากนั้นโปรแกรมจะแสดงผลวิธีแก้ Sudoku กระดานนั้นออกมา และหากโปรแกรมเจอมากกว่าหนึ่งวิธี มันก็จะแสดงผลออกมาทั้งหมด พร้อมแสดงผลวิธีการที่โปรแกรมหาคำตอบด้วย!
นายลี เซียนลุง นายกรัฐมนตรีสิงคโปร์ บุตรชายคนโตของนายลี กวนยู กล่าวปาฐกถาในงาน Founders Forum แสดงวิสัยทัศน์ถึงนโยบาย Smart Nation ของสิงคโปร์ แม้เนื้อหาส่วนมากจะพูดถึงภาพรวมของนโยบายไอทีประเทศ แต่ช่วงหนึ่งเขาก็พูดถึงเรื่องส่วนตัว ว่าเขาเคยเพลิดเพลินกับการเขียนโปรแกรม โดยโปรแกรมสุดท้ายที่เขาเขียน คือโปรแกรมแก้ Sudoku ที่เขียนด้วย C++ เขาระบุว่าเพราะเขาเขียน C++ จึงค่อนข้างล้าสมัยแล้ว และลูกชายทั้งสองคนของเขาเรียนด้านไอทีจบจาก MIT แนะนำให้เขาอ่านหนังสือสอนภาษา Haskell เขาคิดว่าจะอ่านมันหลังจากเกษียณอายุแล้ว
มาตรฐาน C++ รุ่นใหม่ผ่านการโหวตไปแล้วเมื่อวันศุกร์ที่ผ่านมา ทำให้มาตรฐาน C++14 สามารถออกได้ตามกำหนด ต่างจาก C++11 ที่เลยกำหนดไปหลายปี (ชื่อเดิมคือ C++0x แต่เลื่อนจนออกมาตรฐานได้ปี 2011)
C++14 เพิ่มส่วนขยายเข้ามาหลายส่วน เช่น การรองรับ Transactional Memory ที่จะทำให้เขียนโปรแกรมมัลติคอร์ได้ง่ายขึ้น, นิยามพฤติกรรมในหลายส่วน, ปรับปรุงประสิทธิภาพการทำงาน
มาตรฐาน C++98 ใช้เวลาห้าปีก่อนจะมีคอมไพล์เลอร์ที่รองรับเต็มรูปแบบตัวแรก ส่วน C++11 ใช้เวลาสองปี
ที่มา - ISO CPP
กูเกิลเปิดโครงการ FlatBuffers สำหรับนักพัฒนาเกมที่ต้องการเซฟไฟล์แบบไบนารี ทำให้สามารถเซฟและอ่านไฟล์ได้จากทั้ง C++ และจาวา รวมถึงสามารถอ่านและเขียนไฟล์ json ได้อีกด้วย
ฟอร์แมต FlatBuffers จะซ้ำซ้อนกับ Protobuf ของกูเกิลเองพอสมควร แต่ FlatBuffer จะใช้พื้นที่น้อยกว่า ความต่างที่ชัดเจนคือ FlatBuffers จะตัดหมายเลขประจำฟิลด์ต่างๆ ออกทำให้ทำงานระหว่างเวอร์ชั่นของ API ไม่ได้ แต่ความได้เปรียบคือ FlatBuffers จะไม่ใช้หน่วยความจำเพิ่มเติมจากขนาดไบนารีที่อ่านขึ้นมา ต่างจากโปรโตคอลอื่นๆ ที่ต้องแตกไบนารีขึ้นมาเสียก่อน
รองรับแพลตฟอร์ม ลินุกซ์, วินโดวส์, OS X, และแอนดรอยด์
นักพัฒนาของ LLVM คู่แข่ง GCC (อ่านรายละเอียดได้ในข่าวเก่า) ได้ประกาศเปิดตัว LLVM 3.3 ที่รองรับภาษา C++11 อย่างเป็นทางการ โดย frontend ของ LLVM ที่ใช้คอมไพล์ภาษา C/C++ ชื่อ Clang จะรองรับ AArch64 (ชื่อในกลุ่ม open-source ของ ARMv8), AMD R600 GPU, S390 และบางส่วนของ IBM System Z โดยนักพัฒนาได้กล่าวว่า LLVM 3.3 นี้เป็น "คอมไพเลอร์ที่รองรับมาตรฐาน C++11 รวมทั้งไลบราลี่สำคัญ ๆ ของ C++11 อย่าง std::regex"
Clang ยังมีเครื่องมือ C++11 migration เพื่อช่วยนักพัฒนาอัพเกรดโค้ดของพวกเขาเพื่อรองรับมาตรฐานใหม่อีกด้วย
GCC เริ่มพัฒนาด้วย C++ มาตั้งแต่กลางปี 2010 ระหว่างนี้กระบวนการพัฒนาเกิดขึ้นหลายอย่าง โดยเฉพาะกำหนดมาตรฐานว่าต้องใช้ฟีเจอร์ใดของ C++ บ้าง
ในแง่ของผู้ใช้งานคงไม่ต่างอะไรนัก แต่ฟีเจอร์อย่างการจัดการหน่วยความจำตาม scope ของโค้ด จะช่วยให้ตัว GCC คืนหน่วยความจำเร็วขึ้น ทำให้การใช้หน่วยความจำลดลง
ฟีเจอร์ของ GCC 4.8 ใหม่ที่สำคัญ เช่น
ถึงแม้โนเกียจะหันไปสนใจ Windows Phone เป็นหลักแล้ว แต่เทคโนโลยีอย่าง Qt ก็ยังไม่ตายและยังพัฒนาอย่างต่อเนื่อง
ล่าสุดมีข้อมูลว่า Qt รุ่นหน้า 5.0 จะใช้ประโยชน์จากฟีเจอร์ใหม่ๆ ของภาษา C++11 ที่เพิ่งออกเมื่อปีที่แล้ว เช่น lambda expressions for slots, UTF-16 unicode literals, the constexpr keyword, static_assert, virtual function overriding, final attribute, deleted functions/members
เฟชบุ๊กเป็นหนึ่งในบริษัทยุคใหม่ที่เปิดซอร์สโครงการใหญ่ๆ ออกมาอย่างต่อเนื่อง ก่อนหน้านี้ที่เด่นๆ คือ HipHop ที่เป็นคอมไพล์เลอร์สำหรับภาษา PHP, และ Thrift โปรโตคอลสำหรับสื่อสารข้ามภาษา เมื่อสองวันก่อนก็มีการเปิดตัวอีกหนึ่งโครงการ คือ Folly ไลบรารีพื้นฐานสำหรับภาษา C++11
ตัวไลบรารีนั้นค่อนข้างกระจัดกระจาย ยังไม่สมบูรณ์เป็นชุดเหมือน Boost อย่างไรก็ดีมีหลายตัวที่น่าสนใจ เช่น Format.h
ที่ยกเอาระบบฟอร์แมตของไพธอนมาใช้บน C++ ตรงๆ หรือ AtomicHashMap.h
ที่สร้างโครงสร้างข้อมูลแบบแมบโดยทุกคำสั่งนั้นเป็นปลอดภัยต่อการใช้งานพร้อมกันหลายเธรด
NetBeans IDE ยอดนิยมอีกตัวจากค่าย Oracle ออกรุ่น 7.2 Beta แล้ว ของใหม่ในรุ่นนี้ที่สำคัญคือการรองรับภาษา C++ รุ่นใหม่คือ C++11 และ PHP 5.4
ส่วนของตัว editor เองก็ปรับปรุงเพิ่มหลายจุด โดยเฉพาะการทำดัชนีเพื่อค้นหาข้อมูลภายในโค้ด ถูกนำไปรันเบื้องหลังและทำงานแบบขนาน นอกจากนี้ยังมีปุ่มลัด Ctrl+Space เพิ่มเติมคำใน search bar
ไมโครซอฟท์ขึ้นเวที GoingNative 2012 ที่เป็นเวทีสำหรับนักพัฒนาซอฟต์แวร์แบบเนทีฟชั่น C/C++ เป็นหลัก เปิดตัวมาตรฐาน C++ AMP ที่เป็นส่วนขยายจากภาษา C++ ปรกติที่เสนอโดยไมโครซอฟท์เพื่อให้สามารถพัฒนาซอฟต์แวร์ที่อาศัยความสามารถในการประมวลผลขนานได้อย่างเต็มที่
สิ่งที่ C++ AMP ทำหลักๆ คือการกำหนด ข้อจำกัด ที่เข้ากันได้กับข้อจำกัดในการประมวลผลด้วย GPU แล้วเปิดให้ฟังก์ชั่นต่างๆ สามารถประกาศข้อจำกัดนี้ได้ เมื่อประกาศแล้ว คอมไพล์เลอร์จะสามารถเลือกได้ว่าจะนำโค้ดส่วนนี้ไปรันในตัวเร่ง (accelerator) ตัวใด โดยอาจจะเป็น GPU, หรือชุดคำสั่งแบบ SIMD บนซีพียูเอง หรือกระทั่งจ่ายงานไปยังคอร์ต่างๆ ของซีพียูก็ได้
ต่อเนื่องจากข่าวเมื่อเดือนสิงหาคม มาตรฐาน C++0x ผ่านการโหวตเป็นทางการ, เปลี่ยนชื่อเป็นมาตรฐาน C++11
หลังมาตรฐาน C++0x ผ่านร่างสุดท้าย การโหวตรอบจริงก็ไม่มีปัญหาอะไรเมื่อคณะกรรมการโหวตด้วยมติเอกฉันท์ให้รับมาตรฐานนี้เข้าเป็นมาตรฐาน ISO/IEC 14882:2011 หรือมาตรฐาน C++ ปรับปรุงครั้งที่สาม และได้ชื่อใหม่เป็น C++11 ตามปีที่ออกมาตรฐานสำเร็จ
หลังจากผ่านมาตรฐานแล้ว สิ่งที่เราต้่องรอกันต่อไปคือคอมไพลเลอร์ต่างๆ จะต้องปรับปรุงความสามารถในรองรับกันจนครบถ้วน ซึ่งคอมไพล์เลอร์หลักๆ เช่น gcc หรือ Visual Studio จะรองรับความสามารถบางส่วนไปก่อนหน้านี้แล้ว แต่ก็ยังต้องรออีกสักพักกว่าจะครบถ้วนกันจริงๆ (ดูตารางเทียบการรองรับ)
ในเวลาเดียวที่คุณ John Carmack บิดาแห่งเกม Doom ทวีตว่ากำลังพอร์ต "Rage Mobile" มาลง Android ก็มีคนทวีตถามว่าจะพอร์ตลง Windows Phone 7 ด้วยหรือไม่ เขาทวีตตอบกลับไปว่าจะไม่พอร์ตลง Windows Phone 7 เพราะมันซัพพอร์ตแต่ภาษาการโปรแกรมระดับสูงเช่น XNA เท่านั้น ไม่ซัพพอร์ตภาษาการโปรแกรมระดับล่างอย่าง C++
การที่ Windows Phone 7 ไม่ซัพพอร์ตภาษาการโปรแกรมระดับล่าง ที่จำเป็นจะต้องเข้าถึง API ของระบบปฏิบัติการโดยตรงเพื่อประสิทธิภาพสูงสุดในการทำงานของแอพฯ ทำให้ผู้ใช้อาจไม่ได้เห็นแอพฯ หรือเกมที่มีกราฟิกเยี่ยมประสิทธิภาพสูงหลายตัวบนแพลตฟอร์มดังกล่าว