mono for game developers - altdevconf 2012

70
Mono for Game Developers Miguel de Icaza [email protected], @migueldeicaza Xamarin Inc

Upload: xamarin

Post on 14-Jan-2015

3.298 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Mono for Game Developers - AltDevConf 2012

Mono  for  Game  Developers  

Miguel  de  Icaza  [email protected],  @migueldeicaza  

 

Xamarin  Inc  

Page 2: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Agenda  

•  Mono  in  Games  •  Using  Mono  for  Games  •  Performance  •  Garbage  CollecKon  •  Co-­‐rouKnes,  Asynchronous  Programming  

Page 3: Mono for Game Developers - AltDevConf 2012

MONO  IN  GAMES  

Page 4: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

C#  

Java  

JavaScript  

Ruby  

Python  

Visual  Basic  

F#  

Page 5: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

C#  

Java  

JavaScript  

Ruby  

Python  

Visual  Basic  

F#  

Page 6: Mono for Game Developers - AltDevConf 2012

Sims  3  

•  Mixed  Code:  –  C/C++  engine  –  C#  scripKng/AI  –  C#  high-­‐level  

•  Visual  Studio  +  Mono  

•  X86,  PS3,  Xbox360    

Credit:    www.thesims3facts.webs.com  

Page 7: Mono for Game Developers - AltDevConf 2012

BasKon  –  on  Google  Chrome  NaCl  

•  C#  XNA  codebase  

•  Originally  on  Xbox  

•  Ported  to  NaKveClient  – Mono  – MonoGame  (XNA)  

•  Mac,  Windows,  Linux  

Page 8: Mono for Game Developers - AltDevConf 2012

Pure  C#  -­‐  SoulCra_  

•  DeltaEngine  –  Pure  C#  engine  –  Open  source  –  Android,  iOS,  Mac,  Win  

Page 9: Mono for Game Developers - AltDevConf 2012

Unity  3D  

•  Unity  Engine  –  C/C++  game  engine  –  Embedded  Mono  

•  User  code  –  C#  or  UnityScript  –  Extends  Unity  itself    

 

Shadow  Gun,  built  with  Unity  

Page 10: Mono for Game Developers - AltDevConf 2012

SecondLife  

•  Mono  on  the  server  •  Powers  LSL  scripts  •  Nice  200x  perf  boost  •  Code  InjecKon  

Page 11: Mono for Game Developers - AltDevConf 2012

Infinite  Flight  

•  Subject  of  the  second  part  of  this  session  

Page 12: Mono for Game Developers - AltDevConf 2012

WHY  MONO?  

Page 13: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Because  Life  is  too  Short  

•  To  debug  another  memory  leak  

•  To  track  another  memory  corrupKon  bug  

•  Because  you  deserve  be=er  

Page 14: Mono for Game Developers - AltDevConf 2012

The  Quest  for  ProducKvity  

System  Languages  Pros:  •  Low-­‐level  •  Good  control  of  hardware  •  Typed  •  Fast  code  

Cons:  •  Easy  to  corrupt  state  •  Low  producKvity  •  Crash  o_en  •  Complex  for  newcomers  

Scrip<ng  Languages  Pros:  •  High-­‐level,  good  producKvity  •  Easy  to  write  •  Safe,  prevent  crashes  •  Loosely  typed    Cons:  •  Poor  control  of  hardware  •  Slow  (interpreted)  

Page 15: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

John  Ousterhout  ScripKng  Quest  IEEE  1998  Summary  Paper    

h=p://www.stanford.edu/~ouster/cgi-­‐bin/papers/scripKng.pdf  

Page 16: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

John  was  always  ahead  of  his  Kme  

•  Professional  workstaKons  in  1998  – SPARC,  HP-­‐PA  

•  Not  achievable  on  PCs  of  the  Kme  

Page 17: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

2000  –  Desktop  Development  •  Building  desktop  apps  with  C  and  C++  

–  Slow  progress,  error  prone,  frequent  crashes  

•  Windows  2000  Requirements:  –  133  Mhz  or  more  –  64  megs  for  desktop,  256  for  server  

•  Windows  XP  Requirements  (one  year  later)  –  233Mhz  or  more  –  128  megs  for  desktop  

•  Development  desktops  at  the  Kme:  –  ~1Ghz  speed  –  ~1  GB  of  memory  

Page 18: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

C#  Introduced  in  2000  

•  C#  1.0  was  a  Java-­‐like  system  

•  With  many  design  fixes  – 10  years  of  experience  – Change  defaults  (all  virtual,  vs  opt-­‐in  virtual)  –  Introduce  structs  (help  GC,  no  boxing)  – Direct  access  to  naKve  libraries  (P/Invoke)  – Delegates  (foundaKon  for  lambdas)  

Page 19: Mono for Game Developers - AltDevConf 2012

Language  Choices    

Prod

ucKvity

 

Performance  

Assembly  Language  

C/C++  

Fully  Dynamic  

C#/Java  

Fast  Slow  

Difficult  

Easy  

Page 20: Mono for Game Developers - AltDevConf 2012

Game  So_ware  Components  .  

•  Rendering  •  Shading  •  Scene  •  AnimaKon  •  Geometry  •  GUI  

Display  

•  Physics  •  Collision  •  ParKcles  •  Terrain  

SimulaKon  

•  World  rules  •  Enemy  AI  •  User  control  •  Camera  •  Behavior  

Game  Logic  

•  Audio  •  Input  •  Networking  

Support  

Page 21: Mono for Game Developers - AltDevConf 2012

The  Problem  Games  are  real-­‐Kme  programs  

•  30  to  60  frames  per  second  (0.016  seconds)  

 •  User  control  •  Network  events  

Input    •  Scripted,  slow  •  React  to  change  •  Update  scene  

AI    •  Render  Graphics  •  Play  audio  

Updates  

Page 22: Mono for Game Developers - AltDevConf 2012

Problem:    ScripKng  Is  A  Bo=leneck  Gaming's  Achilles'  Heel  

•  Rendering  •  Shading  •  Scene  •  AnimaKon  •  Geometry  •  GUI  

Display  

•  Physics  •  Collision  •  ParKcles  •  Terrain  

SimulaKon  

•  World  rules  •  Enemy  AI  •  User  control  •  Camera  •  Behavior  

Game  Logic  

•  Audio  •  Input  •  Networking  

Support  

C/C++   C/C++   C/C++  Script  

Page 23: Mono for Game Developers - AltDevConf 2012

Problem:    ScripKng  Is  A  Bo=leneck  Gaming's  Achilles'  Heel  

•  Rendering  •  Shading  •  Scene  •  AnimaKon  •  Geometry  •  GUI  

Display  

•  Physics  •  Collision  •  ParKcles  •  Terrain  

SimulaKon  

•  World  rules  •  Enemy  AI  •  User  control  •  Camera  •  Behavior  

Game  Logic  

•  Audio  •  Input  •  Networking  

Support  

C/C++   C/C++   C/C++  Script  

C#  

Page 24: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

What  C#  Offers  

•  Close  to  naKve  performance  – 50%-­‐90%  of  naKve  performance  

•  Safe  ExecuKon  Environment  – With  opKonal  support  to  shoot  yourself  in  the  foot.  

Page 25: Mono for Game Developers - AltDevConf 2012

C#  -­‐  An  Evolving  Language  

1.0  

2.0  

3.0  

4.0  

5.0  

2002  

2005  

2007  

2010  

2012  

Managed  Code,  strongly  typed  

Generics,  Iterators,  Lambdas  

Language  Integrated  Query,  FuncKonal  

Dynamic  extensions  

Asynchronous  Programming  

Page 26: Mono for Game Developers - AltDevConf 2012

USING  MONO  

Page 27: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Designing  Mono  ApplicaKons  

•  Provided:  – C#  Language  – Base  Class  Libraries  

•  Not  Provided:  – User  Interface,  Graphics,  Audio  – These  are  all  plaqorm  specific  

Page 28: Mono for Game Developers - AltDevConf 2012

Code  Sharing  and  NaKve  Experience  

Windows  Xbox  

WinPhone  iOS  

C#  Plus  ECMA  languages  

.NET  

Mac   Android  

Mono  

Core  Engine,  Shared  Logic,  Business  Logic  

RunKme  

OS  

Not  a  comprehensive  list  

Page 29: Mono for Game Developers - AltDevConf 2012

Code  Sharing  and  NaKve  Experience  

Windows  Xbox  

WinPhone  

XAML  XNA  

iOS  

MonoTouch  

C#  Plus  ECMA  languages  

.NET  

Mac  

MonoMac  

Android  

MonoDroid  

Mono  

Core  Engine,  Shared  Logic,  Business  Logic  

NaKve  UI  APIs  

RunKme  

OS  

Not  a  comprehensive  list  

Page 30: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Modes  of  Use  

•  Drive  the  applicaKon  •  ScripKng  engine  – Sandboxed  – Full  access  

Page 31: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Run  on  Mono  

Page 32: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Run  on  Mono  

Game  –  Your  C#  Code  

Mono  RunKme  

OperaKng  System  

C#/.NET  Libraries  

MonoGame  

OpenAL  

OpenTK  

OpenGL  

Physics  

Networking  

Page 33: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Using  Mono  as  a  Library  

Page 34: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Use  Mono  as  a  Library  

Game  Engine  

Game  Engine  Libraries  

Audio   Graphics  

Mono  

Game  –  Your  C#  Code  

Page 35: Mono for Game Developers - AltDevConf 2012

TIPS  ON  USING  MONO  

Page 36: Mono for Game Developers - AltDevConf 2012

Two  Code  GeneraKon  Backends  

Mono’s  Na<ve  Backend  

•  Very  fast  codegen  –  .3  seconds  bootstrap  

•  Not  great  code  output  

•  JIT’s  default  engine  

LLVM  Backend  

•  Very  slow  codegen  –  7  second  bootstrap  

•  Great  output  quality  

•  Opt-­‐in:  –  mono  -­‐-­‐llvm

Page 37: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Just  in  Time  vs  Ahead  of  Time  

•  Just  in  Time  CompilaKon  – Default  Mode  of  OperaKon  – Very  fast  at  compiling  code  – Not  great  quality  of  code  generaKon  

•  Ahead  of  Time  CompilaKon  – Mandatory  on  some  plaqorms  •  PS3,  XBox360,  iOS    

– Can  afford  expensive  compiler  opKmizaKons  

Page 38: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Arrays  Bounds  Checking  

Mono  RunKme  translates  this  to:  

Page 39: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Disabling  Arrays  Bounds  Checking  

•  Very  unsafe  – GC  depends  on  system  integrity  – But  admissible  if  no  error  ever  found  on  tesKng  

•  We  give  you  the  tools  to  shoot  your  feet  – mono  –O=unsafe

•  Ask  your  QA  team  

Page 40: Mono for Game Developers - AltDevConf 2012

GARBAGE  COLLECTION  

Page 41: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Mono’s  Garbage  Collectors  

•  Boehm  GC:  – TradiKonal  Mono  GC  – Mostly-­‐precise,  stack  conservaKve  – Scans  everything  on  each  GC  

•  GeneraKonal  Collector  (SGen)  – New  (default  on  Android)  – GeneraKonal  (Old  generaKon,  nurseries)  – Copying  (plus  mark+sweep  for  large  objects)  

Page 42: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

SGen  

Nursery  

• New  objects  • Small  size  (4MB)  • Per  thread  regions  • Very  fast  collecKon  

