Phiên bản của ngôn ngữ lập trình Fortran. Xác sống. Fortran

  • Dịch
Tôi không biết ngôn ngữ lập trình sẽ như thế nào vào năm 2000, nhưng tôi biết rằng nó sẽ được gọi là FORTRAN.
- Charles Anthony Richard Hoare, c. 1982

Fortran ngày nay hiếm khi được sử dụng trong ngành—nó được xếp thứ 28 trong danh sách các ngôn ngữ phổ biến. Nhưng Fortran vẫn ngôn ngữ chính cho các mô phỏng quy mô lớn hệ thống vật lý– nghĩa là, đối với những thứ như mô hình vật lý thiên văn của các ngôi sao và thiên hà (ví dụ Flash), động lực phân tử quy mô lớn, mã đếm cấu trúc electron (SIESTA), mô hình khí hậu, v.v. Trong lĩnh vực điện toán hiệu năng cao, trong đó mô phỏng số quy mô lớn là một tập hợp con, ngày nay chỉ có hai ngôn ngữ được sử dụng: C/C++ và “Fortran hiện đại” (Fortran 90/95/03/08). Các thư viện Open MPI phổ biến để song song hóa mã đã được phát triển cho hai ngôn ngữ này. Nói chung nếu bạn cần mã nhanh chạy trên nhiều bộ xử lý, bạn chỉ có hai lựa chọn. Fortran hiện đại có một tính năng gọi là "coarray", cho phép bạn làm việc với lập trình song song trực tiếp bằng ngôn ngữ. Coarrays xuất hiện trong phần mở rộng của Fortran 95 và sau đó được đưa vào Fortran 2008.

Việc các nhà vật lý sử dụng rộng rãi Fortran thường khiến các nhà khoa học máy tính và những người khác ngoài lĩnh vực này nhầm lẫn, những người cảm thấy rằng Fortran là một lỗi thời lịch sử.

Tôi muốn giải thích tại sao Fortran vẫn hữu ích. Tôi không khuyến khích sinh viên vật lý học Fortran - vì hầu hết trong số họ sẽ nghiên cứu, tốt hơn hết họ nên học C/C++ (hoặc gắn bó với Matlab/Octave/Python). Tôi muốn giải thích tại sao Fortran vẫn được sử dụng, và lập luận rằng đó không phải chỉ vì các nhà vật lý "đi sau đường cong" (mặc dù đôi khi trường hợp đó xảy ra - năm ngoái tôi thấy một sinh viên vật lý làm việc với mã Fortran 77, nhưng cả anh ấy và người quản lý của anh ấy đều chưa nghe thấy gì về Fortran 90). Các nhà khoa học máy tính nên coi sự thống trị của Fortran trong lĩnh vực điện toán số là một thách thức.

Trước khi đi sâu vào chủ đề, tôi muốn thảo luận về lịch sử vì khi mọi người nghe thấy từ “Fortran”, họ nghĩ ngay đến thẻ đục lỗ và mã có dòng đánh số. Đặc tả Fortran đầu tiên được viết vào năm 1954. Fortran sơ khai (sau đó tên của nó được viết bằng chữ in hoa, FORTRAN), theo tiêu chuẩn hiện đại, là một ngôn ngữ tuyệt vời, nhưng đó là một bước tiến đáng kinh ngạc so với chương trình hợp ngữ trước đó. FORTRAN thường được lập trình bằng cách sử dụng các thẻ đục lỗ, như Giáo sư Miriam Foreman của Đại học Stony Brook nhớ lại với vẻ không vui. Fortran đã có nhiều phiên bản, trong đó nổi tiếng nhất là các tiêu chuẩn 66, 77, 90, 95, 03 và 08.

Người ta thường nói rằng Fortran vẫn được sử dụng cho đến ngày nay vì tốc độ của nó. Nhưng nó có phải là nhanh nhất? Trang web benchmarksgame.alioth.debian.org so sánh C và Fortran trong một số bài kiểm tra giữa nhiều ngôn ngữ. Trong hầu hết các trường hợp, Fortran và C/C++ là nhanh nhất. Em yêu Lập trình viên Python thường chậm hơn 100 lần, nhưng đây là điều bình thường đối với mã được giải thích. Python không phù hợp với các phép tính số phức tạp nhưng lại tốt cho những phép tính khác. Điều thú vị là C/C++ vượt trội hơn Fortran trong tất cả trừ hai bài kiểm tra, mặc dù nhìn chung kết quả có khác nhau rất ít. Các bài kiểm tra mà Fortran giành chiến thắng là những bài kiểm tra “vật lý” nhất - đây là mô phỏng của hệ thống n vật thể và tính toán quang phổ. Kết quả phụ thuộc vào số lượng lõi xử lý, ví dụ: Fortran hơi kém C/C++ trên lõi tứ. Trong các bài kiểm tra, Fortran thua xa C/C++ dành phần lớn thời gian để đọc và ghi dữ liệu và Fortran nổi tiếng là chậm về mặt này.

Vì vậy, C/C++ nhanh như Fortran và đôi khi nhanh hơn một chút. Chúng tôi thắc mắc: "Tại sao các giáo sư vật lý cứ bảo sinh viên của họ sử dụng Fortran thay vì C/C++?"

Fortran có mã kế thừa

Nhờ lịch sử lâu đời của Fortran, không có gì đáng ngạc nhiên khi có hàng núi mã vật lý được viết trong đó. Các nhà vật lý cố gắng giảm thiểu thời gian lập trình để nếu họ tìm thấy mã sớm hơn, họ sẽ sử dụng nó. Ngay cả khi mã cũ không thể đọc được, tài liệu kém và không hiệu quả nhất, việc sử dụng mã cũ đã được kiểm tra vẫn phổ biến hơn là viết mã mới. Công việc của các nhà vật lý không phải là viết mã; họ đang cố gắng hiểu bản chất của thực tế. Các giáo sư có mã kế thừa trong tầm tay của họ (thường là mã họ đã viết cách đây hàng thập kỷ) và truyền nó cho sinh viên của họ. Điều này giúp họ tiết kiệm thời gian và loại bỏ sự không chắc chắn khỏi quá trình sửa lỗi.

Sinh viên vật lý thấy Fortran dễ học hơn C/C++

Tôi nghĩ Fortran dễ học hơn C/C++. Fortran 90 và C rất giống nhau, nhưng Fortran dễ viết hơn. C là một ngôn ngữ tương đối nguyên thủy, vì vậy các nhà vật lý chọn C/C++ đang tham gia vào lập trình hướng đối tượng. OOP có thể hữu ích, đặc biệt là trong các dự án phần mềm lớn, nhưng phải mất nhiều thời gian hơn để học. Bạn cần học những khái niệm trừu tượng như lớp và tính kế thừa. Mô hình OOP rất khác với mô hình thủ tục được sử dụng ở Fortran. Fortran dựa trên một mô hình thủ tục đơn giản, gần gũi hơn với những gì diễn ra bên trong máy tính. Khi bạn tối ưu hóa/vector hóa mã để tăng tốc độ, mô hình thủ tục sẽ dễ dàng làm việc hơn. Các nhà vật lý thường hiểu cách thức hoạt động của máy tính và suy nghĩ về mặt quá trình vật lý, ví dụ: truyền dữ liệu từ đĩa sang RAM và từ RAM sang bộ nhớ đệm của bộ xử lý. Họ khác với các nhà toán học, những người thích suy nghĩ theo các hàm trừu tượng và logic. Tư duy này cũng khác với tư duy hướng đối tượng. Theo quan điểm của tôi, việc tối ưu hóa mã OOP khó hơn mã thủ tục. Các đối tượng là những cấu trúc rất cồng kềnh so với cấu trúc dữ liệu mà các nhà vật lý ưa thích: mảng.

Đầu tiên dễ dàng: làm việc với Fortran với mảng

Mảng, hay ma trận như cách gọi của các nhà vật lý, là trung tâm của mọi phép tính vật lý. Trong Fortran 90+ bạn có thể tìm thấy nhiều tính năng để làm việc với chúng, tương tự như APL và Matlab/Octave. Mảng có thể được sao chép, nhân với một đại lượng vô hướng, nhân với nhau một cách rất trực quan:

A = B A = 3,24*B C = A*B B = exp(A) định mức = sqrt(sum(A**2))
Ở đây, A, B, C là các mảng có kích thước nào đó (giả sử là 10x10x10). C = A*B cung cấp cho chúng ta phép nhân ma trận theo phần tử nếu A và B có cùng kích thước. Để nhân ma trận, sử dụng C = matmul(A,B). Hầu hết tất cả các hàm bên trong của Fortran (Sin(), Exp(), Abs(), Floor(), v.v.) đều lấy mảng làm đối số, dẫn đến kết quả đơn giản và mã sạch. Đơn giản là không có mã tương tự trong C/C++. Trong triển khai C/C++ cơ bản, chỉ cần sao chép một mảng là cần phải chạy vòng lặp for trên tất cả các phần tử hoặc gọi một hàm thư viện. Nếu bạn đưa một mảng vào hàm thư viện sai trong C thì sẽ xảy ra lỗi. Việc phải sử dụng các thư viện thay vì các hàm nội bộ có nghĩa là mã kết quả sẽ không rõ ràng, di động hoặc dễ học.

Trong Fortran, quyền truy cập vào các phần tử mảng hoạt động thông qua cú pháp A đơn giản, trong khi trong C/C++, bạn cần viết A[x][y][z]. Các phần tử của mảng bắt đầu từ 1, tương ứng với ý tưởng của các nhà vật lý về ma trận, và trong mảng C/C++, việc đánh số bắt đầu từ 0. Dưới đây là một số hàm khác để làm việc với mảng trong Fortran.

A = (/ i , i = 1.100 /) B = A(1:100:10) C(10:) = B
Đầu tiên, vectơ A được tạo thông qua vòng lặp do ngụ ý, còn được gọi là hàm tạo mảng. Sau đó, một vectơ B được tạo, bao gồm mọi phần tử thứ 10 của A, sử dụng bước 10. Cuối cùng, mảng B được sao chép sang mảng C, bắt đầu từ phần tử thứ 10. Fortran hỗ trợ khai báo mảng với chỉ số 0 hoặc âm:

Độ chính xác gấp đôi, kích thước (-1:10) :: myArray
Chỉ số âm ban đầu trông có vẻ ngớ ngẩn nhưng tôi đã nghe nói về tính hữu dụng của chúng - ví dụ: hãy tưởng tượng điều này diện tích bổ sungđể đăng bất kỳ lời giải thích nào. Fortran cũng hỗ trợ các chỉ mục vector. Ví dụ: bạn có thể chuyển các phần tử 1,5 và 7 từ N x 1 mảng A sang 3 x 1 mảng B:

Chỉ số dưới = (/ 1, 5, 7 /) B = A(chỉ số dưới)
Fortran hỗ trợ tất cả các mặt nạ mảng chức năng nội bộ. Ví dụ: nếu chúng ta cần tính logarit của tất cả các phần tử ma trận lớn hơn 0, chúng ta sử dụng:

Log_of_A = log(A, mặt nạ= A .gt. 0)
Hoặc chúng ta có thể đặt lại mọi thứ về 0 trong một dòng yếu tố tiêu cực mảng:

Ở đâu (my_array .lt. 0,0) my_array = 0,0
Fortran giúp dễ dàng phân bổ và phân bổ mảng một cách linh hoạt. Ví dụ: để đặt một mảng hai chiều:

Thực, thứ nguyên(:,:), có thể phân bổ:: name_of_array phân bổ(name_of_array(xdim, ydim))
Trong C/C++, điều này yêu cầu mục sau:

Int **mảng; mảng = malloc(nrows * sizeof(double *)); vì(i = 0; tôi< nrows; i++){ array[i] = malloc(ncolumns * sizeof(double)); }
Để giải phóng một mảng ở Fortran

Phân bổ (name_of_array)
Trong C/C++ cho việc này

Với (i = 0; tôi< nrows; i++){ free(array[i]); } free(array);

Dễ dàng thứ hai: không cần phải lo lắng về con trỏ và phân bổ bộ nhớ

Trong các ngôn ngữ như C/C++, tất cả các biến đều được truyền theo giá trị, ngoại trừ các mảng được truyền bằng tham chiếu. Nhưng trong nhiều trường hợp, việc truyền một mảng theo giá trị sẽ có ý nghĩa hơn. Ví dụ: giả sử dữ liệu bao gồm vị trí của 100 phân tử ở các khoảng thời gian khác nhau. Chúng ta cần phân tích chuyển động của một phân tử. Chúng ta lấy một lát của mảng (mảng con) tương ứng với tọa độ của các nguyên tử trong phân tử này và truyền cho hàm. Trong đó chúng ta sẽ xử lý các phân tích phức tạp của mảng con được chuyển. Nếu chúng ta chuyển nó bằng tham chiếu, dữ liệu được truyền sẽ không nằm trong một hàng trong bộ nhớ. Do tính chất của việc truy cập bộ nhớ nên làm việc với mảng như vậy sẽ chậm. Nếu chúng ta chuyển nó theo giá trị, chúng ta sẽ tạo một mảng mới trong bộ nhớ, nằm trong một hàng. Trước sự hài lòng của các nhà vật lý, trình biên dịch sẽ đảm nhận tất cả công việc tối ưu hóa bộ nhớ.

Trong Fortran, các biến thường được truyền theo tham chiếu thay vì theo giá trị. Dưới mui xe, trình biên dịch Fortran tự động tối ưu hóa quá trình truyền của chúng để đạt hiệu quả. Theo quan điểm của một giáo sư, trình biên dịch nên được tin cậy hơn sinh viên khi nói đến việc tối ưu hóa bộ nhớ! Kết quả là các nhà vật lý hiếm khi sử dụng con trỏ, mặc dù chúng có sẵn trong Fortran-90+.

Một vài ví dụ nữa về sự khác biệt giữa Fortran và C

Fortran có một số tính năng để kiểm soát trình biên dịch khi tìm kiếm lỗi và tối ưu hóa. Lỗi trong mã có thể được phát hiện ở giai đoạn biên dịch chứ không phải ở giai đoạn thực thi. Ví dụ: bất kỳ biến nào cũng có thể được khai báo dưới dạng tham số, nghĩa là hằng số.

Độ chính xác gấp đôi, tham số:: hbar = 6,63e-34
Nếu một tham số trong mã thay đổi, trình biên dịch sẽ trả về lỗi. Trong C cái này được gọi là const

Const kép hbar = 6,63e-34
Vấn đề là const real khác với thực đơn giản. Nếu một hàm chấp nhận real nhận được const real thì nó sẽ trả về lỗi. Thật dễ dàng để tưởng tượng điều này có thể dẫn đến các vấn đề về khả năng tương tác trong mã của bạn như thế nào.

Fortran cũng có một đặc tả ý định cho trình biên dịch biết đối số được truyền cho hàm là đối số đầu vào, đối số đầu ra hay cả đối số đầu vào và đầu ra. Điều này giúp trình biên dịch tối ưu hóa mã và tăng khả năng đọc cũng như độ tin cậy của mã.

Fortran có các tính năng khác được sử dụng với tần số khác nhau. Ví dụ, trong Fortran 95 có thể khai báo các hàm bằng công cụ sửa đổi thuần túy. Hàm như vậy không có tác dụng phụ - nó chỉ thay đổi các đối số và không thay đổi các biến toàn cục. Trường hợp đặc biệt của hàm như vậy là hàm cơ bản, hàm này chấp nhận và trả về các đại lượng vô hướng. Nó được sử dụng để xử lý các phần tử mảng. Biết rằng một hàm là thuần túy hoặc nguyên tố cho phép trình biên dịch thực hiện các tối ưu hóa bổ sung, đặc biệt là khi song song hóa mã.

Những gì mong đợi trong tương lai?

Theo tính toán khoa học, Fortran vẫn là ngôn ngữ chính và sẽ không sớm biến mất. Trong một cuộc khảo sát với khách tham dự Hội nghị Siêu máy tính 2014 sử dụng ngôn ngữ này, 100% trong số họ nói rằng họ sẽ sử dụng nó trong 5 năm tới. Cuộc khảo sát cũng cho thấy 90% đã sử dụng kết hợp Fortran và C. Dự đoán sự gia tăng trong việc kết hợp các ngôn ngữ này, những người tạo ra đặc tả Fortran 2015 đã đưa vào nhiều tính năng hơn cho khả năng tương tác mã. Mã Fortran ngày càng được gọi từ mã Python. Điều mà các nhà khoa học máy tính chỉ trích việc sử dụng Fortran không hiểu là ngôn ngữ này vẫn phù hợp duy nhất với cái được đặt theo tên của nó - FORmula TRANSlation, nghĩa là chuyển đổi các công thức vật lý thành mã. Nhiều người trong số họ không nhận ra rằng ngôn ngữ này đang phát triển và liên tục bổ sung các tính năng mới.

Gọi Fortran 90+ hiện đại là cũ cũng giống như gọi C++ là cũ, do C được phát triển vào năm 1973. Mặt khác, ngay cả tiêu chuẩn Fortran 2008 mới nhất cũng tương thích ngược với Fortran 77 và hầu hết Fortran 66. Do đó, việc phát triển ngôn ngữ đang gặp phải những khó khăn nhất định. Gần đây, các nhà nghiên cứu tại MIT đã quyết định khắc phục những khó khăn này bằng cách phát triển ngôn ngữ HPC từ đầu có tên Julia, được phát hành lần đầu tiên vào năm 2012. Liệu Julia có thay thế Fortran hay không vẫn còn phải chờ xem. Trong mọi trường hợp, tôi nghi ngờ rằng điều này sẽ xảy ra trong một thời gian rất dài.

thẻ:

  • pháo đài
  • lập trình khoa học
Thêm thẻ

Lần đầu tiên tôi nghe nói về Fortran là vào thời thơ ấu từ cha. Ông kể rằng vào những năm 70, ông đã phải xếp hàng hàng giờ trước chiếc máy tính duy nhất ở trường đại học để chạy một đoạn mã thô sơ bằng thẻ đục lỗ. Tôi thành thật thừa nhận rằng, từ đó đến nay (mặc dù tôi đã được đào tạo về kỹ thuật) tôi hoàn toàn tin tưởng rằng Fortran vẫn ở đâu đó xa xôi ngoài kia, trong một thế giới mà vật chứa thông tin là những hộp bìa cứng kỳ lạ có lỗ, và máy tính quá đắt tiền, đến mức được coi là một điểm thu hút thực sự.

