ComBioLaw.De » Blog » เขียนโปรแกรม » B => C => C++ => D

B => C => C++ => D

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

เมื่อต้นปีนี้มีภาษาเขียนโปรแกรมเกิดขึ้นอีกหนึ่งภาษา นั่นคือภาษา D ชื่อของภาษาก็พอจะบอกได้ว่า เป็นภาษาที่มีรากมาจากภาษา C อีกที ข่าวการออกมาของภาษา D ได้ผ่านหูผ่านตาผมมาบ้าง และผมก็เห็นตามเวบไซท์บางแห่งก็พูดถึงภาษา D กันบ้างแล้ว แต่ก็ไม่ได้สนใจอะไรเป็นพิเศษ เพราะผมเองก็เหมือนกับคนเขียนโปรแกรมส่วนใหญ่ ที่พอรู้จักภาษาเขียนโปรแกรมหลาย ๆ ภาษาเข้า ก็เริ่มที่จะขี้เกียจศึกษาภาษาอื่นเพิ่มเติม

แต่เมื่อไม่นานมานี้นิตยสาร Ix ซึ่งเป็นนิตยสารภาษาเยอรมันที่ผมติดตามอ่าน ได้นำภาษา D มาเป็นเรื่องขึ้นปก อ่ะ ! แสดงว่ามันต้องมีอะไร ถึงได้เป็นเรื่องขึ้นปก ก็เลยซื้อมาอ่าน ปรากฏว่า ...

เขียนโปรแกรม เขียนโปรแกรม

bow_der_kleine bow_der_kleine

ภาษา D เป็นภาษาที่น่าสนใจจริง ๆ ด้วย เพราะแนวทางและจุดมุ่งหมายของการพัฒนาภาษา D นั้นต่างจากภาษาที่เพิ่งคลอดหลังยุค 1990 เช่น Java, Ruby, Python, C#, PHP etc.. ที่จะเน้นการเขียน Application ที่ง่าย และ Portability ดังนั้นภาษาเหล่านี้จะออกมาในรูปแบบของภาษา Script หรือไม่ก็ทำงานบน Visual Machine

image

แต่เป้าหมายของภาษา D ต่างออกไป โดยภาษา D นั้นจะเน้นไปที่การเป็นภาษาที่จะมารับช่วงต่อจากภาษา C ดังนั้น ภาษา D จึงเป็นภาษาที่ต้องคอมไพล์ สามารถนำใช้งานประเภท System Programming และ Performance Programming ได้ และทำงานร่วมกับโค้ดภาษา C ที่มีอยู่แล้วได้ แต่น่าเสียดายที่ไม่ค่อยลงรอยกับ C++ ไม่ใช่เพราะว่าคนสร้างภาษา D คือ Walter Bright ไม่ถูกกับ Bjarne Stroustrup นะครับ แต่เพราะว่าโครงสร้าง Object ของ C++ กับ D มันต่างกัน มันเลยใช้งานด้วยกันไม่ได้

แน่นอนว่าภาษาเขียนโปรแกรม OOP สมัยใหม่อย่าง Java และ C# ต้องมีอิทธิพลในการออกแบบภาษา D ดังจะเห็นได้จาก Garbage Collector, import statement, interface statement, first class arrays, associative arrays, dynamic arrays, array slicing, nested functions, inner classes, regular expression, foreach loop, unit test และอื่น ๆ อีกมากมาย โดยไม่ทิ้งคอนเซพท์บางอย่างของ C++ ได้แก่ Template Programming และ Multiple Inheritance และได้เพิ่มคอนเซพท์ที่ไม่ค่อยมีในภาษาอื่นอย่าง design by contract เข้ามาด้วย

นอกจากนี้ D ยังกำจัดจุดอ่อนที่น่ารำคาญในภาษา C อย่าง Preprocessor และ .h file heading ไปอีกด้วย แต่ผมก็ยังงง ๆ อยู่ว่าทำไม Pointer มันยังอยู่ เพราะมันเป็นสาเหตุหนึ่ง ที่ทำให้เกิดข้อผิดพลาดในการเขียนโปรแกรมค่อนข้างบ่อย แม้ว่า D จะมี automatic memory management ก็ตาม แต่ตัวภาษายังอนุญาติให้คนเขียนโปรแกรม บริหารหน่วยความจำได้เองด้วย ด้วยคุณสมบัติเหล่านี้ทำให้หลาย ๆ คนเชื่อว่า ภาษา D น่าจะนำมาใช้แทนหรือต่อยอดภาษา C ได้ โดยไม่มีปัญหา แถมยังเขียนโปรแกรมลื่นขึ้นอีก

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

แม้ว่า D จะมี library มาตรฐานอย่าง Phobos ติดตัวมาด้วย แถมยังใช้ libraries ที่เขียนด้วยภาษา C ได้อีก แต่ก็ใช่ว่าจะนำมาใช้งานได้ทันที ดังนั้นในส่วนนี้จึงถือว่าเป็นจุดอ่อนสำคัญของภาษา D

image

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

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

ผมมีความประทับใจในภาษา D หลายอย่าง เช่น

  • จำนวนเชิงซ้อนที่ใช้งานง่ายเหมือน FORTRAN กับ Python เลย
  • มีฟังก์ชั่นพื้นฐานเกี่ยวกับ String และคณิตศาสตร์ให้ใช้งานเยอะพอสมควร
  • มี Dynamic Array ที่เก่งพอตัว คือเพิ่มขนาดลดขนาดได้ ไม่ต้อง typecast และไม่ตะกละหน่วยความจำ เสียดายที่ slicing ยังไม่ค่อยดี เพราะมันกำหนด step ไม่ได้
  • foreach ช่วยให้ทำงานง่ายขึ้น (อันนี้ภาษาอื่น ๆ เดี๋ยวนี้ก็มีกันหมดแล้ว)
  • Performance ดีมาก เรื่องการคำนวนดีกว่า C และ Fortran เล็กน้อย
  • อื่น ๆ ลืมไปแล้ว
แต่ก็มีอะไรที่ไม่ค่อยชอบเหมือนกันเช่น

  • มันคอมไพล์เยอะ และยากเหมือน C เลย พอดีหลัง ๆ เขียนภาษา Script เยอะ เลยเป็นพวกไม่ชอบคอมไพล์
  • RegEx มันไม่แรงอย่างที่คิด Performance น่าผิดหวัง
  • Type Converter เช่นเปลี่ยน String เป็น double ก็ช้าเอาการอยู่
  • private statement มันเห็นกันหมดทั้ง module เลย นึกว่าเฉพาะสมากชิกใน class เท่านั้นที่เห็น
ในส่วนของคอมไพเลอร์ D มีคอมไพเลอร์ให้เลือกใช้สองแบบคือ DMD ซึ่งเป็นคอมไพเลอร์ที่เขียนขึ้นมาใหม่สำหรับภาษา D โดยเฉพาะ ซัพพอร์ททั้ง Windows, Linux และ Mac OS และ GDC ที่เป็นคอมไพเลอร์สำหรับภาษา D ที่เรียก GCC มาใช้อีกทีหนึ่ง

โดยรวมแล้วภาษา D เป็นภาษาที่ดีมากภาษาหนึ่ง นำมาใช้แทนภาษา C ได้อย่างไม่มีปัญหา ความรู็สึกในตอนเขียน ง่ายกว่า C มาก ง่ายกว่า Java ในบางเรื่อง และยากกว่าในบางเรื่อง ที่แน่ ๆ โปรแกรมที่ได้ทำงานเร็วมาก (ดูตารางเปรียบเทียบ )

