К содержимому

Перевод кода, пара за парой

COBOL в Go

Одна и та же процедура, написанная руками на COBOL и на Go. Она здесь, чтобы вы увидели, что меняется, а что остаётся, до того как кто-то назовёт вам цену.

Было · COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. INTEREST.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-BALANCE     PIC S9(9)V99 COMP-3 VALUE 0.
       01  WS-RATE        PIC S9(1)V9(4) COMP-3 VALUE 0.0425.
       01  WS-INTEREST    PIC S9(9)V99 COMP-3.
       PROCEDURE DIVISION.
           COMPUTE WS-INTEREST ROUNDED = WS-BALANCE * WS-RATE
           DISPLAY 'INTEREST: ' WS-INTEREST
           STOP RUN.

Во что это превращается · Go

func Interest(balance, rate decimal.Decimal) decimal.Decimal {
	return balance.Mul(rate).Round(2)
}
Одна процедура: остаток умножить на ставку, округлить до копейки. На обоих языках её писал инженер, чтобы вы прочитали, как целевой код выглядит на самом деле.
Ниже одна процедура на двух языках. На настоящей системе тот же переезд идёт сразу по всему дереву: платформа читает все языки в нём параллельно, строит граф зависимостей, а границы режет инженер. Миллион строк это обычный размер такой работы, и она укладывается в тридцать дней.

Как это выглядит на всей вашей системе

На вашей настоящей кодовой базе тот же переезд отвечает на вопросы, которых пара файлов не покрывает: какие файлы уже никто не вызывает, какое батч-задание пишет в 02:00 запись, которую потом читает другое, и выдаёт ли переписанная версия те же числа, что ваши аудиторы видели в прошлом месяце. Аудит возвращает все три ответа за три-пять дней.