You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Panicking is a core part of the Rust language. Built-in operations like indexing
4
-
are runtime checked for memory safety. When out of bounds indexing is attempted
5
-
this results in a panic.
3
+
El pánico es una parte fundamental del lenguaje Rust. Las operaciones integradas, como la indexación,
4
+
se someten a comprobaciones de seguridad de memoria en tiempo de ejecución. Cuando se intenta indexar fuera de los límites,
5
+
esto provoca un pánico.
6
6
7
-
In the standard library panicking has a defined behavior: it unwinds the stack
8
-
of the panicking thread, unless the user opted for aborting the program on
9
-
panics.
7
+
En la biblioteca estándar, el pánico tiene un comportamiento definido: desenrolla la pila (stack) del hilo que entró en pánico, a menos que el usuario haya optado por abortar el programa cuando ocurre un pánico.
8
+
9
+
En programas sin biblioteca estándar, el comportamiento ante un pánico queda
10
+
indefinido. Se puede definir un comportamiento declarando una función `#[panic_handler]`.
11
+
Esta función debe aparecer exactamente *una vez* en el grafo de dependencias del programa,
12
+
y debe tener la siguiente firma: `fn(&PanicInfo) -> !`, donde [`PanicInfo`]
13
+
es una estructura que contiene información sobre la ubicación del pánico.
10
14
11
-
In programs without standard library, however, the panicking behavior is left
12
-
undefined. A behavior can be chosen by declaring a `#[panic_handler]` function.
13
-
This function must appear exactly *once* in the dependency graph of a program,
14
-
and must have the following signature: `fn(&PanicInfo) -> !`, where [`PanicInfo`]
15
-
is a struct containing information about the location of the panic.
Given that embedded systems range from user facing to safety critical (cannot
20
-
crash) there's no one size fits all panicking behavior but there are plenty of
21
-
commonly used behaviors. These common behaviors have been packaged into crates
22
-
that define the `#[panic_handler]` function. Some examples include:
18
+
Dado que los sistemas embebidos abarcan desde sistemas de cara al usuario hasta sistemas críticos para la seguridad (que no pueden fallar), no existe un comportamiento de pánico universal, pero sí muchos comportamientos de uso común. Estos comportamientos comunes se han empaquetado en crates que definen la función `#[panic_handler]`. Algunos ejemplos son:
23
19
24
-
-[`panic-abort`]. A panic causes the abort instruction to be executed.
25
-
-[`panic-halt`]. A panic causes the program, or the current thread, to halt by
26
-
entering an infinite loop.
27
-
-[`panic-itm`]. The panicking message is logged using the ITM, an ARM Cortex-M
28
-
specific peripheral.
29
-
-[`panic-semihosting`]. The panicking message is logged to the host using the
30
-
semihosting technique.
20
+
-[`panic-abort`]. El pánico provoca la ejecución de la instrucción de aborto.
21
+
-[`panic-halt`]. Un pánico provoca que el programa, o el hilo actual, se detenga al entrar en un bucle infinito.
22
+
-[`panic-itm`]. El mensaje de pánico se registra utilizando el ITM, un periférico específico para ARM Cortex-M.
23
+
-[`panic-semihosting`]. El mensaje de pánico se registra en el host utilizando la técnica de semihosting.
A program can pick one of these behaviors simply by linking to the corresponding
43
-
crate. The fact that the panicking behavior is expressed in the source of
44
-
an application as a single line of code is not only useful as documentation but
45
-
can also be used to change the panicking behavior according to the compilation
46
-
profile. For example:
34
+
Un programa puede seleccionar uno de estos comportamientos simplemente vinculándolo al crate correspondiente.
35
+
El hecho de que el comportamiento de pánico se exprese en el código fuente de
36
+
una aplicación como una sola línea de código no solo es útil como documentación, sino que
37
+
también se puede usar para cambiar el comportamiento de pánico según el perfil de compilación.
38
+
Por ejemplo:
47
39
48
40
```rust,ignore
49
41
#![no_main]
50
42
#![no_std]
51
43
52
-
// dev profile: easier to debug panics; can put a breakpoint on `rust_begin_unwind`
44
+
// perfil de desarrollo: Es más fácil depurar los errores críticos; se puede establecer un punto de interrupción en `rust_begin_unwind`.
53
45
#[cfg(debug_assertions)]
54
46
use panic_halt as _;
55
47
56
-
// release profile: minimize the binary size of the application
48
+
// Perfil de lanzamiento: minimizar el tamaño binario de la aplicación.
57
49
#[cfg(not(debug_assertions))]
58
50
use panic_abort as _;
59
51
60
52
// ..
61
53
```
62
54
63
-
In this example the crate links to the `panic-halt`crate when built with the
64
-
dev profile (`cargo build`), but links to the `panic-abort`crate when built
65
-
with the release profile (`cargo build --release`).
55
+
En este ejemplo, la crate enlaza con la crate `panic-halt`cuando se compila con el
56
+
perfil de desarrollo (`cargo build`), pero enlaza con la crate `panic-abort`cuando se compila
57
+
con el perfil de lanzamiento (`cargo build --release`).
66
58
67
-
> The `use panic_abort as _;` form of the `use` statement is used to ensure the `panic_abort` panic handler is
68
-
> included in our final executable while making it clear to the compiler that we won't explicitly use anything from
69
-
> the crate. Without the `as _` rename, the compiler would warn that we have an unused import.
70
-
> Sometimes you might see `extern crate panic_abort` instead, which is an older style used before the
71
-
> 2018 edition of Rust, and should now only be used for "sysroot" crates (those distributed with Rust itself) such
72
-
> as `proc_macro`, `alloc`, `std`, and `test`.
59
+
> La forma `use panic_abort as _;` de la instrucción `use` se
60
+
> utiliza para asegurar que el manejador de pánico `panic_abort` se incluya en nuestro ejecutable final, dejando claro al compilador que no utilizaremos explícitamente nada de la crate.
61
+
> Sin el cambio de nombre `as _`, el compilador advertiría de una importación no utilizada.
62
+
> En ocasiones, se puede encontrar `extern crate panic_abort`, un estilo antiguo utilizado antes de la edición de Rust de 2018,
63
+
> y que ahora solo debe usarse para crates "sysroot" (los que se distribuyen con Rust), como `proc_macro`, `alloc`, `std` y `test`.
73
64
74
-
## An example
65
+
## Un ejemplo
75
66
76
-
Here's an example that tries to index an array beyond its length. The operation
77
-
results in a panic.
67
+
Aquí tienes un ejemplo que intenta acceder a un índice de un array más allá de su longitud. La operación resulta en un error grave.
78
68
79
69
```rust,ignore
80
70
#![no_main]
@@ -94,14 +84,13 @@ fn main() -> ! {
94
84
}
95
85
```
96
86
97
-
This example chose the `panic-semihosting`behavior which prints the panic
98
-
message to the host console using semihosting.
87
+
Este ejemplo eligió el comportamiento `panic-semihosting`que imprime el mensaje de pánico
0 commit comments