Fortran là gì: ngôn ngữ lập trình cho tính toán khoa học

Fortran là gì: ngôn ngữ lập trình cho tính toán khoa học

Fortran là gì? Đây là ngôn ngữ lập trình cao cấp được thiết kế riêng cho các bài toán tính toán khoa học, đặc biệt là các phép tính số với ma trận và vector. Dù đã có lịch sử gần bảy thập niên, Fortran vẫn là ngôn ngữ của các chương trình máy tính mạnh nhất thế giới: mã nguồn cho bảng xếp hạng TOP500 của các siêu máy và các bộ benchmark số thực SPEC đều được viết bằng Fortran. Trong các thư viện toán học cốt lõi như BLAS và LAPACK, Fortran vẫn là ngôn ngữ lựa chọn.

Bài viết này giới thiệu nguồn gốc của Fortran gắn với John Backus và IBM, lịch sử các phiên bản, những đặc điểm ngôn ngữ tạo nên lợi thế về hiệu năng, và cách biên dịch chạy thử.

Trang source listing chương trình FORTRAN IV dùng hệ WATFIV in trên giấy

Khởi đầu từ một bài toán của kỹ sư

John Backus đứng đầu một nhóm tại IBM vào cuối thập niên 1940, khi đó việc lập trình máy tính còn là việc viết mã máy bằng tay. Bản đặc tả nháp đầu tiên của FORTRAN ra đời tháng 11 năm 1954, và trình biên dịch đầu tiên chạy được vào tháng 4 năm 1957. FORTRAN I phát hành năm 1956, FORTRAN II năm 1958 và FORTRAN IV năm 1962.

Nghe tên hiểu được phần nào ý nghĩa: FORTRAN là viết tắt của cụm từ “Formula Translating”, dịch công thức. Ý tưởng cốt lõi rất thẳng — cho phép viết công thức toán học theo cú pháp gần với cách viết trên giấy, thay vì phải dịch tay từng phép tính sang mã máy.

Đóng góp của Backus còn vượt ra ngoài Fortran. Ông phát triển dạng ký hiệu Backus–Naur (BNF) để mô tả cú pháp của ngôn ngữ lập trình, và cũng là người đề xuất phương pháp lập trình cấp cao thay thế cho lập trình cấp thấp. Vì những đóng góp này, ông nhận giải Turing của ACM vào năm 1977 với lý do do chính giải ghi: những đóng góp sâu sắc, có ảnh hưởng và bền vững cho việc thiết kế các hệ thống lập trình cao cấp thực dụng, nổi bật qua công trình với FORTRAN. Ngoài ra ông còn nhận Giải thưởng Quốc gia về Khoa học năm 1975 và Giải W. W. McDowell năm 1967.

Lịch sử các phiên bản

Fortran trải qua nhiều thế hối tiêu chuẩn quốc tế, mỗi lần mở rộng đáng kể khả năng của ngôn ngữ.

Phiên bản Năm phát hành Điểm đổi mới chính
FORTRAN I 1956 Phiên bản đầu tiên, trình biên dịch cho IBM 704
FORTRAN II 1958 Bổ sung kiểu dữ liệu con số phức
FORTRAN IV 1962 Đánh dấu chuẩn trên thực tế cho nhiều thập kỷ
Fortran 90 1991 Module, kiểu dẫn xuất, thao tác trên toàn mảng
Fortran 95 1997 Cho phép câu lệnh end do và end where
Fortran 2003 2004 Trợ giúp lập trình hướng đối tượng
Fortran 2008 2010 Khối lệnh do concurrent, kiểu real128
Fortran 2018 2018 Tích hợp tiêu chuẩn tương thích C mở rộng

Fortran 77 là chuẩn ANSI năm 1978 và là bản phổ biến nhất trong lịch sử ngôn ngữ. Bản Fortran 90 năm 1991 đánh dấu bước ngoặt lớn, khiến Fortran thoát khỏi hình ảnh ngôn ngữ lỗi thời và trở thành một ngôn ngữ hiện đại.

Những đặc điểm tạo nên tốc độ

Sắp xếp bộ nhớ theo cột và chỉ số bắt đầu từ 1

Fortran lưu trữ mảng theo thứ tự cột, nghĩa là các phần tử liên tiếp trong một cột nằm cạnh nhau trong bộ nhớ. Người dùng Fortran chú ý: chỉ số mảng bắt đầu từ 1, khác với C, Java hay Python bắt đầu từ 0. Chi tiết này thường là nguyên nhân phổ biến nhất gây lỗi khi chuyển đổi mã nguồn giữa hai ngôn ngữ.

Thao tác trên toàn mảng

