SlideShare uma empresa Scribd logo
1 de 61
C++ 프로그래머를 위한 C#
             ㈜넥슨
   신규개발3본부 개발1실 GTR팀 성능연구유닛
             김재석
책임연구원

                2010/2011, 마비노기2
                2006/2009, 마비노기 영웅전
                           테크니컬 디렉터
                2004/2005, 마비노기
                2003/2004, 프로젝트 T2
[ɡ̊ɪm̚ ʨæːsɤk̚]
 /ɡim ɟɛːzʌɡ/ 2001/2003, Oz World
Agenda
Visual Studio .NET Rainer
                                                 .NET Framework 1.0 C# 1.0

Visual Studio .NET 2003 Everett
                                                .NET Framework 1.1, C# 1.2

Visual Studio 2005 Whidbey
                                                .NET Framework 2.0, C# 2,0
                    .NET Framework 3.0 WinFX

Visual Studio 2008 Orcas
                                                .NET Framework 3.5, C# 3.0

Visual Studio 2010 Dev10
                                                 .NET Framework 4.0, C# 4.0
          Reactive Extensions for .NET Framework 3.5 SP1
VS .NET   VS .NET 2003     VS 2005      VS 2008   Rx




            Visual Studio .NET Rainer
          .NET Framework 1.0 / C# 1.0
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




                 C# 1.0 – Managed Code
                 Common Type System
                 Classes
                 Structures
                 Enumerations
                 Interfaces
                 Delegates
                 Attributes
                 Directives

Visual Studio® .NET
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Common Type System
Primitive Types
Field
Method
Property
Event
VS .NET   VS .NET 2003     VS 2005   VS 2008   Rx




Primitive Types
Byte                     Boolean
Int16                    Char
Int32                    Decimal
Int64                    IntPtr
Single
Double                   String
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Field
// C#
const int constant = 0;
readonly int readOnlyField;

// C++
static const int constant = 0;
const int readOnlyField;
mutable int mutableField;
VS .NET     VS .NET 2003        VS 2005   VS 2008   Rx




Field (cont.)
Field ≠ variable

default(T) if not initialized
• null if reference type
• 0 if value type
VS .NET     VS .NET 2003      VS 2005   VS 2008   Rx




Method
Member function with CV-qualifier

class Object
{
public:
   String ToString() const
   {
       return const_cast<Object*>(this)
              ->ToString();
   }
   virtual String ToString();
};
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Method (cont.)
// C#
void CallByRef(ref int value);
bool TryGetValue(out int value);

// C++
void CallByRef(int& value);
bool TryGetValue(/*out*/int& value);
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Property
Get Method/Set Method ≠ reference to type

// C#
variable = obj.PropertyName;
obj.PropertyName = value

// C++
variable = obj->get_PropertyName();
obj->setPropertyName(value);
VS .NET   VS .NET 2003    VS 2005      VS 2008   Rx




Property (cont.)
Indexed property ≠ index operator []

int this[int index]
{
  get { return array[index]; }
  set { array[index] = value; }
}
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Property (cont.)
Implementation: lazy evaluation class

class Property<typename T>
{
   operator T() const;
   Property& operator=(const T&
   value);
   Property& operator=(const
   Property& value);
};
VS .NET   VS .NET 2003   VS 2005   VS 2008     Rx




Property (cont.)
VC 7.1 or higher: property extended storage-
  class modifier

virtual TypeName get_PropertyName();
virtual void set_PropertyName(const
  TypeName& value);
__declspec(property(get=get_Property
  Name, put=set_PropertyName))
  TypeName PropertyName;
VS .NET     VS .NET 2003   VS 2005   VS 2008   Rx




Event
Multicast delegate

// C#
obj.EventName += someDelegate;
obj.EventName -= someDelegate;
if (obj.EventName != null) obj.EventName();

// C++
obj->add_EventName(someDelegate);
obj->remove_EventName(someDelegate);
obj->raise_EventName();
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Classes
Finalizer ≠ destructor
GC.ReRegisterForFinalize(this);
GC.SuppressFinalize(this);

// C#
GC.KeepAlive(value);
// C++
Pointer<Object> keepAlive(value);
VS .NET    VS .NET 2003     VS 2005    VS 2008   Rx




Classes (cont.)
Prevent R6025 – Pure virtual function call

__forceinline void Release()
{
  if (--referenceCounter == 0)
  {
      Finalize();
      delete this;
  }
}
VS .NET         VS .NET 2003            VS 2005   VS 2008   Rx




Classes (cont.)
Type initializer a.k.a. static constructor

namespace
{
   class Static : … ;
   Pointer<Static> _static;
}

…
    if (_static == NULL)
    {
         _static.CompareExchange(Pointer<Static>(
                 new Static), Pointer<Static>(NULL));
    }
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Classes (cont.)
Sealed class

template <typename T>
class Sealed
{
private:
   friend typename T;
   Sealed() { }
   ~Sealed() { }
};
VS .NET   VS .NET 2003      VS 2005   VS 2008   Rx




Structures
Lightweight – Value types

Default constructor / finalizer
• NEVER let contain unmanaged resources

Expert only
• Box/Unbox cost
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Enumerations
Value types

string[] Enum.GetNames()
TEnum[] Enum.GetValues()
TEnum Enum.Parse(string s)
bool Enum.TryParse(
  string s, out TEnum @enum)
TEnum TEnum.MaxValue { get; }
TEnum TEnum.MinValue { get; }
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Interfaces
Virtual inheritance

template <>
class Task<void> : public Object,
   public virtual IAsyncResult,
   public virtual IDisposable
{
…
};
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Delegates
Closures or managed functors

Calling conventions:
• cdecl
• stdcall
• fastcall

• thiscall
• function object
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Delegates (cont.)
#define DEFINE_DELEGATE(TPARAMS, PARAMS,
  ARGS)
template <typename TResult TPARAMS>
class delegate<TResult(PARAMS)> …

#define DELEGATE_TPARAMS , typename T1
#define DELEGATE_PARAMS T1 arg1
#define DELEGATE_ARGS    arg1
DEFINE_DELEGATE(DELEGATE_TPARAMS,
  DELEGATE_PARAMS, DELEGATE_ARGS);
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Attributes
template <typename T>
class CustomAttribute
{
public:
  static const int get_Value() { return
  value; }

private:
   static int value;
};

#define CUSTOM_ATTRIBUTE(Type, _v) 
  int CustomAttribute<Type>::value = _v
VS .NET   VS .NET 2003   VS 2005   VS 2008     Rx




