Voice in the Gentle Wind

พฤษภาคม 6, 2007

สรุปความสามารถใหม่ๆ ใน Java 7

Filed under: java — deans4j @ 9:44 pm

จากความสำเร็จของการเปิดเผยกระบวนการและความสามารถใน Java 6 มากขึ้น แม้ Java 6 จะออกมาชมโลกได้ไม่นาน แต่ ณ เวลานี้คนก็เริ่มพูดถึง Java 7 กันแล้ว หลายๆ ค่ายต่างก็นำเสนอสิ่งที่ตนคิดว่าควรมีใน Java 7 สอดคล้องกับคำพูดชักชวนของบิดาของจาวา เจมส์ กอสลิง เรื่อง KSL หรือ Kitchen Sink Language ที่เป็นโปรเจกต์ไว้ลองของความคิดแปลกใหม่กับจาวา ใครจะยำใหญ่ โยนอะไรเข้ามาในอ่างล้างจานนี้ก็ได้ ขอให้ลงมือเถอะ ไม่ต้องห่วงถ้ามันเลอะเทอะไปบ้าง ไม่ต้องกลัวหรือคิดมากจนเกินไป แล้วจากนั้นค่อยมาดูอีกทีว่ามันเวิร์คหรือเปล่า ซึ่งเราสามารถลงมือได้เลยตั้งแต่ตอนนี้เพราะหัวใจหลักอย่าง javac กับ HotSpot ก็โอเพนซอร์สรออยู่ก่อนหน้านี้แล้ว

เวบ cafe au lait หนึ่งในเวบที่คอยแนะนำข้อมูลดีๆ ให้ผมเสมอ ได้จัดทำบทสรุปสิ่งที่เกี่ยวข้องกับ Java 7 ที่ผ่านมาซึ่งเรามีโอกาสจะได้เห็นกันในอนาคต แบ่งออกเป็น 5 ส่วนหลังดังนี้

1. License

  • GPL แน่นอน รายละเอียดรอไม่กี่วันก็จะได้รู้กันมากขึ้น
  • จาวาจะกลายเป็นประชากรชั้นหนึ่งในโลก Linux มากขึ้น
  • คุณภาพจะดีขึ้น เมื่อคนเลิกรายงานบั๊กอย่างเดียวแล้วหันไปช่วยกันซ่อมมันแทน
  • จะมีคนกล้า Fork หรือเปล่า ทำแล้วคุ้ม มีเหตผลเพียงพอหรือเปล่า?
  • ไม่ทุกคนที่มีความสุขกับเรื่องนี้

2. การเปลี่ยนแปลงในตัวภาษา

  • array syntax สำหรับคลาสตระกูล collection เราอาจจะได้เห็นโค้ดทำนองนี้

 

  1. List content = new LinkedList(10);

  2. content[0] = “Fred”;

  3. content[1] = “Barney”;

  4. String name = content[0];

  • Property Literal ด้วยสัญลักษณ์ -> แทน getX, setX
Point p = new Point();
p->X = 56;
p->Y = 87;
int z = p->X;

มีบางคนเสนอให้เปลี่ยนสัญลักษณ์เป็น # หรือไม่ก็ abstract มันโดยการใช้ . (dot) เหมือน C# ไปเลย

  • Type Inference เพื่อลดรูปการ construct instance ลง ปล่อยให้ compiler เดาชนิดของคลาสเอาเอง
HashMap<String, Integer> map = new HashMap<String, Integer>();
int freq = map.get(word);

กลายเป็น

map := new HashMap<String, Integer>();
freq := map.get(word);

หรือไม่ก็

final map = new HashMap<String, Integer>();
final freq=map.get(word);
  • Factory Methods มีคนเสนอให้ภาษาสนับสนุนการสร้าง Factory Pattern ในตัวเลยเหมือนกัน
  • Arbitrary Precision Arithmetic
BigInteger low  = BigInteger.ONE;
BigInteger high = BigInteger.ONE;
high = high.add(low);

กลายเป็น

BigInteger low  = 1;BigInteger high = 1;

