Обоснование использования непереносимого кода

StackOverflow https://stackoverflow.com/questions/1035744

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top