Fortran là một trong những ngôn ngữ lập trình mảng tiêu biểu, cùng với APL và J. Thay vì viết vòng lặp, bạn có thể gán và tính toán trực tiếp trên cả mảng:

X(1:N) = R(1:N) * COS(A(1:N))

Kiểu dữ liệu phức cũng được tích hợp sẵn, cho phép các phép toán phức phân số với cú pháp thuần túy mà không cần thư viện ngoài. Fortran có sẵn kiểu dữ liệu ký tự với độ dài tùy ý, và từ Fortran 90 trở đi hỗ trợ cú pháp độ dài trì hoãn.

Tấm thẻ đục lỗ Fortran cổ điển với các cột số cho phép lưu chương trình

Biên dịch tĩnh, ưu tiên tốc độ thay vì an toàn

Fortran là ngôn ngữ biên dịch tĩnh: toàn bộ chương trình được dịch sang mã máy trước khi chạy, nên không có chi phí quản lý bộ nhớ động hay thu gom rác. Bộ biên dịch có thể tích hợp tối ưu hoá vòng lặp, giao điểm ma trận và cả các biểu thức toán học phức tạp vào một chuỗi lệnh máy tối ưu. Kết quả là mã sinh ra gần với mã do lập trình viên viết tay.

Fortran trong hệ sinh thái khoa học

BLAS và LAPACK

Hai thư viện nền tảng của toán học tuyến tính đều dựa trên Fortran. Trang BLAS của Netlib cung cấp bản triển khai tham chiếu viết bằng Fortran 77, còn trang LAPACK ghi rõ tên tuổi: “LAPACK is written in Fortran 90”. Đây chính là nền móng cho các thư viện cấp cao hơn như SciPy và numpy mà Python sử dụng.

Bảng xếp hạng máy tính mạnh

Fortran là ngôn ngữ thống trị trong tính toán hiệu năng cao. Các chương trình dùng để xếp hạng trong bảng TOP500 của các siêu máy được viết bằng Fortran, và bộ benchmark số thực SPEC, gồm các phiên bản CFP2006 và CFP2017, cũng dựa trên Fortran.

Song song và tương tác với C

Trang chủ của cộng đồng Fortran tự mô tả ngôn ngữ này là một ngôn ngữ lập trình song song hiệu năng cao, với khả năng song song dạng coarray tích hợp sẵn và khả năng tương tác với C. Bản Fortran 2018 tích hợp tiêu chuẩn ISO/IEC TS 29113 mở rộng khả năng tương tác với C.

Trang chương trình Fortran do nhạc sĩ Iannis Xenakis viết tay

Chạy thử Fortran

Chương trình kinh điển nhất chỉ gồm ba dòng, khai báo chương trình, in ra thông điệp rồi kết thúc:

program helloworld
  print *, "Hello, World!"
end program helloworld

Trình biên dịch phổ biến nhất là GNU Fortran, tên lệnh gfortran, là bộ trước ngôn ngữ Fortran trong bộ GCC. Tài liệu chính thức nằm tại trang hướng dẫn gfortran, bao gồm cách gọi trình biên dịch, danh sách tuỳ chọn, các phần mở rộng và những điểm không tương thích. Ngoài GCC, LLVM có front-end tên flang cho Fortran.

Hãy nhớ rằng Fortran vẫn đang tiến hoá. Trang cổng thông tin chính thức của cộng đồng Fortran duy trì tài liệu cho bản Fortran hiện đại cùng bộ thực hành tốt, và nền tảng kiến thức nền mô tả chi tiết toàn bộ lịch sử kỹ thuật. Nếu bạn cần thư viện tuyến tính số thay vì tự viết, các bản triển khai BLAS tại Netlib là điểm khởi đầu quen thuộc.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Đệ quy là gì: cách lập trình bằng cách gọi lại chính hàm

Đệ quy là gì: cách lập trình bằng cách gọi lại chính hàm Đệ quy (recursion) là kỹ thuật lập trình trong đó một hàm tự gọi lại chính nó…

Xem thêm

Emacs là gì: Trình soạn thảo lập trình mở rộng bằng ngôn ngữ Lisp

Emacs là gì: Trình soạn thảo lập trình mở rộng bằng ngôn ngữ Lisp Emacs không đơn giản là một trình soạn thảo văn bản. Nó là một trình thông…

Xem thêm

Git là gì: hệ thống quản lý phiên bản mã nguồn phổ biến nhất

Git là gì: hệ thống quản lý phiên bản mã nguồn phổ biến nhất Git là hệ thống quản lý phiên bản phân tán, miễn phí và mã nguồn mở,…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất