tiobe programming community index for january 2012 top 20

24
C#が3位になったことを記念して

Upload: potimarimo

Post on 02-Jul-2015

681 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Tiobe programming community index for january 2012 top 20

C#が3位になったことを記念して

Page 2: Tiobe programming community index for january 2012 top 20

型付け(強い/弱い、動的/静的)

手続型/宣言型

命令型/構造化/オブジェクト指向/関数型

チューリング完全/非チューリング完全

2

Page 3: Tiobe programming community index for january 2012 top 20

言語機能

セマンティクス

文法

言語機能のシンプルさ

ライブラリの豊富さ

進化の速度

後方互換性の重視

利用されている分野

3

Page 4: Tiobe programming community index for january 2012 top 20

Java 「一度作ればどこでも動く」

豊富なライブラリ

多数のオープンソースフレームワーク

言語設計は大変堅実

オブジェクト指向があれば他の言語機能はあまりいらない

デスクトップアプリは尐々弱い

JavaFXに期待

4

構造化オブジェクト指向総称型命令型登場時期:1995年強い静的型付け

class Deriv extends Base{

public Deriv(){

System.out.println("Deriv::Deriv()");

}

public Deriv(int i){

super(i);

System.out.println("Deriv::Deriv(int)");

}

public static void main(String args[]){

System.out.println("main");

Deriv d1 = new Deriv();

Deriv d2 = new Deriv(1);

}

}

Page 5: Tiobe programming community index for january 2012 top 20

C

中級言語

ポインタ

「自分の足を撃つ自由」を絶対に手放さない言語

組み込みやOS構築用ではいまだ主流

初心者がまず覚えることが多い

教育に向いているかはかなり疑問

データと処理の構造化機能は十分にある

5

構造化命令型登場時期:1972年弱い静的型付け

char *strCpy(char *s1, const char *s2)

{

char *p = s1;

while(*s1++ = *s2++);

return p;

}

Page 6: Tiobe programming community index for january 2012 top 20

C#

先進的でよくまとまった機能

先進的で豊富なライブラリ

後方互換性も極力保つ

強力なIDEサポート

学ぶとMicrosoftに魂を売ることに

とはいえMonoとかISO/IEC 23270とかもある

大金をかけて設計され作られたツールというものは、かなり便利で使いやすいものです

6

構造化オブジェクト指向総称型命令型登場時期:2000年強い静的型付け4.0から動的型導入

class app {

static void Main() {

var names = { "Burke", "Connor", "Frank",

"Everett", "Albert", "George",

"Harris", "David" };

var query = from s in names

where s.Length == 5

orderby s

select s.ToUpper();

foreach (string item in query)

Console.WriteLine(item);

}

}

Page 7: Tiobe programming community index for january 2012 top 20

C++ Cと同等の低レベルから、非常に高レベルまで記述可能

それらを利用した豊富なライブラリ

1980年代から一貫した後方互換性

動作はもちろん、内部的な処理を複雑にすることすらしない

その結果、大変に複雑

新しい書き方、古い書き方、安全な書き方、速度重視の書き方などどんな書き方も禁止されていないが、その中から最適なものを選ぶのは人間

仕様を完全に満たしたコンパイラは存在しないといわれる

暗黒魔術が得意

7

構造化オブジェクト指向命令型総称型登場時期:1979年安全でない強い静的型付け

using namespace std;

#define foreach BOOST_FOREACH

int main() {

std::map<int , std::pair<string, string> > container;

container.insert(make_pair(0, make_pair("Python", "Guido van Rossum")));

container.insert(make_pair(1, make_pair("Perl", "Larry Wall")));

container.insert(make_pair(2, make_pair("Ruby", "Yukihiro Matsumoto")));

foreach (auto& item, container) {

auto& val = item.second;

cout < < val.first << " : " << val.second << endl;

}

return 0;

}

Page 8: Tiobe programming community index for january 2012 top 20

Objective-C

Apple専用言語

iOS開発で他の言語が禁止されたので、一躍主要言語に

一応オープンソース版もある

Smalltalkに感動した技術者が、CにSmalltalkの機能を組み込んでできた言語

文法的には精錬されてないと思う

Cocoaフレームワークは十分に先進的な機能を持つ

8

オブジェクト指向構造化命令型登場時期:1983年弱い静的型付け

void main() {

NSAutoreleasePool *pool =

[[NSAutoreleasePool alloc] init];

id text = [[Text alloc] autorelease];

[text setMessage:@"Hello World"];

[text printMessage];

[pool drain];

}

Page 9: Tiobe programming community index for january 2012 top 20

PHP

HTML生成専用言語

スクリプト的な書き方ができる

最近はオブジェクト指向も使える

動的言語の柔軟性もあるので、十分に近代的なライブラリは書ける

オブジェクト指向関連の文法はいまひとつこなれていない

9

オブジェクト指向構造化命令型登場時期:1995年弱い動的型付け

<html>

<head><title>output.php</title></head>

<body>

<?php

$name = $_POST['name'];

print ("次のデータを受け取りました<br />");

print ("名前:$name<br />");

?>

</body>

</html>

Page 10: Tiobe programming community index for january 2012 top 20

(Visual)Basic

BASIC

1980年代に大成功した教育用言語

~Visual Basic 6

GUI開発の敷居を大幅に引き下げた

Visual Basic .NET~

C#とほぼ同じ

XMLリテラルなどVB

10

登場時期:1964年

Dim r = 20.0

Dim pi = Function(birthday As Date)

If birthday.Year > 1990 AndAlso

birthday.Year < 2000 Then

Return 3

Else

Return 3.14

End If

End Function

Console.WriteLine(pi(Date.Today) * r * r)

Page 11: Tiobe programming community index for january 2012 top 20

Python

シンプルで拡張性の高い構文

書き方はひとつだけ

インデント

豊富なライブラリ

「電池が付属しています」

海外で特に普及

Googleの公式採用言語のひとつ

学術系で広まっている

11

構造化オブジェクト指向命令型登場時期:1990年強い動的型付け

from person import Person

class Employee(Person):

def __init__(self, name, age, company):

print '[Employee.__init__]'

Person.__init__(self, name, age)

self.company = company

def showinfo(self):

print '[Employee.showinfo]'

print '%s (%d) %s' % (self.name,self.age,self.company)

Page 12: Tiobe programming community index for january 2012 top 20

Perl

Ruby、Pythonへと続く高級スクリプト言語の祖

「あることをするのにいくつものやり方がある」

多くの記号を見慣れれば大変読みやすい

Perl5からはオブジェクト指向も利用可能

夢のPerl6

互換性を完全に捨てて、理想を追求したPerl

作り始めて10年以上。いつ完成するかは誰も知らない。

12

構造化オブジェクト指向命令型登場時期:1987年弱い動的型付け

$str = "ABCDEFGあいうえお";

for ($i = 0; $i < length($str); $i++) {

$c = substr($str, $i, 1);

if ($c =~ /[\x80-\xff]/) {

$c = substr($str, $i++, 2);

}

print "[$c] ";

}

Page 13: Tiobe programming community index for january 2012 top 20

JavaScript

Web世界のネイティブ言語

HTML5アプリの実装言語

大金をかけて高速化されている

シンプルでセンスのよいセマンティクス

プロトタイプベースのオブジェクト指向

ファーストクラスの関数オブジェクト

文法がどうもいまひとつなのが難点

13

構造化オブジェクト指向命令型登場時期:1995年弱い動的型付け

function Dog() {

this.state = "sitting";

this.showState = function(){

alert("I am " + this.state + ".");

};

}

var hachi = new Dog();

function LazyDog() {

this.state = "sleeping...";

}

LazyDog.prototype = new Dog();

var pochi = new LazyDog();

pochi.showState();

Page 14: Tiobe programming community index for january 2012 top 20

Delphi/Object Pascal Pascalをオブジェクト指向化したもの

C++やObjective-Cよりシンプルな文法

初期にはLisaやMacintoshの主要開発言語

現在はBorlandのDelphi言語が有名

クラスライブラリのVCLと共に一世を風靡

Windows用GUIクラスライブラリとしてMFCよりかなり使いやすい

当時の主要開発者は今はMicrosoftに移り、C#と.NET Frameworkなどを作っている

14

オブジェクト指向構造化命令型登場時期:1985年静的型付け

type TMyClass = class(TSuperClass)

private

Fa: Integer;

public

procedure SetValue(v: Integer);

function GetValue: Integer;

end;

implementation

procedure TMyClass.SetValue(v: Integer);

begin

Fa := v

end;

function TMyClass.GetValue: Integer;

begin

result := Fa

end;

Page 15: Tiobe programming community index for january 2012 top 20

Ruby 驚き最小の法則(Matzにとって)

多彩な文法表現力による、自然言語に近い可読性

説明用擬似コードの代わりによく使われる

言語自体はシンプル

ライブラリで言語拡張に近い表現が可能なので、ライブラリ作成者の工夫でどれだけでも可読性を上げられる

スクリプト言語の中でもひときわ遅いと言われる

IDEサポートは弱い

マルチスレッドが弱い

15

構造化オブジェクト指向命令型登場時期:1995年強い動的型付け

class Greeter

def initialize(name)

@name = name.capitalize

end

def salute

puts "Hello #{@name}!"

end

end

g = Greeter.new("world")

g.salute

Page 16: Tiobe programming community index for january 2012 top 20

LISP

先進的機能

関数型言語の祖

原則的に変数の書き換えはしない

ファーストクラスの関数オブジェクト

その起源は論文上での記述言語

機械語を意識するより便利な機能を追求する文化

長らく人工知能の記述言語によく使われていた

文法的には、とにかく括弧が多い

16

関数型登場時期:1958年動的型付け

(defun factorial (n)

(if (<= n 1)

1

(* n (factorial (- n 1)))))

Page 17: Tiobe programming community index for january 2012 top 20

Pascal

シンプルな構文

プログラム教育用言語

高速コンパイラ作成に向く(LL(1)文法)

Turbo Pascal

変数のスコープ

コンパイラの記述ができるほど強力な機能

17

構造化命令型登場時期:1970年静的型付け

program Hello(output);

begin

writeln('Hello, world!')

end.

Page 18: Tiobe programming community index for january 2012 top 20

Transact-SQL

MicrosoftとSybaseが拡張したSQL

手続き型言語として使える

SQLとの連携は便利

言語としての見所はなし

SQLはよい言語なのだが

18

構造化命令型宣言型静的型付け

DECLARE @Counter INT

SET @Counter = 10

WHILE @Counter > 0

BEGIN

PRINT 'The count is ' + CONVERT(VARCHAR(10), @Counter)

SET @Counter = @Counter - 1

END

Page 19: Tiobe programming community index for january 2012 top 20

PL-SQL

Oracleが拡張したSQL

手続き型言語として使える

SQLとの連携は便利

言語としての見所はなし

SQLはよい言語なのだが

19

構造化命令型登場時期:1988年静的型付け

DECLARE

hw VARCHAR2(100) := 'Hello World!';

BEGIN

DBMS_OUTPUT.PUT_LINE('Hello World!') ;

DBMS_OUTPUT.PUT_LINE('VARIABLE hw = '||hw) ;

END;

Page 20: Tiobe programming community index for january 2012 top 20

Ada

米国国防総省が作った言語

当時としては大変先進的

大規模開発に向く

可読性を重視

コンパイル時、実行時の強い型検査

後にオブジェクト指向機能も追加(Ada 95)

ISOに認定された初のオブジェクト指向言語

20

構造化オブジェクト指向命令型登場時期:1983年安全な強い静的型付け

i : Integer := 2;

begin

for i in 2 .. 100 loop

if issosuu(i) = 1 then

Ada.Integer_Text_IO.Put(i);

Ada.Text_IO.New_Line;

end if;

end loop;

end Sosuu;

Page 21: Tiobe programming community index for january 2012 top 20

Logo

教育用言語

各国語に翻訳されている

方言多数

タートルグラフィック

構造化機能はある

21

構造化命令型登場時期:1967年動的型付け

手順は 三角前へ 100右へ 120前へ 100右へ 120前へ 100

おわり

Page 22: Tiobe programming community index for january 2012 top 20

R

統計処理用言語

プログラムに慣れていない人向け

ベクトル計算に特化した言語

統計処理、グラフ記述用ライブラリが豊富

日本語にも対応

セマンティクスは比較的先進的

高階関数などの機能

オブジェクト指向にも一応対応している

22

関数型オブジェクト指向構造化命令型登場時期:1996年動的型付け

s <-100000

x <-runif(s)

y <-runif(s)

sum(x^2+y^2<=1)*4/s

Page 23: Tiobe programming community index for january 2012 top 20

Lua

コンパクトな言語仕様

実行環境の容量はでPerl/Ruby/Pythonなどより二桁下

厳選されているので、記述力は十分にある

スクリプト言語にしては大変高速な動作

C関数の呼び出しも簡単

他アプリケーションへの組み込みに向く

ゲームとか

23

構造化命令型登場時期:1993年動的型付け

function sum(num1, num2)

local total = num1 + num2

return total

end

Page 24: Tiobe programming community index for january 2012 top 20

当ドキュメントにあるソースコードはネット上に公開されているものを利用しました。

24