开发者

What computer science topic am I trying to describe?

开发者 https://www.devze.com 2022-12-22 00:13 出处:网络
I\'ve been programming for around... 6->8 years, and I\'ve begun to realize that I don\'t really know what really happens at the low-ish level when I do something like

I've been programming for around... 6->8 years, and I've begun to realize that I don't really know what really happens at the low-ish level when I do something like

int i = j%348

The thing is, I know what j%348 does, it divides j by 348 and finds the remainder. What I don't know is HOW the computer does this.

Similarly, I know that

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

will invoke blah and if blah throws, it will invoke blah2... however, I have no idea how the computer does this instead of err... crashing or ending execution.

And I figure that in order for me to get "better" at programming, I should probably know what my code is really doing. [This would probably also help me optimize and... err... not do stupid things]

I figure that what I'm asking for is probably something huge taught in universities or something, but to be honest, if I could learn a little, I would be happy.

The point of the question is:

What topic/computer-science-course am I asking about? Because in all honesty, I don't know.

Since I don't know what the topic is called, I'm unable to actually find a book 开发者_如何学Cor online resource to learn about the topic, so I'm sort of stuck. I'd be eternally thankful if someone helped me =/


I would say the first part is computer architecture, while the second part is programming language.

Some good books on computer architecture, if you are interested in understanding a bit more on how the computer executes a program are:

  • The Elements of Computing Systems: Building a Modern Computer from First Principles, By Noam Nisan and Shimon Schocken
  • Structured Computer Organization, by Andrew Tanenbaum

I'm not sure what to recommend for understanding programming language constructs such as catching exceptions. Probably a good compilers book.

Especially with your second example, different programming languages might be implemented very differently. For example, a language running on a virtual machine such as Java, would have the virtual machine to protect it and throw certain types of exceptions, while in C++ this would be handled differently.


You should look into assembly first, and then get into compiler design. If you don't know assembly you'll be completely lost with compiler design. I'm personally just starting with assembly, for the exact reason you are - I want to understand what my code is doing at a lower level.

I found this resource, which is very cool: http://en.wikibooks.org/wiki/X86_Disassembly

Basically it's an assembly book that explains some of the concepts of how higher level code is executed in assembly, and has some examples where it shows how functions etc might be generated in assembly by a compiler.


The first part might be considered computer engineering, but the second is just language design.


I think you are looking at how a compiler translates a high-level language code to machine instructions. Have a look at compiler design. This is a classic book.


Sounds vaguely like you're talking about compiler construction and language design.

The (most) general "CS thing" that can implement exceptions is probably continuations (as found in, among other things, Scheme). If you haven't read thouhg "Structure and Interpretation of Computer Programs" (SICP, Web page here, including full text) it may be worth giving a quick go-through, it touches lightly on compiler construction.


The actual mechanism used to calculate the modulus is likely to vary between languages and then between the implementation of each language. There some information about the algorithms here.

Maybe Algorithms is the general area you're interested in?


No one is talking about Mathematic for modulo? First semester for media informatics (I'm in the fifth), course: Mathematic:

10 % 3 = ?
x % y = z

Calculation:

  1. 10 / 3 = 3.33333
  2. 3.3333 rounded to 3
  3. 3 * 3 = 9
  4. 10 - 9 = 1

As one formular:
10 - (Math.round(10 / 3) * 3) = 1

With variables:
x % y = x - (Math.round(x / y) * y)

Understanding binary and you will understand, that each math operation is based on addition.


The book mentioned above, "The Elements of Computing Systems: Building a Modern Computer from First Principles", By Noam Nisan and Shimon Schocken, addresses the types of questions that you raise in a holistic way: from architecture to VM to compilers to OS.


If you don't want to spend any money, there's a great book called "Computer Organization and Design Fundamentals" available here (PDF link). I also recommend "Code" by Charles Petzold, published by Microsoft Press.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号