Directives
using directive (C#) ≈ using directive (C++)
Assemblies are referenced.
  #include directive (C++)
  package / import declarations (Java)

#define directive
  defines a symbol
  assigns a value to a symbol
VS .NET    VS .NET 2003      VS 2005        VS 2008   Rx




          Visual Studio .NET 2003 Everett
           .NET Framework 1.1 / C# 1.2
VS .NET   VS .NET 2003    VS 2005   VS 2008   Rx




                 C# 1.2 – Bug Fix
                 IDisposable interface
                 • IEnumerator interface

                 foreach (object obj in collection)
                 // TEnumerator enumerator =
                 // collection.GetEnumerator();
                 {
                 }
                 // if (enumerator is IDisposable)
                 // enumerator.Dispose();
Visual Studio® .NET 2003
VS .NET   VS .NET 2003     VS 2005      VS 2008   Rx




           Visual Studio 2005 Whidbey
          .NET Framework 2.0 / C# 2.0
VS .NET   VS .NET 2003   VS 2005    VS 2008   Rx




                C# 2.0 – Generic
                Generics
                Iterators
                Partial Classes
                Nullable Types
                Anonymous Methods
                Static Classes
                Property Accessor Accessibilities
                Delegates

Visual Studio® 2005
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Generics
System.Collections.Generic

• List<T>       std::vector<T>
• Queue<T>      std::queue<T>
• Stack<T>      std::stack<T>
• LinkedList<T> std::list<T>
• Dictionary<TKey, TValue>
                std::map<Key, T>
• HashSet<T>    std::set<T>
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Iterators
IEnumerable<T> Where<T>(
  IEnumerable<T> source,
  Func<T, bool> predicate)
{
  if (source == null) yield break;
  foreach (T value in source)
  {
      if (!predicate(value)) continue;
      yield return value;
  }
}
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Partial Classes
// Generated.Designer.cs
[CLSCompliant]
partial class Generated : ICloneable
{ … }

// Generated.cs
[Serializable]
partial class Generated : IDisposable
{ … }
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Nullable Types
Nullable<T> where T : struct

Coalescing operator ??

int? nullable = null;
int value = nullable ??
            default(int);
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Anonymous Methods
// C# 2.0
Func<Type, bool> predicate =
  // nested type in C# 1.2
  delegate(Type value)
  {
     return value == default(Type);
  };
VS .NET    VS .NET 2003    VS 2005    VS 2008   Rx




Static Classes
Classes which are both abstract and sealed.

public static class Helper
{
  public static int GetHash(object obj)
  {
      return obj.GetHashCode();
  }
}
VS .NET   VS .NET 2003      VS 2005   VS 2008   Rx

Property Accessor
Accessibilities
// C# 1.2
public Type PropertyName
{ get { return field; } }

internal void SetPropertyName(Type value)
{ fieldName = value; }

// C# 2.0
public Type PropertyName
{
   get { return fieldName; }
   internal set { fieldName = value; }
}
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Delegates
string Covariance() …
Func<object> function =
  new Func<object>(Covariance);

void Contravariance(object arg);
Action<string> action =
  new Action<string>(
     Contravariance);
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Delegates (cont.)
// C# 1.2
Action action =
  new Action(obj.MethodName);

// C# 2.0
Action action = obj.MethodName;
VS .NET   VS .NET 2003     VS 2005      VS 2008   Rx




            Visual Studio 2008 Orcas
          .NET Framework 3.5 / C# 3.0
VS .NET   VS .NET 2003    VS 2005   VS 2008   Rx




                C# 3.0 – LINQ
                Implicitly Type Local Variables and Arrays
                Object Initializers
                Collection Initializers
                Extension Methods
                Anonymous Types
                Lambda Expressions
                Query Keywords
                Auto-Implemented Properties
                Partial Method Definitions
Visual Studio® 2008
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx

Implicitly Type Local
Variables and Arrays
// C# 2.0
Dictionary<string, object> dict =
  new Dictionary<string, object>();
Type[] types = new Type[]
  { typeof(int) };

// C# 3.0
var dict =
  new Dictionary<string, object>();
var types = new[] { typeof(int) };
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Object Initializers
// C# 2.0
SomeKeyValue pair = new SomeKeyValue();
value.Name = “anonymous”;
value.Value = null;

// C# 3.0
var value = new SomeKeyValue()
  {
      Name = “anonymous”,
      Value = null,
  };
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Collection Initializers
// C# 2.0
List<int> list = new List<int>();
list.Add(1);
list.Add(2);

// C# 3.0
var list = new List<int> { 1, 2 };
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Extension Methods
static class ComponentExtensions
{
  static void DoSomething(
      this IComponent component,
      T arg) { … }
}

ComponentExtensions.Do(component, arg);
component.DoSomething(arg);
VS .NET     VS .NET 2003      VS 2005     VS 2008      Rx




Anonymous Types
foreach (var value in from row in table
                      select new
                      {
                         Type = row.GetType(),
                         Hash = row.GetHashCode(),
                      })
{
   Console.WriteLine(“{{ Type = {0}, Hash = {1} }}”,
        value.Type, value.Hash);
   Console.WriteLine(value);
}
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Lambda Expressions
// C# 2.0
Func<Type, bool> predicate =
  delegate(Type value)
  {
      return value == default(Type);
  };

// C# 3.0
Func<Type, bool> predicate =
  value => value == default(Type);
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Query Keywords
var q = from c in categories
        join p in products
                on c.ID equals p.CID
        orderby c.ID,
                p.Price descending
        group p.Price by c.ID into g
        let cid = g.Key
        where Predicate(cid)
        select g.Average();
VS .NET   VS .NET 2003   VS 2005   VS 2008    Rx




Query Keywords (cont.)
var q = categories
        .Join(products,
              c => c.ID, p => p.CID,
              (c, p) =>
              new { c = c, p = p })
        .OrderBy(_ => _.c.ID)
        .ThenByDescending(_ => _.p.Price)
        .GroupBy(_ => _.c.ID, _.p.Price)
        .Select(g =>
                new { g = g, cid = g.Key })
        .Where(_ => Predicate(_.cid))
        .Select(_ => _.g.Average());
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx

Auto-Implemented
Properties
// C# 2.0
public Type PropertyName
{
  get { return fieldName; }
  internal set { fieldName = value; }
}

// C# 3.0
public Type PropertyName
{ get; internal set; }
VS .NET   VS .NET 2003   VS 2005     VS 2008   Rx

Partial Method
Definitions
// Generated.Designer.cs
partial class Generated
{
  Generated() { OnInitialized(); }
  partial void OnInitialized();
}

// Generated.cs
partial class Generated
{
  partial void OnInitialized() { … }
}
VS .NET        VS .NET 2003              VS 2005          VS 2008      Rx


 More LINQ with System.Interactive – Getting Started by Bart De Smet




 Reactive Extensions for .NET Framework 3.5 SP1
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx




Reactive Extensions
Task Parallel Library ∈ .NET Framework 4.0
Observer Design Pattern
VS .NET   VS .NET 2003    VS 2005   VS 2008   Rx




Task Parallel Library
System.Collections.Concurrent

• ConcurrentBag<T>
      tbb::concurrent_vector<T>
• ConcurrentQueue<T>
      tbb::concurrent_queue<T>
• ConcurrentStack<T>
      tbb::concurrent_stack<T>
• ConcurrentDictionary<TKey, TValue>
      tbb::concurrent_hash_map<Key, T>
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx

Task Parallel Library
(cont.)
System.Threading.Tasks

// C# 3.0
ThreadPool.QueueUserWorkItem(
  callback, state);

// C# 4.0 or Rx
Task.Factory.StartNew(
  action, state);
VS .NET        VS .NET 2003             VS 2005          VS 2008        Rx




Observer Design Pattern




  More LINQ with System.Interactive – Getting Started by Bart De Smet
VS .NET   VS .NET 2003   VS 2005   VS 2008   Rx

Observer Design Pattern
(Further reading)
Duality of IEnumerable<T> / IObservable<T>

Reactive Framework Finally Explained

More LINQ with System.Interactive series
Q&A

twitter:@tcaesvk

Mais conteúdo relacionado

Mais procurados

Generic Programming seminar
Generic Programming seminarGeneric Programming seminar
Generic Programming seminarGautam Roy
 
Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Sergey Platonov
 
The operation principles of PVS-Studio static code analyzer
The operation principles of PVS-Studio static code analyzerThe operation principles of PVS-Studio static code analyzer
The operation principles of PVS-Studio static code analyzerAndrey Karpov
 
Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Ismar Silveira
 
Replace OutputIterator and Extend Range
Replace OutputIterator and Extend RangeReplace OutputIterator and Extend Range
Replace OutputIterator and Extend RangeAkira Takahashi
 
Analysis of Microsoft Code Contracts
Analysis of Microsoft Code ContractsAnalysis of Microsoft Code Contracts
Analysis of Microsoft Code ContractsPVS-Studio
 
Java Questioner for
Java Questioner for Java Questioner for
Java Questioner for Abhay Korat
 
Pointcuts and Analysis
Pointcuts and AnalysisPointcuts and Analysis
Pointcuts and AnalysisWiwat Ruengmee
 
Regular types in C++
Regular types in C++Regular types in C++
Regular types in C++Ilio Catallo
 
"Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ...
"Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ..."Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ...
"Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ...PVS-Studio
 
C++17 std::filesystem - Overview
C++17 std::filesystem - OverviewC++17 std::filesystem - Overview
C++17 std::filesystem - OverviewBartlomiej Filipek
 

Mais procurados (18)

Project Roslyn: Exposing the C# and VB compiler’s code analysis
Project Roslyn: Exposing the C# and VB compiler’s code analysisProject Roslyn: Exposing the C# and VB compiler’s code analysis
Project Roslyn: Exposing the C# and VB compiler’s code analysis
 
Generic Programming seminar
Generic Programming seminarGeneric Programming seminar
Generic Programming seminar
 
Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >
 
The operation principles of PVS-Studio static code analyzer
The operation principles of PVS-Studio static code analyzerThe operation principles of PVS-Studio static code analyzer
The operation principles of PVS-Studio static code analyzer
 
Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5
 
Replace OutputIterator and Extend Range
Replace OutputIterator and Extend RangeReplace OutputIterator and Extend Range
Replace OutputIterator and Extend Range
 
ICPC08b.ppt
ICPC08b.pptICPC08b.ppt
ICPC08b.ppt
 
Analysis of Microsoft Code Contracts
Analysis of Microsoft Code ContractsAnalysis of Microsoft Code Contracts
Analysis of Microsoft Code Contracts
 
report
reportreport
report
 
Java Quiz
Java QuizJava Quiz
Java Quiz
 
Java Questioner for
Java Questioner for Java Questioner for
Java Questioner for
 
C tutorial
C tutorialC tutorial
C tutorial
 
Csdfsadf
CsdfsadfCsdfsadf
Csdfsadf
 
C
CC
C
 
Pointcuts and Analysis
Pointcuts and AnalysisPointcuts and Analysis
Pointcuts and Analysis
 
Regular types in C++
Regular types in C++Regular types in C++
Regular types in C++
 
"Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ...
"Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ..."Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ...
"Why is there no artificial intelligence yet?" Or, analysis of CNTK tool kit ...
 
C++17 std::filesystem - Overview
C++17 std::filesystem - OverviewC++17 std::filesystem - Overview
C++17 std::filesystem - Overview
 

Semelhante a 김재석, C++ 프로그래머를 위한 C#, NDC2011

NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#tcaesvk
 
Visual studio 2008
Visual studio 2008Visual studio 2008
Visual studio 2008Luis Enrique
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningCarol McDonald
 
Core2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfCore2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfThchTrngGia
 
The craft of meta programming on JVM
The craft of meta programming on JVMThe craft of meta programming on JVM
The craft of meta programming on JVMIgor Khotin
 
Visual Studio.NET
Visual Studio.NETVisual Studio.NET
Visual Studio.NETsalonityagi
 
Functional programming-advantages
Functional programming-advantagesFunctional programming-advantages
Functional programming-advantagesSergei Winitzki
 
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Stefan Marr
 
Roslyn: el futuro de C# y VB.NET by Rodolfo Finochietti
Roslyn: el futuro de C# y VB.NET by Rodolfo FinochiettiRoslyn: el futuro de C# y VB.NET by Rodolfo Finochietti
Roslyn: el futuro de C# y VB.NET by Rodolfo Finochietti.NET Conf UY
 

Semelhante a 김재석, C++ 프로그래머를 위한 C#, NDC2011 (20)

NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#NDC 2011, C++ 프로그래머를 위한 C#
NDC 2011, C++ 프로그래머를 위한 C#
 
Visual studio 2008
Visual studio 2008Visual studio 2008
Visual studio 2008
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Java Generics
Java GenericsJava Generics
Java Generics
 
Core2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfCore2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdf
 
The craft of meta programming on JVM
The craft of meta programming on JVMThe craft of meta programming on JVM
The craft of meta programming on JVM
 
TechTalk - Dotnet
TechTalk - DotnetTechTalk - Dotnet
TechTalk - Dotnet
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
Visual Studio.NET
Visual Studio.NETVisual Studio.NET
Visual Studio.NET
 
Visual studio.net
Visual studio.netVisual studio.net
Visual studio.net
 
Ast transformation
Ast transformationAst transformation
Ast transformation
 
Functional programming-advantages
Functional programming-advantagesFunctional programming-advantages
Functional programming-advantages
 
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
 
Roslyn: el futuro de C# y VB.NET by Rodolfo Finochietti
Roslyn: el futuro de C# y VB.NET by Rodolfo FinochiettiRoslyn: el futuro de C# y VB.NET by Rodolfo Finochietti
Roslyn: el futuro de C# y VB.NET by Rodolfo Finochietti
 
Roslyn: el futuro de C#
Roslyn: el futuro de C#Roslyn: el futuro de C#
Roslyn: el futuro de C#
 

Mais de devCAT Studio, NEXON

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019devCAT Studio, NEXON
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019devCAT Studio, NEXON
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019devCAT Studio, NEXON
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019devCAT Studio, NEXON
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019devCAT Studio, NEXON
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018devCAT Studio, NEXON
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018devCAT Studio, NEXON
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018devCAT Studio, NEXON
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012devCAT Studio, NEXON
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011devCAT Studio, NEXON
 

Mais de devCAT Studio, NEXON (20)

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
 

Último

Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sectoritnewsafrica
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 

Último (20)

Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 

김재석, C++ 프로그래머를 위한 C#, NDC2011

  • 1. C++ 프로그래머를 위한 C# ㈜넥슨 신규개발3본부 개발1실 GTR팀 성능연구유닛 김재석
  • 2.
  • 3.
  • 4. 책임연구원 2010/2011, 마비노기2 2006/2009, 마비노기 영웅전 테크니컬 디렉터 2004/2005, 마비노기 2003/2004, 프로젝트 T2 [ɡ̊ɪm̚ ʨæːsɤk̚] /ɡim ɟɛːzʌɡ/ 2001/2003, Oz World
  • 5. Agenda Visual Studio .NET Rainer .NET Framework 1.0 C# 1.0 Visual Studio .NET 2003 Everett .NET Framework 1.1, C# 1.2 Visual Studio 2005 Whidbey .NET Framework 2.0, C# 2,0 .NET Framework 3.0 WinFX Visual Studio 2008 Orcas .NET Framework 3.5, C# 3.0 Visual Studio 2010 Dev10 .NET Framework 4.0, C# 4.0 Reactive Extensions for .NET Framework 3.5 SP1
  • 6. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Visual Studio .NET Rainer .NET Framework 1.0 / C# 1.0
  • 7. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx C# 1.0 – Managed Code Common Type System Classes Structures Enumerations Interfaces Delegates Attributes Directives Visual Studio® .NET
  • 8. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Common Type System Primitive Types Field Method Property Event
  • 9. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Primitive Types Byte Boolean Int16 Char Int32 Decimal Int64 IntPtr Single Double String
  • 10. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Field // C# const int constant = 0; readonly int readOnlyField; // C++ static const int constant = 0; const int readOnlyField; mutable int mutableField;
  • 11. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Field (cont.) Field ≠ variable default(T) if not initialized • null if reference type • 0 if value type
  • 12. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Method Member function with CV-qualifier class Object { public: String ToString() const { return const_cast<Object*>(this) ->ToString(); } virtual String ToString(); };
  • 13. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Method (cont.) // C# void CallByRef(ref int value); bool TryGetValue(out int value); // C++ void CallByRef(int& value); bool TryGetValue(/*out*/int& value);
  • 14. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Property Get Method/Set Method ≠ reference to type // C# variable = obj.PropertyName; obj.PropertyName = value // C++ variable = obj->get_PropertyName(); obj->setPropertyName(value);
  • 15. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Property (cont.) Indexed property ≠ index operator [] int this[int index] { get { return array[index]; } set { array[index] = value; } }
  • 16. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Property (cont.) Implementation: lazy evaluation class class Property<typename T> { operator T() const; Property& operator=(const T& value); Property& operator=(const Property& value); };
  • 17. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Property (cont.) VC 7.1 or higher: property extended storage- class modifier virtual TypeName get_PropertyName(); virtual void set_PropertyName(const TypeName& value); __declspec(property(get=get_Property Name, put=set_PropertyName)) TypeName PropertyName;
  • 18. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Event Multicast delegate // C# obj.EventName += someDelegate; obj.EventName -= someDelegate; if (obj.EventName != null) obj.EventName(); // C++ obj->add_EventName(someDelegate); obj->remove_EventName(someDelegate); obj->raise_EventName();
  • 19. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Classes Finalizer ≠ destructor GC.ReRegisterForFinalize(this); GC.SuppressFinalize(this); // C# GC.KeepAlive(value); // C++ Pointer<Object> keepAlive(value);
  • 20. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Classes (cont.) Prevent R6025 – Pure virtual function call __forceinline void Release() { if (--referenceCounter == 0) { Finalize(); delete this; } }
  • 21. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Classes (cont.) Type initializer a.k.a. static constructor namespace { class Static : … ; Pointer<Static> _static; } … if (_static == NULL) { _static.CompareExchange(Pointer<Static>( new Static), Pointer<Static>(NULL)); }
  • 22. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Classes (cont.) Sealed class template <typename T> class Sealed { private: friend typename T; Sealed() { } ~Sealed() { } };
  • 23. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Structures Lightweight – Value types Default constructor / finalizer • NEVER let contain unmanaged resources Expert only • Box/Unbox cost
  • 24. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Enumerations Value types string[] Enum.GetNames() TEnum[] Enum.GetValues() TEnum Enum.Parse(string s) bool Enum.TryParse( string s, out TEnum @enum) TEnum TEnum.MaxValue { get; } TEnum TEnum.MinValue { get; }
  • 25. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Interfaces Virtual inheritance template <> class Task<void> : public Object, public virtual IAsyncResult, public virtual IDisposable { … };
  • 26. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Delegates Closures or managed functors Calling conventions: • cdecl • stdcall • fastcall • thiscall • function object
  • 27. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Delegates (cont.) #define DEFINE_DELEGATE(TPARAMS, PARAMS, ARGS) template <typename TResult TPARAMS> class delegate<TResult(PARAMS)> … #define DELEGATE_TPARAMS , typename T1 #define DELEGATE_PARAMS T1 arg1 #define DELEGATE_ARGS arg1 DEFINE_DELEGATE(DELEGATE_TPARAMS, DELEGATE_PARAMS, DELEGATE_ARGS);
  • 28. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Attributes template <typename T> class CustomAttribute { public: static const int get_Value() { return value; } private: static int value; }; #define CUSTOM_ATTRIBUTE(Type, _v) int CustomAttribute<Type>::value = _v
  • 29. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Directives using directive (C#) ≈ using directive (C++) Assemblies are referenced. #include directive (C++) package / import declarations (Java) #define directive defines a symbol assigns a value to a symbol
  • 30. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Visual Studio .NET 2003 Everett .NET Framework 1.1 / C# 1.2
  • 31. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx C# 1.2 – Bug Fix IDisposable interface • IEnumerator interface foreach (object obj in collection) // TEnumerator enumerator = // collection.GetEnumerator(); { } // if (enumerator is IDisposable) // enumerator.Dispose(); Visual Studio® .NET 2003
  • 32. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Visual Studio 2005 Whidbey .NET Framework 2.0 / C# 2.0
  • 33. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx C# 2.0 – Generic Generics Iterators Partial Classes Nullable Types Anonymous Methods Static Classes Property Accessor Accessibilities Delegates Visual Studio® 2005
  • 34. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Generics System.Collections.Generic • List<T> std::vector<T> • Queue<T> std::queue<T> • Stack<T> std::stack<T> • LinkedList<T> std::list<T> • Dictionary<TKey, TValue> std::map<Key, T> • HashSet<T> std::set<T>
  • 35. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Iterators IEnumerable<T> Where<T>( IEnumerable<T> source, Func<T, bool> predicate) { if (source == null) yield break; foreach (T value in source) { if (!predicate(value)) continue; yield return value; } }
  • 36. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Partial Classes // Generated.Designer.cs [CLSCompliant] partial class Generated : ICloneable { … } // Generated.cs [Serializable] partial class Generated : IDisposable { … }
  • 37. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Nullable Types Nullable<T> where T : struct Coalescing operator ?? int? nullable = null; int value = nullable ?? default(int);
  • 38. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Anonymous Methods // C# 2.0 Func<Type, bool> predicate = // nested type in C# 1.2 delegate(Type value) { return value == default(Type); };
  • 39. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Static Classes Classes which are both abstract and sealed. public static class Helper { public static int GetHash(object obj) { return obj.GetHashCode(); } }
  • 40. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Property Accessor Accessibilities // C# 1.2 public Type PropertyName { get { return field; } } internal void SetPropertyName(Type value) { fieldName = value; } // C# 2.0 public Type PropertyName { get { return fieldName; } internal set { fieldName = value; } }
  • 41. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Delegates string Covariance() … Func<object> function = new Func<object>(Covariance); void Contravariance(object arg); Action<string> action = new Action<string>( Contravariance);
  • 42. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Delegates (cont.) // C# 1.2 Action action = new Action(obj.MethodName); // C# 2.0 Action action = obj.MethodName;
  • 43. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Visual Studio 2008 Orcas .NET Framework 3.5 / C# 3.0
  • 44. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx C# 3.0 – LINQ Implicitly Type Local Variables and Arrays Object Initializers Collection Initializers Extension Methods Anonymous Types Lambda Expressions Query Keywords Auto-Implemented Properties Partial Method Definitions Visual Studio® 2008
  • 45. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Implicitly Type Local Variables and Arrays // C# 2.0 Dictionary<string, object> dict = new Dictionary<string, object>(); Type[] types = new Type[] { typeof(int) }; // C# 3.0 var dict = new Dictionary<string, object>(); var types = new[] { typeof(int) };
  • 46. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Object Initializers // C# 2.0 SomeKeyValue pair = new SomeKeyValue(); value.Name = “anonymous”; value.Value = null; // C# 3.0 var value = new SomeKeyValue() { Name = “anonymous”, Value = null, };
  • 47. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Collection Initializers // C# 2.0 List<int> list = new List<int>(); list.Add(1); list.Add(2); // C# 3.0 var list = new List<int> { 1, 2 };
  • 48. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Extension Methods static class ComponentExtensions { static void DoSomething( this IComponent component, T arg) { … } } ComponentExtensions.Do(component, arg); component.DoSomething(arg);
  • 49. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Anonymous Types foreach (var value in from row in table select new { Type = row.GetType(), Hash = row.GetHashCode(), }) { Console.WriteLine(“{{ Type = {0}, Hash = {1} }}”, value.Type, value.Hash); Console.WriteLine(value); }
  • 50. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Lambda Expressions // C# 2.0 Func<Type, bool> predicate = delegate(Type value) { return value == default(Type); }; // C# 3.0 Func<Type, bool> predicate = value => value == default(Type);
  • 51. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Query Keywords var q = from c in categories join p in products on c.ID equals p.CID orderby c.ID, p.Price descending group p.Price by c.ID into g let cid = g.Key where Predicate(cid) select g.Average();
  • 52. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Query Keywords (cont.) var q = categories .Join(products, c => c.ID, p => p.CID, (c, p) => new { c = c, p = p }) .OrderBy(_ => _.c.ID) .ThenByDescending(_ => _.p.Price) .GroupBy(_ => _.c.ID, _.p.Price) .Select(g => new { g = g, cid = g.Key }) .Where(_ => Predicate(_.cid)) .Select(_ => _.g.Average());
  • 53. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Auto-Implemented Properties // C# 2.0 public Type PropertyName { get { return fieldName; } internal set { fieldName = value; } } // C# 3.0 public Type PropertyName { get; internal set; }
  • 54. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Partial Method Definitions // Generated.Designer.cs partial class Generated { Generated() { OnInitialized(); } partial void OnInitialized(); } // Generated.cs partial class Generated { partial void OnInitialized() { … } }
  • 55. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx More LINQ with System.Interactive – Getting Started by Bart De Smet Reactive Extensions for .NET Framework 3.5 SP1
  • 56. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Reactive Extensions Task Parallel Library ∈ .NET Framework 4.0 Observer Design Pattern
  • 57. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Task Parallel Library System.Collections.Concurrent • ConcurrentBag<T> tbb::concurrent_vector<T> • ConcurrentQueue<T> tbb::concurrent_queue<T> • ConcurrentStack<T> tbb::concurrent_stack<T> • ConcurrentDictionary<TKey, TValue> tbb::concurrent_hash_map<Key, T>
  • 58. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Task Parallel Library (cont.) System.Threading.Tasks // C# 3.0 ThreadPool.QueueUserWorkItem( callback, state); // C# 4.0 or Rx Task.Factory.StartNew( action, state);
  • 59. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Observer Design Pattern More LINQ with System.Interactive – Getting Started by Bart De Smet
  • 60. VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Observer Design Pattern (Further reading) Duality of IEnumerable<T> / IObservable<T> Reactive Framework Finally Explained More LINQ with System.Interactive series