การนำภาษา D มาใช้เป็นภาษาหลัก หรือเปลี่ยนจากภาษาอื่นมาเป็นภาษา D เป็นเรื่องที่ต้องคิดหนัก เพราะ libraries มันไม่พร้อมนี่แหละ (แต่เดี๋ยว tango กับ mango ตัวเต็มออกมาอาจจะดีขึ้น) อีกทั้ง System Programming และ Performance Programming ก็ลดลงความสำคัญลงไปมากในปัจจุบัน แต่สิ่งที่เข้ามาแทนจะเป็นการเขียนโปรแกรมเพื่องานธุรกรรม บริหารข้อมูลข่าวสาร และ Web Programming ซึ่งการเขียนโปรแกรมลักษณะนี้ต้องการภาษาที่ใช้งานง่าย และ Dynamic กว่าที่ภาษา D เป็นอยู่

ดังนั้น ผมคิดว่าภาษา D อาจถูกนำไปใช้งานในส่วนที่ C และ C++ ทำหน้าที่อยู่ในขณะนี้ ซึ่งก็ตรงกับความตั้งใจของ Walter Bright แต่การกินส่วนแบ่งเข้าไปในส่วนของภาษาเขียนโปรแกรมอื่น ๆ ผมคิดว่ามีความเป็นไปได้น้อย แต่ก็ใช่ว่าจะเป็นไปไม่ได้เลย

01 Jun 07 | by | tags เขียนโปรแกรม ไอที D

read 4576

<<ประกาศ (เกือบ) ยุบบล็อก || ยุ(บ)ติธรรมอำพราง>>

เชกูวารา

คิคิ...นายโบว์ กลัวโดนยุบบล็อก ครับพี่น้อง ....(แซวเล่น :D..)

01 Jun 07

pittaya

อยากให้ลองเปรียบเทียบกับ Objective-C ดูสักหน่อยครับ

เท่าที่อ่านดูแล้วฟีเจอร์ค่อนข้างคล้ายๆ กันอยู่พอควรเลย

01 Jun 07

bow_der_kleine

พอดีไม่เคยศึกษา Objective-C มาก่อนครับ ก็เลยยังเปรียบเทียบไม่ได้ หากมีเวลาจะลองศึกษาและเปรียบเทียบดูครับ :D

02 Jun 07

PeeTai

เดี๋ยวนี้ผมสนใจแต่ PHP เพียงอย่างเดียวเลยครับ เพราะมันสนับสนุน SaaS ได้ และเพราะมันถูกใช้สร้างเว็บอย่างกว้างขวางนั่นเอง

03 Jun 07

bow_der_kleine

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

เวลาผมเขียนเรื่องภาษาเขียนโปรแกรมทีไร ก็จะมีคนพูดถึง PHP ทุกที แสดงว่า PHP เป็นภาษาที่ได้รับความนิยมมาก

03 Jun 07

Bundit Boonkhao

ผมว่าผมเคยเห็นที่ไหนมาก่อนนะครับ Digital Mars เนี่ย รู้สึกว่าเค้าทำ compilers มาหลายตัว ไม่รู้ว่าข้อมูลถูกต้องหรือป่าวนะครับ เพราะว่าเคยเห็นชื่อนี้ประมาณ เกือบ ห้าหกปีที่ผ่านมาแล้ว ผมไม่ใช่ programmer หรอกครับแต่สนใจการเขียน compiler ครับ พอมีภาษาใหม่ก็เลยสนใจ

14 Jun 07

bow_der_kleine

Bundit Boonkhao : ใช่ครับ จริง ๆ Walter Bright สร้าง compiler มาหลายตัวแล้ว ส่วนมากจะเน้น Performance ของโปรแกรมที่ได้ ที่เขาสร้างไว้ก็มีทั้ง C, C++ (Zortech C++ ที่เขาอ้างว่าเป็น C++ Compiler ตัวแรก) , Java (Visual Java Tools ที่เขาอ้างว่าเป็น Java Compiler ที่เร็วที่สุดในขณะนั้น)

17 Jun 07

ความคิดเห็น (click here to comment)

Search

Navigation

รวมลิงก์น่าสนใจ

ความเคลื่อนไหว

Login

name password

ลืมรหัสผ่าน