Hãy tưởng tượng sự ngạc nhiên của tôi khi tôi biết rằng Fortran không chỉ vẫn được sử dụng ở đâu đó mà nó đang được phát triển, có nhu cầu và vẫn còn phù hợp. Nếu cho đến thời điểm này bạn vẫn tin rằng Fortran đã chết từ lâu, thì đây là một số điều dành cho bạn: sự thật thú vị tại sao anh ấy vẫn đi bộ?

Sống sót sau ít nhất 10 bản cập nhật

Trên thực tế, chiếc Fortran mà bạn nghe nói từ các giáo viên ở trường phổ thông hoặc đại học đã được tạo ra từ năm 1954 đến năm 1957. Nó đã đi vào lịch sử với tư cách là ngôn ngữ cấp cao được triển khai đầy đủ đầu tiên, tạo nên một bước đột phá nhỏ trong thế giới CNTT, nhưng về bản chất thì nó không mấy tiện lợi và chức năng. IBM bắt đầu "hoàn thiện" nó gần như ngay lập tức, vào năm 1958, FORTRAN II đã xuất hiện và song song đó là FORTRAN III. Nhưng nó ít nhiều có vẻ ngoài tươm tất chỉ vào những năm 70, khi những chiếc máy khá di động xuất hiện, khi tiêu chuẩn IBM FORTRAN IV chính thức được phát triển và FORTRAN 66 xuất hiện với các vòng lặp, nhãn, câu lệnh điều kiện, lệnh đầu vào/đầu ra, v.v. theo tiêu chuẩn hiện đại khả năng nguyên thủy.

Phiên bản mới nhất xuất hiện vào năm 2010, tên của nó là Fortran 2008 (như bạn có thể thấy, trong quá trình lịch sử, tên này đã không còn được viết riêng bằng chữ in hoa), điểm đặc biệt của nó là tất cả các loại phép tính song song, trong đó có tác động tích cực đến cả tốc độ xử lý dữ liệu và kích thước của mảng được xử lý. Ngoài ra, việc phát hành Fortran 2015 được lên kế hoạch cho năm 2018. Từ thông báo, nó sẽ cải thiện khả năng tích hợp với C và cũng loại bỏ những thiếu sót hiện tại.

Trong số 30 ngôn ngữ lập trình phổ biến nhất

Đến nay, 0,743% yêu cầu ở công cụ tìm kiếm Về ngôn ngữ lập trình, nó được dành riêng cho Fortran. Để bạn biết điều này thú vị như thế nào, hãy tưởng tượng rằng các ngôn ngữ như Lisp, Scala, Clojure, LabVIEW, Haskell, Rust và VHDL được xếp hạng thấp hơn.

Có thể hoạt động trên Android (và hơn thế nữa)

Trải qua lịch sử lâu dài, các trình biên dịch cho Fortana đã được phát triển bởi các công ty như IBM, Microsoft, Compaq, HP, Oracle, nhờ đó ngôn ngữ này ngày nay tương thích với Windows, Mac OS và Linux. Hơn nữa, giờ đây bạn có thể mang theo một ứng dụng biên dịch tiện lợi nhờ ứng dụng CCTools dành cho Android. Bạn có thể chạy trình biên dịch trên iPhone của mình, nhưng trong trường hợp này bạn cần thực hiện một chút phép thuật.

Cạnh tranh với MATLAB

Cho đến nay, văn bản này vẫn chưa nói lên điều chính, đó là phạm vi của Fortran. Vì vậy, đây là ngôn ngữ có nhu cầu trong khoa học và kỹ thuật, được sử dụng toàn bộ hoặc một phần để dự báo thời tiết, hải dương học, động lực phân tử và phân tích địa chấn. Nhìn chung, đây là ngôn ngữ “Khoa học dữ liệu” thực sự kể từ thời điểm máy tính lần đầu tiên được bán đại trà.

Cần phải thừa nhận rằng Fortran nổi tiếng một phần nhờ di sản của nó. Trong những năm qua, hầu như không có sự cạnh tranh, ngôn ngữ này đã có được một lượng lớn khách hàng, thư viện và tiện ích bổ sung. Ngoài ra, mỗi phiên bản tiếp theo của Fortran chắc chắn sẽ hỗ trợ các phiên bản trước. Vì vậy, đã nảy sinh một tình huống không có yếu tố quan trọng nào để các nhà khoa học, kỹ sư từ bỏ liên minh này.

Trên thực tế, đối thủ cạnh tranh chính của Fortran ngày nay là MATLAB, phổ biến hơn, nhiều chức năng hơn và tiện lợi hơn. Tuy nhiên, MATLAB có những hạn chế nghiêm ngặt đối với phần mềm được sử dụng, khá tốn kém và trong hầu hết các trường hợp đơn giản là không cần thiết.

Có một tương lai tương đối tươi sáng

Tất nhiên, chúng ta không thể dự đoán được điều gì sẽ xảy ra trong 10-20 năm tới và thế giới CNTT sẽ thay đổi như thế nào trong thời gian này. Tuy nhiên, nếu bạn xem xét các đối thủ cạnh tranh mới có thể có của Fortran (chẳng hạn như cờ vây), nhược điểm chính- phổ cập hóa. Nghĩa là, những người tạo ra Fortran rất nhanh chóng xác định được đối tượng mục tiêu là các nhà khoa học, ý kiến ​​​​và mong muốn của họ được ưu tiên. Vì vậy, thật khó để tưởng tượng rằng ngày mai họ sẽ từ bỏ “đơn hàng đặc biệt” của mình vì một xu hướng thời trang nào đó. Trên cơ sở đó, chúng ta có thể nói rằng một thế hệ Fortran khác đang mạnh dạn ra đi.

Và sau đó họ sẽ phát hành một phiên bản mới.

Tôi được nhắc viết bài đăng đầu tiên của mình ở đây, trong đó vt4a2h gợi ý sử dụng C++ để học. Vâng, nhiều bản sao đã bị phá vỡ về chủ đề này.

Tôi, có lẽ giống như hầu hết học sinh trên đất mẹ rộng lớn của chúng ta, bắt đầu hiểu những điều cơ bản thông qua Màn hinh xanh, nhưng không phải cái chết mà là Turbo Pascal 7.0. Tất nhiên là có Basic, thứ mà tôi gặp lần đầu trong tuổi mẫu giáo trên máy tính "Điện tử" của Liên Xô. Sau đó, nó có vẻ giống như một trình soạn thảo văn bản kỳ lạ, bởi vì một chiếc máy tính qua con mắt của một đứa trẻ được tạo ra để chơi game. Tuy nhiên, khi đến học viện, tôi đã làm quen với ngôn ngữ Fortran, sau khi tìm hiểu về nó, tôi vẫn thắc mắc tại sao nó không được sử dụng để giảng dạy.

Vâng, nhiều người sẽ nói rằng ngôn ngữ này đã chết, không tương ứng với thực tế hiện đại và những cuốn sách giáo khoa có tựa đề như trong ảnh chỉ khiến bạn mỉm cười. Tôi sẽ cố gắng giải thích tại sao ngôn ngữ này lại tuyệt vời đến vậy và tại sao tôi lại giới thiệu nó làm ngôn ngữ đầu tiên. Nếu bạn quan tâm, chào mừng bạn đến với mèo.

Tôi tin rằng nền tảng cho những kiến ​​thức cơ bản về lập trình nên được hình thành trong những năm học, ít nhất là ở trường trung học. Ngay cả khi trong cuộc sống máy tính chỉ được sử dụng để gõ văn bản trong Word hoặc để giao tiếp bằng trong mạng xã hội, kiến ​​thức tối thiểu về thuật toán là gì và cách cấu trúc một chuỗi hành động để đạt được kết quả mong muốn ít nhất sẽ không gây hại cho đứa trẻ ở tuổi trưởng thành, nhưng rất có thể sẽ giúp hình thành một tư duy đặc biệt.

Để các bài học khoa học máy tính trở thành niềm vui chứ không phải là cơn ác mộng, học sinh phải hiểu mình đang làm gì, làm như thế nào và tại sao mọi chuyện lại diễn ra theo cách này mà không phải cách khác. Xét cho cùng, về bản chất, bạn cần truyền đạt chính xác thông tin về chu trình và toán tử điều kiện để một người có thể tự viết chương trình. Đồng thời, cú pháp của ngôn ngữ càng đơn giản thì càng dễ hiểu logic viết mã. Nếu một người học cách sáng tác thuật toán đúng, thì để lập trình bằng các ngôn ngữ khác, anh ta chỉ cần học cú pháp của ngôn ngữ này là đã có nền tảng.

Fortran có gì đặc biệt?

Chúng ta hãy quay lại lịch sử hình thành ngôn ngữ này. Nó xuất hiện vào những năm 50 xa xôi của thế kỷ trước, khi máy tính còn rất lớn, có ít lập trình viên, khoa học máy tính không được dạy ở trường và thường bị coi là một thứ giả khoa học. Điều cần thiết là một ngôn ngữ đơn giản có thể giúp các kỹ sư và nhà khoa học “đưa” các công thức viết trên giấy vào máy tính, thậm chí thông qua thẻ đục lỗ.

Do đó tên của ngôn ngữ: con la Trần slator hoặc "người dịch công thức". Những thứ kia. Ban đầu, ngôn ngữ này nhắm đến những người không được đào tạo đặc biệt, có nghĩa là nó phải đơn giản nhất có thể.

Vâng, những người sáng tạo đã thành công nhờ sự đơn giản. Chương trình cổ điển đầu tiên trông như thế này:

