Transcript PPT

What Programming Language
Should We Use Tomorrow
Kim Young Soo
Introduction
Introduction
 Language is a religion
• So, what language do you believe?
• So, what language should we use tomorrow?
We should choose the language which is good for
our purpose
Contents
 Introduction
 Trends and Languages
• Multi-core
• Productivity
• Other trends
 Conclusion
Language for multi-core parallel programming
MULTI-CORE PROCESS
CPU Clock Limit
Intel
Intel
Core
Pentium
2 Duo4E6600
640 (3.2GHz)
(2.4GHz)
\221,840
\62,900
Trend is Multi-Core
 Single Core, Dual Core, Quad Core…
• Intel Developed 8-Core “Gainestown”
As Mr.Lee Presented…
 Functional Language is good for
programming for Multi-core processes
• Pure function
• Optimization
 Thread Safe!
• Haskell provides STM (transaction memory)
Parallel Programming in Haskell
Parallel Programming in C
 OpenMP
• We can just use “#prgma omp” directive
• Little more complex than Haskell’s case
 But… Really ‘Little’?
• NO!
Speed of Functional
Language
 Very Slow
• Lazy Evaluation
• List Processing
• Garbage Collection
• Etc..
Trend is Multi-Core…?
 Single Core, Dual Core, Quad Core…
• Intel Developed 8-Core “Gainestown”
 Changing not so rapidly
• Still, Even quad-core is not so common
• Expensive
But there is…
 In my computer, there is a device which
• Can process numbers faster than CPU!
• Have more core than CPU!
• …more expensive than CPU! OTL
GPU
 GPU in the VGA Card
• To Process Graphic Data
Excessive Number of Vertex and Pixel
We need Simple but Many and Fast Processer
Shading Language
 To fully use GPU to process graphic data
• We need program for GPU : Shader
• Decide GPU’s behavior
Shading Language
 Shader in DirectX 8
Simple.vsh
vs.1.1
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
dp3 oD1, v3, -c4
mov oD0, c5
mov oT0, v7
Shading Language
 DirectX 9 Provides HLSL
PS_OUT ps( PS_IN In )
{
PS_OUT Out = ( PS_OUT ) 0;
float4 color;
float4 shadow;
color = tex2D( sBase, In.Base.xy );
shadow = tex2D( sShadow, In.Shadow.xy );
color = color * shadow;
Out.Color = color;
return Out;
}
Shading Language
 High-level shading languages
• CG (C for Graphics)
• GLSL (OpenGL)
• HLSL (DirectX)
• C-like languages
Shading Language
 And next…?
 Graphic Library to Software Rendering
• Tim Sweeney(Epic Games)’s speech in CEDEC 2008
• We need high level language
• Productivity is also important
 Basically, shader programming is massive-parallel
• Shading Language often describe what ‘value’ should be
• Why cannot be functional?
GPGPU
 GPU is not only for shading
• Good to Floating point operations
• High-end VGA Card’s has >1 Tflops of
computing power
• GPU for General Purpose
GPGPU
 NVidia Supports CUDA for GPGPU
• C-like GPGPU program language
• Tesla series graphic card for CUDA
 Revolution Started!
GPGPU
GPGPU
 C-like language is not enough
• Will you only use assembly to single thread?
• More high-level
• Language for Parallel computing
 Functional?!
Functional is not a Panacea
 Difficult for common programmers in field
• IO, GUI programming
• Procedural Algorithms
• Flow control
• Why we are still using QWERTY keyboard?
 Evaluation cost
Easiness of programming
PRODUCTIVITY
Productivity for Small Program
 Easiness is the most important
• For programmer
• Not for programmer
Labview
Matlab
Script Language
 Python, Ruby, JavaScript and etc..
 Very easy to learn
• Simple grammar
• Doesn’t need to consider everything
 Some weakly-dynamic typed language
• Easy
• More Intuition Friendly
Productivity for Big program
 Big and Bigger!
• Mabinogi : 1,000,000 Lines
• Windows XP : 40,000,000 Lines
• Mac OS X 10.4 : 86,000,000 Lines
• Debian 4.0 : 283,000,000 Lines
Productivity for Big program
Gears of War
Gameplay Code
~250,000 lines C++, script code
Unreal Engine 3
Middleware Game Engine
~250,000 lines C++ code
DirectX
Graphics
OpenAL
Audio
Ogg
Vorbis
Music
Codec
Speex
Speech
Codec
wx
Widgets
Window
Library
ZLib
Data
Compression
…
Productivity for Big program
 Modularity
• Functional Language, OOP…
 Reliability
• Memory operation
• Type checking
 Concurrency
• I already mentioned about concurrency
Web 2.0, Cloud Computing
OTHER TRENDS
Web 2.0
 Based on web application
• Dynamic web page
• Web based application
 Programming Languages?
• Mainly Framework Based
• Easy, Browser-friendly language needed
Cloud Computing
 Server program should be parallel
 Consider browser and network
Functional? Script? and…
CONCLUSION
Conclusion
 Multi-core Trend
• Concurrency is very important
• High-level language for productivity
• Functional can be answer
Conclusion
 Productivity is very ‘very’ important
• For small program
Easy script language can be answer
• For big program
Must be well-moduled High-Level language
Functional language can be answer
C# is under developing
 C#
• structured, imperative, object-oriented,
event-driven, functional, static-strong typed
 Microsoft is providing and developing
useful paradigm and functions
My Recommendation
 Learn and use
• Haskell
• Python or Ruby or Perl
• C#
• And Assembly, C, C++, Delphi , HDL, Java,
Matlab, Labview, Lex, Lua, Prolog, Regular
Expression, Visual Basic…
Reference
 Tim Sweeney's talk at POPL06 and
CEDEC 2008
 Wikipedia
 Google Image Search
Thanks for your attention