[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [lp-br-sp] Patch para aula de compilação
From: |
Gabriel Krisman Bertazi |
Subject: |
Re: [lp-br-sp] Patch para aula de compilação |
Date: |
Thu, 12 Mar 2015 15:07:58 -0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
Raniere Silva <address@hidden> writes:
> Como ainda não foi convencionado com contribuir.
Oi,
Demorei para responder porque, como a aula de compilação em MC102 já tinha
passado quando você mandou o patch, essas modificações só seriam usadas
no ano que vem.
Tem que ver o que o Sérgio acha melhor para contribuir.
Com certeza repetindo coisas que o Sergio já falou...
>
> From 9c313e5e12d60bd14414924932b2f3b84ad06d42 Mon Sep 17 00:00:00 2001
> From: Raniere Silva <address@hidden>
> Date: Mon, 9 Mar 2015 11:59:50 -0300
> Subject: [PATCH] =?UTF-8?q?Melhorado=20slides=20de=20compila=C3=A7=C3=A3o?=
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> ---
> bixos/compilacao.tex | 75
> ++++++++++++++++++++++++++++++++++++----------------
> 1 file changed, 52 insertions(+), 23 deletions(-)
>
> diff --git a/bixos/compilacao.tex b/bixos/compilacao.tex
> index cc4eeaf..b44d117 100644
> --- a/bixos/compilacao.tex
> +++ b/bixos/compilacao.tex
> @@ -84,40 +84,60 @@
> \item \texttt{-o meu\_programa} : Informa o nome do arquivo de saída.
> \item \texttt{-Wall} : Ativa todos os Warnings do compilador.
> \item \texttt{-Werror} : Transforma os Warnings em erros.
> - \item Existem diversas outras flags úteis: \texttt{-g}, \texttt{-O3},
> \texttt{-pedantic}, ...
> + \item Existem diversas outras flags úteis: \texttt{-c}, \texttt{-g},
> \texttt{-O3}, \texttt{-pedantic}, ...
Os alunos sabem o que é um linker, qual a sua utilidade e porque não
terminar o estágio de linkagem? Vamos explicar tudo isso, ou eles
precisam saber tudo isso estando em MC102? Acho que explicar essa flag
vai só confundir e não vai ajudar nada em explicar o que vem depois.
> \end{itemize}
> \end{itemize}
> +\end{frame}
>
> - \begin{itemize}
> - \item Executando seu programa:
> - \end{itemize}
> - \begin{shell}[0.9]
> - \usercmd{./meu\_prog}
> +
> +\begin{frame}{Executando o código que compilou}
> +
> + \begin{shell}[0.9]
> + \usercmd{./meu\_prog [parametros] [io]}
> \end{shell}
> + \begin{itemize}
> + \item parâmetros para o seu programa.
> + \item io:
> + \begin{itemize}
> + \item \texttt{<} : entrada
> + \item \texttt{>} : saída
> + \item \texttt{>>} : saída (\textbf{incrementa})
> + \item ``Here document'':
> + \begin{shell}[0.9]
> + \usercmd{./meu\_prog <<EOF} \\
> + \code{foo} \\
> + \code{bar} \\
> + \code{EOF}
> + \end{shell}
> + \end{itemize}
> + \end{itemize}
>
Redirecionamento de E/S já é discutido na aula de shell em detalhes,
inclusive com imagens explicativas. Talvez seja interessante mover
aquela parte para cá, mas tome cuidado para não duplicar.
Também, como o Sérgio falou, eu tiraria o "Here Document" daqui. Acho
que um bom 'rule of thumb' é: se eles não vão esbarrar nisso logo
(i.e. não faz parte da realidade deles de primeiro semestre), não
coloque. Acho que a ideia do curso é fornecer o básico para se virar no
dia-a-dia do ecossistema GNU, além de fornecer uma base de filosofia.
Ao ir muito além disso, com exemplos mais complexos, corremos o risco de
sermos contraproducentes.
DISCLAIMER sobre a aula de fundamentos: o que falamos nessa aula também
é só uma base de como o sistema funciona. Nesse semestre citamos libc,
que talvez seja um tópico mais avançado, porque eles usam algumas
funções dela em MC102, então é legal saber de onde elas vem. O material
usado nessa aula está disponível em:
<http://libreplanetbr.org/files/aulas_bixos_unicamp/2015/dia02/fundamentos.pdf>
>
> -\begin{frame}{Hello World!}
> +\begin{frame}{Hello World! -- Exercício}
> \begin{center}
> - Exercício - Escrever, compilar e executar um programa simples no
> GNU/Linux.
> -
> -
> -%% \begin{shell}[0.9]
> -%% \code{\#include <stdio.h>}\\
> -%% \\
> -%% \code{int}\\
> -%% \code{main ()}\\
> -%% \code{\{}\\
> -%% \end{shell}
> -%% \begin{shell}[0.8]
> -%% \usercmd{./meu\_prog > output.txt}
> -%% \end{shell}
> + Escrever, compilar e executar um programa simples no GNU/Linux.
> \end{center}
> \end{frame}
>
> +\begin{frame}{Hello World! -- Solução}
> + \begin{shell}[0.9]
> + \usercmd{cat meu\_prog.c} \\
> + \code{\#include <stdio.h>}\\
> + \\
> + \code{int}\\
> + \code{main ()}\\
> + \code{\{}\\
> + \code{ printf(``Hello world!'');}\\
> + \code{ return 0;}\\
> + \code{\}}\\
> + \usercmd{./meu\_prog > saida.txt}
> + \end{shell}
> +\end{frame}
Depende de como você quer mostrar isso. A ideia de quebrar em dois
frames é que eles façam sozinhos, antes de mostrar o código? Se for, eu
discordo da inclusão desse hunk porque devemos assumir que eles não
sabem nada de programação.
Sendo a ideia mostrar o código imediatamente e fazer os alunos apenas
executaram os comandos de compilação e execução, podemos juntar o código
num slide só e no outro escrever os comandos que serão usados. O que
acha?
> +
> \begin{frame}{Comparando a saída}
> \begin{itemize}
> \item {diff - Compara dois arquivos de entrada.}
> @@ -140,12 +160,10 @@
> \end{itemize}
> \end{frame}
>
> -\begin{frame}{Aulas de GNU/Linux úteis}
> +\begin{frame}{Dicas básicas}
> \begin{itemize}
> \item A tecla Tab auto-completa nome de programas, caminho para arquivos,
> etc.
> -% \item Para rodar um comando em modo de super-usuário, utilize o comando
> -% \emph{sudo}
> \item Existe também o comando \emph{man}. Ele recebe o nome de um
> comando/função/etc.
> como argumento e exibe o seu manual.
> \item Outra convenção muito útil é implementar textos de ajuda e de versão.
> @@ -163,6 +181,17 @@
> \end{center}
> \end{frame}
>
> +\begin{frame}{Dicas avançadas}
> + \begin{itemize}
> + \item \texttt{gdb} é seu amigo para as horas difíceis.
> + \item binutils possui ferramentas úteis:
> + \begin{itemize}
> + \item \texttt{nm}: lista símbolos nos objetos.
> + \item \texttt{objdump}: mostra informações dos objetos.
> + \end{itemize}
> + \end{itemize}
> +\end{frame}
> +
Concordo com o Sérgio em tirar esse frame. GDB é overkill em MC102 e
muito provavelmente eles não vão usar. Sobre nm e objdump, eu mesmo só
devo ter usado a partir do segundo ano da graduação quando, enfim, seria
necessário me preocupar em aprender o que era um linker. Em MC102,
saber o que é um símbolo ou como desmontar o programa não terão
utilidade prática nenhuma!
Alias, esse primeiro slide de dicas é um ótimo candidato para sumir ou
ir para dentro da aula de shell.
--
Gabriel Krisman Bertazi
pgpEIXbqKFckM.pgp
Description: PGP signature