Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

29
Symbian C++ vs .NET Compact Framework C# Leonardo Kunz

Transcript of Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Page 1: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ vs

.NET Compact Framework C#

Leonardo Kunz

Page 2: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Sumário Introdução (Symbian OS)

Características História

Symbian C++ vs .NET Compact C# Convenções Exceções Objetos ativos Threads Sincronização

Conclusões

Page 3: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian OS - Introdução

Características PrincipaisSO para dispositivos móveis e PDAsDesenvolvido para arquitetura ARMÊnfase na economia de recursosSuporte para aplicações de tempo realMultitarefas e proteção de memóriaEquipa maioria dos smartphones atuaisVárias plataformas (S60, UIQ, MOAP)

Page 4: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian OS - Introdução

HistóriaEricsson, Nokia, Motorola e Psion fundaram a

Symbian Ltd. em 1998Baseado no EPOC da PsionSymbian Ltd. desenvolve SO base e licencia

para fabricantesEm 24 de junho de 2008, anuncia compra da

Symbian e criação da Symbian Foundation

Page 5: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian OS - Introdução

Symbian FoundationUnificar plataformas SymbianTornar plataforma open-sourceParceiros: Nokia, Sony Ericsson, Motorola,

NTT DoCoMo, AT&T, LG Electronics, Samsung Electronics, STMicroelectronics, Texas Instruments e Vodafone

Page 6: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian OS - Introdução

Linguagens suportadasSymbian C/C++JavaMEFlashLitePerlPythonRubyLua

Page 7: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++

Baseada em C++ Otimizada para dispositivos móveis com

recursos limitados Principais características

CleanupStack Trap/Leave Modelo cliente/servidor – chamadas assíncronas Objetos ativos

Page 8: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Convenções

Conveção de Nomes - baseada na funcionalidade das classesClasses TClasses CClasses RClasses M

Page 9: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Convenções

Classes Tipo T Normalmente alocadas na pilhaDesalocadas quando função de chamada

retornar

Page 10: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Convenções

Classes Tipo CAlocadas em heapSempre derivam da classe CBaseOperador newManipuladas por ponteiro

Page 11: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Convenções

Classes Tipo RHandles para recursos mantidos em outro

lugar

Page 12: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Convenções

Classes Tipo MDefinem classes abstratas Implementação em classes derivadas

Page 13: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

.NET Compact Framework

Baseado no .NET Desenvolvimento para Windows CE C# ou Visual Basic

Page 14: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Exceções

Try / Catch do C++ não suportado em versões anteriores à versão 9.0

Mecanismo Leave / Trap é semelhanteMenor overheadMétodos com Leave devem terminar em L

Page 15: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Exceçõesint InsertL(){//... other codes ...if (!myObject) User::Leave(KErrNoMemory);//... more codes...}

TInt errcode;TRAP(errcode, InsertL());if (errcode == KErrNoMemory){   // threats exceptions throwed by "InsertL()" }

Page 16: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Exceções

Sinalização de erros fatais – Panic User::Panic(). Resulta na finalização da thread

Page 17: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

.NET Compact C# - Exceções

Try / Catch / Finally Idêntico à .NET Mais legível do que mecanismo de

exceções (Trap / Leave) do Symbian

Page 18: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Objetos Ativos

Modelo baseado em eventos Objetos Ativos fazem chamadas

assíncronas e se preemptam Escalonador Ativo aciona execução Menor overhead do que threads Sincronização não é necessária

Page 19: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Objetos Ativos

Page 20: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Threads

Classe RThread provê funcionalidade das threads

Criadas através da instanciação da classe RThread e do método create()

Método resume() inicia execução Estados: running, ready, waiting, e suspended Método kill() finaliza thread

Page 21: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Threads

RThread thread; thread.Create(KThreadName, threadFunction, 4096,

KMinHeapSize, 256*KMinHeapSize, &iParameter); thread.Resume();

Criando uma thread:

Page 22: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

.NET Compact C# - Threads Semelhante ao Symbian Desenvolvedor deve controlar finalização

das threads - comando abort()

Thread myThread = new Thread(new ThreadStart(MyThread)); myThread.Start();

Page 23: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Sincronização

SemáforosWait() e Signal()Classe RSemaphoreLocais ou globais

MutexWait() e Signal()Classe RMutexLocais ou globais

Page 24: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Symbian C++ - Sincronização

Seções críticasRegião do código em que apenas uma thread

pode entrar por vezClasse RCriticalSectionWait() e Signal() IsBlocked()

Page 25: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

1: class CMessageBuffer2: {3: public:4: CMessageBuffer();5: void AddMessage(const TDes &aMsg);6: void GetMessages(TDes &aMsgs);7:8: public:9: RMutex iMutex;10: TDes iMsgs;11: };12:13: CMessageBuffer::CMessageBuffer()14: {15: iMutex.CreateLocal();16: }17:18: void CMessageBuffer::AddMessage(const TDes &aMsg)19: {20: iMutex.Wait();21: iMsgs.Append(aMsg);22: iMutex.Signal();23: }

Symbian C++ - Sincronização

Page 26: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

25: void CMessageBuffer::GetMessages(TDes &aMsgs)26: {27: iMutex.Wait();28: aMsg.Copy(iMsgs);29: iMsgs.Zero();30: iMutex.Signal();31: }32:33: static void CMyClass::threadFunction(TAny *aPtr)34: {35: CMessageBuffer *msgBuffer = (CMessageBuffer *)TAny;36: TInt count = 0;37: TBuf<40> msg;38: 39: while (TRUE)40: {41: msg.Format(“ID: %d, count: %d\n”, RThread().Id(), count++);42: msgBuffer->AddMessage(msg);43: User::After(1000 * 1000);44: }45: }

Symbian C++ - Sincronização

Page 27: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

.NET Compact C# - Sincronização Mutex

Mutex.WaitOne Mutex.Release

Monitores Monitor.Enter(this); Monitor.Exit(this);

Interlocked Interlocked.Increment(ref counter); Interlocked.Decrement(ref counter);

Page 28: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Conclusões

Múltiplas plataformas dificultam a portabilidade de código

Documentação das APIs é pouco detalhada

Não possui monitores Programação com modelos não usuais

(Ex. Trap/Leave e Objetos Ativos)

Page 29: Symbian C++ vs.NET Compact Framework C# Leonardo Kunz.

Bibliografia Symbian OS

- http://en.wikipedia.org/wiki/Symbian_OS Symbian.com

- http://www.symbian.com/ NewLC

- http://www.newlc.com/ Symbian Developer Network

- http://developer.symbian.com/main/index.jsp Forum Nokia

- http://www.forum.nokia.com/ Symbian Tutorial

- http://www.symbiantutorial.org/ .NET Compact Framework Documentation

- http://msdn.microsoft.com/en-us/library/ms950380.aspx