ความคิดสะเปะสะปะของผมเกี่ยวกับภาษา Julia

ผมลองเขียน Julia ไปนิดนึงแน่นอนว่าเป็นโปรแกรมตัดคำ ซึ่งก็ไม่น่าจะตรงทางของ Julia เท่าไหร่ ไม่มีทำอะไรกับ vector matrix เลย แต่ก็มีสิ่งที่พบดังต่อไปนี้

index ของ Array เริ่มที่ 1 เหมือน Pascal และ Lua

เป็นภาษา dynamic ที่ระบุ type ได้ละเอียดมากประมาณว่าระบุแบบนี้ได้ Array{Tuple{Int, String, Char},1} สังเกตว่ามี 1 ด้วย คือบอกว่าเป็น Array 1 มิติ

อีกอย่างหนึ่งที่ไม่คิดว่าจะเจอในภาษา dynamic ถ้า type ที่ประกาศเป็น null (nothing) ได้ต้องใส่ Nullable ด้วยเช่น Nullable{Array{Tuple{Int, String, Char},1}}

มีคล้าย Generic ของ Java ด้วยแต่ใน Julia เรียก Parametric Composite Types ไม่แน่ใจว่าต่างกันแค่ไหน แต่ประกาศแบบนี้ได้ ตามคู่มือ

type Point{T}
   x::T
   y::T
end

และตอนเอาไปใช้ก็สามารถใส่ Point{Float64} Point{Int} อะไรแบบนี้ได้

พอเห็น type พวกนี้แล้วน่าจะพูดได้ว่าประกาศ type ได้ละเอียดกว่า Go ที่เป็นภาษาแบบ static type อีกถ้าไม่รวม pointer

ใช้ substring รู้สึกไม่ค่อยสะดวก สิ่งเคยเขียนใน Ruby ประมาณ text[s…e] พอมาแปลงเป็น Julia ก็จะกลายเป็น text[chr2ind(text, s):chr2ind(text, e)] รู้สึกวุ่นและมีโอกาสพลาดเพิ่มขึ้นเยอะ

ความเร็วของโปรแกรมตัดคำที่อุตส่าใช้ Just-in-time compilation ก็ดูเร็วสำหรับภาษา dynamic แต่ก็ยังห่างชั้นจากกลุ่มนำมาก

OOP ใน Julia เน้นไปที่ polymorphism ถ้าดูผิว ๆ ก็จะเหมือนเรียก function ธรรมดา เช่น build(10,5), build(30.4,10.5), build(12,3.4), build(Point(10.2, 2.4) พวกนี้สามารถไปเรียกคนละ method กันได้หมดเลยถาม type ที่ระบุไว้ตอนประกาศ method; นอกจากนั้น method จะเขียน build(10, 5) อะไรแบบนี้ถูกแล้ว ไม่มีมาเขียน 5.build(10) เหมือนในภาษา OOP ส่วนมาก เพราะว่ามันมาแล้ว multiple dispatching คล้าย ๆ CLOS ใน Common Lisp คือ type ของทุก argument มีส่วนเลือก method หมดเลย อาจจะเป็นข้อดีทางอ้อม ๆ คือมันเป็นระเบียบดี ไม่มีแบบจะ len(x) ดีหรือ x.len() ดี

แต่ type ที่ว่ามาเยอะแยะจะไม่ใส่เลยก็ได้

ถ้าโอกาสหน้าเขียนพวก vector matrix หรือคำนวณตัวเลขเยอะ ๆ จะกลับมาลอง Julia อีกที

Advertisements
Posted in ไม่มีหมวดหมู่

ใส่ความเห็น

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