Что о КОБОЛе и его производительности делает его (по сравнению с его возрастом) настолько быстрым?

Как другие выше, я не знаю любой-шаг способ сделать это, но если бы Вы готовы пользоваться очень простыми внешними библиотеками, я предложил бы:

OpenCsv для парсинга CSV (маленький, простой, надежный и простой в использовании)

Xstream для анализирования/сериализирования XML (очень очень простой в использовании, и создание полностью человекочитаемого xml)

Используя те же демонстрационные данные как выше код был бы похож:

package fr.megiste.test;

import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import au.com.bytecode.opencsv.CSVReader;

import com.thoughtworks.xstream.XStream;

public class CsvToXml {     

    public static void main(String[] args) {

        String startFile = "./startData.csv";
        String outFile = "./outData.xml";

        try {
            CSVReader reader = new CSVReader(new FileReader(startFile));
            String[] line = null;

            String[] header = reader.readNext();

            List out = new ArrayList();

            while((line = reader.readNext())!=null){
                List item = new ArrayList();
                    for (int i = 0; i < header.length; i++) {
                    String[] keyVal = new String[2];
                    String string = header[i];
                    String val = line[i];
                    keyVal[0] = string;
                    keyVal[1] = val;
                    item.add(keyVal);
                }
                out.add(item);
            }

            XStream xstream = new XStream();

            xstream.toXML(out, new FileWriter(outFile,false));

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Приведение к следующему результату: (Xstream позволяет очень точно настраивающий из результата...)


  
    
      string
      hello world
    
    
      float1
      1.0
    
    
      float2
      3.3
    
    
      integer
      4
    
  
  
    
      string
      goodbye world
    
    
      float1
      1e9
    
    
      float2
      -3.3
    
    
      integer
      45
    
  
  
    
      string
      hello again
    
    
      float1
      -1
    
    
      float2
      23.33
    
    
      integer
      456
    
  
  
    
      string
      hello world 3
    
    
      float1
      1.40
    
    
      float2
      34.83
    
    
      integer
      4999
    
  
  
    
      string
      hello 2 world
    
    
      float1
      9981.05
    
    
      float2
      43.33
    
    
      integer
      444
    
  

5
задан davek 26 October 2009 в 21:00
поделиться

4 ответа

Язык COBOL был разработан в 1950-х годах, чтобы соответствовать возможностям доступных медленных машин с ограниченным ОЗУ. в то время. Не говоря уже об отсутствии интерактивных терминалов. Многие аспекты дизайна упрощены для компиляции в простой машинный код без необходимости оптимизации. Например, нет переменных. Только один блок рабочей памяти с именами, которые относятся к массивам байтов определенной фиксированной длины, начиная с фиксированного местоположения. Программы COBOL компилируются в эффективный машинный код по дизайну.

По мере того, как процессоры становились быстрее, а ОЗУ становилось больше, компиляторы COBOL добавляли новые функции, такие как индексированный по ключу ввод-вывод файлов и встроенный алгоритм MERGE, а также поддержку интерактивных текстовых терминалов. . В настоящее время существует даже объектно-ориентированный COBOL.

Таким образом, отчасти причина заключается в том, что код был переносимым на новые архитектуры ЦП, поскольку это был язык высокого уровня, но при этом очень эффективен, поскольку он был разработан, чтобы не использовать причудливые функции, подобные тем, которые были найдены в Алголе-60, предке C. Частично причина в том, что COBOL эволюционировал, чтобы приспособиться к более новым операционным системам и возможностям. Например, базы данных SQL - это просто более сложные формы простых таблично-ориентированных файлов, для обработки которых был разработан COBOL. Компоновщики оверлеев позволяли писать огромные программы на COBOL, пока поток выполнения был примерно последовательным. Любая функция, которая была лучше реализована на Ассемблере, PL / 1 или FORTRAN, могла быть доступна через вызовы PROCEDURE.

Ближайшим современным языком к COBOL является Python, потому что вы можете писать чистые программы, которые читаются почти как английский, без лишних знаков препинания. но вы можете использовать большую и сложную библиотеку функций вместо того, чтобы постоянно кодировать свои собственные. Конечно, Python перенял все возможности ALGOL-60 и другие, потому что он был разработан в современную эпоху, когда вам не нужно помещать все в 16 КБ ОЗУ.

11
ответ дан 18 December 2019 в 07:55
поделиться

Это потому, что программы COBOL (по крайней мере, старые) очень просто структурированы, поэтому их совсем не сложно скомпилировать в эффективный машинный код. Например, «старые добрые» программы на коболе не нуждаются в эффективном управлении памятью, потому что динамического выделения памяти просто не происходит; структура памяти фиксируется во время компиляции.

3
ответ дан 18 December 2019 в 07:55
поделиться

Еще один аргумент в пользу COBOL в финансовых условиях - это то, что он предоставляет собственные типы данных и математические операторы для выполнения десятичной арифметики с фиксированной запятой (см .: [Packed Decimal] [1]).

Packed Decimal полезен для выполнения финансовых вычислений, так как поддерживает фиксированное количество цифр до и после десятичной точки. Это немного упрощает округление финансовых сумм.

Некоторые языки, кроме COBOL, PL / 1 и Algol, могут эффективно выполнять арифметические операции с десятичной фиксированной точкой. У мэйнфреймов IBM есть выделенные аппаратные схемы для выполнения вычислений в BCD, что помогает поддерживать производительность COBOL где-то в стратосфере.

[1]: http://en.wikipedia.org/wiki/Packed_decimal «Упакованное десятичное число»

1
ответ дан 18 December 2019 в 07:55
поделиться

В OS / 360 и ее потомках было соотношение примерно четырех инструкций сборки к команде COBOL, разработчики оборудования внимательно изучили спецификацию COBOL и создали набор инструкций для ее поддержки. .

Даже такие, казалось бы, чудовищные состояния, как: -

PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.

Переводит примерно в восемь ассемблерных инструкций (только 1 из которых находится внутри цикла)

4
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: