libreplanet-br-sp
[Top][All Lists]
Advanced

[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

Attachment: pgpEIXbqKFckM.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]