Chương trình viết(*,*) "Xin chào thế giới!" kết thúc
Cú pháp thậm chí còn một chút đơn giản hơn Pascal, không cần đặt " ở cuối dòng ; " hoặc " : " trước dấu bằng. Hơn nữa, những người có kiến ​​thức tối thiểu về tiếng Anh cũng có thể hiểu được ý nghĩa chương trình đơn giản nhất sẽ không khó khăn

Ở đây tôi muốn lưu ý rằng Fortran có một số sửa đổi về tiêu chuẩn, những tiêu chuẩn chính là 77 và 90 (trong khi vẫn duy trì tính liên tục). 77 Fortran thực sự rất cổ điển, có giới hạn về độ dài dòng và phải thụt đầu dòng vào đầu dòng, điều này có thể gây sốc văn hóa cho một ứng viên lập trình viên trẻ. Không phải tự nhiên mà các chương trình viết bằng Fortran 77 lại nhận được cái tên ngắn gọn “Mã Brezhnev” từ miệng bạn tôi. Vì vậy, tất cả văn bản của tôi đề cập đến tiêu chuẩn ngôn ngữ 90 và mới hơn.

Ví dụ, tôi sẽ đưa ra một đoạn mã để tính tổng các số nguyên không âm từ 1 đến n, được nhập từ bàn phím, do nghiên cứu sinh của tôi viết khi dạy cô ấy lập trình từ đầu. Đó là nơi tôi đã trải nghiệm việc dạy Fortran như ngôn ngữ đầu tiên. Tôi hy vọng rằng điều này có lợi cho cô ấy và thí nghiệm của tôi đã thành công. Cô ấy đã học ít nhất những điều cơ bản trong một vài lớp học, trong đó lớp đầu tiên là bài giảng về ngôn ngữ.

Số chương trình không có nghĩa gì cả! Biến số nguyên n,i,s ! Phần thân của chisla s=0 write (*,*) "Enter n" đọc (*,*) n if (n.le.0) then write (*,*) "Negative or zero" else do i=1,n s =s+i end viết (*,*) "Sum=", s end nếu end
Dễ dàng nhận thấy rằng cách chúng ta suy nghĩ chính là cách chúng ta viết code. Về nguyên tắc, không có khó khăn nào có thể phát sinh đối với học sinh. Tất nhiên, người đọc chú ý sẽ hỏi không và hai dấu hoa thị trong ngoặc đơn được phân tách bằng dấu phẩy là gì. không ngầm định nào cho chúng ta biết rằng chúng ta đang chỉ định rõ ràng loại biến, trong khi nếu không có mục nhập này, trình biên dịch sẽ tự đoán loại đó. Dấu hoa thị đầu tiên có nghĩa là đầu vào và đầu ra xuất hiện trên màn hình và dấu hoa thị thứ hai cho biết định dạng đầu vào và đầu ra được phát hiện tự động. Trên thực tế, chương trình Fortran trông không phức tạp hơn đoạn mã được viết ở trên.

Còn môi trường phần mềm thì sao?

Trong trường học và bất kỳ cơ quan chính phủ nào, câu hỏi thường đặt ra về phần mềm, đặc biệt là về việc cấp phép cho nó. Bởi vì tiền không được phân bổ đặc biệt cho những nhu cầu này. Ít nhất ở thời của tôi, đây là một vấn đề, có thể bây giờ tình hình đã thay đổi tốt hơn.

Viết chương trình bằng Fortran Bất cứ điều gì sẽ làm soạn thảo văn bản. Nếu bạn muốn tô sáng cú pháp, bạn có thể sử dụng Notepad++ (chỉ hỗ trợ cú pháp chuẩn 77) hoặc SublimeText. Chúng ta đã viết chương trình, chúng ta sẽ biên dịch nó như thế nào? Mọi thứ ở đây đều đơn giản, bạn có thể sử dụng GNU Fotran miễn phí. Nếu bạn định sử dụng nó cho mục đích phi thương mại, thì bạn cũng có thể sử dụng trình biên dịch của Intel, trình biên dịch này được tối ưu hóa tốt cho các bộ xử lý cùng tên và đi kèm với IDE yêu cầu tối thiểu. Những thứ kia. Ngưỡng đầu vào rất ưu đãi.

Theo nhiều người dùng, môi trường phát triển tốt nhất cho Fortran vẫn là Compaq Visual Fortran 6.6, phiên bản mới nhất được phát hành vào đầu những năm 2000. Tại sao lại xảy ra trường hợp môi trường dựa trên Visual Studio 6.0, chạy tối đa trên Windows XP 32 bit mà không cần tambourine và có giới hạn về bộ nhớ sử dụng, lại trở nên phổ biến như vậy đối với người dùng Fortran. Câu trả lời được thể hiện trong hình dưới đây.

Đây là Compaq Array Visualizer, một công cụ rất thuận tiện để hiển thị các mảng 1, 2 và 3 chiều trong quá trình gỡ lỗi chương trình trực tiếp từ trình gỡ lỗi. Như người ta nói, đã thử một lần rồi nên tôi ăn ngay. Thực tế là Fortran hiện được sử dụng chủ yếu trong khoa học (sẽ được thảo luận sau), đặc biệt là trong lĩnh vực mà tôi đang đề cập, cụ thể là trong vật lý khí quyển. Khi gỡ lỗi chương trình, các mảng biểu thị các trường khí tượng khác nhau, chẳng hạn như nhiệt độ, áp suất, tốc độ gió. Việc tìm ra lỗi trong các trường đồ họa dễ dàng hơn nhiều so với trong một tập hợp số, đặc biệt vì bạn thường biết trường đó trông như thế nào nên các lỗi hiển nhiên sẽ bị loại bỏ ngay lập tức.

Thật không may, tất cả sự phát triển trên trình biên dịch đã được chuyển từ Compaq sang Intel. Intel ban đầu hỗ trợ Array Visualizer, tuy nhiên, những phiên bản đó đã phản ánh mờ nhạt sản phẩm của Compaq, việc làm việc với chúng không còn thuận tiện như trước, nhưng ít nhất chức năng tối thiểu vẫn được duy trì. Than ôi, Intel đã ngừng phát triển các phiên bản mới của Array Visualizer, đặt dấu chấm hết cho công cụ tiện lợi nhất này. Đó là lý do tại sao phần lớn cộng đồng Fortran viết chương trình và gỡ lỗi chúng trong Compaq Visual Fortran trên Windows và chạy các tính toán chiến đấu trên các máy chủ chạy Linux sử dụng trình biên dịch Intel. Intel, vui lòng lắng nghe lời cầu xin của người dùng, trả lại một công cụ bình thường để hiển thị mảng cho trình gỡ lỗi của bạn!

Vị trí của Fortran trong thế giới hiện đại

Và bây giờ chúng ta đến với chủ đề thường gây ra cuộc thảo luận sôi nổi với các đồng nghiệp sử dụng Matlab của tôi, những người cho rằng ngôn ngữ hiếm được mô tả trong bài đăng này chẳng có ích gì. Ở đây tôi không đồng ý với họ. Thực tế là Fortran trước đây đã được sử dụng trong kỹ thuật hoặc tính toán khoa học, và do đó theo thời gian, nó có được nhiều thư viện và mã chương trình làm sẵn để giải quyết một vấn đề cụ thể.

Mã thực sự được truyền từ thế hệ này sang thế hệ khác và cũng được ghi chép đầy đủ. Bạn có thể tìm thấy nhiều giải pháp làm sẵn các phương trình toán vật lý, đại số tuyến tính (ở đây cần lưu ý việc thực hiện thành công khi làm việc với ma trận), tích phân và phương trình vi phân và nhiều, nhiều hơn nữa. Có lẽ rất khó để tìm ra một vấn đề trong lĩnh vực khoa học vật lý và toán học mà thuật toán trong Fortran không được triển khai. Và nếu chúng ta tính đến khả năng tối ưu hóa tuyệt vời của trình biên dịch Intel cho bộ xử lý Intel, thì khả năng hỗ trợ tính toán song song trên các cụm hiệu suất cao, có thể thấy rõ lý do tại sao ngôn ngữ này lại chiếm vị trí đầu tiên xứng đáng trong cộng đồng khoa học. Tôi nghĩ bạn có thể tìm thấy trình biên dịch Fortran được cài đặt trên bất kỳ siêu máy tính nào.

Hầu hết các mô hình nghiêm túc, ít nhất là trong lĩnh vực vật lý khí quyển, đều được viết bằng Fortran. Vâng, vâng, dự báo thời tiết mà mọi người thỉnh thoảng quan tâm, có được thông qua tính toán của các mô hình được viết bằng ngôn ngữ này. Hơn nữa, ngôn ngữ không hề trì trệ mà không ngừng hoàn thiện. Do đó, sau các tiêu chuẩn 77 và 90 được mô tả trước đó, các phiên bản mới 95, 2003, 2008 đã xuất hiện, hỗ trợ cho các tiêu chuẩn này đã được đưa vào các trình biên dịch hiện tại. Phiên bản mới nhất Fortran phần nào làm mới ngôn ngữ đã được thử nghiệm theo thời gian, hỗ trợ phong cách hiện đại, bổ sung thêm lập trình hướng đối tượng, sự vắng mặt của ngôn ngữ này gần như là con át chủ bài quan trọng nhất của những người phản đối ngôn ngữ này. Hơn nữa, Tập đoàn Portland đã phát hành Trình biên dịch PGI CUDA Fortran, cho phép tính toán song song cao trên thẻ video. Vì vậy, bệnh nhân còn hơn cả sự sống, điều đó có nghĩa là các lập trình viên Fortran vẫn đang có nhu cầu.

