Какую тему компьютерной науки я пытаюсь описать?
Я программировал около... 6- > 8 лет, и я начал понимать, что я действительно не знаю, что на самом деле происходит на низком уровне, когда я делаю что-то вроде
int i = j%348
Дело в том, что я знаю, что делает j% 348, он делит j на 348 и находит остаток. Я не знаю, КАК компьютер делает это.
Аналогично, я знаю, что
try
{
blah();
}catch(Exception e){
blah2();
}
будет вызывать blah
, и если blah выбрасывает, он будет вызывать blah2
... однако я понятия не имею, как компьютер делает это вместо err... сбой или завершение выполнения.
И я полагаю, что для того, чтобы я мог "лучше" программировать, я должен, вероятно, знать, что мой код действительно делает. [Это, вероятно, также поможет мне оптимизировать и... ошибиться... не делать глупых вещей]
Я полагаю, что то, о чем я прошу, возможно, что-то огромное, чему учили в университетах или что-то в этом роде, но, честно говоря, если бы я мог немного научиться, я был бы счастлив.
Точка вопроса:
Какую тему/компьютерно-научный курс я прошу? Потому что, честно говоря, я не знаю.
Поскольку я не знаю, как называется эта тема, я не могу найти книгу или онлайн-ресурс, чтобы узнать о теме, поэтому я как бы застрял. Я был бы вечно благодарен, если бы кто-то помог мне =/
Ответы
Ответ 1
Вы должны посмотреть в сборку сначала и , затем перейти в конструкцию компилятора. Если вы не знаете сборки, вы полностью потеряете дизайн компилятора. Я лично только начинаю с сборки, по вашей конкретной причине - я хочу понять, что мой код делает на более низком уровне.
Я нашел этот ресурс, что очень круто: http://en.wikibooks.org/wiki/X86_Disassembly
В основном это сборник, в котором объясняются некоторые концепции того, как выполняется код более высокого уровня в сборке, и есть некоторые примеры, где он показывает, как функции и т.д. могут быть сгенерированы в сборке компилятором.
Ответ 2
Я бы сказал, что первая часть - компьютерная архитектура, а вторая часть - язык программирования.
Некоторые хорошие книги по компьютерной архитектуре, если вам интересно узнать немного больше о том, как компьютер выполняет программу:
Я не уверен, что рекомендовать для понимания конструкций языка программирования, таких как улов исключений. Вероятно, хорошая компиляторная книга.
Особенно во втором примере различные языки программирования могут быть реализованы по-разному. Например, язык, запущенный на виртуальной машине, такой как Java, должен иметь виртуальную машину для ее защиты и выдавать определенные типы исключений, тогда как в С++ это будет обрабатываться по-разному.
Ответ 3
Первая часть может считаться компьютерной инженерией, но вторая - это просто дизайн языка.
Ответ 4
Я думаю, вы смотрите, как компилятор переводит код языка высокого уровня на машинные инструкции. Посмотрите на дизайн компилятора. Это классическая книга.
Ответ 5
Звучит не так, как будто речь идет о построении компилятора и языковом дизайне.
(самая) общая вещь "CS", которая может реализовывать исключения, вероятно, является продолжением (как показано, среди прочего, Схемой). Если вы не читали "Структура и интерпретация компьютерных программ" (SICP, веб-страница здесь, включая полный текст), это может стоить давая быстрый проход, он слегка касается конструкции компилятора.
Ответ 6
Фактический механизм, используемый для вычисления модуля, может варьироваться между языками, а затем между реализацией каждого языка. Там есть информация об алгоритмах здесь.
Может быть, Алгоритмы - общая область, в которой вы заинтересованы?
Ответ 7
Никто не говорит о математике по модулю?
Первый семестр для медиаинформатики (я на пятом), курс: Математический:
10% 3 =?
x% y = z
Расчет:
- 10/3 = 3.33333
- 3.3333 округленное до 3
- 3 * 3 = 9
- 10 - 9 = 1
Как один формуляр:
10 - (Math.round(10/3) * 3) = 1
С переменными:
x% y = x - (Math.round(x/y) * y)
Понимание двоичного кода, и вы поймете, что каждая математическая операция основана на добавлении.
Ответ 8
В книге, упомянутой выше, "Элементы вычислительных систем: построение современного компьютера из первых принципов", Noam Nisan и Shimon Schocken, рассматриваются типы вопросов, которые вы поднимаете целостным образом: от архитектуры до виртуальной машины до компиляторов к ОС.
Ответ 9
Если вы не хотите тратить деньги, там есть замечательная книга под названием "Основы компьютерной организации и дизайна" здесь (PDF ссылка). Я также рекомендую "Код" Чарльзом Петцольдом, опубликованным Microsoft Press.