June 2025

S M T W T F S
123 4 567
8 910111213 14
15161718 192021
22232425262728
29 30     

Style Credit

Expand Cut Tags

No cut tags
Tuesday, September 24th, 2013 12:49
— Я хотел бы приобрести флешку со встроенным MP3-плеером.
— Могу предложить MP3-плеер. Его можно использовать в качестве флешки.
— Нет! Мне нужна большая такая флешка, а в неё встроен MP3-плеер!
Клиент в магазине компьютерных товаров.
Что интересно, такие устройства действительно были.

Samsung анонсировал новый телефон — Galaxy Note 3.

Избранные технические характеристики:
ХарактеристикаВ Samsung Galaxy Note 3В моём старом компе
Разрешение экрана1080 × 1920 пикселей1680 × 1050 пикселей
Камера13 мегапикселей0.3 мегапикселя
Оперативная память3 гигабайта3 гигабайта
Внутренняя память 64 ГБ встроенной и до 64 ГБ расширения.~3 терабайта
Центральный процессор4-ядерный, 2.3 гигагерца2-ядерный, 2.2 гигагерца
Выделенный графический ускорительArdeno 330nVidia GeForce 5200
Сенсорыакселерометр
гироскоп
датчик приближения
компас
барометр
гигрометр
термометр
детектор жестов
Нет

Вплоть до 6 марта этого года я пользовался компьютером, который по всем характеристикам, кроме внутренней памяти, но включая разрешение экрана и графический ускоритель, уступал этому телефону.

