Para quem trabalha com programacao multi-thread sabe que a depuracao do codigo e um tarefa bem complicada.Percorrer o caminho inverso do fluxo de execucao de uma tarefa que e intercalada por threads requer tempo de habilidade.O Delphi 2010 tras uma novidade interessante que promete ajudar nessa ardua tarefa, agora e possivel nomear as threads.Observe a imagem abaixo:No Delphi 2010 foi introduzido o metodo NameThreadForDebugging na classe TThread e e utilizado tanto para nomear quanto para renomear uma thread especifica.Sua assinatura tras dois parametros: AThreadName e AThreadID.O primeiro e o nome que sera dado a thread e o segundo parametro e o ID da thread a ser nomeada. No caso do segundo parametro ser omitido, ou ser -1, a operacao sera realizada sob a corrente thread que esta rodando.Outro detalhe e que o nome atribuido e do tipo AnsiString, ou seja, pode ser necessario um typecast explicito.Vamos ver na pratica como o recurso e aplicado.procedure TMyThread.Execute;var lThreadName: AnsiString;begin {$IFDEF VER210} lThreadName := AnsiString(Self.ClassName + '_' + IntToStr(FCount)); NameThreadForDebugging(lThreadName); {$ENDIF} while not Terminated do begin Sleep(300); end;end;Nao se esqueca que esse metodo so esta disponivel no Delphi 2010 e, provavelmente, nas versoes superiores. No caso do codigo fonte ser utilizado em versoes anteriores, use utilize a diretiva de compilacao {$IFDEF VER210} para evitar erro de compilacao/compatibilidade.Apesar desse recurso ser introduzido somente na versao 2010, existe um metodo que pode ser aplicado para as versoes anteriores.{$IFDEF MSWINDOWS}procedure SetDebbugerThreadName(const AThreadName: AnsiString; const AThreadID: LongWord = $FFFFFFFF);type TThreadNameInfo = record FType: LongWord; // Deve ser sempre 0x1000 FName: PAnsiChar; // Ponteiro para o nome da thread FThreadID: LongWord; // Thread ID (-1 indica a corrente thread) FFlags: LongWord; // Nao utilizado, deve ser zero. end;var lThreadInfo: TThreadNameInfo;begin lThreadInfo.FType := $1000; lThreadInfo.FName := PAnsiChar(AThreadName); lThreadInfo.FThreadID := AThreadID; lThreadInfo.FFlags := 0; try RaiseException($406D1388, 0, SizeOf(lThreadInfo) div SizeOf(LongWord), @lThreadInfo); except end;end;{$ENDIF}O uso dessa funcao tem exatamente o mesmo efeito que o metodo NameThreadForDebugging.Um exemplo completo utilizando ambas formas pode ser baixada aqui. Um assunto que frenquentemente faz parte das discussoes dos grupos de desenvolvedores e o quanto uma determinada linguagem de programacao esta diceminada no mercado em um dado momento.Muitas vezes embasadas em opinioes proprias ou simplesmente por questao de afinidade, a conversa tende a abordar o universo restrito ao grupo.Mas voce sabe realmente qual a porcentagem de adocao da linguaguem de programacao que voce utiliza?Se voce fosse investir seu tempo para aprender uma linguagem, mas gostaria que a escolha fosse consciente, por onde comecar?A tabela abaixo foi extraida na data de hoje (12-Julho-2010) do site TIOBE, que eu considero um otimo referencial no assunto. PositionJul 2010 PositionJul 2009 Delta in Position ProgrammingLanguage RatingsJul 2010 DeltaJul 2009 11 Java 18.673%-1.78% 22 C 18.480%+1.16% 33 C++ 10.469%+0.05% 44 PHP 8.566%-0.70% 56 C# 5.730%+1.19% 65 (Visual) Basic 5.516%-2.27% 77 Python 4.217%-0.22% 88 Perl 3.099%-1.10% 921 Objective-C 2.498%+1.99% 109 JavaScript 2.432%-1.08% 1111 Delphi 2.323%+0.33% 1210 Ruby 1.982%-0.59% 1312 PL/SQL 0.772%-0.12% 1413 SAS 0.701%-0.09% 1515 Pascal 0.639%-0.07% 1617 Lisp/Scheme/Clojure 0.622%+0.01% 1720 MATLAB 0.581%+0.07% 1816 ABAP 0.548%-0.15% 1919 Lua 0.535%+0.00% 2028 PowerShell 0.493%+0.17% Essa tabela e apenas uma das varias tabelas e graficos estatisticos que