Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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