2009-05-29 38 views
7

Như bạn có thể biết, Fortran là ngôn ngữ dành cho máy tính khoa học. tuy nhiên, hạt nhân của ngôn ngữ bậc cao nổi tiếng nhất cho máy tính khoa học đã được viết bằng C thay vì Fortran. Tại sao?Tại sao Matlab được viết bằng C thay vì Fortran?

+0

Điều này không có ý nghĩa - tiêu đề và câu hỏi khác nhau. Bạn có nghĩa là tại sao matlab được viết bằng C hoặc tại sao Fortran được viết bằng C? – Fortyrunner

+0

Tôi nghĩ rằng nó khá rõ ràng ông có nghĩa là trước đây. Fortran là một ngôn ngữ cấp thấp và thực tế là trước C, vì vậy sau này không có ý nghĩa gì cả. – Noldorin

+0

Tôi nghĩ rằng hạt nhân của MATLAB nên đã được viết bằng Fortran không C giả sử Fortran là tốt hơn cho máy tính khoa học. –

Trả lời

20

Để trả lời câu hỏi ban đầu của bạn: Matlab ban đầu được viết bằng Fortran. Nhưng một trong những điều đầu tiên mà tác giả của Matlab, Cleve Moler và đối tác của ông đã làm trong năm 1983 là phải viết lại toàn bộ ứng dụng Matlab trong C:

Jack nhỏ từ bỏ công việc của mình tại công ty tư vấn và mua một máy tính xách tay COMPAQ mới tại Sears. Máy chỉ có 256 KB bộ nhớ và không có đĩa cứng; Jack đã trao đổi đĩa mềm 5-1/4-inch để biên dịch các chương trình . Jack và Steve mất một năm và một nửa để viết lại MATLAB trong C, thêm các tính năng mới mà họ đã có envi- được đánh giá cao.(The Growth of MATLAB and The MathWorks over Two Decades)

Tôi nghĩ câu hỏi phù hợp hơn cho hôm nay là hỏi: tại sao họ chuyển sang C vào năm 1983?

Tôi đoán C có thể có một số tính năng nhất định mà Fortran không có và do đó việc chuyển đổi không còn cần thiết và vì lợi ích bảo trì mã.

Một sát nhân tính năng bị thiếu trong Fortran77 là phân bổ bộ nhớ động (Phân bổ bộ nhớ động chỉ được thêm vào Fortran90). Nhận được khoảng đơn giới hạn sẽ là một công cụ xử lý khủng khiếp theo ý kiến ​​của tôi.

EDIT:

Câu trả lời của dmckee có giải thích tuyệt vời về lý do sử dụng Fortran77 sẽ gây đau đớn.

+2

@Trevor Boyd Smith, Cleve Moler hoặc Steve Moler? Đoạn đầu tiên của câu trả lời của bạn đọc rằng Cleve Moler và đối tác của ông đã viết lại MatLab, nhưng trong câu nói, Jack và Steve nói. – systemovich

3

Bạn có thể tìm thấy một số thông tin về nguồn gốc của Matlab bằng cách xem video trên trang web của họ, cụ thể là trên page của Nhà khoa học trưởng, Cleve Moler.

10

Tôi muốn vượt qua vòng loại câu trả lời này với các tuyên bố sau - Tôi không biết gì về Fortran hoặc Matlab

Tuy nhiên tôi nghĩ rằng bạn gần như trả lời câu hỏi của riêng bạn trong câu hỏi của bạn.

Tại sao bạn không sử dụng ngôn ngữ khoa học để viết hạt nhân. Bạn sẽ sử dụng ngôn ngữ thích hợp nhất cho nhiệm vụ trong tầm tay. Một hạt nhân sẽ được viết tốt nhất trong C vì nó phù hợp hơn để làm việc với các tác vụ mức thấp như nhân (làm việc với quản lý bộ nhớ, v.v.)

Một hạt nhân không phải là một ứng dụng khoa học.

Một lần nữa, tôi có thể hoàn toàn không được đánh dấu nhưng tôi nghĩ đó là câu trả lời rất hợp lý.

+6

Lưu ý nhanh: hạt nhân của gói phần mềm tính toán không giống với hạt nhân của hệ điều hành. Trong trường hợp đầu tiên, hạt nhân là công cụ tính toán cơ bản mà người dùng tương tác với thông qua giao diện người dùng cấp cao hơn (ví dụ: cửa sổ lệnh MATLAB hoặc giao diện sổ ghi chép Mathematica). – las3rjock

11

Sự hiểu biết của tôi là Matlab được viết bằng một loạt các ngôn ngữ, bao gồm nhưng không giới hạn ở C, FORTRAN, Java và Matlab.

