- 1 Enlaces de utilidad general
- 2 Enlaces relacionados con programación concurrente.
- 2.1 Generales
- 2.2 Lenguaje C++
- 2.3 Lenguaje Rust
- 2.4 Lenguaje Python
- 2.5 Lenguaje D
1 Enlaces de utilidad general
1.1 Editores/IDEs, tipos de letra, esquemas de colores.
- Lite-xl.
- VSCode. Si te gusta la privacidad deberías echar un vistazo a vscodium.
- SublimeText.
- Code::Blocks.
- Geany.
- Gnome Builder.
- GNU Emacs.
- Vi es, junto a Emacs, otro clásico editor de textos de los S.O. de la familia UNIX. Con el tiempo han ido apareciendo versiones mejoradas del mismo como Vim y Neovim.
- Cuida tus ojos, para programar es mejor emplear tipos de letra
mono-espaciados en lugar de proporcionales.
-
Usa un tamaño de letra apropiado, evita tamaños muy pequeños.
-
Aquí tienes ejemplos de tipos de letra apropiados para programar.
-
Y aquí algunos criterios para elegir un tipo de letra mono-espaciado.
-
Elige un esquema de color que no te produzca fatiga visual. Dos de los esquemas de colores que más tratan de conseguir esto son:
-
- Unicode y UTF-8/16/32. Aquí, aquí y aquí tienes más información. La página web del proyecto. Si vas a usar Unicode desde programas consulta estas bibliotecas.
1.2 Herramientas y recursos:
- The Impact of AI on Computer Science Education. No dejes de leer este artículo.
- Distcc. Distcc en la wikipedia. Ejemplo de programación distribuída.
- Ninja. Ejemplo de programación paralela. Make. Recuerda que con
la opción
-j
permite ejecutar procesos en paralelo. - GNU Parallel es una Herramienta que te permite ejecutar trabajos en paralelo.
- Git. Libro Pro Git. Gitmagic. Gitready. Gitflow: A successful Git branching model. Tutorial sobre Gitflow. How to Write a Git Commit Message.
- Learn X in Y minutes.
- Uncrustify: Source Code Beautifier.
- What Every Computer Scientist Should Know About Floating-Point Arithmetic.
- What Every Programmer Should Know About Memory.
- Es bueno y aconsejable que uses un depurador a nivel de código fuente como lldb o gdb, así como herramientas sobre ellos, tales como gdbgui y rr.
- Nemiver es un interfaz gráfico sobre gdb. Aquí tienes su manual.
- Y aquí tienes una lista de otros frontales sobre gdb. El propio gdb tiene un interfaz en modo texto basado en la biblioteca curses, gdb -tui tu-programa.
- En relación con la depuración a nivel de código fuente existen un par de términos curiosos:
- ¿Has llegado hasta aquí? ¿Te aburres?, juega un poco entonces o piensa como resolverías un cubo de Rubik de estas dimensiones.
- En alguna de las clases hemos hablado sobre los includes gratuitos y lo que suponen. En el código fuente del núcleo Linux se han propuesto eliminarlos.
2 Enlaces relacionados con programación concurrente.
2.1 Generales
- El pequeño libro de los semáforos.
- Parallelizing GCC’s Internals.
- Google Is Uncovering Hundreds Of Race Conditions Within The Linux Kernel.
- Las condiciones de carrera pueden tener consecuencias devastadoras.
- Intel proposes new SAPM memory type to protect against Spectre-like attacks.
- Computadores redundantes: “Uptime 15,364 days - The Computers of Voyager” by Aaron Cummings.
- Address/Thread/Memory Sanitizers. Específico de GCC (busca las
opciones
-fsanitize=XXXX
) y de LLVM (busca las opcionessanitizer
). Aquí tienes una comparativa con Valgrind. - Who’s afraid of a big bad optimizing compiler?
- ArrayFire is a high performance software library for parallel computing with an easy-to-use API.
- Problemas encontrados con el planificador de Linux, spinlocks y los desarrolladores de juegos de Stadia: aquí, aquí y aquí.
- Futex2 Linux Kernel patches get another go after feedback to help Linux gaming.
- Hacking Task Manager on 1024+ Cores w/ Cool Video Demos! Este vídeo muestra como crear, en un SO Windows, diferentes hilos para emplear el gestor de tareas como un reproductor de vídeo. El código se basa en este otro proyecto.
- Netflix y el false sharing (problemas con las líneas de cache).
- El depurador gdb dispone de órdenes que permiten depurar código multi-hilo.
- Cómo prevenir deadlocks.
- La página oficial del proyecto OpenMP.
2.2 Lenguaje C++
- Sobre el uso de C++/Stl en el desarrollo de juegos…pero echa un vistazo sobre el minuto 14:00, aparece algo que hemos visto en clase, algo que también menciona el propio Linus Torvalds en esta entrevista. También relacionado con consolas/videojuegos y reducción de costes. Y en este otro vídeo puedes ver por qué los desarrolladores p.e. de videojuegos suelen evitar usar STL (minuto 13 en adelante).
- El uso de excepciones en C++ es algo muy útil pero en arquitecturas actuales puede tener costes temporales muy altos.
- How to make C++ run FASTER (with std::async).
- Consulta el apartado de concurrencia y paralelismo en C++ dentro de las Cpp Core Guidelines.
- En uno de los temas hablamos sobre el uso/significado de
volatile
en Java. Te recomiendo que veas este video sobre el uso de volatile en C++. - C++ on Mars: Incorporating C++ into Mars Rover Flight Software. Destacar los minutos 4:27 (tests), 40:38 (caracteristicas no-usadas de C++), 1:09:00 (valgrind/purify) y 1:10:07 (equipos de desarrollo y test separados). Además en este vídeo se habla sobre VxWorks del cual hemos hablado en relación a la inversión de prioridades de los procesos.
- ¿Y si pudiéramos ejecutar código en tiempo de compilación?…El
caso es que se puede y de varias maneras, una de ellas es
constexpr
. Las capacidades de constexpr van ampliándose con el tiempo, mira en este vídeo lo que se puede lograr hoy en día.
2.3 Lenguaje Rust
- En esta serie de tutoriales sobre como escribir un Sistema
Operativo en Rust puedes ver algunos de los conceptos de bajo
nivel que hemos estado viendo en la asignatura. Hablando de SO
escritos en
Rust
puedes ver uno bastante avanzado en Redox OS. - En esta otra charla puedes ver explicados (min.
21:00
) los conceptos de propiedad (ownership) y préstamo (borrow) que emplea el lenguajeRust
para aplicarlos al acceso concurrente a datos. - Rust live-coding: concurrent data structures (más de 6h!).
- Concurrencia en Go, rust y python.
- Rust Concurrency Explained. Charla impartida por Alex Crichton, uno de los desarrolladores de Rust.
- A stack-less Rust coroutine library under 100 LoC.
- En el libro “The Rust Programming Language” tienes un capítulo al final sobre como crear un servidor web multi-hilo.
- Implementing truly safe semaphores in rust.
2.4 Lenguaje Python
- Echa un vistazo a este video sobre la migración de un
programador de Python a Rust. Alrededor del minuto
2:15
puedes ver una explicación de las pegas que Python tiene con multithreading. Parece que algunas de ellas tienen que ver con el mutex global del intérprete. - En relación con este mutex global consulta este enlace y este otro.
2.5 Lenguaje D
- En su canal de YouTube Ki Rill ofrece una serie de tutoriales para aprender D.
- Libro Programming in D, disponible en distintos formatos.
- En la charla “Helpful D Techniques”, Ali Çehreli habla sobre técnicas que emplea en programación concurrente al usar el lenguaje D.
- En esta otra charla, Ali Çehreli presenta las características de D de manera resumida y clara.