Un ejemplo en el que no puede tener un control directo, incluso en un lenguaje de bajo nivel por encima del ensamblado, es el cambio de contexto en los procesos del sistema operativo o en los hilos del kernel (en realidad, puede encontrar muchos ejemplos interesantes si busca código de bajo nivel en los sistemas operativos ) De un vistazo, hay un proceso (el programador del sistema operativo / hipervisor) que se encarga de almacenar todo el estado del procesador (por ejemplo, registros de propósito especial y general) en la memoria de un proceso y restaurar un estado similar de un proceso diferente / hilo en el procesador (y luego, presionando “play”). Esto requiere la ejecución de instrucciones particulares que son específicas de ISA, es decir, específicas de la familia de procesadores en particular. También depende del estado que desee mantener igual después del cambio, por lo que puede haber algunos registros o estados que desee mantener compartidos. En cualquier caso, jugar con registros de CPU individuales requiere un nivel de control que está más allá de las capacidades de los lenguajes de programación regulares de alto nivel.
Por supuesto, aún puede ajustar una función de nivel superior (por ejemplo, C) alrededor de su código de ensamblaje y simplemente llamar a la función (y esto es casi siempre el caso en los núcleos del sistema operativo), e incluso entonces, puede ajustar una función de nivel aún más alto (por ejemplo, Matlab o Go o Haskell) alrededor del segundo y simplemente llame al de alto nivel. ¡Y puede compilar su código Haskell como un ejecutable y llamarlo desde un script de shell que se invoca a través de un intérprete interactivo nodejs implementado en C ++! Todo el campo de la informática se basa en esta idea de proporcionar niveles de abstracciones; lo que estoy tratando de decir es que el control es una declaración relativa con lenguajes de programación (y no un problema estricto de “lenguaje de ensamblaje versus lenguaje de alto nivel”). ), y para todas las “ciertas partes” de las soluciones de software hay idiomas que le brindan un “mayor control”.
- Si tengo un objeto que usan dos métodos diferentes en la clase, ¿debería convertirlo en una variable de instancia o una variable de método?
- Cómo construir un protocolo de software
- ¿En qué se diferencian los algoritmos estudiados en los libros de texto de los del mundo real que utilizan las compañías de software como Google, Amazon, Uber, etc.?
- ¿Debo realizar una pasantía de ingeniería de software en Twitter, Pinterest o Palantir?
- ¿Cuáles son las principales diferencias entre las herramientas de monitoreo de errores Bugsnag, Sentry y Rollbar?