Каковы практические преимущества обучения сборке? - PullRequest
6 голосов
/ 08 января 2009

Большинство людей полагают, что изучение ассемблера очень важно, важно знать основные принципы работы компьютера и так далее. Но то, что я ищу, - это некоторые практические предложения, которые сделают все возможное, чтобы изучение ассемблера стоило того.

Каковы ваши предложения? Чего я упускаю, не изучая ассемблер и управление указателями / памятью в целом?

Ответы [ 14 ]

7 голосов
/ 08 января 2009

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

Среднестатистический разработчик может написать простой цикл и подумать: «Этот код перебирает набор целых чисел и записывает каждое в консоль».

Опытный разработчик мог бы написать тот же цикл и подумать: «Этот код перебирает набор целых чисел и должен заключить в блок каждый элемент для вызова метода ToString, а ToString должен отформатировать строку в базе 10, что несколько не тривиальным, и тогда и целое в штучной упаковке, и отформатированная строка скоро будут пригодны для сборки мусора, так как не останется никаких ссылок, и при первом запуске этого метода его нужно будет JIT'ed ... "и т. д.

9 раз из 10, это может не иметь значения. Но в этот раз из 10 эксперт-разработчик, вероятно, заметит проблему в коде, которую среднестатистический разработчик никогда не подумает рассмотреть.

5 голосов
/ 08 января 2009

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

4 голосов
/ 08 января 2009

Указатели / управление памятью более общие, чем на ассемблере. Вы должны понимать их также для C и C ++, что может потребоваться, если вам нужно поддерживать код, написанный на C.

Для языка ассемблера иногда полезно прочитать код ассемблера, который генерирует компилятор C, чтобы выяснить, генерирует ли он правильный и эффективный код.

3 голосов
/ 08 января 2009

Я не думаю, что вам нужно для изучения ассемблера для чего-либо практического. Тем не менее, это поможет вам понять истинные корни того, что вы делаете как разработчик. По сути, сборочное программирование - это дисциплина для изучения логики и архитектуры чипов. Я не программировал ассемблер более двух десятилетий, но он по-прежнему информирует о том выборе, который я делаю при программировании на C #.

3 голосов
/ 08 января 2009

Я думаю, это здорово изучать новые языки. Это открывает мой разум. Некоторые языки более открыты для ума, чем другие. Я бы сказал, что ассемблер - один из них. Это заставляет вас думать о таких вещах, как стек вызовов и указатель инструкций. И это заставит вас ценить языки более высокого уровня еще больше. Еще один интересный язык для изучения - это PostScript.

2 голосов
/ 08 января 2009

Это своего рода один из тех вопросов, которые всегда будут задаваться: «Зачем мне что-то знать». и т.д. Хорошо, возможно, вы могли бы получить работу, занимаясь чем-то, кроме создания следующего универсального приложения CRUD или чего-то в этом роде. Если вы хотите заниматься какой-либо разработкой системы, очень полезно иметь рабочие знания по сборке, если не жизненно важно. Что касается того, что вы «упускаете», возможно, вы упускаете возможность узнать, как работают компьютеры. Некоторые люди думают, что это желательно. Некоторые люди этого не делают. Некоторые люди строят процессоры. Некоторые люди роют рвы. Все зависит от личных предпочтений:)

1 голос
/ 08 января 2009

Указатели и управление памятью - это действительно другой вопрос, чем сборка. Если вы хотите использовать C / C ++, вам нужно изучить указатели и управление памятью, потому что они являются частью языка. Но даже если вы планируете использовать ничего, кроме (скажем) Java, всю свою жизнь, вы должны кое-что узнать об управлении памятью, чтобы не писать утечки памяти, несмотря на сборку мусора, а указатели - это только разница между атомарными типами и ссылками на объекты. Вам нужны концепции, или вы будете писать программы, которые не работают!

Практические причины изучения ассемблера: отладка и оптимизация. Даже если вы не пишете какую-либо сборку, на днях вам может понадобиться оптимизировать код C / C ++ для повышения производительности. В этом случае вам понадобится прочитать сборку для вашего внутреннего цикла, даже если вам никогда не понадобится писать еще одну строку.

В конечном счете, я считаю, что ваше различие между «знанием основ работы вашего компьютера» и «практическими советами, которые принесут пользу обучению сборке», является ложным. Невежество не платит. Изучение того, как работает ваш компьютер , является практическим советом, который стоит потраченных усилий!

У меня есть пророчество: однажды скоро ваша программа будет работать слишком медленно, чтобы быть практичной, и периодически прерываться с исключением из-за нехватки памяти. В тот день явная кричащая тревога не зная, что, черт возьми, происходит или с чего начать искать, чтобы исправить это, с интересом возместит ваш долг за карму ...

1 голос
/ 08 января 2009

Но то, что я ищу, - это некоторые практические предложения, которые сделают усилия по изучению ассемблера оправданными.

Узнайте, что такое сборка. Действительно научитесь читать (и понимать) небольшие фрагменты этого: как пройти / пройти через это в своем уме. Может быть, тоже, шаг за шагом, с помощью отладчика (в том числе видя изменения памяти и регистров). В идеале найти аннотированную сборку.

Но не пытайтесь научиться писать на ассемблере: вместо этого, обучение написанию на C или C ++, вероятно, достаточно низкое для большинства практических целей.

0 голосов
/ 24 декабря 2009

Самым большим практическим преимуществом в обучении сборке является производительность. Вы можете оптимизировать почти до совершенства, когда это требуется.

0 голосов
/ 24 декабря 2009

У меня есть несколько практических примеров того, почему вам нужно знать, что находится под капотом. Вот некоторые полезные ссылки, которые могут оказаться полезными в этом контексте:

Сборка и искусство отладки

Отладка - изменение кода во время выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...