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:

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 Guide

Este é 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.

Page generated by Ddoc on Tue Feb 20 17:48:00 2007