Old  GeneraKon  

• Aged  objects  • Slower  collecKon  • Fixed  or  variable  heaps  

• Parallel  collecKon  

Page 43: Mono for Game Developers - AltDevConf 2012

Garbage  CollecKon  

Memory  Allocated   Released  later  

Garbage  Collector  determines  when  to  run  and  release  memory  

•  HeurisKcs  are  plaqorm-­‐specific  •  GC.Collect()  is  the  only  determinisKc  opKon    

Page 44: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Best  PracKces  

•  Pre-­‐allocate  major  objects  before  Game  Loop  – Managed  objects  – Or  unmanaged  buffers  –  Try  to  only  use  the  nursery  (stay  under  4M)  –  If  you  must  collect,  only  collect  the  nursery:  

•  GC.Collect  (0)  –  Performs  only  a  nursery  collecKon  •  GC.Collect  ()  –  Performs  a  complete  GC  on  the  heap  

•  On  Main  loop:  – Use  structs  instead  of  classes  

Page 45: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Schedule  GC  CollecKon  

Physics   Game  Logic  1  

Game  Logic  2  

Game  Logic  3  

Network  Checks  

Audio  Updates  

Physics   Game  Logic  1  

Game  Logic  2  

Game  Logic  3  

GC  Collect  

Network  Checks  

Audio  Updates  

GC.Collect  (0)    Limit  CollecKon  to  Nursery  

Page 46: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Render  Scene  

Mono   Game  Thread  

Network  Thread   IO  Thread  

Render  Thread  

Real  Time  Thread  1  

Mono’s  GC  Thread  Control  •  Garbage  CollecKon  Stops  all  Mono  Threads  •  Non-­‐Mono  threads  are  not  affected  

•  AlternaKve:  •  Use  a  Render  Scene  +  Render  Thread    •  Like  Apple’s  CoreAnimaKon  or  Microso_  WPF  

Mono  Thread  

NaKve  Thread  

Page 47: Mono for Game Developers - AltDevConf 2012

COROUTINES  

Page 48: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

State-­‐based  programming  

Page 49: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Problems  with  Callbacks  and  State-­‐Machines  Systems  

•  RepeKKve  

•  Cumbersome  

•  Error  Prone  

•  Poor  Error  PropagaKon  protocols/pracKces  

•  Life  is  too  short  

Page 50: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Co-­‐rouKnes  

•  Popular  soluKon  to  simplify  AI  code  •  Each  Game  Object  has  a  script  a=ached  – Runs  Game  Logic  – AI  bits  

•  Many  soluKons  –  longjmp/setjmp  for  unmanaged  code  – Stack  fiddling  (Mono.Tasklets)  –  Interpreted  languages  with  VM  support  

Page 51: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

C#  5.0  and  Async  Programming  

•  Mono  master  has  a  complete  C#  5  Compiler  

•  Turns  repeKKve  callback-­‐based  async  programming  into  linear  programming  – Compiler  rewrites  the  code  into  a  state  machine  – Tasks  are  scheduled  on  the  main  thread  – Scheduling  is  customizable  

•  Originally  designed  for  interacKve  UIs  

Page 52: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Using  Await  

Page 53: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

The  Magic  

•  Await  lets  you  write  linear  code  

•  Lets  you  focus  on  the  problem  – The  compiler  is  at  your  service  

•  Microso_  convenKons  for  responsive  UIs:  –  If  it  takes  more  than  50ms,  make  it  async  

Page 54: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

More  on  await

•  await  introduces  a  suspension  point  – Code  returns  to  caller  – ExecuKon  resumes  a_er  “await”  instrucKon  – Very  cheap  memory-­‐wise  

•  Works  with  IO,  Networking  stacks,  slow  code  – System.IO,  System.Net,  Database  access  – Slow  processing:  XML,  Json  data  – Blends  transparently  with  Threads  on  mulK-­‐cores  

