Подтвердить что ты не робот

Какую тему компьютерной науки я пытаюсь описать?

Я программировал около... 6- > 8 лет, и я начал понимать, что я действительно не знаю, что на самом деле происходит на низком уровне, когда я делаю что-то вроде

int i = j%348

Дело в том, что я знаю, что делает j% 348, он делит j на 348 и находит остаток. Я не знаю, КАК компьютер делает это.

Аналогично, я знаю, что

try
{
 blah();
}catch(Exception e){
 blah2();
}

будет вызывать blah, и если blah выбрасывает, он будет вызывать blah2... однако я понятия не имею, как компьютер делает это вместо err... сбой или завершение выполнения.

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

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

Точка вопроса:
Какую тему/компьютерно-научный курс я прошу? Потому что, честно говоря, я не знаю.

Поскольку я не знаю, как называется эта тема, я не могу найти книгу или онлайн-ресурс, чтобы узнать о теме, поэтому я как бы застрял. Я был бы вечно благодарен, если бы кто-то помог мне =/

4b9b3361

Ответ 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.