Технический прогресс неумолим. Кажется, я совсем недавно вынес на помойку свой первый Pentium 120, — после того, как [livejournal.com profile] shele4ka меня запилила на тему необходимости чистить авгиевы конюшни, называемые кладовкой. На этом Pentium`е крутился Red Hat Linux 6.2 (см. седьмое фото в этом посте) с кастомным ядром; компьютер работал хранилищем данных и раутером, и в нём было два жёстких диска, на 8 и на 40 гигабайт. Хранилище данных, ага. Ещё в какой-то момент жизни мы с Шелей купили три абсолютно одинаковых компьютера — мне, ей и вместо телевизора. Телевизионный накрылся первым, мой сдох сразу после того, как я перенёс с него данные на свежекупленную цацу, а Шелин мы временно включили вместо телевизионного, — и знаете что? Проигрывание фильмов в хорошем качестве ему уже не по силам, изображение дёргается и звук заикается, загрузка двухъядерного процессора при этом держится на 98%. Зато проигрывание таких фильмов по силам нашим планшетникам, Archos 80g9 и iPad. Поэтому сейчас рядом с телевизором лежат Archos и кабель HDMI. Процедура выглядит так: мы хотим посмотреть фильм в хорошем качестве ⇒ включаются телевизионный компьютер и Archos ⇒ по USB фильм перегоняется на планшетку ⇒ планшетка подключается к телевизору через HDMI, и фильм с удовольствием смотрится.

А теперь последовал новый удар. В этом Samsung Galaxy Note 3 всё, кроме ёмкости жёсткого диска, круче, чем в любом из этих трёх компьютеров. Чёрт побери, у нашего 32-дюймового телевизора разрешение экрана ниже, чем у этой 5.7-дюймовой игрушки!

Единственное, что меня обнадёживает, — это что современные программисты привыкли полагаться на невероятную мощь процессоров и на гигантские объёмы памяти, поэтому забыли об экономии байт и тактов процессора. Я же, воспитанный на перфокартах, понимаю, что i++; значительно менее выгодно, чем ++i;. Поэтому, когда технический прогресс упрётся в невозможность сделать транзистор размером меньше отдельного атома, и рост быстродействия техники замедлится, мои программы будут работать чуточку быстрее, чем у конкурентов. По моим оптимистичным прикидкам, момент замедления технического прогресса наступит лет через восемьдесят. Главное — не разучиться программировать до тех пор.

Tags:
Tuesday, September 24th, 2013 12:11 (UTC)
"Я же, воспитанный на перфокартах, понимаю, что i++; значительно менее выгодно, чем ++i;. "
Я родилась позже перфокарт, не программер а QA и блин откуда то все равно мне эта инфа знакома. Так что...))
Tuesday, September 24th, 2013 12:18 (UTC)
Этот факт, на самом деле, по неочевидности напоминает известный парадокс близнецов. И, подозреваю, большая часть компиляторов умеет при оптимизациях переставлять команды так, чтобы добиваться этого эффекта.
Thursday, September 26th, 2013 11:42 (UTC)
ОСТАНОВИТЕСЬ УЖЕ ЁБАНЫЕ РОГАТЫЕ ТВАРИ!
Thursday, September 26th, 2013 11:56 (UTC)
Да, ты в общих чертах выразил мою мысль.
Thursday, September 26th, 2013 12:01 (UTC)
а теперь про расскажи про инкременты
Thursday, September 26th, 2013 12:08 (UTC)
Увы, в данном контексте я могу рассказывать только про экскременты.
Thursday, September 26th, 2013 23:15 (UTC)
ну а серьёзно? в поисковиках какая-то хуйня про "создание копии"
я всегда считал, что разница только в том, где именно происходит инкремент: перед телом цикла или после него
Friday, September 27th, 2013 13:50 (UTC)
Напоминаю, что в случае i++ возвращается оригинальное значение i, а значит, кроме выполнения инкремента, надо создать на стеке копию i и выполнить копирование, после чего увеличить значение i. То есть добавляется лишний шаг копирования оригинального значения i. В случае, когда i это структура с кучей пойнтеров, с определёнными операторами пост-инкремента, пре-инкремента, копирования и присваивания, разница может быть ВЕСЬМА существенной.
Friday, September 27th, 2013 13:59 (UTC)
нахуя?

1) ax++ + bx ➡ ADD ax, bx; INC ax
2) ++ax + bx ➡ INC ax; ADD ax, bx
Friday, September 27th, 2013 16:26 (UTC)
Ещё раз, медленно: i++ - это вызов постфиксного operator++(T) для объекта. Вернуть эта фукнция должна копию оригинального значения i. При этом сам i меняется. Поэтому оператор operator++(T) обычно реализуется так: создаётся копия (которая в худшем случае может быть deep copy, с копированием всей динамически выделенной памяти), после чего на оригинал вызывается префиксный operator++(), после чего возвращается копия.

Без создания копии operator++(T) нарушает конвенцию языка. Поэтому постфиксный инкремент всегда менее выгоден, чем префиксный, - постфиксный вызывает префиксный и дополняет его созданием копии.

Для простых классов типа int это неважно, потому что компиляторы умные, и приводят код к одной и той же последовательности ассемблерных команд. Но в более сложных случаях префиксный оператор всегда быстрее. А кто сказал, что в цикле for я обязан использовать в качестве счётчика простой класс? И, более того, если была создана deep copy, кто проверит выделенную память и освободит её?
Friday, September 27th, 2013 16:43 (UTC)
ты на мой вопрос ответь сначала чем городить огород непонятных слов
там НЕ нужна копия. инкремент делается либо до, либо после. всё
Friday, September 27th, 2013 17:01 (UTC)
Копия нужна всегда, ибо всегда возвращается.

section .text
global _start
_start:

; ++a
mov ax, a
inc ax
mov a, ax

; b++
mov ax, b
mov bx, ax
inc bx
mov b, bx
; По конвенции, возвращаемое значение всегда в регистре ax

mov ax, 4C00h ; Выход
int 21h

section .data
a dw 1
b dw 1

Налицо одна лишняя инструкция. И то я использую mov bx, ax вместо mov bx, b, как можно было бы сделать, и чьё быстродействие примерно в 300 раз хуже.
Edited Sep. 27th, 2013 17:01 (UTC)