Tôi tin rằng nó sử dụng các thư viện giống tốt nhất đằng sau hậu trường, bao gồm LAPACK (FORTRAN), FFTW (C) và có thể nhiều hơn nữa.

Tôi nghĩ phiên bản gốc là FORTRAN tinh khiết, nhưng khi nó trở nên sáng bóng hơn và thương mại thì họ không ngại sử dụng ngôn ngữ phù hợp cho mỗi thành phần. Tôi không đổ lỗi cho họ - Tôi ghét phải viết một trình phân tích cú pháp hoặc GUI trong FORTRAN!

+1

Tôi không muốn viết một trình phân tích cú pháp ngay cả trong C. Nhưng có, bạn chính xác - các phiên bản đầu tiên được viết bằng fortran, sau đó họ chuyển sang C (viết lại hoàn toàn điều) tại một số điểm. – Rook

+0

Tất nhiên, ngày nay có rất nhiều thứ trong đó. – Rook

+0

+1 cho độ chính xác. Matlab chạy trên Java JRE. Có lẽ phần lớn trong số đó là tệp .m hoặc trong Java, w/ngoại trừ các công cụ quan trọng về thời gian được chứng minh là nhanh hơn khi được triển khai trong mã gốc. Tôi nhớ khi họ chuyển sang phiên bản Java; nó làm chậm mọi thứ xuống, nhưng bây giờ JRE đã được thực hiện nhanh hơn nó không phải là xấu và chắc chắn giá trị có thể sử dụng các đối tượng Java trong MATLAB. –

17

đoán trên cơ sở kinh nghiệm:

Quản lý bộ nhớ.

Fortran (tốt, fortran được xung quanh khi MATLAB được viết) không hỗ trợ quản lý bộ nhớ động. Mà làm cho nó một nỗi đau cho công việc lớn (xem, ví dụ, CERNLIB).

CERNLIB giải quyết vấn đề bằng cách phân bổ một mảng lớn khổng lồ trong một khối chung, và triển khai thực hiện phân bổ (de) malloc cho các ô của mảng. Clunky nhưng làm việc: offsets mảng là con trỏ tương đương, và đi bạn đi ...

+2

Vì vậy, CERNLIB về cơ bản bị tấn công trong cùng một chức năng của malloc()/free() vào Fortran77? Tại sao họ không sử dụng C? –

+4

Các bộ phận của CERNLIB ngày đến đầu những năm 1960. Bởi thời gian c đến xung quanh họ đã có rất nhiều mã. Tôi tin rằng những phần lớn đã được viết lại nhiều lần, nhưng máy cắt giao dịch là: các nhà vật lí. Ngay cả vào những năm 80, hầu hết các nhà vật lí chỉ nói chuyện với fortran. – dmckee

+0

* lắc đầu *. Tôi ghét những con khủng long ("khủng long" là chủ nghĩa euphem của tôi cho những người thành công theo cách nào đó và hiện đang bị mắc kẹt theo cách của họ và từ chối thay đổi). Tôi đoán một thiên thạch đến và quét sạch tất cả các nhà vật lý Fortran trong những năm 80? Điều gì đặc biệt là "thiên thạch" buộc các nhà vật lý phải thay đổi trong những năm 80? –

3

Matlab ban đầu được viết ở Fortran, nó ít hơn một trình bao bọc cho một bó của các thói quen của Fortran. Vì vậy, câu hỏi là tại sao viết lại nó trong c? Thực ra tại sao Fortran lại mất cho tới c và các ngôn ngữ khác không thực sự phù hợp với tính toán số. Câu trả lời là Fortran bị ảnh hưởng nặng nề từ chính trị. Vì nhiều lý do, ủy ban tiêu chuẩn có thể quyết định thay thế cho Fortran 77. Vì vậy, vào thời điểm Fortran 90 cuối cùng ra Fortran đã mất rất nhiều nền tảng cho các ngôn ngữ khác. Tình trạng này hiện đã được sửa chữa. Fortran 2003, ít nhiều được triển khai trong trình biên dịch gnu, là ngôn ngữ tốt và phù hợp với số và ngoài ra có phân bổ động nhanh io và OO ish cấu trúc đa hình có nguồn gốc ... (Fortran 2008 sẽ tốt hơn)

Fortran hiện đại không được thiết kế để viết giao diện gui nhưng nó được thiết kế để gọi và được gọi từ C và các ngôn ngữ khác. Vì vậy, nếu bài tập MATLAB được lặp lại ngày hôm nay, có thể là các bit số sẽ được viết bằng Fortran và giao diện người dùng trong một thứ khác.

Các vấn đề liên quan