การแปลซอร์สโค้ดจาก Crystal โดยใช้ AI เกี่ยวข้องกับการใช้เทคนิคการประมวลผลภาษาธรรมชาติ (NLP) และอัลกอริธึมการเรียนรู้ของเครื่องเพื่อวิเคราะห์และทำความเข้าใจซอร์สโค้ด
ปัญหาการแปล | ตัวอย่างไวยากรณ์ Crystal | ตัวอย่างที่เทียบเท่า Fortran | คะแนน (1-10) |
---|---|---|---|
การอนุมานประเภท | x = 10 |
integer :: x |
7 |
บล็อกและลัมบ์ดา | ->(x) { x * 2 } |
function f(x) result(res) res = x * 2 end function |
8 |
มิกซินและโมดูล | module MyModule; ... end |
module MyModule; ... end module |
6 |
การจัดการข้อยกเว้น | begin; raise "error"; rescue; end |
if (error_condition) then; ... end if |
9 |
แมโคร | macro my_macro; ... end |
N/A | 10 |
การทำงานพร้อมกัน (ไฟเบอร์) | spawn { ... } |
N/A (ต้องการไลบรารีภายนอก) | 10 |
การโอเวอร์โหลดเมธอด | def foo(x : Int); def foo(x : String); end |
interface; subroutine foo(x); end interface |
8 |
อาร์กิวเมนต์ที่ตั้งชื่อ | def foo(a: Int, b: Int); end |
subroutine foo(a, b); end subroutine |
5 |
โครงสร้างข้อมูลในตัว | array = [1, 2, 3] |
integer, dimension(3) :: array |
6 |
การสะท้อนและการเขียนโปรแกรมเมตา | Hello.to_s |
N/A | 10 |
ใน Crystal การอนุมานประเภทช่วยให้สามารถประกาศตัวแปรโดยไม่ต้องระบุประเภทอย่างชัดเจน ตัวอย่างเช่น:
x = 10
ใน Fortran คุณต้องประกาศประเภทอย่างชัดเจน:
integer :: x
x = 10
อ้างอิง: เอกสารภาษา Crystal - ตัวแปร
Crystal รองรับบล็อกและลัมบ์ดาสำหรับการเขียนโปรแกรมเชิงฟังก์ชัน ตัวอย่างเช่น:
->(x) { x * 2 }
ใน Fortran คุณจะต้องกำหนดฟังก์ชัน:
function f(x) result(res)
integer :: x
integer :: res
res = x * 2
end function
อ้างอิง: เอกสารภาษา Crystal - บล็อก
Crystal อนุญาตให้ใช้มิกซินเพื่อการนำโค้ดกลับมาใช้ใหม่:
module MyModule
# ...
end
Fortran มีแนวคิดที่คล้ายกันแต่มีไวยากรณ์ที่แตกต่างกัน:
module MyModule
! ...
end module
อ้างอิง: เอกสารภาษา Crystal - โมดูล
Crystal ใช้ไวยากรณ์ที่ตรงไปตรงมามากขึ้นสำหรับการจัดการข้อยกเว้น:
begin
raise "error"
rescue
end
การจัดการข้อผิดพลาดใน Fortran จะเป็นแบบแมนนวลมากขึ้น:
if (error_condition) then
! handle error
end if
อ้างอิง: เอกสารภาษา Crystal - การจัดการข้อยกเว้น
Crystal รองรับแมโครสำหรับการเขียนโปรแกรมเมตา:
macro my_macro
# ...
end
Fortran ไม่มีสิ่งที่เทียบเท่าสำหรับแมโครโดยตรง
อ้างอิง: เอกสารภาษา Crystal - แมโคร
Crystal มีการสนับสนุนการทำงานพร้อมกันในตัวโดยใช้ไฟเบอร์:
spawn { ... }
Fortran ไม่มีการสนับสนุนการทำงานพร้อมกันในตัวและมักจะพึ่งพาไลบรารีภายนอก
อ้างอิง: เอกสารภาษา Crystal - การทำงานพร้อมกัน
Crystal อนุญาตให้มีการโอเวอร์โหลดเมธอดตามประเภทของพารามิเตอร์:
def foo(x : Int); end
def foo(x : String); end
Fortran ใช้ส่วนต่อประสานสำหรับการโอเวอร์โหลด:
interface
subroutine foo(x)
end interface
อ้างอิง: เอกสารภาษา Crystal - เมธอด
Crystal รองรับอาร์กิวเมนต์ที่ตั้งชื่อในการกำหนดเมธอด:
def foo(a: Int, b: Int); end
Fortran ไม่รองรับอาร์กิวเมนต์ที่ตั้งชื่อโดยตรง:
subroutine foo(a, b)
end subroutine
อ้างอิง: เอกสารภาษา Crystal - อาร์กิวเมนต์ที่ตั้งชื่อ
Crystal มีการสนับสนุนในตัวสำหรับอาร์เรย์:
array = [1, 2, 3]
ใน Fortran คุณต้องประกาศขนาดของอาร์เรย์:
integer, dimension(3) :: array
array = [1, 2, 3]
อ้างอิง: เอกสารภาษา Crystal - อาร์เรย์
Crystal รองรับการสะท้อนและการเขียนโปรแกรมเมตา:
Hello.to_s
Fortran ไม่มีการสนับสนุนการสะท้อนในตัว