Обоснование использования непереносимого кода - PullRequest
3 голосов
/ 24 июня 2009

Как выбрать, если кто-то оправдывает свои компромиссные решения в плане оптимизации кода, ясности реализации, эффективности и переносимости?

Уместным примером для целей этого вопроса может быть обработка больших файлов, где «большой файл» составляет «довольно много ГБ» для проблемы, которая будет упрощена с использованием методов произвольного доступа.

Подходы для чтения и изменения этого файла могут быть:

  1. В любом случае используйте потоки и ищите нужное место - которое является переносимым, но потенциально медленным и непонятным - это будет работать практически для всех ОС.
  2. отобразить соответствующую часть файла в виде большого блока. Например, mmap - 50-мегабайтный фрагмент файла для обработки для каждого фрагмента - это будет работать для многих ОС, в зависимости от тонкостей реализации mmap для этой системы.
  3. Просто отобразите весь файл - для этого требуется 64-разрядная ОС и это наиболее эффективный и понятный способ реализовать это, однако он не работает на 32-разрядных ОС.

Ответы [ 5 ]

4 голосов
/ 24 июня 2009

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

Если вы знаете, что вам никогда не понадобится переносить код и вам нужна абсолютно лучшая производительность, тогда вы соответствующим образом скорректируете свою реализацию. Нет смысла быть портативным ради самого себя.

Обратите внимание, что если вам нужна производительность и переносимость, ничто не мешает вам реализовать реализацию для каждой платформы. Конечно, это увеличит ваши затраты, поэтому на самом деле ваше дело расставить приоритеты.

2 голосов
/ 24 июня 2009

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

Прежде всего, этот проект должен быть или в конечном итоге будет мультиплатформенным?В зависимости от вашего выбора, выбор правильного языка программирования должен быть проще.Опять же, вы также можете использовать более одного языка в вашем проекте, и это совершенно нормально.Портативность не обязательно означает меньшую производительность.Все это подразумевает, что для достижения ваших целей требуется более сложная работа, потому что вам понадобится качественный код.Кроме того, у каждого языка программирования есть своя философия.Узнайте, что они есть.Одно можно сказать наверняка, некоторые проблемы часто возвращаются снова и снова.Вот почему знание различных шаблонов дизайна иногда может иметь значение, но некоторые языки имеют свои собственные идиомы и могут быть очень важны при выборе языка.Еще одна вещь, которая нуждается в некотором размышлении, это различные подходы, которые вы можете использовать для своего проекта.Многопоточность, сокеты, клиент-серверные системы и многие другие технологии - все это для вас.Выбор правильной технологии может помочь улучшить проект.

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

2 голосов
/ 24 июня 2009

Без ограничений на этот вопрос рационально невозможно ответить рационально.

Вы спрашиваете «какой цвет лучше?», Не спрашивая нас, рисуете ли вы дом, машину или картину.

Ограничения будут включать как минимум

  • Язык по выбору
  • Целевые платформы (многопроцессорный сервер промышленного уровня или iPhone?)
  • Оптимизация для скорости против памяти
  • Стоимость (кто финансирует это и есть ли ограничения по доставке?)

Никакая часть программного обеспечения не может иметь «окончательную» переносимость.

Примером проблемы такого рода, которая решается с использованием различных методов, но с жестким ограничением как на конкретный требуемый ввод / вывод, так и на измерение «best», будет проект WideFinder . 1025 *

1 голос
/ 24 июня 2009

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

Если вы знаете, что вам нужно поддерживать разные аппаратные платформы в первый день, вам, безусловно, нужно будет выбрать переносную реализацию или использовать несколько подходов.

0 голосов
/ 10 июля 2009

Переносимость ради переносимости была маркетинговым стимулом для Java с самого начала и является условием жизни C по соглашению, и я полагаю, что большинство людей, которые придерживаются ее, «выросли» на Java или C, скажут это.

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

...