32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 15:49
Оценка: 2 (1) +1 -7 :))) :)
Нам все уши прожужжали преимуществами байткода перед "обычным кодом" (причём все эти преимущества элементарно нивелируются компиляцией под нужный CPU).
Но я в упор не понимаю, как можно извратить обычную идею портабельного байткода до маразма, который мы сейчас наблюдаем в VisualStudio/.NET:



"Что это за биты? Что это за "prefer"? Нам таких не надо, диско-суперстар!" (ц)

То, что MS всегда найдёт самую тухлейшую отмазу "почему здесь торчит изолента" — это я знаю, мне нужен инженерный ответ: "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".
Разве не за универсальность боролись "отцы Жабы", чтобы навсегда забыть о битах, процессорах и прочей чуши, которая не имеет никакого отношения к кодингу?

И что самое обидное, полностью извратив идею байткода, мелкомягкие клоуны опять куда-то бегут через всю индустрию с флагом "теперь всё нативно!". Попутно похерив весь свой мобильный сегмент.

Итак, вопрос капсом выше.

PS
Это не холивар, это абсолютно технический вопрос для выявления костылей .NET платформы.
Re: 32/64/AnyCPU - что за @$^%$?
От: Evgeny.Panasyuk Россия  
Дата: 06.10.16 16:05
Оценка: 11 (2) +2
Здравствуйте, Kolesiki, Вы писали:

K>То, что MS всегда найдёт самую тухлейшую отмазу "почему здесь торчит изолента" — это я знаю, мне нужен инженерный ответ: "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".


Предположу что это битность не байткода, а предпочитаемой цели. На x32/x64 разный объём доступной памяти, и разные размеры указателей (что влияет на потребление и в следствии скорость). Плюс в x64 процесс нельзя загрузить x32 dll, которая может быть сторонней.
Re[2]: 32/64/AnyCPU - что за @$^%$?
От: Doc Россия http://andrey.moveax.ru
Дата: 06.10.16 16:11
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Предположу что это битность не байткода, а предпочитаемой цели.


AFAIK верное предположение.

EP>На x32/x64 разный объём доступной памяти, и разные размеры указателей (что влияет на потребление и в следствии скорость).


Я несколько раз натыкался на статьи, которые на абстрактном или реальном примере показывали, что x64 может легко увеличить потребление ресурсов на ровном месте. Особенно когда явных преймуществ для задачи от x64 нет (в частности брали для тестов WebApp как я помню).
Re: 32/64/AnyCPU - что за @$^%$?
От: Sharov Россия  
Дата: 06.10.16 16:20
Оценка:
Здравствуйте, Kolesiki, Вы писали:


K>То, что MS всегда найдёт самую тухлейшую отмазу "почему здесь торчит изолента" — это я знаю, мне нужен инженерный ответ: "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".


Для оптимизаций типа выравнивания. Т.е. можно заранее подготовить, а не по ходу дела.

K>Разве не за универсальность боролись "отцы Жабы", чтобы навсегда забыть о битах, процессорах и прочей чуши, которая не имеет никакого отношения к кодингу?


Где-то читал, что когда Гослинга спросили про 100% портируемый код, он взоржал в ответ и сказал, что такого не бывает в природе.

K>И что самое обидное, полностью извратив идею байткода, мелкомягкие клоуны опять куда-то бегут через всю индустрию с флагом "теперь всё нативно!". Попутно похерив весь свой мобильный сегмент.


Устройтесь туда на работу и покажите клоунам как надо. Дел то на пару собеседований.
Кодом людям нужно помогать!
Re[2]: 32/64/AnyCPU - что за @$^%$?
От: LaptevVV Россия  
Дата: 06.10.16 16:21
Оценка: -2 :)
K>>То, что MS всегда найдёт самую тухлейшую отмазу "почему здесь торчит изолента" — это я знаю, мне нужен инженерный ответ: "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".
EP>Предположу что это битность не байткода, а предпочитаемой цели. На x32/x64 разный объём доступной памяти, и разные размеры указателей (что влияет на потребление и в следствии скорость). Плюс в x64 процесс нельзя загрузить x32 dll, которая может быть сторонней.
Добавлю предположений.
Битность не самого байткода, а его окружения.
Фактически интерпретатора (jit-компилятора).
Я ж так понимаю, что он весь целиком лежит в исполняемом файле.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: 32/64/AnyCPU - что за @$^%$?
От: Evgeny.Panasyuk Россия  
Дата: 06.10.16 16:28
Оценка:
Здравствуйте, Doc, Вы писали:

EP>>На x32/x64 разный объём доступной памяти, и разные размеры указателей (что влияет на потребление и в следствии скорость).

Doc>Я несколько раз натыкался на статьи, которые на абстрактном или реальном примере показывали, что x64 может легко увеличить потребление ресурсов на ровном месте. Особенно когда явных преймуществ для задачи от x64 нет (в частности брали для тестов WebApp как я помню).

Да, об этом и речь. Это даже априорно понятно, без тестов — указателей в программах много, особенно на управляемых языках — переход на x64 соответственно увеличивает потребление памяти, а ещё возможно и ухудшает быстродействие в memory-throughput-bottlenecked коде (но не всё так однозначно — например в x64 режиме доступно больше регистров).
При этом далеко не каждой программе нужно столько адресного пространства/памяти пространства.
Re: 32/64/AnyCPU - что за @$^%$?
От: vmpire Россия  
Дата: 06.10.16 16:50
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>"Что это за биты? Что это за "prefer"? Нам таких не надо, диско-суперстар!" (ц)

Если Вам не надо — выбирайте AnyCPU.
Бывает, когда битность важна.

K>То, что MS всегда найдёт самую тухлейшую отмазу "почему здесь торчит изолента" — это я знаю, мне нужен инженерный ответ: "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".

K>Разве не за универсальность боролись "отцы Жабы", чтобы навсегда забыть о битах, процессорах и прочей чуши, которая не имеет никакого отношения к кодингу?
см. басню крылова "свинья под дубом". Всё выполняется в конечном счёте на "битах, процессорах и прочей чуши". Хотите, чтобы выполнялось хорошо — приходится думать и об этом.
Волшебной палочки не бывает, полной изоляции от аппаратуры добиться невозможно.

K>И что самое обидное, полностью извратив идею байткода, мелкомягкие клоуны опять куда-то бегут через всю индустрию с флагом "теперь всё нативно!".

Тgen существует давно, его просто доработали до автоматического удобного использования. Это не так чтоб очень новое.

K>Попутно похерив весь свой мобильный сегмент.

Это к данному вопросу вообще отношения не имеет
Re[2]: 32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 17:18
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

K>> "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".


EP>Предположу что это битность не байткода, а предпочитаемой цели.


Вот это-то и смешно! Откуда я знаю, в какой системе будет запущено приложение? Моё дело — "универсальный байткод". Дело вирт.машины — его джитить или тупо интерпретировать. Что опять нас приводит к вопросу о битности.

EP> На x32/x64 разный объём доступной памяти, и разные размеры указателей


Каким боком это должно касаться байткода? Корячиться с битами — полностью задача VM. В крайнем случае, можно дописать к "запускатору" ключ "компиляй в 16 бит". Но байткод-то один и тот же!

EP> Плюс в x64 процесс нельзя загрузить x32 dll, которая может быть сторонней.


Это вообще из мира венды. Байткод — у нас есть только он. Как его разрулят на уровне ОС — дело третье.
Re[3]: 32/64/AnyCPU - что за @$^%$?
От: Evgeny.Panasyuk Россия  
Дата: 06.10.16 17:24
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>>> "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".

EP>>Предположу что это битность не байткода, а предпочитаемой цели.
K>Вот это-то и смешно! Откуда я знаю, в какой системе будет запущено приложение?

Такое что в x64 системе может работать x32 код. И что лучше для твоего конкретного приложения среда может и не знать

EP>> На x32/x64 разный объём доступной памяти, и разные размеры указателей

K>Каким боком это должно касаться байткода?

А оно касается?

EP>> Плюс в x64 процесс нельзя загрузить x32 dll, которая может быть сторонней.

K>Это вообще из мира венды.

Это из мира реального железа, и справедливо в том числе и для Linux, и для OS X
Re[2]: 32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 17:29
Оценка: +3
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, Kolesiki, Вы писали:

K>>"ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".

S>Для оптимизаций типа выравнивания. Т.е. можно заранее подготовить, а не по ходу дела.


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


K>>Разве не за универсальность боролись "отцы Жабы", чтобы навсегда забыть о битах, процессорах и прочей чуши, которая не имеет никакого отношения к кодингу?


S>Где-то читал, что когда Гослинга спросили про 100% портируемый код, он взоржал в ответ и сказал, что такого не бывает в природе.


Ну во-первых, Гослинг — не истина в последней инстанции, это прежде всего человек со своим уровнем интеллекта и образования. Это к тому, что нет никаких прямых доказательств "не бывает в природе".
Во-вторых, насколько я помню, Жаба и есть тот самый байткод, где никогда не упоминалась ни битность, ни какие-либо другие специфики.
В-третьих, Микрософт и так ЧЕТЫРНАДЦАТЬ ЛЕТ никуда не торопилась портировать .NET — что б с того, если бы байткод был Intel only?? Я бы даже это простил! Но потратить 14 лет, чтобы придти к тому же геморою, с которого начинали — это уже технологическая тупость!

К слову, уже сейчас Java опережает дотнетину в некоторых тестах (я не все проверял). Заметьте — и это всё без единой заточки байткода под битность!

K>>И что самое обидное, полностью извратив идею байткода, мелкомягкие клоуны опять куда-то бегут через всю индустрию с флагом "теперь всё нативно!". Попутно похерив весь свой мобильный сегмент.


S>Устройтесь туда на работу и покажите клоунам как надо. Дел то на пару собеседований.


Ха... Это как устроиться в Кремль, чтобы Россию поднять — самим-то не смешно? Что я могу лично, так это сделать свою платформу, с джитом и байткодами, которая по крайней мере не будет заниматься мозготраханьем "вам чёрный Форд какого цвета?".
Re[3]: 32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 17:33
Оценка: 1 (1) :)
Здравствуйте, LaptevVV, Вы писали:

LVV>Битность не самого байткода, а его окружения.

LVV>Фактически интерпретатора (jit-компилятора).
LVV>Я ж так понимаю, что он весь целиком лежит в исполняемом файле.

А вот и не угадал! Мы для того и ставим дотнетину под сотню мег, чтобы ОНА занималась всем этим джитом и оптимизациями.
Мы, как наивные простофили, верили рассказам "джит может оптимизировать код под платформу, где исполняется", а на самом деле он даже MMX не задействовал!! Вот такая вот халтура под маркетоидным соусом.
PS
Про MMX могу ошибаться, но суть вы поняли — джитнутый код очень далёк от кода, который МОГ БЫ оптимально исполняться на текущем CPU.
Re[4]: 32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 17:41
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Да, об этом и речь. Это даже априорно понятно, без тестов — указателей в программах много


Вы считаете, что эта экономия на спичках что-то значит? Да сегодня только убогие планшеты сидят с гигабайтом, у всех по 4 гига минимум — какой смысл в экономии? Не говоря о том, что для крупных данных существуют minimum requirements. Хочешь предсказывать погоду — будь добр, ставь 32 гига ОЗУ и считай сколько хочешь.

И потом, вся эта кутерьма с VM затеяна не ради экономии байт. VM — это
1. Портируемость кода без перекомпиляции.
2. Защита — в VM нельзя залезть в буфера ОС или выполнить привилегированную команду. Все команды априори безопасны, даже те, которые лезут по нулевому указателю.
3. Поддержка множества языков.

Глядя на всё это, просто диву даёшься, как можно было написать такой бестолковый проект как .NET, что аж пришлось переписывать в .NET Core — настолько прибита гвоздями вся внутренняя кухня, включая, мать их, даже биты!
Re[3]: 32/64/AnyCPU - что за @$^%$?
От: Lexey Россия  
Дата: 06.10.16 17:52
Оценка: +2 -1
Здравствуйте, Kolesiki, Вы писали:

EP>> Плюс в x64 процесс нельзя загрузить x32 dll, которая может быть сторонней.


K>Это вообще из мира венды. Байткод — у нас есть только он.


Бг.... Попробуй JNI попользовать в столь любимой тобой яве. Неожиданно окажется, что не только под виндами нативные dll'ки могут иметь разную битность.

