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-08 10:50 pm (UTC)
From: [identity profile] dimrub.livejournal.com
А вот зато чтение исходников функций типа strcpy вызывает изумление, но совсем иного рода.

Date: 2009-10-08 10:54 pm (UTC)
From: [identity profile] avva.livejournal.com
Да в этой гребаной glibc пока найдешь настоящие исходники, в лабиринте фальшивых директорий, устаревших иерархий, препроцессорной магии и еще черт знает чего - так набегаешься, что уже ничего от них не хочешь.

Блин. Терпеть не могу этого уродливого бегемота.

Вот то ли дело было читать исходники стандартной библиотеки в FreeBSD: все в очевидных местах, просто и ясно.

Date: 2009-10-08 10:56 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Я, кстати, и не помню уже, где читал эти исходники, не исключено, что на виндах. Но примененные там оптимизации меня потрясли, это я помню хорошо.

Так точно

Date: 2009-10-08 10:57 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Еще Брэм заметил, что жрущий бегемот отвратителен на вид.

Re: Так точно

From: [identity profile] cema.livejournal.com - Date: 2009-10-09 03:55 am (UTC) - Expand

Date: 2009-10-09 02:30 am (UTC)
From: [identity profile] http://users.livejournal.com/malfet_/
В glibc есть определенная логика, к ней нужно только привыкнуть.. Вот ld - это настоящий монстр

Date: 2009-10-09 03:19 am (UTC)
From: [identity profile] avnik.livejournal.com
btw читать для самообразования лучше netbsd.
(если мы не говорим про желание узнать что же делает конкретно glibc)

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2009-10-09 02:14 pm (UTC) - Expand

Date: 2009-10-09 07:28 am (UTC)
From: [identity profile] ygam.livejournal.com
В Майкрософт Оффисе glibcmsvcrt не используется, и исходники его библиотек не менее интересны.

Ты знаешь, например, что в Турции и Азербайджане toupper будет работать не так, как в остальном мире?

(no subject)

From: [identity profile] nec-p1us-u1tra.livejournal.com - Date: 2009-10-09 08:05 am (UTC) - Expand

(no subject)

From: [identity profile] dimrub.livejournal.com - Date: 2009-10-09 09:29 am (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2009-10-09 03:39 pm (UTC) - Expand

(no subject)

From: [identity profile] michk.livejournal.com - Date: 2009-10-09 09:43 pm (UTC) - Expand

(no subject)

From: [identity profile] dimrub.livejournal.com - Date: 2009-10-09 10:43 pm (UTC) - Expand

(no subject)

From: [identity profile] michk.livejournal.com - Date: 2009-10-09 10:46 pm (UTC) - Expand

(no subject)

From: [identity profile] ygam.livejournal.com - Date: 2009-10-11 02:19 am (UTC) - Expand

(no subject)

From: [identity profile] michk.livejournal.com - Date: 2009-10-11 07:24 am (UTC) - Expand

(no subject)

From: [identity profile] ktotam.livejournal.com - Date: 2009-10-20 12:51 am (UTC) - Expand

(no subject)

From: [identity profile] ygam.livejournal.com - Date: 2009-10-20 12:59 am (UTC) - Expand

Date: 2009-10-08 11:16 pm (UTC)
From: [identity profile] emdin.livejournal.com
А вроде же был этот, как его, boxing? Или что-то такое с расширяемыми типами и автокастингом. Два года назад учил, забыл всё...

Date: 2009-10-08 11:25 pm (UTC)
From: [identity profile] avva.livejournal.com
Есть автоматический promotion, но не для массивов (точнее, только для массивов объектов, а не примитивных числовых типов). Кроме того, они в любом случае стремятся тут выжать как можно лучший перформанс для каждого отдельного типа.

Date: 2009-10-09 12:08 am (UTC)
From: [identity profile] sergeytk.livejournal.com
А чё-то навскидку никакого разумного выхода не вижу.

Date: 2009-10-09 12:46 am (UTC)
From: [identity profile] dimrub.livejournal.com
На момент написания этого кода generics в Джаве, надо думать, не было. Более экспрессивные программисты сделали бы из этого вывод, что единственным разумным выходом для авторов языка было бы убиться апстену.
Edited Date: 2009-10-09 12:46 am (UTC)

(no subject)

From: [identity profile] sergeytk.livejournal.com - Date: 2009-10-09 01:51 am (UTC) - Expand

(no subject)

From: [identity profile] avitya.livejournal.com - Date: 2009-10-09 02:06 am (UTC) - Expand

(no subject)

From: [identity profile] ygam.livejournal.com - Date: 2009-10-09 03:31 am (UTC) - Expand

(no subject)

From: [identity profile] avitya.livejournal.com - Date: 2009-10-09 03:33 am (UTC) - Expand

(no subject)

From: [identity profile] cryinstone.livejournal.com - Date: 2009-10-09 10:09 am (UTC) - Expand

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2009-10-09 02:16 pm (UTC) - Expand

(no subject)

From: [identity profile] dimrub.livejournal.com - Date: 2009-10-09 08:34 pm (UTC) - Expand

Date: 2009-10-09 01:04 am (UTC)
From: [identity profile] loco-che.livejournal.com
Ну так оно же с любым legacy кодом так?
Как это -
// somedev1 - 6/7/02 Adding temporary tracking of Login screen
// somedev2 - 5/22/07 Temporary my ass

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) { ... }

