Programação C em 2011 [fechado]

19

Muitas luas atrás eu cortei o código C para sobreviver, principalmente mantendo um servidor POP3 que suportava uma ampla variedade de sistemas operacionais (Linux, * BSD, HPUX, VMS ...).

Estou planejando polir a ferrugem das minhas habilidades em C e aprender um pouco sobre a implementação da linguagem, codificando um FORTH simples em C.

Mas estou me perguntando como (ou se?) As coisas mudaram no mundo C desde 2000. Quando penso em C, acho ...

  1. comp.lang.c
  2. ANSI C sempre que possível (mas C89 como C99 não é tão amplamente suportado)
  3. gcc -Wall -ansi -pedantic em vez de ferramentas de análise estática
  4. Emacs
  5. Ctags
  6. Autoconf + make (e veja o ponto 2 para vantagens de VMS, HP-UX etc.)

Alguém que esteja escrevendo em C nos últimos onze anos pode me dizer o que (se alguma coisa ;-)) mudou ao longo dos anos?

(Em outras notícias, caramba, venho fazendo isso há mais de uma década).

Duncan Bayne
fonte
Também perguntei em comp.lang.c: groups.google.com/group/comp.lang.c/browse_thread/thread/…
Duncan Bayne
3
Bem, existe vi em vez de emacs, mas não irei lá. Eu ficaria surpreso se alguém ainda postasse no comp.lang.c, e até o concurso ofuscado em C está estagnado ( www0.us.ioccc.org/main.html ). Tempos tristes - o próximo novo concurso é para linhas ofuscadas de letras que soletram algumas frases de mensagens de texto, lol.
Jay Elston

Respostas:

10

É realmente difícil para mim pensar no passado como "Uau, como era a programação C há 10 anos?", Mas posso falar sobre algumas coisas que sei que estou fazendo de maneira diferente.

  • Embora você ainda possa convocar alguém como Peter Seebach no comp.lang.c para obter ajuda sobre um bug particularmente bobo que você suspeita estar relacionado à linguagem, a maioria, se não todas as perguntas de programação C, obtém respostas excepcionais no Stack Overflow.

  • A análise estática ainda é meio dolorosa. Splint (pelo menos até onde eu sei) não lida tão bem com C99, os gráficos de cobertura ainda são um pouco difíceis de visualizar. Os avisos do GCC "melhoraram" bastante (entre aspas, porque isso depende de quem você pergunta).

  • Valgrind é o santo de todos os verificadores de erros de memória e geralmente aponta para problemas no seu código que nenhuma ferramenta de análise estática poderia / poderia encontrar. Não é 100% perfeito, mas acho que não. Hoje em dia, raramente tenho que tocar no GDB, o que (nada pessoal) está bem comigo. A ferramenta maciço Valgrind também é um criador de perfil de pilha muito bom.

  • Sempre existem novas extensões no GCC, algumas delas sutis , por isso é uma boa idéia se a portabilidade for uma grande preocupação. Para o programador iniciante / enferrujado, às vezes é fácil confundir extensões com recursos de linguagem 'ocultos'.

  • O CCAN surgiu (pense no CPAN, mas para C) e está começando a decolar. Há muitas jóias úteis lá, incluindo uma adaptação do TAP, que é uma ferramenta de teste incrível. As strings em C ainda são ruins, mas o número e a qualidade das bibliotecas para ajudar a lidar com elas certamente aumentaram nos últimos dez anos.

  • SCons e CMake estão aumentando em popularidade na configuração de compilação. O Autoconf / Automake / Libtool ainda é amplamente utilizado, mas muitas pessoas se sentem um pouco limitadas pelo M4. Ainda assim, se esse é o sistema que você gosta de usar, o arquivo macro da Autoconf ainda está ativo e bem.

  • Obviamente, existem mais editores disponíveis hoje. Ainda não encontrei um "IDE" que não atrapalhasse ao trabalhar com C, mas provavelmente porque eu sou um evangelista velho e idiota que bebe Sanka por simplicidade.

No geral, porém, eu não diria que a vida (até onde C vai) é até quase profundamente diferente do que era há 10 anos. Mas, de várias maneiras, é realmente um pouco mais fácil. É difícil atribuir isso às ferramentas sobre a experiência.