K>Как его разрулят на уровне ОС — дело третье.


Причем тут ОС? Она про байткод вообще ничего не знает.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[2]: 32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 17:55
Оценка: -2
Здравствуйте, vmpire, Вы писали:

K>>"Что это за биты? Что это за "prefer"? Нам таких не надо, диско-суперстар!" (ц)

V>Если Вам не надо — выбирайте AnyCPU.

Выбрал. А студия, работая под 64-битной вендой, нарыгала мне 32-битную шнягу! В результате прога не смогла загрузить 64-битную DLL-ю (стороннюю). Так какой смысл во всей этой .NET-тряхомудии?? Писал бы себе на Delphi и имел бы ровно те же грабли, но на порядок больших скоростях и точно зная, чего ожидать. (это не говоря об ожиданиях по портированию приложений под mobile!)

K>>То, что MS всегда найдёт самую тухлейшую отмазу "почему здесь торчит изолента" — это я знаю, мне нужен инженерный ответ: "ЗАЧЕМ БАЙТКОДУ БИТНОСТЬ?".

K>>Разве не за универсальность боролись "отцы Жабы", чтобы навсегда забыть о битах, процессорах и прочей чуши, которая не имеет никакого отношения к кодингу?
V>см. басню крылова "свинья под дубом".

Может, всё таки "медведь на воеводстве"? "Мартышка и очки"? "Квартет"? Любая басня подойдёт ко смыслу "Три пижона решили, что можно скондачка переименовать Жабу в .NET и чтобы не терять время, захардкодить её по самые шлейфы на вендоплатформу, да ещё пусть с битностью помучаются".

V>Всё выполняется в конечном счёте на "битах, процессорах и прочей чуши".


Ну просто открыл глаза, чо! Ну то есть создатели JVM — они дураки, думали их виртуальная машина сама из проца выросла?

V> Хотите, чтобы выполнялось хорошо — приходится думать и об этом.


Вот именно, что НЕ ХОЧУ. Программе не надо работать "очень быстро", ей надо работать "приемлемо быстро", что и позволяет дотнет. Почему я должен думать обо всех этих битах? Были бы мне нужны биты, сидел бы и сипипискал до сих пор! В ДотНЕТ люди приходят именно за этим — вылезти из 20 века и начать уже жить алгоритмами, а не "32-битными dll-ками".

V>Волшебной палочки не бывает, полной изоляции от аппаратуры добиться невозможно.


JVM.

K>>Попутно похерив весь свой мобильный сегмент.

V>Это к данному вопросу вообще отношения не имеет

Ещё как имеет! Имеющий нормальное зрение, да узрит: имей мы нормальный ДотНЕТ, приложения можно было бы просто копировать в телефон и запускать! (как сейчас Java и делает) Увы, микрософту сии мечты не видать как ушей — они сами сознательно шли к своему "портируемому одноплатформенному болоту".
Re[5]: 32/64/AnyCPU - что за @$^%$?
От: Evgeny.Panasyuk Россия  
Дата: 06.10.16 17:58
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

EP>>Да, об этом и речь. Это даже априорно понятно, без тестов — указателей в программах много

K>Вы считаете, что эта экономия на спичках что-то значит?

А с чего ты взял что это спички? Речь идёт не про какие-то константные расходы, а про примерно пропорционально зависящие от объема данных. На 300k указателей перерасход больше гигабайта

K>Да сегодня только убогие планшеты сидят с гигабайтом, у всех по 4 гига минимум — какой смысл в экономии?


1. Если программа на x32 использует например один гигабайт, а на x64 — полтора — то ей может не хватить реальной памяти, особенно учитывая то, что системы многозадачные, если ещё всякие веб-браузеры и т.п.
2. Я уже объяснил — дело не только в объёме, но иногда ещё в падении скорости (из-за лишнего объёма).

K>Не говоря о том, что для крупных данных существуют minimum requirements.


Шта?

K>Хочешь предсказывать погоду — будь добр, ставь 32 гига ОЗУ и считай сколько хочешь.


А софт конкурентов при этом укладывается в 1GiB

K>И потом, вся эта кутерьма с VM затеяна не ради экономии байт.


