2010-03-01 12 views
17

He estado programando durante ... 6-> 8 años, y he empezado a darme cuenta de que realmente no sé lo que realmente sucede en el nivel bajo cuando hago algo como¿Qué tema de informática estoy tratando de describir?

int i = j%348 

El problema es que sé lo que hace j% 348, divide j por 348 y encuentra el resto. Lo que no sé es CÓMO la computadora hace esto.

Del mismo modo, sé que

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

invocarán blah y si bla lanza, invocará blah2 ... sin embargo, no tengo ni idea de cómo la computadora hace esto en vez de err ... que se caiga o terminando la ejecución.

Y me imagino que para poder "mejorar" la programación, probablemente debería saber lo que mi código realmente está haciendo. [Esto probablemente también me ayude a optimizar y ... errar ... no hacer cosas estúpidas]

Me imagino que lo que estoy pidiendo es probablemente algo enorme que se enseña en las universidades o algo así, pero para ser sincero, si Podría aprender un poco, sería feliz.

El objetivo de la pregunta es:
¿Qué tema/ciencias de la computación curso estoy preguntando? Porque honestamente, no sé.

Como no sé cómo se llama el tema, no puedo encontrar realmente un libro o un recurso en línea para aprender sobre el tema, así que estoy algo atrapado. Estaría eternamente agradecido si alguien me ayudó =/

Respuesta

6

Debe mirar en primer conjunto, y luego entrar en el diseño de compiladores. Si no sabes ensamblar, estarás completamente perdido con el diseño del compilador. Personalmente estoy comenzando con el ensamblaje, por la razón exacta por la que lo es: quiero entender lo que mi código está haciendo en un nivel inferior.

me encontré con este recurso, que es muy fresco: http://en.wikibooks.org/wiki/X86_Disassembly

Básicamente se trata de un libro de montaje que explica algunos de los conceptos de cómo código de nivel superior que se ejecuta en el montaje, y tiene algunos ejemplos en los que se muestra cómo funciona, etc. podría ser generado en ensamblado por un compilador.

+0

+1 para ensamblaje. Definitivamente lo ayuda a dar una idea de lo que ocurre "detrás" de todos esos ingeniosos azúcares sintácticos que le proporciona su lenguaje. – HeDinges

+0

He decidido seguir lo que me sugirieron. Aprenderé ensamblaje, y después de eso, entraré en el diseño del compilador. Gracias por la sugerencia. – Warty

+2

Actualización: Unos meses después y va bastante bien. Escribir un intérprete simple para un lenguaje simple. Aún no estoy escribiendo un compilador, pero espero hacerlo en el próximo año más o menos. – Warty

1

La primera parte puede considerarse ingeniería informática, pero la segunda es solo diseño de lenguaje.

12

Diría que la primera parte es arquitectura de computadora, mientras que la segunda parte es lenguaje de programación.

Algunos buenos libros sobre la arquitectura de computadores, si usted está interesado en entender un poco más sobre cómo el equipo ejecuta un programa son:

No estoy seguro de qué recomendar para comprender las construcciones del lenguaje de programación, como capturar excepciones. Probablemente un buen libro de compiladores.

Especialmente con su segundo ejemplo, los diferentes lenguajes de programación pueden implementarse de manera muy diferente. Por ejemplo, un lenguaje que se ejecuta en una máquina virtual como Java tendría la máquina virtual para protegerlo y lanzar ciertos tipos de excepciones, mientras que en C++ esto se manejaría de manera diferente.

+0

+1 para los elementos de los sistemas de computación. ¡Ese libro es increíble! – Dinah

1

Creo que está viendo cómo un compilador traduce un código de idioma de alto nivel a las instrucciones de la máquina. Eche un vistazo al diseño del compilador. Este es un clásico book.

+3

WOAH! Reconozco la portada! ¡Sé que mi padre tiene ese libro! Cuando era pequeño, solía mirar la portada del libro y pensar que era un libro de cuentos de hadas. – Warty

+0

@Itz - +1 por haber pensado que el libro del dragón era un cuento de hadas :) – Cam

+1

@Itz +1 por tener un padre que tiene el libro del dragón. –

1

Suena vagamente como si estuvieras hablando de construcción de compiladores y diseño de lenguaje.

La (más) general "cosa de CS" que puede implementar excepciones es probablemente continuación (como se encuentra, entre otras cosas, Scheme). Si no ha leído "Estructura e Interpretación de Programas de Computadora" (SICP, Web page here, including full text), puede valer la pena darle un rápido vistazo, toca ligeramente la construcción del compilador.

0

El mecanismo real utilizado para calcular el módulo es probable que varíe entre los idiomas y luego entre la implementación de cada idioma. Hay algo de información sobre los algoritmos here.

Quizás Algorithms es el área general que le interesa?

0

Nadie está hablando de Mathematic for modulo? Primer semestre para informática de medios (estoy en el quinto), curso: Matemáticas:

10% 3 =?
x% y = z

Cálculo:

  1. 10/3 = 3,33333
  2. 3,3333 redondeado a 3
  3. 3 * 3 = 9
  4. 10 - 9 = 1

Como uno formular:
10 - (Math.round (10/3) * 3) = 1

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

entendimiento binario y usted entenderá, que cada operación matemática se basa en la adición.

0

El libro mencionado anteriormente, "Los elementos de los sistemas de computación: construyendo una computadora moderna a partir de los primeros principios", por Noam Nisan y Shimon Schocken, aborda los tipos de preguntas que plantea de forma holística: de la arquitectura a la VM compiladores al sistema operativo.

0

Si no quiere gastar dinero, hay un gran libro llamado "Fundamentos de organización y diseño de computadoras" disponible en here (enlace PDF). También recomiendo "Code" de Charles Petzold, publicado por Microsoft Press.

Cuestiones relacionadas