Thay vì lời bạt

Và bây giờ tôi muốn quay lại chủ đề ban đầu về việc học lập trình và cố gắng trình bày ngắn gọn những ưu điểm chính của Fortran khi chọn nó làm ngôn ngữ đầu tiên.
  • Fortran rất dễ học, cú pháp có thể hiểu được đối với người chưa qua đào tạo. Khi bạn đã biết những điều cơ bản, thật dễ dàng để học lại bất kỳ ngôn ngữ nào khác.
  • Bộ công cụ miễn phí cho phép bạn không nhận những câu hỏi không cần thiết từ chủ sở hữu bản quyền.
  • Ngôn ngữ này quen thuộc với giáo viên vì nó đã tồn tại từ lâu và giáo viên của chúng tôi chủ yếu là đại diện của thế hệ cũ.
  • Được phân phối rộng rãi trên toàn thế giới và là một kho tàng của tất cả các loại thư viện.
  • Được chuẩn hóa, đa nền tảng và tương thích với các phiên bản trước đó.
  • Hữu ích cho sinh viên các ngành kỹ thuật, đặc biệt là vật lý và toán học, do nó tập trung vào các tính toán khoa học và kỹ thuật.
  • Có liên quan và có nhu cầu cho đến ngày nay.
Vậy tại sao không phải là Fortran?

Ngôn ngữ lập trình Fortran được sử dụng chủ yếu cho tính toán khoa học. Được phát minh vào năm 1954, nó ngôn ngữ cổ nhất lập trình cấp cao, tiếp theo là Lisp (1958), Algol (1958) và COBOL (1959). Số lượng thư viện khoa học được viết bằng Fortran và việc tạo ra các trình biên dịch-dịch thuật đặc biệt cho phép ngôn ngữ này được sử dụng ngày nay. Ngoài ra, nhiều máy tính đã được tạo ra để vector hóa, bộ đồng xử lý, song song, xen kẽ ngôn ngữ này để sử dụng trong sản xuất công nghiệp thế giới hiện đại.

John Backus, một kỹ sư vô tuyến của IBM, đã xuất bản các bài báo vào năm 1954 có tựa đề "Báo cáo sơ bộ", "Thông số kỹ thuật cho Hệ thống dịch chuyển Matmal Transmula của IBM", từ đó nảy sinh ra thuật ngữ FORTRAN. Sau đó, toàn bộ nhóm do ông lãnh đạo phải mất thêm hai năm nỗ lực để viết trình biên dịch đầu tiên cho ngôn ngữ lập trình Fortran (25.000 dòng cho IBM 704).

Tên của ngôn ngữ ban đầu được viết bằng chữ in hoa FORTRAN và được sử dụng để chỉ định các phiên bản ngôn ngữ cho đến Fortran 77, trái ngược với phiên bản miễn phí cú pháp bắt đầu từ Fortran 90. Trong tiêu chuẩn Fortran 77 chữ thường không phải là một phần của ngôn ngữ, nhưng hầu hết các trình biên dịch đều hỗ trợ chúng ngoài tiêu chuẩn.

Ngày nay, ngôn ngữ lập trình Fortran là ngôn ngữ lập trình chiếm ưu thế được sử dụng trong các ứng dụng kỹ thuật. Vì vậy, điều quan trọng là các kỹ sư tốt nghiệp có thể đọc và sửa đổi mã Fortran. Đôi khi, những người được gọi là chuyên gia dự đoán rằng ngôn ngữ này sẽ mất đi sự phổ biến và sẽ sớm ngừng sử dụng hoàn toàn.

Những dự đoán này luôn thất bại. Fortran là ngôn ngữ lập trình máy tính lâu đời nhất trong lịch sử. Một trong những lý do chính khiến ngôn ngữ lập trình Fortran tồn tại và sẽ tồn tại là quán tính phần mềm. Sau khi một công ty đã chi nhiều nguồn lực và có thể là hàng triệu đô la cho một sản phẩm phần mềm, thì khó có khả năng họ sẽ dịch phần mềm đó sang ngôn ngữ khác.

Ưu điểm chính của Fortran là nó được tiêu chuẩn hóa bởi các cơ quan quốc tế ANSI và ISO. Do đó, nếu một chương trình được viết bằng ANSI, nó sẽ chạy trên bất kỳ máy tính nào có trình biên dịch Fortran 77. Đây là thông tin quan trọng. Vì vậy, các chương trình của ngôn ngữ lập trình hướng đối tượng Fortran tồn tại ở nhiều dạng khác nhau. thiết bị phần mềm.

Các giai đoạn tạo nền tảng ngôn ngữ:

  1. Năm 1954-1957, trình biên dịch đầu tiên được phát triển từ đầu. Vào thời đó không có "ngôn ngữ cấp cao" (=HLL), hầu hết các hệ điều hành rất đơn giản và bộ nhớ nhỏ, khoảng 16 Kb. Trình biên dịch đầu tiên chạy trên IBM 704. Ngôn ngữ HLL này hiệu quả hơn nhiều so với lập trình hợp ngữ và rất phổ biến vào thời đó.
  2. FORTRAN II được xuất bản vào năm 1958. Cùng năm đó, FORTRAN III được phát triển nhưng chưa bao giờ được đưa vào sản xuất rộng rãi.
  3. Năm 1961, FORTRAN IV được thành lập. Nó chứa những cải tiến như việc triển khai các câu lệnh CHUNG và TƯƠNG ĐƯƠNG.
  4. Năm 1962, ủy ban ASA bắt đầu phát triển tiêu chuẩn cho ngôn ngữ lập trình hướng đối tượng Fortran. Điều này cho phép người bán sử dụng nó trong mọi máy tính mới. Và thực tế này đã khiến HLL trở nên phổ biến hơn, ngôn ngữ này đã có sẵn trên hệ thống Apple và TRS80.
  5. Năm 1967, FORTRAN 66, tiêu chuẩn HLL đầu tiên trên thế giới, được phát hành. Việc xuất bản tiêu chuẩn có nghĩa là ngôn ngữ này được triển khai rộng rãi hơn bất kỳ ngôn ngữ nào khác. Vào giữa những năm 1970, hầu như mọi máy tính, máy tính mini hoặc máy tính lớn đều được trang bị ngôn ngữ FORTRAN tiêu chuẩn 66. Ngôn ngữ này sử dụng các câu lệnh if, câu lệnh goto và các chương trình spagethi. Kiểu lập trình có cấu trúc này trở nên phổ biến vào những năm 60 và 70.
  6. Đặc biệt, "Fortran" tồn tại trên thẻ đục lỗ, với hệ thống FMS, tối ưu hóa cách bố trí các nguồn của nó cho đến khi Fortran 90 giới thiệu cú pháp "miễn phí". Trong đó, mã mảng Fortran bắt đầu từ cột thứ 7 và không vượt quá 72 nghìn ký tự.

Cũng cần lưu ý rằng trước Fortran 90, khoảng trắng không có ý nghĩa gì giữa cột thứ 7 và cột thứ 72. Do đó chu trình "DO I = 1,5" cũng có thể được viết là "DOI = 1,5". Mặt khác, “DO I = 1,5” tương đương với “DOI = 1,5”.

Nhiều mã công nghiệpđược viết trong thư viện Nastran, NAG và IMSL-Fortran. Khả năng tương thích của phiên bản mới với phiên bản trước là rất quan trọng. Vì lý do này, Fortran 90 hoàn toàn tương thích với Fortran 77. Tuy nhiên, phiên bản tiếp theo tiêu chuẩn đã đưa ra sự không tương thích.

Các ngôn ngữ nâng cao hơn Fortran 90 và Fortran 95 ngay sau đó đã được cập nhật theo tiêu chuẩn Fortran-2003 hiện tại. Mặc dù thực tế là các trình biên dịch hiện đại hoạt động không giới hạn trong tất cả các phiên bản Windows hiện tại và thậm chí hỗ trợ bộ xử lý 64-bit. Trong khi đó, các nhà sản xuất đã nhận ra xu hướng của thời đại và đang cung cấp các trình biên dịch cho Linux dưới dạng ngôn ngữ lập trình hướng đối tượng Actor Fortran.

Điều kiện tiên quyết để sử dụng ngôn ngữ lập trình

Cần phải hiểu rằng Fortran vẫn là ngôn ngữ lập trình được sử dụng rộng rãi và chủ yếu được sử dụng trong lĩnh vực khám phá. Các ứng dụng cổ điển, ví dụ như trong vật lý hoặc kỹ thuật, nơi có phạm vi rộng và phức tạp Tính toán toán học. Chúng rất hữu ích do có các thư viện toán học phong phú dành cho các trình biên dịch khác nhau. Tóm lại, chúng ta có thể nói rằng ngày nay ngôn ngữ Fortran vẫn được sử dụng vì một số lý do:

  • Có sẵn nhiều thư viện chức năng được phát triển trong nhiều năm.
  • Sự sẵn có của phần mềm ở Fortran, đòi hỏi rất nhiều tài nguyên quan trọngđể phát triển khi chuyển sang ngôn ngữ khác được coi là quá tốn kém.
  • Có sẵn các trình biên dịch mạnh mẽ với các hàm Fortran tích hợp tạo ra rất nhanh Các tập tin thực thi.
  • Ngôn ngữ này dễ tiếp cận hơn đối với một nhà phát minh chưa có khóa học máy tính chuyên ngành.

Nhiều chương trình khoa học hiện được viết bằng C và C++, với các trình biên dịch có sẵn trên hầu hết các máy. Các ngôn ngữ biên dịch khác đôi khi được sử dụng cho tính toán khoa học và đặc biệt cho các chương trình như Scilab hoặc Matlab. Cái sau cũng bao gồm các thư viện BLAS và LAPACK được phát triển trong Lập trình Fortran. Matlab ban đầu là một chương trình Fortran được phân phối cho các trường đại học và trung tâm nghiên cứu.

Mặc dù Tom Lahey hiện là trình biên dịch chung "duy nhất", Lahey Computer Systems vẫn tiếp tục được nhiều lập trình viên sử dụng. Lahey đã làm việc với Fujitsu được vài năm, Lahey tập trung vào bộ phân tích cú pháp Fortran và Fujitsu về bộ tạo mã. Bộ biên dịch hiện tại dành cho Windows có tên là Lahey Fujitsu Fortran 95 (LF95) và có sẵn ở phiên bản khác nhau, một số trong đó còn tích hợp với Visual Studio .NET 2003.

Ngoài ra còn có một phiên bản rẻ tiền của LF95 Express không có IDE riêng. Phiên bản hiện tại là 7.1. trên Linux được gọi bởi trình biên dịch Lahey/Fujitsu Fortran 95 v6.2 dành cho Linux và có sẵn ở hai phiên bản khác nhau. Ví dụ: phiên bản Pro bao gồm khả năng tương thích OpenMP v2.0, công cụ đồ họa Winteracter Starter Kit đơn giản, thư viện toán học và thư viện khoa học Fujitsu 2 thói quen.

Một nhà sản xuất khác là Absoft. Trình biên dịch và C++ không chỉ tồn tại cho Windows và Linux mà còn cho OS X trên Macintosh. Những trình biên dịch này được các nhà phát triển cần hoặc muốn hỗ trợ cả ba nền tảng quan tâm. Thật không may, Absoft phân biệt giữa phiên bản 32 bit và 64 bit cho Linux, hiện đang sử dụng phiên bản 10.0 của Fortran 95 cho Linux 64 bit.

Tương đối mới trên thị trường là Bộ biên dịch EKOPath. Điều này bao gồm các trình biên dịch C++ và môi trường phát triển Fortran cho Linux, cũng có sẵn riêng biệt và chủ yếu nhắm đến người dùng AMD 64-bit. Nó cũng chạy trên Intel EM64T. Microsoft cũng từng nỗ lực tìm kiếm “thị trường giá rẻ” cho Fortran và giới thiệu Microsoft Powerstation ra thị trường.

Thị trường có thể quá nhỏ đối với gã khổng lồ phần mềm, nhưng Digital đã tiếp quản một số mã vào năm 1997 và sử dụng kinh nghiệm của mình với các trình biên dịch Digital Unix và OpenVMS. Đây là sự ra đời của Digital Visual Fortran vẫn rất thành công. Tại một thời điểm nào đó, Digital sau đó chuyển sang Compaq, trình biên dịch được phát triển thành phiên bản hiện tại của Compaq Visual Fortran (CVF) v6.6.

Ngoài nền tảng 32-bit "bình thường", còn có nhiều trình biên dịch 64-bit khác nhau, chẳng hạn như Intel Itanium và Intel EM64T. Mặc dù chúng không “khẩn cấp” về phạm vi cung cấp nhưng chúng luôn sẵn sàng cho tải xuống miễn phí thông qua hệ thống web hỗ trợ Intel Thủ tướng.

Sau một lần đăng ký hơi rườm rà, bạn có thể sử dụng nó trong một năm, với các bản cập nhật mới vài tuần một lần. Ngay cả các phiên bản cũ hơn sẽ vẫn có sẵn.

Chương trình Fortran là một chuỗi các dòng văn bản. Văn bản phải tuân theo một cú pháp cụ thể. Ví dụ: một hình tròn bán kính r, diện tích c.

Chương trình này đọc bán kính thực và xác định diện tích hình tròn có bán kính r:

"Bán kính r:"đọc (*, *) r;

diện tích = 3,14159 * r * r;

viết (*, *) "Diện tích =";

Các dòng bắt đầu bằng "C" là các nhận xét và không có mục đích nào khác ngoài việc làm cho chương trình dễ đọc hơn đối với mọi người. Ban đầu, tất cả các chương trình của Fortran đều được viết bằng chữ in hoa. Hầu hết các lập trình viên hiện nay đều viết chữ thường vì nó dễ đọc hơn.

Chương trình Fortran thường bao gồm một chương trình hoặc trình điều khiển chính và một số chương trình con, thủ tục hoặc chương trình con. Cấu trúc chương trình chính:

  • tên của chương trình;
  • tờ khai;
  • các câu lệnh;
  • dừng lại;
  • kết thúc.

Chữ in nghiêng không nên được coi là văn bản theo nghĩa đen mà là một mô tả chung. Câu lệnh dừng là tùy chọn và có vẻ không cần thiết vì dù sao thì chương trình cũng sẽ dừng khi đến cuối, nhưng bạn nên luôn kết thúc chương trình bằng câu lệnh dừng để nhấn mạnh rằng luồng thực thi đang bị chấm dứt.

Quy tắc vị trí cột

Fortran 77 không phải là ngôn ngữ định dạng miễn phí nhưng có bộ quy tắc rất nghiêm ngặt về định dạng mã nguồn. Hầu hết quy tắc quan trọng quy tắc sắp xếp các cột:

  • Đại tá. 1: Để trống hoặc “c” hoặc “*” dành cho nhận xét.
  • Đại tá. 2-5: dấu toán tử.
  • Đại tá. 6: tiếp tục dòng trước.
  • Đại tá. 7-72: tuyên bố.
  • Đại tá. 73- 80: Số thứ tự.

Dòng Fortran bắt đầu bằng chữ cái "c" hoặc dấu hoa thị ở cột đầu tiên là một nhận xét. Bình luận có thể xuất hiện ở bất kỳ đâu trong chương trình. Được viết tốt, chúng rất quan trọng đối với khả năng đọc của chương trình. Mã thương mại Các tệp Fortran thường chứa khoảng 50% bình luận. Bạn cũng có thể gặp các chương trình sử dụng Dấu chấm than(!). Điều này rất không chuẩn ở Fortran 77, nhưng được cho phép ở Fortran 90.

Dấu chấm than có thể xuất hiện ở bất cứ đâu trên một dòng. Đôi khi một câu lệnh không vừa trên một dòng, khi đó bạn có thể ngắt câu lệnh thành hai hoặc nhiều dòng và sử dụng dấu tiếp nối ở vị trí.

  1. C23456789 - Điều này thể hiện vị trí của cột.
  2. "C" - câu lệnh tiếp theo đi qua hai lĩnh vực dòng vật lý.
  3. Diện tích = 3,14159265358979+ * r * r.

Khoảng trống bị bỏ qua bắt đầu bằng Fortran 77. Do đó, nếu bạn loại bỏ tất cả khoảng trắng trong Fortran 77, chương trình vẫn đúng về mặt cú pháp, mặc dù người vận hành gần như không thể đọc được.

Tên biến trong Fortran bao gồm 1-6 ký tự, được chọn từ chữ a-z và các số 0-9. Ký tự đầu tiên phải là một chữ cái. Fortran 90 cho phép tên biến có độ dài tùy ý. Fortran 77 không phân biệt chữ hoa và chữ thường, trên thực tế, nó giả định tất cả đầu vào là chữ hoa. Tuy nhiên, hầu hết tất cả các trình biên dịch F 77 đều chấp nhận chữ thường. Mỗi biến phải được xác định trong một khai báo. Điều này đặt loại biến. Danh sách biến phổ biến nhất là:

  • số nguyên;
  • thực tế;
  • độ chính xác gấp đôi;
  • tổ hợp;
  • hợp lý;
  • tính cách.

Danh sách các biến phải bao gồm các tên được phân tách bằng dấu phẩy. Mỗi biến phải được khai báo chính xác một lần. Nếu một biến không được khai báo, F 77 sử dụng một bộ quy tắc ngầm để thiết lập kiểu. Điều này có nghĩa là tất cả các biến bắt đầu bằng chữ cái "in" đều là số nguyên và tất cả các biến khác là số thực. Nhiều chương trình F 77 cũ hơn sử dụng các quy tắc ngầm này, nhưng người lập trình không nên làm như vậy vì khả năng xảy ra lỗi chương trình tăng lên đáng kể nếu họ khai báo các biến không nhất quán.

Fortran 77 chỉ có một loại biến số nguyên. Các số nguyên thường được lưu trữ dưới dạng biến 32 bit (4 byte). Do đó, tất cả các biến số nguyên phải lấy giá trị trong khoảng [-m, m], trong đó m xấp xỉ 2 * 10 9.

F 77 có hai loại biến số dấu phẩy động khác nhau, được gọi là độ chính xác kép thực. Một số phép tính số đòi hỏi rất độ chính xác cao và nên sử dụng độ chính xác gấp đôi. Thông thường giá trị thực là biến 4 byte và độ chính xác gấp đôi- 8 byte, nhưng tùy máy.

Các phiên bản không chuẩn của Fortran sử dụng cú pháp real*8 để chỉ các biến dấu phẩy động 8 byte. Một số hằng số xuất hiện nhiều lần trong một chương trình. Vì vậy, chỉ nên xác định chúng một lần vào lúc bắt đầu chương trình. Toán tử tham số được sử dụng cho việc này. Nó cũng làm cho các chương trình dễ đọc hơn. Ví dụ, một chương trình tính diện tích hình tròn nên được viết như thế này.

Cú pháp toán tử tham số (tên = hằng, ..., tên = hằng). Quy tắc cho toán tử tham số:

  1. Một "biến" được xác định trong câu lệnh tham số không phải là một biến mà là một hằng số có giá trị không bao giờ thay đổi.
  2. "Biến" có thể hiển thị tối đa một câu lệnh tham số.
  3. Tham số toán tử phải đứng trước toán tử thực thi đầu tiên

Một số lý do chính đáng để sử dụng tham số - giúp giảm lỗi chính tả, dễ dàng thay đổi một hằng số xuất hiện nhiều lần trong chương trình.

biểu thức Boolean chỉ có thể có giá trị.TRUE. Hay sai. và có thể được hình thành bằng cách so sánh sử dụng các toán tử quan hệ.

Bạn không thể sử dụng các ký tự như "<» или «=» для сравнения в F 77, но можно использовать правильную двухбуквенную аббревиатуру, заключенную точками. Однако такие символы разрешены в Fortran 90.

Các biểu thức logic có thể được kết hợp với các toán tử logic “AND”, “OR”, “NOT”, có ý nghĩa rõ ràng. Giá trị chân lý có thể được lưu trữ trong các biến boolean. Bài tập tương tự như bài toán số học.

Ví dụ: logic a, ba = .TRUE.b = a .AND. 3.LT. 2/5

Thứ tự ưu tiên là rất quan trọng. Quy tắc là các biểu thức số học được đánh giá trước tiên, sau đó đến các toán tử quan hệ và cuối cùng là các toán tử logic. Vì vậy, b sẽ được gán .FALSE. Trong ví dụ trên, các biến boolean hiếm khi được sử dụng trong Fortran, nhưng chúng thường được sử dụng trong các câu lệnh có điều kiện như câu lệnh "if".

Hằng số và mục đích

Hình thức đơn giản nhất của biểu thức là hằng số. Có 6 loại hằng tương ứng với 6 kiểu dữ liệu. Dưới đây là một số hằng số nguyên: 10-10032767+15

Hằng số thực: 1.0-0.252.0E63.333E-1.

Ký hiệu điện tử có nghĩa là nhân hằng số với 10 lũy thừa theo sau chữ "E". Do đó, 2.0E6 là hai triệu và 3.333E-1 là khoảng một phần ba.Đối với các hằng số lớn hơn giá trị thực tế lớn nhất cho phép hoặc yêu cầu độ chính xác cao thì nên sử dụng độ chính xác gấp đôi. Ký hiệu này giống như đối với hằng số thực, ngoại trừ "E" được thay thế bằng "D".

Ví dụ: 2.0D-11D99.

Ở đây 2.0D-1 có độ chính xác gấp đôi với 1/5, trong khi 1D99 là 1 theo sau là 99 số 0.

Loại tiếp theo là hằng số phức tạp. Chúng được biểu thị bằng một cặp hằng số (số nguyên hoặc số thực), được phân tách bằng dấu phẩy và được đặt trong dấu ngoặc đơn.

Ví dụ như: (2, -3)(1,9,9E-1). Số đầu tiên biểu thị phần thực và số thứ hai biểu thị phần ảo.

Loại thứ năm là hằng số logic. Chúng chỉ có thể có một trong hai nghĩa:

Xin lưu ý rằng các dấu chấm chứa chữ cái là bắt buộc phải được viết.

Loại cuối cùng là hằng ký tự. Chúng thường được sử dụng dưới dạng một mảng các ký tự được gọi là chuỗi. Chúng bao gồm một chuỗi ký tự tùy ý được đặt trong dấu nháy đơn (dấu nháy đơn):

"Sao cũng được!"

"Đó là một ngày tốt đẹp"

Các hằng chuỗi và ký tự có phân biệt chữ hoa chữ thường. Vấn đề phát sinh nếu bạn muốn có một dấu nháy đơn thực sự trong chính dòng đó. Trong trường hợp này, bạn cần nhân đôi dấu nháy đơn: "It" "s a nice day", nghĩa là "Thật là một ngày tuyệt vời"

Câu lệnh có điều kiện là thành phần quan trọng của bất kỳ ngôn ngữ lập trình nào. Câu lệnh phổ biến nhất ở Fortran là câu lệnh "if", thực tế có nhiều dạng.

Đơn giản nhất là biểu thức logic “if” trong mô tả Fortran: câu lệnh thực thi if (biểu thức logic).

Điều này nên được viết trên một dòng, ví dụ như khi xác định giá trị tuyệt đối của x:

nếu (x .LT. 0) x = -x

Nếu có nhiều hơn một câu lệnh được thực thi trong một "if", thì nên sử dụng cú pháp sau: if (biểu thức logic) thenstatementsendif.

Luồng thực hiện từ trên xuống dưới. Các biểu thức điều kiện được đánh giá tuần tự cho đến khi tìm thấy giá trị thực. Sau đó, mã thích hợp sẽ được thực thi và điều khiển chuyển sang câu lệnh tiếp theo sau chữ "if" kết thúc.

Các câu lệnh if có thể được lồng nhau ở nhiều cấp độ. Để đảm bảo khả năng đọc, điều quan trọng là sử dụng thụt lề thích hợp. Đây là một ví dụ:

if (x .GT. 0) thenif (x .GE. y) thenwrite(*,*) "x là dương và x >= y"elsewrite(*,*) "x là dương nhưng x< y"endifelseif (x .LT. 0) thenwrite(*,*) "x is negative"elsewrite(*,*) "x is zero"endif

Các lập trình viên nên tránh lồng nhiều cấp độ của câu lệnh "if" vì sẽ khó theo dõi.

Bạn có thể sử dụng bất kỳ máy trạm Unix nào có trình biên dịch F 77. Các lập trình viên có kinh nghiệm khuyên bạn nên sử dụng Sun hoặc Dec.

Chương trình Fortran bao gồm văn bản thuần túy tuân theo các quy tắc cú pháp nhất định. Đây được gọi là mã nguồn. Lập trình viên sử dụng trình soạn thảo để viết mã nguồn. Các trình soạn thảo phổ biến nhất trên Unix là emacs và vi, nhưng chúng có thể hơi phức tạp đối với người dùng mới làm quen. Bạn có thể sử dụng trình soạn thảo đơn giản hơn, chẳng hạn như xedit, chạy trong cửa sổ X.

Sau khi chương trình Fortran được viết, chương trình đó sẽ được lưu trong một tệp có phần mở rộng “.f” hoặc “.for” và chương trình được chuyển đổi thành dạng máy có thể đọc được. Điều này được thực hiện bằng cách sử dụng một chương trình đặc biệt gọi là trình biên dịch. Trình biên dịch Fortran 77 thường được gọi là f77. Theo mặc định, đầu ra biên dịch được đặt tên hơi khó hiểu là "a.out", nhưng bạn có thể chọn một tên khác nếu cần. Để chạy chương trình, chỉ cần nhập tên của tệp thực thi, ví dụ: "a.out". Trình biên dịch dịch mã nguồn thành mã đối tượng và trình liên kết hoặc trình tải dịch nó thành một tệp thực thi. Như bạn có thể thấy, quy trình này hoàn toàn không phức tạp và bất kỳ người dùng nào cũng có thể truy cập được.

Mô phỏng là một trong những phương pháp sản xuất được sử dụng phổ biến nhất và các hệ thống khác được tìm thấy trong các nhà máy hiện đại. Hầu hết các mô hình mô phỏng được xây dựng bằng ngôn ngữ lập trình hướng đối tượng Actor Fortran hoặc gói phần mềm mô phỏng được viết bằng ngôn ngữ truyền thống. Những công cụ này có những hạn chế của chúng. Công nghệ hướng đối tượng đã được áp dụng ngày càng nhiều trong nhiều lĩnh vực và hứa hẹn một cách tiếp cận linh hoạt và hiệu quả hơn để mô hình hóa các hệ thống kinh doanh.

Lập trình Simula Fortran được so sánh với ngôn ngữ lập trình khoa học thông thường có tên FORTRAN. Một mô hình mô phỏng quân sự điển hình được lập trình trong cả SIMULA và FORTRAN. Chương trình SIMULA ngắn hơn 24% so với phiên bản FORTRAN.

Phiên bản SIMULA cũng đơn giản hơn và cho hình ảnh tốt hơn về mô hình được mô phỏng. Mặt khác, thời gian thực hiện các hoạt động sản xuất nhanh hơn 64% với ngôn ngữ lập trình hướng đối tượng Simula Fortran. Cân nhắc những ưu và nhược điểm cho thấy SIMULA sẽ là một phần mềm ngày càng có lợi nhuận cao hơn, với chi phí nhân sự cao hơn và chi phí máy tính thấp hơn.

CUDA cho thấy cách các nhà phát triển ứng dụng hiệu suất cao có thể khai thác sức mạnh của GPU bằng cách sử dụng Fortran, một ngôn ngữ phổ biến để thử nghiệm hiệu suất siêu máy tính và tính toán khoa học. Các tác giả không thừa nhận bất kỳ kinh nghiệm tính toán song song nào trước đó và chỉ đề cập đến những điều cơ bản cũng như các phương pháp hay nhất. Hiệu suất tính toán của GPU sử dụng CUDA Fortran được hỗ trợ bởi kiến ​​trúc GPU mục tiêu.