Page 55: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Li=le  more  interesKng  

Page 56: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Current  Trends  in  Async  Programming  

Callback  based    Where:  •  GUI  programming  •  Scalable  web  servers  •  Responsive  mobile  and  desktop  applicaKons  

Page 57: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

With  some  error  handling.  

Page 58: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

C#  5.0  Async  Support  

Page 59: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Q&A  •  Mono,  ISO  Standard,  C#  Async  

–  h=p://www.mono-­‐project.com  –  ISO  Standard:  h=p://bit.ly/cli-­‐iso-­‐standard  –  C#  Async:  h=p://msdn.microso_.com/en-­‐us/vstudio/gg316360  

•  Xamarin,  Mono  on  iOS,  Android:  –  Discount  for  AltDevConf  a=endees:    –  h=p://www.xamarin.com/altdevconf  

•  Contact:  –  [email protected],  @migueldeicaza  

•  Resources:  –  @MonoGameTeam,  @Unity3D  

•  Live  Chat  on  IRC:  irc.gnome.org    –  #mono,  #monotouch,  #monodroid,  #monogame  

Page 60: Mono for Game Developers - AltDevConf 2012

BACKUP  SLIDES  

Page 61: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Iterators  •  C#  compiler  provided  assistance  –  Built  on  top  of  C#  IEnumerable  –  C#  compiler  rewrites  iterators  into  state  machines  

•  Developers  build  on  top  of  convenKons  

•  Unity3D  uses  this  approach  

•  Open  Source  Iterator  game  framework:  –  http://mjhutchinson.com/journal/2010/02/01/iteratorbased_microthreading

Page 62: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Iterator  based  code  

Page 63: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Mono.Tasklets  

•  Pros:  – No  need  to  rewrite  code  – You  can  suspend  execuKon/resume  without  new  convenKons.  

•  Cons:  – Not  available  on  every  plaqorm  –  Stack  Fiddling  – Does  not  work  with  Mono’s  new  Precise  GC  –  In  parKcular,  wont  work  with  Microso_  .NET  

Page 64: Mono for Game Developers - AltDevConf 2012

GAME  ENGINES  USING  C#  Not  a  comprehensive  list  

Page 65: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Unity  3D  

•  Commercial  Engine  •  Very  extensive  support:  – Consoles:  XBox360,  PS3,  Wii  –  iOS,  Android  – Mac,  Windows  – Google  NaKve  Client  – Flash  target  

Page 66: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

MonoGame  –  Open  Source  XNA  •  Open  Source  XNA  implementaKon  –  Currently  2D-­‐based  –  3D  support  coming  

•  Runs  on  many  plaqorms:  –  iOS  (iPhone,  iPad)  – Android  (phones  and  tablets)  –  Linux  – Mac  – Windows  

Page 67: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Delta  Engine  

•  Open  Source  Game  Engine  •  Wri=en  100%  in  C#  •  Runs  on:  – Android  – Windows  Phone  –  iOS  – Mac  – Windows  

Page 68: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Axiom  

•  Open  source  •  Based  on  the  OGRE  C++  Engine  •  Windows,  Linux  •  XNA,  DirectX  and  OpenGL  support    

Page 69: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

F#  -­‐  FascinaKng  Language  

•  h=p://sharp-­‐gamedev.blogspot.com/  – Blog  tracking  the  experiences  of  game  development  using  F#  

•  F#  introduced  Async  – Later  adopted  by  C#  

Page 70: Mono for Game Developers - AltDevConf 2012

h=p://www.xamarin.com  Mono  for  Game  Developers  –  AltDevConf  2012  

Architecture  

•  Computer  Architecture  –  A  QuanKtaKve  Approach  

•  Unix  Systems  for  Modern  Architectures  –  It  says  “Unix”  – But  applies  to  low-­‐level  systems  engineering  – Caches,  MMUs,  performance  – Hardware  Architectures  design