แปลง Crystal เป็น Fortran โดยใช้ AI

การแปลซอร์สโค้ดจาก Crystal โดยใช้ AI เกี่ยวข้องกับการใช้เทคนิคการประมวลผลภาษาธรรมชาติ (NLP) และอัลกอริธึมการเรียนรู้ของเครื่องเพื่อวิเคราะห์และทำความเข้าใจซอร์สโค้ด

ปกติ

FAQ

ความท้าทายในการแปล

ปัญหาการแปล ตัวอย่างไวยากรณ์ 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 ไม่มีการสนับสนุนการสะท้อนในตัว

อ้างอิง: เอกสารภาษา Crystal - การเขียนโปรแกรมเมตา