(no subject)

From: [personal profile] a_p - Date: 2009-10-09 11:47 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/malfet_/ - Date: 2009-10-13 12:35 am (UTC) - Expand

(no subject)

From: [identity profile] a-bronx.livejournal.com - Date: 2009-10-13 02:30 am (UTC) - Expand

Date: 2009-10-09 04:06 am (UTC)
From: [identity profile] cema.livejournal.com
Если бы копии были не совершенно одинаковые, вот тогда было бы о чём поговорить! :-)

Date: 2009-10-09 10:03 am (UTC)
From: [identity profile] caseq.livejournal.com
Кстати, да. Какой смысл bytes & chars сортировать qsort'ом совсем непонятно. Да и с прочими целыми типами можно было бы оптимизировать.
(deleted comment)

Date: 2009-10-09 02:17 pm (UTC)
From: [identity profile] itman.livejournal.com
Это может быть медленно.

Date: 2009-10-09 09:33 am (UTC)
From: [identity profile] caseq.livejournal.com
Ну а как еще такие вещи писать на языке, в котором вместо нормальных темплейтов -- уродливый костыль под названием "дженерики"?

Date: 2009-10-09 09:52 am (UTC)
From: [identity profile] xfyre.livejournal.com
generics это скорее про type safety, а не про шаблоны
но про костыль и его характеристику ты, безусловно, прав :)

Date: 2009-10-09 05:15 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Ну возьмём C++ с его образцовыми templates.
И что, при подстановки 7 разных типов он не сгенерирует 7 реализаций, отличающихся только типом?

(no subject)

From: (Anonymous) - Date: 2009-10-09 08:15 pm (UTC) - Expand

(no subject)

From: [identity profile] municationtube.livejournal.com - Date: 2009-10-09 08:36 pm (UTC) - Expand

(no subject)

From: [identity profile] caseq.livejournal.com - Date: 2009-10-09 09:52 pm (UTC) - Expand

Date: 2009-10-09 09:40 pm (UTC)
From: [identity profile] exceeder.livejournal.com

Копаясь в исходниках SDK, мне вот это понравилось в комментарии (или JavaDoc-е):

Fairness generally decreases throughput but reduces variability and avoids starvation.

Это для BlockingQueue было написано. Но отлично подходит для макроэкономики :) Особенно в условиях кризиса.

Date: 2009-10-09 09:50 pm (UTC)
From: [identity profile] avva.livejournal.com
Забавно :)

Date: 2009-10-10 10:50 am (UTC)
From: [identity profile] alex-inside.livejournal.com
Таки Ви ратуете за динамическую типизацию или за использование в джаве рефлекшена (ну или опознание типа переменной динамически внутри одной функции)?

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

Date: 2009-10-11 09:13 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Нормальные шаблоны или на худой конец препроцессор бы избавили бы от необходимости писать такой кода. Но, увы, религия не позволяет.
Вообще в джаве что-то многовато религии - перегрузка операторов плохо, запретим (но сам попользуемся немного в стрингах, так удобнее), темплейты - плохо, запретим (впрочем, без них грустно, подумали и разрешили на половину), enums - вообще зло (но подумав пару лет добавили, но из религиозных соображений в виде жуткого монстра), и т.д.
Мне кажется, что дизайн языка для реального использования, за стенами университета, должен следовать более прагматичному подходу...

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 10:11 am
Powered by Dreamwidth Studios