high = high + low;

  • Subpakage Access เป็นส่วนหนึ่งของความสามารถใหม่ๆ ใน JSR 294 ที่ต้องการจัดการเรื่อง visibility ภายในคลาสต่างๆ ให้ดีขึ้นกว่าเดิม เพราะ default visibility สามารถถูกเรียกใช้งานมองเห็นได้จากภายในแพกเกจเดียวกันเท่านั้น ถ้าต้องการให้แพกเกจลูกๆ มองเห็นด้วยต้องประกาศเป็น public ซึ่งเวลาเราประกาศเป็น public แล้วการดูแลรักษาจะกลายเป็นเรื่องยุ่งยากทันที เพราะใครๆ ก็มาเรียกใช้ได้ ถ้าจะเปลี่ยนแปลง API แต่ละทีก็ต้องคิดกันหนักเพราะอาจจะมีคนใช้เก่าๆ ที่ยังอ้างอิงถึงอยู่
  • Closures ขณะนี้มี 4 ค่ายที่นำเสนอโครงร่างแนวทางของตัวเอง (C3S, FCM, CICE, BGGA) ตอนนี้ผมกำลังสนใจโครงร่างที่มาจากฝั่งกูเกิ้ล (FCM) อยู่เหมือนกัน แม้ตัว C3S เขียนได้สั้นกว่า แต่ FCM มีลูกเล่นน่าสนใจอยู่ตรงเรื่อง control abstraction
  • Annotation Everywhere JSR 308 แปะกันมันละงานนี้

3. Library ใหม่ๆ

  • new New I/O (ข่าวเก่า) ดูในเวบจะมีรายละเอียดคลาสใหม่ๆ ในตระกูล filesystem เอาไว้ช่วยคัดลอก เคลื่อนย้ายไฟล์ ดู attribute ของไฟล์
  • async I/O ที่ดีกว่าเดิม
  • JSR 310 Date/Time API ใหม่ (คนงงว่าจะใช้คลาสไหนระหว่าง Date, Timestamp, Calendar จนใครๆ ก็หันไปใช้ Joda-Time ที่ง่ายและเป็นธรรมชาติกว่ากันหมด)
  • Swing มาเพียบ Beans Binding, Swing Framework, Validation ยังไม่รวมตระกูล SwingX ที่คาดว่าจะกลายเป็นมาตรฐานหลายตัว

4. Tools

  • เครื่องมือต้องดูตัวอย่างความสำเร็จของ Macromedia, MS เป็นตัวอย่างในการออกแบบทูล

5. การเปลี่ยนแปลงภายใน VM

  • JAM == super versionable JAR ส่วนหนึ่งของ JSR 277 Java Module (OSGi เล็กๆ)
  • สนับสนุนภาษา Script มากขึ้น
  • JavaDoc ใหม่
  • Java Kernel : JVM Browser edition
  • Tiered Compilation : ผสมระหว่าง client, server Hotspot นำข้อดีของทั้งคู่มาผสมกันซะเลย

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

ที่มา – cafe au lait

Advertisements

4 ความเห็น »

  1. “คนงงว่า​จะ​ใช้​คลาสไหนระหว่าง​ Date, Timestamp, Calendar ​จนใครๆ​ ​ก็หันไป​ใช้​ Joda-Time ​ที่ง่าย​และ​เป็น​ธรรมชาติกว่า​กัน​หมด”

    5555 จริงด้วย ผมก็คนหนึ่ง

    ความเห็น โดย rach — พฤษภาคม 7, 2007 @ 8:55 am

  2. ผมรอ property ใน java มานานแล้วนะ
    รอจนหนัไปเล่น C# แทนแล้วล่ะ ฮิฮิ

    เรื่อง Type Inference นี่หลายๆคนไม่ชอบนะครับ เค้าว่ามันทำลายความเป็น strong type ที่เป็นจุดเด่นของ Java, C# หมด ( C# ใช้ keyword ว่า var)

    ความเห็น โดย wiennat — พฤษภาคม 7, 2007 @ 9:02 am

  3. @wiennat : เรื่องคงความเป็น strong type ใน Type Inference, Property literal เค้าเลยเสนอให้มี syntax เพิ่มไง ทั้งๆ ที่จริงๆ ใช้ syntax เดิมๆ แล้วไปแก้ที่ compiler เอาก็ไม่น่าจะเหนือบ่ากว่าแรง แต่เพื่อต้องการลดรูปแต่ยังคงความแข็งแกร่งเอาไว้เลยนำเสนอวิธีนี้

    ปัญหามันจะไปตกกับ user มือใหม่ที่ต้องการเรียนรู้ภาษาเพราะ learning curve มันจะสูงขึ้น

    ความเห็น โดย deans4j — พฤษภาคม 8, 2007 @ 2:18 am

  4. ใช่เลย ตอนนี้ C# มันกลายเป็นภาษาอวกาศไปแล้ว

    ความเห็น โดย wiennat — พฤษภาคม 8, 2007 @ 4:28 pm


RSS feed for comments on this post. TrackBack URI

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

สร้างเว็บไซต์หรือบล็อกฟรีที่ WordPress.com.

%d bloggers like this: