Raniere Silva <[email protected]> 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 <[email protected]> > 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
pgpSC0V2EiH2t.pgp
Description: PGP signature