Tim Post
fonte
15

glib pode ser a "nova biblioteca padrão". Ele oferece muito do que muitos sentem fora do padrão - segmentação e rede independentes de plataforma, estruturas de dados de contêineres etc. É claro que não é aplicável em todos os lugares, mas se você pode usá-lo, economiza muito tempo.

zvrba
fonte
Eu acho que você está confuso com o GNU C Library (glibc)
Lekensteyn
7
Não, não estou confuso.
Zvrba 26/05
1
Esta é uma resposta perfeitamente válida, não sei por que foi recusada. O glib nasceu de muitos frustrados com Ulrich Drepper e como o glibc é "protegido".
Tim Post
1
O Glib está completamente dissociado do GNOME agora, no entanto. Não estou discutindo sobre a associação, apenas que, em termos práticos, você pode ignorar completamente o GNOME e até o GTK +. Existem (bastante?) Linha de comando e programas não interativos escritos nela.
detly 26/05
3
Eu gosto de glib chamada "O STL do C"
Cercerilla
4
  1. StackOverflow ;)
  2. Eu uso o C principalmente para escrever firmware para os microcontroladores da Microchip, e como o compilador é baseado no GCC, uso o C99 (mas não enlouquece com os recursos extras, principalmente é para restringir o escopo das variáveis ​​de loop e matrizes dinâmicas na pilha). Quando escrevo extensões Python, continuo com o C89, caso alguém precise compilá-lo com o MSVC. Não sei o que todo mundo usa.
  3. Tala (obras em C89, C99 não) e analisador estático de Clang - embora, uma vez que ambos engasgar com o código de firmware macro-pesado, eu não tenho uma enorme quantidade de experiência com eles. Na verdade, grande parte das coisas do LLVM é bastante interessante para um geek em C.
  4. Ok, isso é apenas isca da guerra santa: P
  5. Nunca usei Ctags, mas sou parcial com Doxygen.
  6. Deus, eu odeio o Autoconf. Eu odeio muito isso. Eu nunca consegui criar uma bola de barro da Autoconf do zero. Se um projeto já tivesse um, eu acabaria bastardizando o que já está lá. Se estou escrevendo algo novo, discuto e elogio e procuro alternativas, apesar de estar condenado se encontrasse uma com a qual eu me ateria. A última vez que passei por esse ciclo, decidi pelos SCons, que eu poderia usar novamente.
detly
fonte
1
Eu também sugeriria o Cppcheck para análise estática.
Greg Hewgill
10
sobre o ponto número 6: "Eu vi um livro outro dia chamado 'Die Gnu Autotools', estava pensando em 'Heck Yeah!' até eu perceber que o título estava em alemão ".
Cercerilla
2

2) e 3) mudaram. C99 é mainstream, C90 está se tornando cada vez mais obsoleto. gcc -Wall -std=c99 -pedantic.

Além disso, as duas mudanças mais notáveis ​​ainda não abordadas em outras respostas são:

  • C11 ISO 9899: 2011.
  • MISRA-C: 2004.

fonte
1

A linguagem de programação C chegou às 2 ou 3 principais linguagens de programação do diário do Dr. Dobb em seu estudo / pesquisa mais recente.

Quanto à implementação de um idioma, C é usado para implementar um novo idioma que está sendo construído no Google, chamado Go (golang.org).

Não acompanhei o grupo usenet de C nos últimos anos. Eu visito seu canal de IRC Freenode frequentemente. É ativo e frequentado por muitos.

Novos programas estão sendo escritos em C, mas eles não recebem a publicidade que teriam se este ano fosse, digamos, 1999.

Isso é algo que vem ao topo da mente. Pode haver muito mais, mas espero que você permaneça em contato com o seu chapéu de programador, embora você não tenha frequentado o modelo C do chapéu :)

vpit3833
fonte
0

Eu acho que o suporte ao C99 é melhor do que você suspeita. O Visual Studio não suporta, mas todos os outros compiladores que eu consigo imaginar suportam (com, talvez algumas omissões aqui e ali). Se você não precisa de compatibilidade com o VS, diria que vá com o C99, pois é muito mais agradável escrever do que o C89 IMHO.

Cercerilla
fonte