productivity - Programming Language Laboratory

quaggahooliganInternet και Εφαρμογές Web

5 Φεβ 2013 (πριν από 3 χρόνια και 10 μήνες)

100 εμφανίσεις

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

MULTI
-
CORE PROCESS

Language for multi
-
core parallel programming

CPU Clock Limit

Intel Pentium 4 640 (3.2GHz)

\
62,900

Intel Core 2 Duo E6600 (2.4GHz)

\
221,840

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

PRODUCTIVITY

Easiness of programming

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 :


Windows XP :


Mac OS X 10.4 :


Debian 4.0 :

1,000,000 Lines

86,000,000 Lines

283,000,000 Lines

40,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

Compr
-

ession




Productivity for Big program


Modularity


Functional Language, OOP…


Reliability


Memory operation


Type checking


Concurrency


I already mentioned about concurrency

OTHER TRENDS

Web 2.0, Cloud Computing

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

CONCLUSION

Functional? Script? and…

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