CUDA Fortran dành cho các nhà khoa học và kỹ sư sẽ xác định các phần có tính toán chuyên sâu của mã và sửa đổi mã để quản lý dữ liệu, xử lý song song và tối ưu hóa hiệu suất. Tất cả điều này được thực hiện ở Fortran mà không cần phải viết lại chương trình sang ngôn ngữ khác. Mỗi khái niệm đều được minh họa bằng các ví dụ thực tế để bạn có thể đánh giá ngay hiệu suất của mã.

Có lẽ một ngày nào đó tập đoàn toàn cầu sẽ “toàn cầu hóa” và quyết định rằng Fortran không còn cần thiết nữa, nhưng không phải bây giờ. Nhờ khả năng hiện tại của Fortran hiện đại, nhiều lập trình viên và nhà khoa học coi đây là tương lai. Ngoài ra, trên thế giới có đủ nhà sản xuất sống bằng cách phát triển các trình biên dịch hiện đại và kiếm tiền tốt từ quá trình này.

Năm.) Tên Fortran là tên viết tắt của con la TRẦN slator, nghĩa là một trình dịch công thức. Fortran được sử dụng rộng rãi chủ yếu cho tính toán khoa học và kỹ thuật. Một trong những ưu điểm của Fortran hiện đại là số lượng lớn các chương trình và thư viện chương trình con được viết trong đó (xem ví dụ: Kho lưu trữ Netlib). Ví dụ, trong số các nhà khoa học, có một câu nói rằng bất kỳ vấn đề toán học nào cũng đều có lời giải trong Fortran, và thực sự, trong số hàng nghìn gói Fortran, bạn có thể tìm thấy một gói để nhân, một gói để giải các phương trình tích phân phức tạp, và rất nhiều người khác. Một số gói như vậy đã được tạo ra trong nhiều thập kỷ và vẫn phổ biến (chủ yếu trong cộng đồng khoa học) cho đến ngày nay.

Hầu hết các thư viện này thực sự là tài sản của nhân loại: chúng có sẵn trong mã nguồn, được ghi chép đầy đủ, được sửa lỗi và rất hiệu quả. Do đó, việc thay đổi sẽ rất tốn kém chứ đừng nói đến việc viết lại chúng bằng các ngôn ngữ lập trình khác, mặc dù thực tế là người ta thường xuyên cố gắng tự động chuyển đổi mã FORTRAN sang các ngôn ngữ lập trình hiện đại.

Fortran hiện đại (Fortran 95 và Fortran 2003) đã có được các tính năng cần thiết để lập trình hiệu quả cho các kiến ​​trúc máy tính mới; cho phép sử dụng các công nghệ lập trình hiện đại, đặc biệt là .

Tiêu chuẩn

Fortran là một ngôn ngữ được tiêu chuẩn hóa cao, đó là lý do tại sao nó có thể dễ dàng di chuyển sang nhiều nền tảng khác nhau. Có một số tiêu chuẩn ngôn ngữ quốc tế:

  • FORTRAN IV(hay còn gọi là - FORTRAN 66) (1966)
  • FORTRAN 77 (1978)
    Nhiều cải tiến: kiểu dữ liệu văn bản và các hàm xử lý nó, chặn các câu lệnh IF, ELSE IF, ELSE, END IF, INCLUDE, v.v.
  • Pháo đài 90 (1991)
    Tiêu chuẩn ngôn ngữ đã được sửa đổi đáng kể. Một định dạng miễn phí để viết mã đã được giới thiệu. Các mô tả bổ sung đã xuất hiện cho IMPLICIT NONE, TYPE, ALLOCATABLE, POINTER, TARGET, NAMELIST; cấu trúc điều khiển DO ... END DO, DO WHILE, CYCLE, SELECT CASE, WHERE; làm việc với bộ nhớ động (ALOCATE, DEALLOCATE, NULLIFY); các thành phần phần mềm MODULE, RIÊNG TƯ, CÔNG KHAI, CHỨA, GIAO DIỆN, SỬ DỤNG, MỤC ĐÍCH. Các hàm dựng sẵn mới đã xuất hiện, chủ yếu để làm việc với mảng.
    Các yếu tố xuất hiện trong ngôn ngữ.
    Một danh sách riêng gồm các tính năng ngôn ngữ lỗi thời dự định sẽ bị loại bỏ trong tương lai đã được công bố.
  • Pháo đài 95 (1997)
    Sửa chữa tiêu chuẩn trước đó.
  • Fortran 2003 (2004)
    Phát triển hơn nữa hỗ trợ ngôn ngữ. Tương tác với hệ điều hành.

Trình biên dịch

Đặc điểm và cấu trúc của chương trình

Fortran có một bộ hàm toán học tích hợp khá lớn và hỗ trợ làm việc với số nguyên, số thực và số phức có độ chính xác cao. Phương tiện biểu đạt của ngôn ngữ ban đầu rất kém vì Fortran là một trong những ngôn ngữ cấp cao đầu tiên. Sau đó, nhiều cấu trúc từ vựng đặc trưng của lập trình cấu trúc, chức năng và thậm chí hướng đối tượng đã được thêm vào Fortran.

Cấu trúc chương trình ban đầu được định hướng theo đầu vào từ

và có một số thuộc tính đặc biệt thuận tiện cho trường hợp này. Do đó, cột thứ nhất dùng để đánh dấu văn bản là một nhận xét (với ký hiệu C), từ thứ 1 đến thứ 5 là vùng nhãn và từ thứ 7 đến thứ 72 là văn bản thực tế của toán tử hoặc nhận xét. Các cột từ 73 đến 80 có thể được sử dụng để đánh số các lá bài (để khôi phục một bộ bài nằm rải rác ngẫu nhiên) hoặc để đưa ra một nhận xét ngắn gọn; người dịch đã bỏ qua chúng. Nếu văn bản của toán tử không vừa với khoảng trống được phân bổ (từ cột thứ 7 đến cột thứ 72), một dấu hiệu tiếp nối sẽ được đặt ở cột thứ 6 của thẻ tiếp theo, và sau đó toán tử tiếp tục trên đó. Không thể đặt hai hoặc nhiều hơn trên một dòng (bản đồ). Khi thẻ đục lỗ đã trở thành lịch sử, những ưu điểm này trở thành những bất tiện nghiêm trọng.

Đó là lý do tại sao, trong tiêu chuẩn Fortran, bắt đầu từ Fortran 90, ngoài định dạng cố định của văn bản nguồn, một định dạng miễn phí đã xuất hiện, không quy định vị trí dòng và cũng cho phép bạn viết nhiều toán tử trên mỗi dòng. Sự ra đời của định dạng miễn phí đã giúp tạo mã rõ ràng như mã được tạo bằng các ngôn ngữ lập trình hiện đại khác như hoặc .

Một loại “thẻ gọi” của Fortran cũ là số lượng nhãn khổng lồ được sử dụng cả trong toán tử nhảy vô điều kiện và toán tử vòng lặp cũng như trong toán tử mô tả đầu vào/đầu ra định dạng FORMAT. Số lượng lớn các nhãn và câu lệnh GOTO thường khiến các chương trình của Fortran trở nên khó hiểu.

Chính trải nghiệm tiêu cực này đã trở thành lý do tại sao trong một số ngôn ngữ lập trình hiện đại (ví dụ: ) nhãn và các toán tử nhảy vô điều kiện liên quan hoàn toàn không có.

Tuy nhiên, Fortran hiện đại loại bỏ sự dư thừa của nhãn bằng cách giới thiệu các toán tử như DO ... END DO, DO WHILE, SELECT CASE

Ngoài ra, các tính năng tích cực của Fortran hiện đại bao gồm một số lượng lớn các hoạt động tích hợp với mảng và hỗ trợ linh hoạt cho các mảng có chỉ mục bất thường. Ví dụ:

Real,dimension(:,:) :: V ... phân bổ(V(-2:2,0:10)) ! Phân bổ bộ nhớ cho một mảng có chỉ mục có thể! thay đổi từ -2 đến 2 (chỉ số đầu tiên) ! và từ 0 đến 10 - giây... V(2,2:3)=V(-1:0,1) ! Xoay một phần của mảng write(*,*)V(1,:) ! In tất cả các phần tử của mảng V có chỉ số đầu tiên là 1. deallocate(V)

Chương trình ví dụ

Chương trình "Xin chào thế giới!"

Định dạng cố định (khoảng trắng ở vị trí dòng 1 đến 6 được đánh dấu bằng ký tự “ˆ”):

^^ ^^ ^^ CHƯƠNG TRÌNH xin chào ^^^^PRINT*, "Xin chào thế giới!" ^^ ^^ ^^ KẾT THÚC

Định dạng miễn phí:

Chương trình in xin chào *, "Xin chào thế giới!" kết thúc

Ghi chú.

  • Câu lệnh PROGRAM là tùy chọn. Nói đúng ra, câu lệnh bắt buộc duy nhất trong chương trình Fortran là câu lệnh END.
  • Việc lựa chọn chữ hoa hay chữ thường để viết các câu lệnh chương trình là tùy ý. Theo quan điểm của các tiêu chuẩn ngôn ngữ Fortran hiện đại, tập hợp các chữ cái viết hoa và tập hợp các chữ cái viết thường trùng khớp khi viết các toán tử ngôn ngữ.