Если можно сэкономить, причём минимальными усилиями, то зачем платить больше?
Re[5]: 32/64/AnyCPU - что за @$^%$?
От: Lexey Россия  
Дата: 06.10.16 18:04
Оценка: +2
Здравствуйте, Kolesiki, Вы писали:

K>Вы считаете, что эта экономия на спичках что-то значит?


Иногда она значит очень много.

K>Да сегодня только убогие планшеты сидят с гигабайтом, у всех по 4 гига минимум — какой смысл в экономии? Не говоря о том, что для крупных данных существуют minimum requirements. Хочешь предсказывать погоду — будь добр, ставь 32 гига ОЗУ и считай сколько хочешь.


Сколько гигабайт там размер кэша процессора? Сколько в него влезет 32-х битных указателей, а сколько 64-х битных?

K>Глядя на всё это, просто диву даёшься, как можно было написать такой бестолковый проект как .NET, что аж пришлось переписывать в .NET Core — настолько прибита гвоздями вся внутренняя кухня, включая, мать их, даже биты!


Роди свой "толковый проект", если сможешь. Все тебе только спасибо скажут.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[4]: 32/64/AnyCPU - что за @$^%$?
От: Kolesiki  
Дата: 06.10.16 18:07
Оценка: -1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

K>>Вот это-то и смешно! Откуда я знаю, в какой системе будет запущено приложение?


EP>Такое что в x64 системе может работать x32 код. И что лучше для твоего конкретного приложения среда может и не знать


Какое дело байткоду какая битность у DLL??? Кто вообще сказал, что это будет виндовая библиотека? Давайте просто опишем процесс:

1. Я пишу прогу, компиляю её в совершенно абстрактный байткод. Никаких битов, выравниваний и прочей чуши. Где будет запущено ПО — не знаю, может даже на arduino!
2. VM, созданная специально для этой ОС, знает об окружении всё: битность, объём памяти, оборудование, способы линковки и т.п. И ей командуют "запусти этот шмот байткода".
3. VM транслирует байткод в нативные команды ЦПУ, попутно подгружая зависимые модули и транслируя их тоже (если надо). На выходе — готовый дамп процесса. Кто и как там вызывает 64-битный код из 5683-битного — БАЙТКОДУ ПОФИГ, за него может и должна это делать виртуальная машина, ибо ей известно об ОС всё.

Итак, повторяю вопрос: причём тут биты в байткоде?

EP>>> На x32/x64 разный объём доступной памяти, и разные размеры указателей

K>>Каким боком это должно касаться байткода?
EP>А оно касается?

Судя по сеттингам студии — да.


EP>>> Плюс в x64 процесс нельзя загрузить x32 dll, которая может быть сторонней.

K>>Это вообще из мира венды.
EP>Это из мира реального железа, и справедливо в том числе и для Linux, и для OS X

Реальное железо — причём тут оно? Мы говорим о вирт. машине — догадайтесь с трёх раз, к чему там слово "виртуальная".
Re[4]: 32/64/AnyCPU - что за @$^%$?
От: Sinix  
Дата: 06.10.16 19:17
Оценка: +3
Здравствуйте, Lexey, Вы писали:

L>Причем тут ОС? Она про байткод вообще ничего не знает.

  pls
Re[2]: 32/64/AnyCPU - что за @$^%$?
От: Sharov Россия  
Дата: 06.10.16 19:26
Оценка:
Здравствуйте, vmpire, Вы писали:

K>>И что самое обидное, полностью извратив идею байткода, мелкомягкие клоуны опять куда-то бегут через всю индустрию с флагом "теперь всё нативно!".

V>Тgen существует давно, его просто доработали до автоматического удобного использования. Это не так чтоб очень новое.

NGEN
Кодом людям нужно помогать!
Re[3]: 32/64/AnyCPU - что за @$^%$?
От: Sinix  
Дата: 06.10.16 19:32
Оценка:
Здравствуйте, Sharov, Вы писали:

V>>Тgen существует давно, его просто доработали до автоматического удобного использования. Это не так чтоб очень новое.


S>NGEN

Русская Т, английская N. Одна клавиша. Не тпут, и на том спасибо
Отредактировано 06.10.2016 19:33 Sinix . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.