A Linguagem de Programação D
"Me parece que a maioria das "novas" linguagens de programação se encaixam em uma entre duas categorias: Aquelas de academia, com novos paradigmas radicais, e aquelas de grandes corporações, com foco em RAD e na web. Talvez esteja na hora de uma nova linguagem surgir da experiência prática de implementar compiladores." -- Michael
"Legal, só o que eu preciso.. outro de D em programação." -- Segfault
D é uma linguagem de programação de sistemas. Seu foco está em combinar o poder e alto desempenho do C e C++ com a produtividade de linguagens modernas como Ruby e Python. Atenção especial é dada às necessidades de garantia de qualidade, documentação, gerenciamento, portabilidade e confiança.
D é tipada estáticamente, e é compilada para código nativo. ê multiparadigma: suporta os estilos imperativo, orientado a objetos e multiprogramação de gabaritos. ê membro da família com sintaxe igual ao C, e sua aparência é próxima da do C++. Para uma rápida comparação de características, veja essa comparação de D com C, C++, C# e Java.
Ela não é governada por uma agenda corporativa ou qualquer teoria de programação de sobrearquivar. As necessidades e contribuições da comunidade de programação em D toma as decisões.
Atualmente existem duas implementações:
- Digital Mars DMD para Win32 e Linux x86;
- GCC D Compiler para várias plataformas, incluindo Windows e Mac OS X.
Uma grande e crescente coleção de código e projetos em D está no dsource. Mais links para incontáveis wikis, bibliotecas, artigos, etc, estão em dlinks.
Esse documento também está disponível em:
Também está disponível o livro japonês D Language Perfect GuideEste é um programa de exemplo ilustrando algumas das capacidades:
#!/usr/bin/dmd -run
/* stiko de script sh suportado */
/* Hello World em D
Para compilar:
dmd hello.d
ou para otimizar:
dmd -O -inline -release hello.d
*/
import std.stdio;
void main(char[][] args)
{
writefln("Hello World, Reloaded");
// inferência de tipo automatica e foreach nativo
foreach(argc, argv; args)
{
// Orientado a Objetos
CmdLin cl = new CmdLin(argc, argv);
// printf melhorado
writefln(cl.argnum, cl.suffix, " arg: %s", cl.argv);
// Gerenciamento de memoria automatico ou explicito
delete cl;
}
// classes e estruturas aninhadas
struct specs
{
// todos os membros inicializados automaticamente
int count, allocated;
}
// funcoes aninhadas podem se referir
// a variaveis mais externas, como args
specs argspecs()
{
specs* s = new specs;
// nenhuma necessidade para'->'
s.count = args.length; // pega o comprimento do vetor com .length
s.allocated = typeof(args).sizeof; // propriedades de tipo nativas
foreach(argv; args)
s.allocated += argv.length * typeof(argv[0]).sizeof;
return *s;
}
// built-in string and common string operations
writefln("argc = %d, " ~ "allocated = %d", argspecs().count, argspecs().allocated);
}
class CmdLin
{
private int _argc;
private char[] _argv;
public:
this(int argc, char[] argv) // constructor
{
_argc = argc;
_argv = argv;
}
int argnum()
{
return _argc + 1;
}
char[] argv()
{
return _argv;
}
char[] suffix()
{
char[] suffix = "th";
switch(_argc)
{
case 0:
suffix = "st";
break;
case 1:
suffix = "nd";
break;
case 2:
suffix = "rd";
break;
default:
break;
}
return suffix;
}
}
Nota: Todos os usuários de de aceitam que baixando e usando D, ou lendo as especificações, identificarão explícitamente quaisquer direitos de propriedade intelectual com uma notícia de direito autoral ou patente em qualquer comentário enviado à Digital Mars.