No momento que estou escrevendo isso ainda sou um estudante da 42, e como uma escola que te ensina a programar, a 42 tem uma variedade de projetos, grande parte deles pode ser utilizado para experimentar as capacidades de uma linguagem de programação, por motivos óbvios eu não vou descrever o projeto inteiro, só o esperado, de resto:
“Por Thor, por Odin, use seu cérebro.” -PDF 2013-2024
FT_Philosophers 🍴
Esse é bem simples, simplesmente resolva o problema do jantar dos filósofos, seu programa deve receber argumentos na chamada do programa:
Número de filósofos;
Tempo de vida em milissegundos;
Duração de um jantar em milissegundos;
Duração do sono deles em milissegundos;
Opcionalmente o número de jantares de cada um;
O programa deve ter uma thread para cada filósofo e deve trabalhar com mutex (ou qualquer coisa similar na sua linguagem).
Outra opção é fazer o projeto com forks e semáforos.
FT_Minitalk 👂🗨️
Fazer uma simples comunicação entre 2 programas, um cliente que recebe um PID e uma string e deve enviar o texto dessa string para o servidor via sinais (SIGUSR1 e SIGUSR2 de preferência), e o servidor vai exibir seu PID, receber uma string por bits e imprimir essa string.
FT_Pushswap 🔄️⤴️⤵️
Um programa baseado na Torre de Hanói, onde você deve ordenar uma sequência numérica usando 2 stacks, como você só tem 2 “torres” ao invés de 3, você tem mais liberdade com os movimentos para a stack A e B, desde empurrar um número do topo da stack A para o topo da B e vice-versa, rotacionar eles 1 posição para baixo, rotacionar eles 1 posição para cima, até trocar os 2 números do topo da stack A ou B. A regra de números grandes não poderem ficar em cima de números pequenos é descartada por motivos óbvios.
FT_Minishell 🔥
Simplesmente recrie o bash… Não ele inteiro, mas sim:
executar comandos baseados no PATH, caminho relativo e absoluto;
expandir variáveis de ambiente;
refazer as builtins env, export, cd, echo, pwd, unset e exit;
lidar com Ctrl+D, Ctrl+ e Ctrl+C;
redirecionamentos e heredoc;
Histórico de comandos;
Para facilitar um pouco, você pode usar uma biblioteca de readline, aspas abertas podem ser um erro, a única opção de builtin que precisa ser feito é o -n do echo e o heredoc não precisa ser parte do histórico… De resto, boa sorte (você vai precisar).
FT_Solong 🕹️
Um simples jogo 2D onde o jogador deve coletar itens e depois ir até a saída. O programa deve ler o mapa a partir de um arquivo onde caracteres representam:
1 parede;
0 espaço vazio;
c coletável;
e saída;
p posição inicial do personagem;
FT_Fdf 🪢
A simples renderização de um modelo de arame, o programa deve ler de um arquivo a configuração de cada ponto e vértice desse modelo, onde a posição horizontal e vertical no arquivo é igual à posição x e y e o valor de cada posição representa a altura no eixo z.
FT_Fractol ❄️
A renderização de fractais sendo só obrigatório o conjunto Mandelbrot e o conjunto Julia.
FT_Cub3d 🎮
Similar ao solong, porém a renderização é feita com raycasting, não há coletáveis nem saída e a posição inicial agora é representada por N, S, W ou E.
FT_Minirt 🩻
Renderização de objetos com luz e sombra com raytracing, os objetos são apenas uma esfera, um plano e um cilindro.
Um arquivo possui informações sobre cada objeto da cena, a posição da câmera, a rotação de cada objeto, a origem da luz, a força da luz ambiente e a direção da câmera.
FT_Irc 💬🗨️
Criação de um servidor que recebe e responde requisições do protocolo IRC.
FT_Webserv 🛜
Criação de um servidor que recebe e responde requisições do protocolo HTTP.
IN CONCLUSION
Existe mais um projeto que pode ser interessante, mas vou optar por ocultá-lo.
Escolhi os projetos anteriores por explorarem conceitos como threads, processos, bibliotecas gráficas, parsing e sockets, creio que esses são conceitos que toda linguagem deve permitir e logo te fazem explorar todas as capacidades de uma linguagem… Ou a falta delas.