Начало работы с новым кодом на незнакомом языке - PullRequest
1 голос
/ 21 декабря 2009

Я начинаю новый проект на языке, с которым я менее знаком (FORTRAN), и нахожусь в фазе «открытия». Обычно чтение и вычисление кода - довольно простая задача, однако этот код довольно большой и не очень структурированный. Существуют ли какие-либо методы / советы / хитрости / инструменты для сопоставления 50 тыс. Строк довольно плотного кода?

Ответы [ 8 ]

3 голосов
/ 21 декабря 2009

Это Фортран IV (маловероятно), 77 или 90/95? Язык сильно изменился с этими изменениями. Некоторые ошибки, перечисленные в списке High-Performance Mark, были распространены в Fortran IV, но нечасты в 77, в то время как другие были распространены в 77. Предложение проверить код с максимальным количеством предупреждений компилятора превосходно - даже использовать два компилятора.

Я бы начал с составления схемы структуры подпрограммы и получения общего представления о том, что они делают. Затем получите более глубокое понимание областей, которые необходимо изменить.

Существуют инструменты для анализа и даже улучшения кода на Фортране, например, http://www.polyhedron.com/pf-plusfort0html или http://www.crescentbaysoftware.com/vast_77to90.html.

2 голосов
/ 21 декабря 2009

Когда я кодировал Fortran (F77) тридцать ( yikes! ) лет назад, у нас было ограниченное количество возможностей для автоматической потоковой передачи неизвестной кодовой базы. Это было некрасиво и ограничивалось недвижимостью, которую могла поставить кровать плоттера. Как упоминает @Simon, вы можете (и может тогда, с некоторыми версиями) также использовать отладчик.

Теперь интерактивное исследование стало проще. Кроме того, вы можете поэкспериментировать с IDE. Я лично не пробовал его, так как Fortran больше не является моим ключевым языком разработки, но Photran является плагином Eclipse для Fortran и, похоже, находится в стадии активной разработки (последний выпуск был в этом месяце).

2 голосов
/ 21 декабря 2009

Отладчик - ваш друг - если у вас есть один для Фортрана.

Прежде чем вы зайдете слишком далеко, я бы ознакомился с основным синтаксисом языка, а также с любыми ошибками, такими как предположения о типах переменных, по их именам и позициям объявлений и т. Д. очень сильно заблудитесь даже с полезным отладчиком.

Помните также, что структура иногда зависит от языка. Код, который вы просматриваете, может быть плохо структурирован для языков, к которым вы привыкли, но может быть очень хорошо структурирован для Фортрана, который имеет свой набор особенностей. Я думаю, я просто хочу сказать, что у вас есть открытый разум, иначе вы будете иметь дело с ненужной предрасположенностью к тому, что код, на который вы смотрите, плох. Может быть, но это может быть то, к чему вы не привыкли.

Удачи. Мне скорее понравился Fortran, когда я программировал на нем около 20 лет назад, и он все еще остается языком выбора для некоторых приложений из-за скорости вычислений на некоторых платформах. Все еще довольно много в академических кругах.

1 голос
/ 20 января 2010

@ ldigas: "Фортран требует, чтобы все было объявлено в начале программы / подпрограммы ..."

Нет, если IMPLICIT NONE не появляется в начале процедуры, Fortran использует неявную типизацию. Поэтому имена переменных, начинающиеся с A-H и O-Z, набираются как REAL, а I-N - как INTEGER. (Что делает БОГА РЕАЛЬНОЙ переменной, а INT, к счастью, INTEGER, неявно.) Помните, Fortran (фактически тогда это был FORTRAN) был разработан учеными и математиками, для которых i, j, k, l, m и n были ВСЕГДА целыми числами.

С IMPLICIT NONE вы вынуждены явно вводить все переменные, как в C, C ++ или Java. Таким образом, вы можете иметь INTEGER GOD и REAL INT.

1 голос
/ 06 января 2010

Я сонный, поэтому буду коротким:)

Начните с выделения (или любого другого инструмента, который вы используете) программных операторов, операторов подпрограмм, операторов функций и тому подобного. Может быть, модули и тому подобное, если используется f90. Нарисуйте своего рода диаграмму, основанную на этом, на которой вы увидите, что вызывает что (что использует какие подпрограммы, функции и т.п.).

После того, как вы получите общее представление о ситуации, перейдите к данным. Fortran требует, чтобы все было объявлено в начале программы / подпрограммы ... поэтому первые строки должны давать вам объявления. После того, как вы поместите их в диаграмму, которую вы только что сделали, к этому времени у вас должна быть очень ясная ситуация.

Теперь следующий шаг действительно зависит от того, что вы хотите с ним сделать.

1 голос
/ 06 января 2010

Вы работаете в Linux или OpenSolaris? Если это так, компилятор Sun Studio Fortran является одним из лучших. А IDE Sun Studio понимает Фортран и поставляется с отладчиком. http://developers.sun.com/sunstudio

1 голос
/ 21 декабря 2009

Возьми душу. Одним из достоинств Fortran является то, что это очень просто. Если вы не найдете код, который был запрограммирован для использования «умных» трюков. Я полагаю, что первое, что вы делаете, это запускаете вашу программу через компилятор с проверкой синтаксиса и соответствием стандартам, настроенным на максимум. Старый (до Фортрана 90) Фортран печально известен хитрыми хитростями, которые люди использовали для обхода языковых ограничений. Некоторые ошибки для программистов, более знакомых с современными языками:

- общие блоки; и другие механизмы для глобального государства; особенно плохи общие блоки, которые используются для переименования и переопределения переменных;

- эквивалентности (ужасно, но вы можете запутаться в них);

- исходная форма фиксированного формата;

- использование оператора CONTINUE и практика, когда несколько циклов заканчиваются на одном и том же операторе CONTINUE;

- неявное объявление переменных (для их сортировки вставьте строку IMPLICIT NONE сразу после оператора PROGRAM, MODULE, SUBROUTINE или FUNCTION везде, где они встречаются);

- несколько точек входа в подпрограммы;

- и несколько других, с которыми я так знаком, я не могу вспомнить их.

Если это ничего не значит для вас, они скоро будут. И, наконец, вы, возможно, захотите взглянуть на Understand for Fortran. Это стоит, но очень полезно.

Привет

Mark

1 голос
/ 21 декабря 2009

Я всегда нахожу начальную точку исполнения или где другой код (над которым я не работаю) вызывает код, который я проверяю. Затем я просто начинаю читать его оттуда, при необходимости вызывая методы, чтобы выяснить, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...