Я программировал для приблизительно... 6-> 8 лет, и я начал понимать, что я действительно не знаю то, что действительно происходит на уровне низкого выхода, когда я делаю что-то как
int i = j%348
Вещь, я знаю то, что делает j%348, это делит j на 348 и находит остаток. То, что я не знаю, - ТО, КАК компьютер делает это.
Точно так же я знаю это
try
{
blah();
}catch(Exception e){
blah2();
}
вызовет blah
и если вздор бросит, то он вызовет blah2
... однако, я понятия не имею, как компьютер делает это вместо допускает ошибку... отказывая или конечное выполнение.
И я полагаю, что для меня для получения "лучше" в программировании я должен, вероятно, знать то, что действительно делает мой код. [Это, вероятно, также помогло бы мне оптимизировать и... допустить ошибку... не, делают глупые вещи]
Я полагаю, что то, что я прошу, является, вероятно, чем-то огромным, преподавал в университетах или чем-то, но честно говоря, если бы я мог бы изучить немного, я был бы счастлив.
Точка вопроса:
О каком topic/computer-science-course я спрашиваю? Поскольку во всей честности, я не знаю.
Так как я не знаю то, чем называют тему, я не могу на самом деле найти, что книга или ресурс онлайн узнают о теме, таким образом, я - вид застрявших. Я был бы вечно благодарен, если бы кто-то помог мне = /
Вы должны сначала изучить сборку , а затем заняться проектированием компилятора . Если вы не знаете сборки, вы полностью потеряетесь с дизайном компилятора. Я лично только начинаю со сборки, именно по той причине, что вы - я хочу понять, что мой код делает на более низком уровне.
Я нашел этот ресурс, и это очень здорово: http://en.wikibooks.org/wiki/X86_Disassembly
По сути, это сборник, объясняющий некоторые концепции выполнения кода более высокого уровня. в сборке, и есть несколько примеров, где показано, как функции и т. д. могут быть сгенерированы в сборке компилятором.
Я бы сказал, что первая часть - это компьютерная архитектура, а вторая часть - это язык программирования.
Некоторые хорошие книги по компьютерной архитектуре, если вам интересно немного больше о том, как компьютер выполняет программу:
Я не уверен, что рекомендовать для понимания конструкций языка программирования, таких как перехват исключений. Наверное, хорошая книга компиляторов.
В частности, в вашем втором примере разные языки программирования могут быть реализованы по-разному. Например, язык, работающий на виртуальной машине, такой как Java, будет иметь виртуальную машину для защиты и выдачи определенных типов исключений, тогда как в C ++ это будет обрабатываться по-другому.
Я думаю, вы смотрите на то, как компилятор переводит код языка высокого уровня в машинные инструкции. Взгляните на дизайн компилятора. Это классическая книга .
Первая часть может считаться компьютерной инженерией, а вторая - просто языковым дизайном.
Вышеупомянутая книга «Элементы вычислительных систем: построение современного компьютера из первых принципов», написанная Ноамом Нисаном и Шимоном Шокеном, рассматривает типы вопросов, которые вы поднимаете, комплексно: от архитектуры до виртуальной машины и компиляторов. в ОС.
Звучит смутно, как будто вы говорите о построении компилятора и проектировании языка.
Самая общая "вещь CS", которая может реализовать исключения - это, вероятно, продолжения (как, например, в Scheme). Если вы не читали Thouhg "Structure and Interpretation of Computer Programs" (SICP, веб-страница здесь, включая полный текст), возможно, стоит просмотреть его, он слегка касается построения компиляторов.
Фактический механизм, используемый для вычисления модуля, вероятно, будет варьироваться между языками, а затем и между реализациями каждого языка. Информация об алгоритмах здесь .
Может быть, вас интересуют алгоритмы?
Никто не говорит о математике по модулю? Первый семестр по медиаинформатике (я учусь на пятом), курс: Математика:
10% 3 =?
x% y = z
Расчет:
В виде одной формулы:
{{1 }} 10 - (Math.round (10/3) * 3) = 1
С переменными:
x% y = x - (Math.round (x / y) * y)
Понимая двоичный код, вы поймете, что каждая математическая операция основана на сложении.
Если вы не хотите тратить деньги, есть отличная книга под названием «Основы компьютерной организации и дизайна» здесь ( Ссылка в формате PDF). Я также рекомендую «Код» Чарльза Петцольда, опубликованный Microsoft Press.