Затем же, зачем и наСильнику - у Ява-машины тоже есть ассемблер.
Кроме того, Ява-программист - он что. всю жизнь будет Ява-программистом? Знание ассемблера нужно затем же, зачем в ВУЗах проходят "бесполезные" вещи типа процессорных и машинных архитектур, сетевых протоколов и системного программировнаия: чтобы не быть узконаправленным ${BUZZWORD}-кодером.
> Как часто Вы перепроверяете компилятор
Редко. Причем, обычно, в поисках ошибки.
> Сколько раз за последний месяц Вам приходилось отлаживатся без символов и исходных кодов
Тоже редко.
Ассемблер - это как парашют. Нужен редко, но когда уж нужен, то без него просто чехол.
>Блондинка - когда последний раз видела процессор ?
Когда его с гребешком перепутала?
>может он уже не нужен ?
Блондинке? Не нужен. Ей нужен ноутбук или по крайней мере монитор (с каким-то непонятным жужжащим ящиком в придачу).
И кстати вопрос в догонку - разве поддеожеваемость кода не важнее, чем небольшой выиграш в производительности?
>Затем же, зачем и наСильнику - у Ява-машины тоже есть ассемблер.
А что ктото пишет на таком ассемблере?
>Знание ассемблера нужно затем же, зачем в ВУЗах проходят "бесполезные" вещи...
Уж лучше бы мне в вузе вместо ассемблера - читали какой-нибуть функциональный язык. Для развития больше бы пользы было.
>Ассемблер - это как парашют. Нужен редко, но когда уж нужен, то без него просто чехол.
Мне тяжело представить как он пригодится в 2008 году.
Давно было интересто дизассемблировать загрузчик доса, или ламать какуюто программу. Даже обсуждали за пивом как из юникодных символов русского языка построить программу (там урезаный набор комманд получается).
Но в практических целях очень давно не сталкивался с ассемблером.
Вот приведите примеры для чего Вам пригождается знание ассемблера (именно в работе), если Вы канечно не разрабатываете виртуальную машину или компилятор;)
> Вот приведите примеры для чего Вам пригождается знание ассемблера (именно в работе), если Вы канечно не разрабатываете виртуальную машину или компилятор;)
понимать чем cdecl отличается от fastcall и stdcall потянет на знание ассемблера ? или допустим механизм работы buffer overflow ?
или это всё можно понять не зная, как работает процессор ?
> Там много про неблокируюшие контейнеры на многопроцессорных системах
> на с++ (без асма).
прямую ссылку можно?
ассемблер вполне может быть скрыт под API
или могут быть использованы built-in расширения компилятора типа
__sync_fetch_and_add()
но сам понимаешь, они мало связаны с языком как таковым
>> Затем же, зачем и наСильнику - у Ява-машины тоже есть ассемблер.
> А что ктото пишет на таком ассемблере?
Думаю, что нет. Но, как при работе на Си полезно представлять, в какой код выливается твоя программа, так и при работе на Яве это же полезно знать.
> Вот приведите примеры для чего Вам пригождается знание ассемблера (именно в работе)
Работал на DSP, у которого компилятор Си не мог задействовать все узлы процессора, переписывал критические куски с Си на Ассемблер - в общем, как обычно.
Кстати, оба использования уже были упомянуты выше (и не только эти два).
> Работал на DSP, у которого компилятор Си не мог задействовать все узлы процессора, переписывал критические куски с Си на Ассемблер - в общем, как обычно.
> Кстати, оба использования уже были упомянуты выше (и не только эти два).
Т.е. знание асма "в массе своей" нужно как знание химии повару - очень хорошо при обучении (помогает понять "почему так а не иначе", а не просто вызубрить), но на практике нужно в 0.[0]1% случаев :) (если обратного не требует специфика работы данного конкретного повара, но таких тоже 0.[0]1%)
Я "за" изучение асма (в курсе изученя процессоров), но напрочь не понимаю зачем _всем_ кодерам уметь читать (а значит и понимать) асмовский листинг "спросоня"
> напрочь не понимаю зачем _всем_ кодерам уметь читать (а значит и понимать) асмовский листинг "спросоня"
К этому никто не призывал. Нужно знать достаточно, чтобы использовать _при необходимости_ (все признают, что необходимость возникает редко). Я и сам не потребляю "листинг спросонья" :).
> понимать чем cdecl отличается от fastcall и stdcall потянет на знание ассемблера ?
А зачем тут ассемблер? Главное, что в cdecl - операнды пихаются в стек справа налево, а в stdcall - наоборот (как в паскале). То каким макаром компилер оптимизирует вызов и в какие регистры, что запихивает - в большенстве случаев знать не надо.
>или допустим механизм работы buffer overflow ?
Если человек хочет взламать программу - то асм нужен. Но для того чтоб писать секурный код (например тотже buffer overflow или integer overflow) можно обойтись и без асма. Прийняв за аксиомы некоторые правила программирования.
>или это всё можно понять не зная, как работает процессор ?
ну чтоб правильно использовать std::map достаточно знать юзкейсы, где он применим, его слабые и сильные стороны, но _совершенно_ не обязательно знать, что такое красно-чёрное дерево и не надо уметь его реализовывать. Или я не прав?
Точно также и с асмом - некоторые вещи можно брать на веру, что оно действительно так есть.
Но на самом деле я был не прав. Для lock-free - нужно знать, что на x86 CAS (Compare And Swap) - это одна инструкция процессора. Надо знать что такое memory barrier...
Тоесть в этом конкретном случае асм не используется, но его знание необходимо.
> А зачем тут ассемблер? Главное, что в cdecl - операнды пихаются в стек > справа налево, а в stdcall - наоборот (как в паскале).
стек непосредственно связан с ассемблером ;) (через push/pop)
> Прийняв за аксиомы некоторые правила программирования.
применение без понимания не ведет ни к чему хорошему
> Но эти функции можно использовать не зная как они реализованы.
дело не в этом
какой бы уровень косвенности в конечном итоге не был, все равно изначально необходимо реализовывать базовую функциональность, причем не на ЯВУ ;)
Ну не совсем так, но похожее один перец требовал ;)
> Нужно знать достаточно, чтобы использовать _при необходимости_ (все признают, что необходимость возникает редко).
Т.е. нужно просто "в молодости" написать пару никому не нужных программулек, а потом преспокойно "забыть", зная что (где) в любой момент можно достать справочник...
При этом можно _никогда_ больше с потребностью использовать асм не столкнуться :)
Я к тому, что спроси меня сейчас - знаю ли я асм (х86) - я честно скажу "нет", что тем не менее не запретит мне в кратчайший срок "вспомнить всё" при надобности ;)
>> Нужно знать достаточно, чтобы использовать _при необходимости_ (все признают, что необходимость возникает редко).
> Т.е. нужно просто "в молодости" написать пару никому не нужных программулек, а потом преспокойно "забыть", зная что (где) в любой момент можно достать справочник...
Программы должны быть нужными, в остальном верно.
> Я к тому, что спроси меня сейчас - знаю ли я асм (х86) - я честно скажу "нет", что тем не менее не запретит мне в кратчайший срок "вспомнить всё" при надобности ;)
Это вопрос того, как определяется термин "знать" в данном случае.
Да. Жаберы же и пишут. В рантайме генерят код, через BCEL. Благо, в жабе даже class GC есть, в отличии от .NET (и на этом её преимущества перед .NET заканчиваются).
Железо в первую очередь. Суперкомпьютеры. Например сейчас заниммаюсь реализацией fft из библиотеки VSIPL под разрабатываемый процессор. Например, в библиотеках типа ALF(IBM Cell, http://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/41838EDB5A15CCCD0025...) для инициации вычислений, библиотеке передаётся просто машинный код, который запускается на сопроцессоре, в случае Cell -- это SPU. А машинный код берётся, естественно, из ассемблера.