avva: (Default)
[personal profile] avva
Еще Бисмарк заметил, что стандартные библиотеки - как сосиски: приятнее использовать по назначению, не зная в подробностях, как их делают.

В исходниках java.util.Arrays, когда после множества фасадных методов сортировки с разными опущенными аргументами дело доходит до "мяса", до настоящего кода сортировки, его предваряет следующий комментарий:

    /*
     * The code for each of the seven primitive types is largely identical.
     * C'est la vie.
     */

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

    private static void sort1(long x[], int off, int len) { ...
    private static void sort1(int x[], int off, int len) { ...
    private static void sort1(short x[], int off, int len) { ...
    private static void sort1(char x[], int off, int len) { ...
    private static void sort1(byte x[], int off, int len) { ...
    private static void sort1(double x[], int off, int len) { ... 
    private static void sort1(float x[], int off, int len) { ...

C'est la vie.

Date: 2009-10-09 02:25 am (UTC)
From: [identity profile] http://users.livejournal.com/malfet_/
Думаете define SORT_IMPL(type) на 100 строк был бы лучше?

Date: 2009-10-09 09:33 am (UTC)
From: [identity profile] a-bronx.livejournal.com
Лучше уж что-то типа:

#define TYPE int
#include "sort1.inc"
#undef TYPE

#define TYPE long
#include "sort1.inc"
#undef TYPE

а в sort.inc написать единственную копию void sort(TYPE x[], int off, int len) { ... }

Date: 2009-10-09 11:47 am (UTC)
a_p: (Default)
From: [personal profile] a_p
Золотые слова!
На простом С (в до плюсплюсные времена) только так темплаты и делали.

Date: 2009-10-13 12:35 am (UTC)
From: [identity profile] http://users.livejournal.com/malfet_/
По моему , никакой разницы нет, создается ли этот код препоцессором или пишется явно - в исполняемом файле вы получите все те же 7-8 копий одного и того-же кода...

Date: 2009-10-13 02:30 am (UTC)
From: [identity profile] a-bronx.livejournal.com
Разница в усилиях по поддержке: вносить ли в код изменение или фикс в одном месте, или в куче однотипных мест.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 06:47 pm
Powered by Dreamwidth Studios