: Старое и новое. Языки программирования etc. : JAM 08 January 2009, 02:15:01 Предлагаю продолжить спор здесь.
Очень показательный пример, кстати. Вместо того, чтобы учить и тут же применять C# и делать что-то полезное... копаться в нюансах ассемблера, на котором ты сделаешь код заведомо хуже, чем компилятор <rofl> Во-первых, благодаря ассемблеру можно написать программу, хоть и медленнее, но качественнее. Пример. Есть несколько разных эмуляторов одной приставки, написанные разными авторами. Процессор требуется от 166 до 300 МГц. Эмулятор, написанный полностью на ассемблере, ничем не уступает остальным, работает быстрее и требует всего 100 МГц.А во-вторых, ассемблер -- такая штука, зная которую, можно превратить Shareware в Freeware, пусть и написанную быстро и легко на языках высокого уровня <rofl>. Не так давно мне понадобилось запустить Turbo Pascal, а он на новых компьютерах не работает из-за ошибки деления на ноль. Всего лишь поменяв 3 байта на "nop", я добился того, чтобы TP запускался без проблем. В-третьих, даже зная ассемблер, можно делать вставки из него при написании программ на других языках, чтобы всё быстрее работало Бла-бла, пространные теоретические суждения :) Поверь мне, я игропрограммист и знаю, где применяется ассемблер. Даже в геймдеве он применяется очень редко. А тем более ассемблер x86 - его вообще практически бессмысленно сейчас применять. Я также знаю, что знание C# и .NET гораздо полезнее для того же игропрограммиста - быстро делать утилиты. Но это я как практик знаю. А Джем - как ни разу не практик, а теоретик - изучает ассемблер :) А в-четвёртых, кто сказал, что я не знаю языки высокого уровня и не изучаю их? Я же сказал, в качестве хобби изучаю ассемблер =) О чём и речь, не о языках на самом деле, а об отношении к пампу. Я, как теоретик, играю всё что надо к чемпионату без мысли о том, что "брут неправильно, хайспид неправильно". А Джем доводит нормалы до FPC и с линейкой измеряет скоринг устаревшего микса. Разница в подходах что там, что там - показательная. А я, знаешь ли, играю песни не только ради "о, вот это будет на чемпонатах, это надо задрочить, а это убрали с нового микса, значит, можно больше не играть даже если песня хорошая". Я с одинаковым удовольствием могу позадрачивать как старые, так и новые песни. Если я вижу песню, которую ещё не играл, то для меня она новая. И на важно, это песня с NXA или с какого-нибудь 2nd Dance Floor, который я первый раз в жизни вижу. Ты играть просто ради удовольствия не пробовал играть хоть иногда? Или играть просто чтобы пройти песню на хороший результат (если просто нравится старая песня или степчарт уж больно хорош), не заморачиваясь, пригодится это на чемпах, или нет. Ты, как и большинство людей, слишком ограничен. У вас нет 4-х мерного мышления. Почему если старое или устаревшее -- то сразу фигня, недостойная внимания, а если новое, то обязательно хорошее и прогрессивное? К примеру, если игра -- хит своего времени, то я с удовольствием в неё поиграю, хоть она 2007-го года выпуска, хоть 1987-го. С помощью тогдашних технологии создать что-либо великое тоже не каждому дано. Я и сейчас способен восхищаться, как революционными новыми играми, так и старыми, с осознием того, что до этой игры ничего подобного не было. Меня в своё время поразил Doom на SNES. Пусть с тормозами, не со всеми уровнями, но тем не менее, Doom на 16-битной приставке! : Re: Старое и новое. Языки программирования etc. : Dino 08 January 2009, 02:49:09 Предлагаю продолжить спор здесь. Поддерживаю. <yahoo> Во-первых, благодаря ассемблеру можно написать программу, хоть и медленнее, но качественнее. Неправда. Во-первых, это практически неправда даже для одного процессора конкретной линейки (Netburst или Core) конкретной архитектуры, потому что надо знать все нюансы работы конвейера комманд и механизма кеширования. Вот даже во времена первых пентиумов - ты знал, что такое U- и V- пайпы, по каким правилам комманды спариваются в них на этапе выполнения? Если нет - считай, что ты уже вдрызг проиграл компиляторам. Современные же процессоры ещё сложнее. Если же говорить о том, чтобы заточить программу под разные процессоры (и да-да, даже портировать в итоге под какой-нибудь XBox360) или собрать максимально оптимизированный бинарник под процессоры новой линейки, когда она выйдет (скажем, Core i7) - то написание на ассемблере - это однозначный фейл. Надо обьяснять, почему? Есть несколько разных эмуляторов одной приставки, написанные разными авторами. Процессор требуется от 166 до 300 МГц. Эмулятор, написанный полностью на ассемблере, ничем не уступает остальным, работает быстрее и требует всего 100 МГц. Уже смешно. Давай ещё под ZX Spectrum оптимизировать будем. Даже ноутбучные процессоры сейчас... да что там ноутбучные - нетбучные даже - от гигагерца и выше. А во-вторых, ассемблер -- такая штука, зная которую, можно превратить Shareware в Freeware, пусть и написанную быстро и легко на языках высокого уровня <rofl>. Только с современными методами защиты для взлома надо быть спецом такого уровня, что тебе дешевле выйдет эту программу купить (и получить бесплатные апдейты, а не ломать их каждый раз), а не трахаться с её взломом. А на бытовом уровне - проще порыться в торрентах и прочих файлопомойках, найдёшь кряк. Не так давно мне понадобилось запустить Turbo Pascal, а он на новых компьютерах не работает из-за ошибки деления на ноль. Всего лишь поменяв 3 байта на "nop", я добился того, чтобы TP запускался без проблем. Рекомендую задуматься над тем, почему проблема запуска такого го... продукта, как турбо паскаль, интересует только тебя. Меня, например, почему-то больше интересуют .Net, Python и Windows 7. В-третьих, даже зная ассемблер, можно делать вставки из него при написании программ на других языках, чтобы всё быстрее работало См. выше, про "заточенность под архитектуру". Кстати, добавлю ещё, что помимо ставшего уже привычным SSE (ты учишь комманды SSE?) сейчас всё более модно становится переносить вычисления на видеокарту. Погугли на предмет такой штуки, как "CUDA". x86 тут остаётся ещё более не при делах. А в-четвёртых, кто сказал, что я не знаю языки высокого уровня и не изучаю их? Я же сказал, в качестве хобби изучаю ассемблер =) Плохо изучаешь, значит. Чтобы изучить всю прорву более полезных, чем ассемблер, вещей, надо положить не один десяток лет. А если бы ты начал изучать какие-то смежные с программированием вещи - типа эргономики пользовательских интерфейсов - вполне возможно, ты бы заработал столько, что тебе бы даже думать не приходилось о том, "как бы превратить shareware во freeware". А я, знаешь ли, играю песни не только ради "о, вот это будет на чемпонатах, это надо задрочить, а это убрали с нового микса, значит, можно больше не играть даже если песня хорошая". Я с одинаковым удовольствием могу позадрачивать как старые, так и новые песни. Ты меня недопонял. Я, конечно, с большим удовольствием сыграю хороший трек, будь то старый или новый. Например, в Минске на пятом миксе я играл Dive, потому что он мой любимый. Но это не значит, что я готов его задрачивать до FPC. А вот актуальные треки приходится задрачивать, ибо чемпионат. А если этот трек - ещё и какой-то полубред типа Slam, то когда его убирают из треклиста, я даже вздыхаю с удовольствием, ибо просто так его играть мне нафиг не упало. : Re: Старое и новое. Языки программирования etc. : Dino 09 January 2009, 07:18:29 Довод Jam два: А во-вторых, ассемблер -- такая штука, зная которую, можно превратить Shareware в Freeware, пусть и написанную быстро и легко на языках высокого уровня <rofl>. Только с современными методами защиты для взлома надо быть спецом такого уровня, что тебе дешевле выйдет эту программу купить (и получить бесплатные апдейты, а не ломать их каждый раз), а не трахаться с её взломом. А на бытовом уровне - проще порыться в торрентах и прочих файлопомойках, найдёшь кряк. Весьма не объективный ответ. Скорей Jam имел ввиду потенциальную возможность как таковую, а не личную заинтересованность.Я говорю с практической точки зрения. У Джема это выглядит как "а давайте за<censored>еним такую боевую машину, чтобы умела плавать, летать, ездить и ещё на борту несла атомные боеголовки, чтоб этим всем круто было воевать". Я же предлагаю подумать, что а) это непрактично даже с точки зрения конструктива, и б) а оно нам надо, воевать? Ну это так, утрированный пример. Довод три, ух... Не так давно мне понадобилось запустить Turbo Pascal, а он на новых компьютерах не работает из-за ошибки деления на ноль. Всего лишь поменяв 3 байта на "nop", я добился того, чтобы TP запускался без проблем. Рекомендую задуматься над тем, почему проблема запуска такого го... продукта, как турбо паскаль, интересует только тебя. Меня, например, почему-то больше интересуют .Net, Python и Windows 7. О, да, нам так интересны твои интересы.В общем на доводы проще всего увести разговор в сторону или давить на конкретный пример... :) Да, я сразу перевожу разговор в плоскость практического применения. И тут же оказывается, что особо практических применений у того, за что ратуете вы, нет, а есть только какие-то извраты. Для формальной точки составлю список. "Полезные вещи на асме": —Драйвера - пишутся к примеру на асм вставках и С++ Да что ты говоришь? По моим сведеньям, они пишутся при помощи чистого C, как правило, и DDK. —Отладка в дизассемблере - как уже сказал Jam о Turbo Pascal, ну и я свой пример добавлю: практически та же ситуация бывала у меня в играх, мелкая назойливая ошибка из-за которой постоянно вылетало, но пару минут в отладчике всё исправляли. Я не понял, ты это свой кода при помощи дизассемблера ковыряешь? Или чужой? Если чужой, то тебе действительно больше нечего делать? Игр других, неглючных, вокруг совсем не осталось? —Оптимизация производительности - ну к примеру возьмём трекер-движок, копейки в производительности тут особо чувствуются при нагрузках в тысячи пиров, поэтому критические участки кода переписывают на асм вставки. Ну расскажи, какие именно участки кода надо переписать в движке трекера на ассемблере, чтобы он стал работать быстрее? Я почему-то считал, что это должна быть алгоритмическая оптимизация - кеширование, поиск - коду которой в силу своей алгоритмической сложности написание на ассемблере противопоказано вообще. Не говоря уже о различных архитектурах и платформах, монолог о которых ты так удачно порезал. —Пиратство - как ни крути, пол интернета на этом живёт (а у Украины к тому же один из самых высоких показателей). Знаешь, вот уж меня терзают сомнения, что Джем сломает хоть одну серьёзную программу за свою жизнь. Речь же не о том, что ассемблером не пользоваться, речь о том, что конкретный пользователь изучает зачем-то ассемблер. А я говорю, что пользы от этого не больше, чем пользы от умения управлять мартеновской домной в быту. Сплошные понты. —Микроконтроллеры - да и вообще аппаратное программирование. Здесь не копал, но, насколько мне опять же известно, большинство кода под микроконтроллеры (если не весь) пишется на чистом C. Менеджмент памяти там адский, да, но это уже другой вопрос. —Написание вирусов Без комментариев. Заниматся такой хернёй можно, во-первых, от острых психологических проблем, помноженных на одиночество (в народе - "нидадуд"). Во-вторых, давно уже не требует знания ассемблера. См. макровирусы и ботнеты. —Написание антивирусов Ещё смешнее. Это как разгружать вагоны кирпичей удовольствия ради. —Написание трансляторов Для этого нада хотя бы выучить yacc, прежде чем лезть в ассемблер. —Ядра ОСей Здесь даже C++, не то что C будет использоваться. Ты плохо представляешь себе сложность современных ядер осей. Короче говоря, это ты увёл разговор в сторону. А тема изначально была простой - человек X ради "удовольствия" изучает ассемблер. Если бы он написал что-то вроде - "активно готовлюсь поступить на работу в Symantec, изучаю имеющиеся методы заражения и бла-бла" - я бы ещё поверил, что он готов писать антивирусы. Но ничего подобного мы не наблюдаем. Мы наблюдаем совершенные понты в изучении устаревшей технологии программирования, которая никогда не будет применена для чего-то полезного и современного. Не напишет он ни ядра ОС, ни антивируса современного уровня. : Re: Старое и новое. Языки программирования etc. : phylosoph 09 January 2009, 12:40:18 Brazier,
да что ты говоришь, я занимался разработкой коммерческих драйверов. Догадайся на чем их пишут? :) Их пишут на: 1. C + WDK (Windows Driver Kit, новая версия DDK) 2. C + WDK + NDIS (Network Driver Interface Specification, если сетевые драйвера) 3. С++ + WDF (если позволяет тип драйвера). WDF = KMDF (Kernel Mode Driver Framework) + UMDF (User Mode Driver Framework). Да, и антивирусы на asm'e тоже не пишут. Антивирусы пишут на плюсах, прикинь! Это всё аргументы из личного опыта. В остальном целиком поддерживаю Дино. Вы ребята сначала покрутитесь в среде (в смысле фирмы, команды) разработки низкоуровневого и эмбеддед софта, а потом говорите. : Re: Старое и новое. Языки программирования etc. : Zmey 09 January 2009, 13:09:43 Я поддержу Дино в том, что изучать лучше языки высокого уровня (только, наверное, не C#, а Java или C++). Только когда владеешь ими на уровне практического применения - лезть в дебри ассемблера.
Дело в том, что сейчас разнообразие архитектур такое, что на ассемблере действительно решаются только ОЧЕНЬ узкоспециализированные задачи. Даже для микроконтроллеров разработка в основном идёт на C. Если это ассемблер - это не ассемблер x86 и его придётся изучать дополнительно в любом случае. Знание ассемблера пригодится при взломе, написании антивирей и т.п. - это да. Но, опять же, заниматься этим стоит когда изучил высокоуровневые языки. При создании драйверов и игр для PC асм почти не юзается. : Re: Старое и новое. Языки программирования etc. : Dino 09 January 2009, 15:55:23 Я поддержу Дино в том, что изучать лучше языки высокого уровня (только, наверное, не C#, а Java или C++). Ну тут вопрос. Для себя что-то написать - из этих троих лучше C#. Для КПК, кстати, тоже. Java... для мобильников, хотя я не в восторге от её портативной редакции. С++ имеет смысл изучать только серьёзно программистом работать, это очень неудобный язык для прототипирования. : Re: Старое и новое. Языки программирования etc. : phylosoph 09 January 2009, 15:58:23 Я тоже считаю, что лучше с С#, да и популярен он сейчас достаточно.
: Re: Старое и новое. Языки программирования etc. : Saboteur 10 January 2009, 14:02:15 Я с этим ни разу и не спорил, асм серьёзно изучать я в жизни не собираюсь, профессия немного не та. Моя цель было только доказать (я это подчеркнул и не раз), что асм способен на что-то полезное. :) Полезен на уровне понимания архитектуры процессора, для взлома чего-либо простенького и лично для себя, и в принципе на этом все....Чем дальше в лес тем больше сейчас идет виртуализации и совместимости с разными платформами, при таких раскладах в чистом ассемблер все меньше и меньше востребован, и тенденция думаю сохранится. Сейчас специалисты по асму требуются для обслуживания некоторых суперкомпьютерах и программирования микроконтроллеров, которые либо в силу своей редкости не смогли обзавестись удобными студиями/компиляторами, либо в силу своей убогости этого не требуют. У меня в GlobalLogic таких специалистов некоторое время назад (3-4 года) активно искали, но уже нашли и с тех пор вроде больше и не надо... : Re: Старое и новое. Языки программирования etc. : Dino 10 January 2009, 18:30:25 Полезен на уровне понимания архитектуры процессора, Для изучения архитектуры современного процессора надо изучать архитектуру современного процессора - микрокод, кеширование, векторные операции. Задрачивание всяких REP MOVSB ничего не даст. Кроме того, я вообще не понимаю, зачем зацикливаться на x86 - есть, во-первых, ещё достаточно распространённые PowerPC, есть чипы видеокарт, которые уже приспосабливают под не-графические вычисления - та же CUDA, при помощи которой скоро будут прорендеривать промежуточные кадры в фильмах 25FPS для более плавного воспроизведения. Вот это - востребованные области, с их знанием можно и на хлеб с маслом заработать. Например, за качественный интерполятор кадров в фильмах лично я готов выложить баксов 100 или больше (за сам софт, не считая стоимости видеокарты), и таких пользователей много (http://forum.ixbt.com/topic.cgi?id=62:12524). А просто ассемблер x86 - баловство, навроде умения владеть эспадоном в нынешних же условиях. |