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

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

int i = j%348

Вещь, я знаю то, что делает j%348, это делит j на 348 и находит остаток. То, что я не знаю, - ТО, КАК компьютер делает это.

Точно так же я знаю это

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

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

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

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

Точка вопроса:
О каком topic/computer-science-course я спрашиваю? Поскольку во всей честности, я не знаю.

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

18
задан Dinah 29 April 2010 в 19:01
поделиться

9 ответов

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

Я нашел этот ресурс, и это очень здорово: http://en.wikibooks.org/wiki/X86_Disassembly

По сути, это сборник, объясняющий некоторые концепции выполнения кода более высокого уровня. в сборке, и есть несколько примеров, где показано, как функции и т. д. могут быть сгенерированы в сборке компилятором.

7
ответ дан 30 November 2019 в 08:48
поделиться

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

Некоторые хорошие книги по компьютерной архитектуре, если вам интересно немного больше о том, как компьютер выполняет программу:

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

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

12
ответ дан 30 November 2019 в 08:48
поделиться

Я думаю, вы смотрите на то, как компилятор переводит код языка высокого уровня в машинные инструкции. Взгляните на дизайн компилятора. Это классическая книга .

1
ответ дан 30 November 2019 в 08:48
поделиться

Первая часть может считаться компьютерной инженерией, а вторая - просто языковым дизайном.

1
ответ дан 30 November 2019 в 08:48
поделиться

Вышеупомянутая книга «Элементы вычислительных систем: построение современного компьютера из первых принципов», написанная Ноамом Нисаном и Шимоном Шокеном, рассматривает типы вопросов, которые вы поднимаете, комплексно: от архитектуры до виртуальной машины и компиляторов. в ОС.

0
ответ дан 30 November 2019 в 08:48
поделиться

Звучит смутно, как будто вы говорите о построении компилятора и проектировании языка.

Самая общая "вещь CS", которая может реализовать исключения - это, вероятно, продолжения (как, например, в Scheme). Если вы не читали Thouhg "Structure and Interpretation of Computer Programs" (SICP, веб-страница здесь, включая полный текст), возможно, стоит просмотреть его, он слегка касается построения компиляторов.

1
ответ дан 30 November 2019 в 08:48
поделиться

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

Может быть, вас интересуют алгоритмы?

0
ответ дан 30 November 2019 в 08:48
поделиться

Никто не говорит о математике по модулю? Первый семестр по медиаинформатике (я учусь на пятом), курс: Математика:

10% 3 =?
x% y = z

Расчет:

  1. 10/3 = 3,33333
  2. 3,3333 с округлением до 3
  3. 3 * 3 = 9
  4. 10–9 = 1

В виде одной формулы:
{{1 }} 10 - (Math.round (10/3) * 3) = 1

С переменными:
x% y = x - (Math.round (x / y) * y)

Понимая двоичный код, вы поймете, что каждая математическая операция основана на сложении.

0
ответ дан 30 November 2019 в 08:48
поделиться

Если вы не хотите тратить деньги, есть отличная книга под названием «Основы компьютерной организации и дизайна» здесь ( Ссылка в формате PDF). Я также рекомендую «Код» Чарльза Петцольда, опубликованный Microsoft Press.

0
ответ дан 30 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: