эх раз, еще раз (программистское)
Oct. 8th, 2009 11:45 pmЕще Бисмарк заметил, что стандартные библиотеки - как сосиски: приятнее использовать по назначению, не зная в подробностях, как их делают.
В исходниках java.util.Arrays, когда после множества фасадных методов сортировки с разными опущенными аргументами дело доходит до "мяса", до настоящего кода сортировки, его предваряет следующий комментарий:
А дальше идет семь совершенно одинаковых копий одного и того же кода квиксорта, отличающихся только типами аргументов и локальных переменных. По две страницы кода на каждую копию. Например, основной метод начинается так (к нему еще есть три вспомогательных, тоже в семи копиях каждый).
C'est la vie.
В исходниках 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.
no subject
Date: 2009-10-08 10:50 pm (UTC)no subject
Date: 2009-10-08 10:54 pm (UTC)Блин. Терпеть не могу этого уродливого бегемота.
Вот то ли дело было читать исходники стандартной библиотеки в FreeBSD: все в очевидных местах, просто и ясно.
no subject
Date: 2009-10-08 10:56 pm (UTC)Так точно
Date: 2009-10-08 10:57 pm (UTC)Re: Так точно
From:no subject
Date: 2009-10-09 02:30 am (UTC)no subject
Date: 2009-10-09 03:19 am (UTC)(если мы не говорим про желание узнать что же делает конкретно glibc)
(no subject)
From:no subject
Date: 2009-10-09 07:28 am (UTC)glibcmsvcrt не используется, и исходники его библиотек не менее интересны.Ты знаешь, например, что в Турции и Азербайджане toupper будет работать не так, как в остальном мире?
(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2009-10-09 03:39 pm (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(звук, похожий на звук у в русском, но с неокругленными
From:(no subject)
From:no subject
Date: 2009-10-08 11:16 pm (UTC)no subject
Date: 2009-10-08 11:25 pm (UTC)no subject
Date: 2009-10-09 12:08 am (UTC)no subject
Date: 2009-10-09 12:46 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-09 01:04 am (UTC)Как это -
// somedev1 - 6/7/02 Adding temporary tracking of Login screen
// somedev2 - 5/22/07 Temporary my ass
no subject
Date: 2009-10-09 02:25 am (UTC)no subject
Date: 2009-10-09 09:33 am (UTC)#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) { ... }
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-09 04:06 am (UTC)no subject
Date: 2009-10-09 10:03 am (UTC)no subject
Date: 2009-10-09 02:17 pm (UTC)no subject
Date: 2009-10-09 09:33 am (UTC)no subject
Date: 2009-10-09 09:52 am (UTC)но про костыль и его характеристику ты, безусловно, прав :)
no subject
Date: 2009-10-09 05:15 pm (UTC)И что, при подстановки 7 разных типов он не сгенерирует 7 реализаций, отличающихся только типом?
(no subject)
From: (Anonymous) - Date: 2009-10-09 08:15 pm (UTC) - Expand(no subject)
From:(no subject)
From:no subject
Date: 2009-10-09 09:40 pm (UTC)Копаясь в исходниках SDK, мне вот это понравилось в комментарии (или JavaDoc-е):
Fairness generally decreases throughput but reduces variability and avoids starvation.
Это для BlockingQueue было написано. Но отлично подходит для макроэкономики :) Особенно в условиях кризиса.
no subject
Date: 2009-10-09 09:50 pm (UTC)no subject
Date: 2009-10-10 10:50 am (UTC)Мне кажется не смотря на дублирование, производительность таких критичных функций, слегка выросла...
no subject
Date: 2009-10-11 09:13 pm (UTC)Вообще в джаве что-то многовато религии - перегрузка операторов плохо, запретим (но сам попользуемся немного в стрингах, так удобнее), темплейты - плохо, запретим (впрочем, без них грустно, подумали и разрешили на половину), enums - вообще зло (но подумав пару лет добавили, но из религиозных соображений в виде жуткого монстра), и т.д.
Мне кажется, что дизайн языка для реального использования, за стенами университета, должен следовать более прагматичному подходу...