Tôi có một thư viện số trong FORTRAN (tôi tin FORTRAN IV) và tôi muốn chuyển nó sang mã Python. Tôi muốn mã nguồn thực mà tôi có thể nhập trên bất kỳ máy ảo Python nào --- Windows, MacOS-X, Linux, Android. Tôi bắt đầu làm điều này bằng tay, nhưng có khoảng 1.000 thói quen trong thư viện, vì vậy đó không phải là một giải pháp hợp lý.Làm thế nào tôi có thể dễ dàng chuyển đổi mã FORTRAN sang mã Python (mã thực, không bao bọc)
Trả lời
chỉnh sửa: thêm thông tin về NumPy
một công cụ như vậy tồn tại cho Fortran to Lisp, hoặc Fortran to C, hoặc thậm chí Fortran to Java. Nhưng bạn sẽ không bao giờ có một công cụ Fortran to Python, vì một lý do đơn giản: không giống như Fortran, Lisp hoặc C, Python không có GOTO [1]. Và có rất nhiều GOTO trong mã Fortran (đặc biệt là Fortran IV). Thậm chí nếu có một định lý bằng cách Jacopini nói rằng bạn có thể mô phỏng GOTO với lập trình có cấu trúc, thì quá cồng kềnh để thực hiện một công cụ chuyển đổi ngôn ngữ thực (và hiệu quả). Vì vậy, không chỉ bạn sẽ cần dịch mã số 1000 thói quen, nhưng bạn cũng cần phải hiểu mỗi thuật toán, với tất cả các hình ảnh imbricated và dịch thuật toán thành một chương trình có cấu trúc trước khi viết nó bằng Python. Chúc may mắn!
Hey, tại sao bạn cho rằng trình bao bọc là xấu? Windows, OSX và Linux đều có các trình biên dịch Fortran và C [2] và các trình bao bọc tốt!
Đối với C (không phải ngôn ngữ của bạn ở đây, nhưng f2c có thể là một tùy chọn), có SWIG và Fortran có f2py, hiện được tích hợp với numpy. SWIG có một số support for Android. Bằng cách này, thay vì chuyển sang Python "tinh khiết", bạn có thể sử dụng khả năng numpy: numpy tương tự như Fortran 90 (xem so sánh here), vì vậy bạn có thể xem xét trước tiên dịch chương trình của mình sang F90 để chuyển tiếp mượt mà hơn . Dường như cũng có một số Numpy on Adnroid. Và trong trường hợp bạn cần sần trên Windows 64 bit, có các tệp nhị phân here.
Nếu bạn quyết định sử dụng trình bao bọc, gfortran chạy trên Linux (chỉ cần cài đặt từ gói phân phối), Windows (MinGW) và Android. Nếu bạn đi dọc theo dòng đó, đừng quên bạn biên dịch mã FIV, do đó, có sự cố "một vòng lặp" thông thường (thường là một tùy chọn trình biên dịch là tốt). Bạn có lẽ cũng sẽ phải tự chuyển đổi một số câu lệnh cũ, không chuẩn, không tìm thấy trong các trình biên dịch hiện đại.
Bạn có cũng có, rõ ràng, tùy chọn để chuyển đổi ngôn ngữ dự án của bạn để Lisp hoặc Java ...
[1] Bạn có thể đặt câu hỏi: nhưng nếu GOTO là vấn đề, làm thế nào mà có một Fortran Java dụng cụ? Vâng, nó sử dụng các thủ thuật với JVM, trong đó có nội bộ là GOTO instruction. Ngoài ra còn có một GOTO trong bytecode Python (tìm JUMP here), do đó, có thể có một cái gì đó để điều tra ở đây. Vì vậy, tuyên bố trước của tôi là sai: có có thể là công cụ Fortran to Python, sử dụng các thủ thuật bytecode như trong Java. Nhưng nó vẫn còn để phát triển, và sẵn có của các thư viện tốt (như numpy, matplotlib, gấu trúc ...) làm cho nó không cần thiết, để nói rằng ít nhất.
bạn có thể sử dụng goto để tạo cấu trúc chương trình có cấu trúc. Trò chuyện không tuân theo, nếu mã gilly nilly gotos khắp nơi, nó có thể không thể làm cho nó có cấu trúc. Nếu tôi đã phải giải quyết nhiệm vụ này, trước tiên tôi sẽ cố gắng chuyển đổi sang fortran hiện đại (loại bỏ tất cả các goto). Nó sẽ nhanh chóng trở nên rõ ràng nếu mã được cấu trúc độc đáo hay không. – agentp
Tôi đang làm việc trên mã gần 20 năm tuổi (vẫn được duy trì mặc dù) - và nó không có GOTO. Tôi tưởng tượng rằng sẽ khá phổ biến đối với bất kỳ mã fortran được duy trì tốt, vì GOTO thực sự khó bảo trì. Bộ chuyển đổi fortran-to-python sẽ vẫn hữu dụng cho tất cả mã đó. – naught101
@ naught101 Tôi vẫn tin rằng nó tốt hơn để viết một trình bao bọc, để được hưởng lợi từ cả tốc độ Fortran và các khả năng GUI và I/O tốt đẹp của Python. Chuyển đổi mã máy tính thành một ngôn ngữ như Python, vốn là một trong những thứ chậm nhất trong sự tồn tại, không phải là điều khôn ngoan để làm. Có một lý do chính đáng tại sao Python được sử dụng cho mã keo và interfacing, thậm chí (hoặc đặc biệt!) Trong các dự án lớn, như [Alliances] (http://www.salome-platform.org/). Và tích hợp mã Fortran để cung cấp một cú pháp giống như Matlab với mã của bạn như là phụ trợ. Tôi chỉ thấy lợi thế của phương pháp này. –
- 1. Cách dễ dàng để chuyển đổi mã c thành x86?
- 2. làm thế nào để chuyển đổi Python 3 sang Python 2 mã?
- 3. Chuyển mã C++ hiện có sang R
- 4. Làm thế nào tôi có thể dễ dàng chuyển đổi một ứng dụng Django từ mySQL sang PostgreSQL?
- 5. Làm thế nào tôi có thể chuyển mã Perl từ mod_perl sang FastCGI?
- 6. Một công cụ để chuyển đổi mã MATLAB sang Python
- 7. mã hóa python chuyển đổi
- 8. Làm cách nào để grep cho toàn bộ, có thể được bao bọc, các dòng mã?
- 9. Cách dễ dàng chuyển đổi từ WinForms sang WPF
- 10. Tôi có thể kiểm tra trình bao bọc được quản lý xung quanh mã C bằng cách nào?
- 11. Mã hóa chuỗi Android và thực thể html chuyển đổi
- 12. Chuyển đổi system.windows.media.brush sang mã màu hex
- 13. Làm thế nào để triển khai mã bitbucket của tôi dễ dàng đến máy chủ sản xuất của tôi
- 14. Có thể lấy mã thoát khỏi một vỏ bọc không?
- 15. Làm thế nào để dễ dàng thời gian một khối mã C#?
- 16. Có cách nào dễ dàng để chọn một hàm python (hoặc nếu không thì tuần tự mã của nó)?
- 17. Có cách nào dễ dàng để tạo mã từ một tệp văn bản không?
- 18. Làm thế nào để chạy mã C# trên máy chủ Linux dễ dàng?
- 19. Có thể Haskell [dễ dàng] thực hiện COM không?
- 20. Một công cụ để kiểm tra mã IL dễ dàng
- 21. Phím tắt cho Notepad ++ để Mã hóa HTML dễ dàng
- 22. Làm thế nào tôi có thể thay đổi mã hóa bảng mã trong phản hồi HTTP trong Java
- 23. Mã thực thể HTML thành văn bản
- 24. Cách dễ dàng để quay ngược mã Java 6 sang Java 5?
- 25. cách dễ dàng để xem mã dos lệnh trở lại
- 26. Chuyển đổi mã R thành mã C
- 27. TFS 2010, tôi chỉ có thể di chuyển mã nguồn?
- 28. Có cách nào dễ dàng để chuyển đổi Ứng dụng Android sang IPad, IPhone
- 29. Có cách nào dễ dàng để chuyển đổi các lớp C# sang PHP?
- 30. Làm cách nào tôi có thể cấu trúc lại mã này thành mã dễ quản lý hơn?
Đáng buồn thay, không có công cụ chuyển đổi nào (theo kiến thức của tôi). Cảm thấy xấu gấp đôi cho bạn ... đầu tiên, số lượng các dòng bạn phải chuyển đổi, nhưng chủ yếu là bởi vì bạn phải đối phó với FORTRAN IV. – SethMMorton
Ngay cả khi 'f2py' được sử dụng không làm tốt công việc chuyển đổi mã Fortran sang mã Python, vì vậy có ** chắc chắn ** không có phương thức _easy_. –
@KyleKanos f2py không chuyển đổi mã Fortran sang Python .. nó tạo ra một trình bao bọc C xung quanh mã Fortran sau đó được biên dịch thành một đối tượng thư viện được chia sẻ mà Python có thể nhập. – SethMMorton