Tiobe programming community index for january 2012 top 20
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Tiobe programming community index for january 2012 top 20

on

  • 878 views

 

Statistics

Views

Total Views
878
Views on SlideShare
752
Embed Views
126

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 126

http://ameblo.jp 122
http://blog.ameba.jp 4

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Tiobe programming community index for january 2012 top 20 Presentation Transcript

  • 1. C#が3位になったことを記念して
  • 2.  型付け(強い/弱い、動的/静的) 手続型/宣言型 命令型/構造化/オブジェクト指向/関数型 チューリング完全/非チューリング完全 2
  • 3.  言語機能  セマンティクス  文法 言語機能のシンプルさ ライブラリの豊富さ 進化の速度 後方互換性の重視 利用されている分野 3
  • 4. 構造化 オブジェクト指向Java 総称型 命令型 登場時期: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);  デスクトップアプリは尐々弱い } }  JavaFXに期待 4
  • 5. 構造化 char *strCpy(char *s1, const char *s2) 命令型C { char *p = s1; while(*s1++ = *s2++); 登場時期:1972年 弱い静的型付け return p; } 中級言語  ポインタ  「自分の足を撃つ自由」を絶対に手放さない言語 組み込みやOS構築用ではいまだ主流 初心者がまず覚えることが多い  教育に向いているかはかなり疑問 データと処理の構造化機能は十分にある 5
  • 6. 構造化 オブジェクト指向 総称型C# 命令型 登場時期: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 強力なIDEサポート select s.ToUpper(); foreach (string item in query) Console.WriteLine(item); 学ぶとMicrosoftに魂を売ることに } }  とはいえMonoとかISO/IEC 23270とかもある 大金をかけて設計され作られたツールというものは、かな り便利で使いやすいものです 6
  • 7. 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"))); 命令型C++ container.insert(make_pair(2, make_pair("Ruby", "Yukihiro Matsumoto"))); foreach (auto& item, container) { } auto& val = item.second; cout < < val.first << " : " << val.second << endl; 総称型 登場時期:1979年 } return 0; 安全でない強い静的型付け Cと同等の低レベルから、非常に高レベルまで記述可能  それらを利用した豊富なライブラリ 1980年代から一貫した後方互換性  動作はもちろん、内部的な処理を複雑にすることすらしない その結果、大変に複雑  新しい書き方、古い書き方、安全な書き方、速度重視の書き方などどん な書き方も禁止されていないが、その中から最適なものを選ぶのは人間  仕様を完全に満たしたコンパイラは存在しないといわれる 暗黒魔術が得意 7
  • 8. オブジェクト指向 構造化Objective-C 命令型 登場時期:1983年 弱い静的型付け Apple専用言語 void main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  iOS開発で他の言語が禁止されたので、一 躍主要言語に id text = [[Text alloc] autorelease]; [text setMessage:@"Hello World"]; [text printMessage];  一応オープンソース版もある [pool drain]; } Smalltalkに感動した技術者が、Cに Smalltalkの機能を組み込んでできた言語  文法的には精錬されてないと思う Cocoaフレームワークは十分に先進的な 機能を持つ 8
  • 9. <html> <head><title>output.php</title></head> オブジェクト指向 <body> <?php 構造化PHP $name = $_POST[name]; print ("次のデータを受け取りました<br />"); print ("名前:$name<br />"); 命令型 登場時期:1995年 弱い動的型付け ?> </body> </html> HTML生成専用言語 スクリプト的な書き方ができる 最近はオブジェクト指向も使える  動的言語の柔軟性もあるので、十分に近代的なライブラリは書ける  オブジェクト指向関連の文法はいまひとつこなれていない 9
  • 10. 登場時期:1964年(Visual)Basic  BASIC  1980年代に大成功した教育用言語  ~Visual Basic 6  GUI開発の敷居を大幅に引き下げた Dim r = 20.0  Visual Basic .NET~ Dim pi = Function(birthday As Date) If birthday.Year > 1990 AndAlso  C#とほぼ同じ birthday.Year < 2000 Then Return 3  XMLリテラルなどVB Else Return 3.14 End If End Function Console.WriteLine(pi(Date.Today) * r * r) 10
  • 11. 構造化 オブジェクト指向Python 命令型 登場時期: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) 海外で特に普及  Googleの公式採用言語のひとつ  学術系で広まっている 11
  • 12. $str = "ABCDEFGあいうえお"; for ($i = 0; $i < length($str); $i++) { 構造化 $c = substr($str, $i, 1); if ($c =~ /[x80-xff]/) { オブジェクト指向Perl } $c = substr($str, $i++, 2); print "[$c] "; 命令型 登場時期:1987年 弱い動的型付け }  Ruby、Pythonへと続く高級スクリプト言語の祖  「あることをするのにいくつものやり方がある」  多くの記号を見慣れれば大変読みやすい  Perl5からはオブジェクト指向も利用可能  夢のPerl6  互換性を完全に捨てて、理想を追求したPerl  作り始めて10年以上。いつ完成するかは誰も知らない。 12
  • 13. 構造化 オブジェクト指向JavaScript 命令型 登場時期:1995年 弱い動的型付け Web世界のネイティブ言語 function Dog() { this.state = "sitting"; this.showState = function(){  HTML5アプリの実装言語 alert("I am " + this.state + "."); };  大金をかけて高速化されている } var hachi = new Dog(); function LazyDog() { シンプルでセンスのよいセマンティクス this.state = "sleeping..."; }  プロトタイプベースのオブジェクト指向 LazyDog.prototype = new Dog(); var pochi = new LazyDog(); pochi.showState();  ファーストクラスの関数オブジェクト  文法がどうもいまひとつなのが難点 13
  • 14. オブジェクト指向 構造化 命令型Delphi/Object Pascal 登場時期:1985年 静的型付け type TMyClass = class(TSuperClass) Pascalをオブジェクト指向化したもの private Fa: Integer;  C++やObjective-Cよりシンプルな文法 public procedure SetValue(v: Integer); function GetValue: Integer; 初期にはLisaやMacintoshの主要開発言 end; 語 implementation procedure TMyClass.SetValue(v: Integer); begin 現在はBorlandのDelphi言語が有名 Fa := v end;  クラスライブラリのVCLと共に一世を風靡 function TMyClass.GetValue: Integer;  Windows用GUIクラスライブラリとして begin MFCよりかなり使いやすい result := Fa end;  当時の主要開発者は今はMicrosoftに移り、 C#と.NET Frameworkなどを作っている 14
  • 15. 構造化 オブジェクト指向Ruby 命令型 登場時期:1995年 強い動的型付け class Greeter 驚き最小の法則(Matzにとって) def initialize(name) @name = name.capitalize end 多彩な文法表現力による、自然言語に近い可読性 def salute puts "Hello #{@name}!"  説明用擬似コードの代わりによく使われる end end 言語自体はシンプル g = Greeter.new("world") g.salute  ライブラリで言語拡張に近い表現が可能なので、ライブラリ作成 者の工夫でどれだけでも可読性を上げられる スクリプト言語の中でもひときわ遅いと言われる IDEサポートは弱い マルチスレッドが弱い 15
  • 16. 関数型 登場時期:1958年LISP 動的型付け (defun factorial (n) 先進的機能 (if (<= n 1) 1  関数型言語の祖 (* n (factorial (- n 1)))))  原則的に変数の書き換えはしない  ファーストクラスの関数オブジェクト  その起源は論文上での記述言語  機械語を意識するより便利な機能を追求する文化  長らく人工知能の記述言語によく使われていた 文法的には、とにかく括弧が多い 16
  • 17. 構造化 命令型Pascal 登場時期:1970年 静的型付け program Hello(output); シンプルな構文 begin writeln(Hello, world!)  プログラム教育用言語 end.  高速コンパイラ作成に向く(LL(1)文法)  Turbo Pascal 変数のスコープ コンパイラの記述ができるほど強力な機能 17
  • 18. 構造化 命令型Transact-SQL 宣言型 静的型付け MicrosoftとSybaseが拡張したSQL 手続き型言語として使える SQLとの連携は便利 言語としての見所はなし  SQLはよい言語なのだが DECLARE @Counter INT SET @Counter = 10 WHILE @Counter > 0 BEGIN PRINT The count is + CONVERT(VARCHAR(10), @Counter) SET @Counter = @Counter - 1 END 18
  • 19. 構造化 命令型PL-SQL 登場時期:1988年 静的型付け Oracleが拡張したSQL 手続き型言語として使える SQLとの連携は便利 言語としての見所はなし  SQLはよい言語なのだが DECLARE hw VARCHAR2(100) := Hello World!; BEGIN DBMS_OUTPUT.PUT_LINE(Hello World!) ; DBMS_OUTPUT.PUT_LINE(VARIABLE hw = ||hw) ; END; 19
  • 20. 構造化 オブジェクト指向Ada 命令型 登場時期: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; 後にオブジェクト指向機能も追加(Ada 95)  ISOに認定された初のオブジェクト指向言語 20
  • 21. 構造化 命令型Logo 登場時期:1967年 動的型付け 手順は 三角 教育用言語 前へ 100 右へ 120  各国語に翻訳されている 前へ 100  方言多数 右へ 120 前へ 100 タートルグラフィック おわり 構造化機能はある 21
  • 22. 関数型 オブジェクト指向R 構造化 命令型 登場時期:1996年 動的型付け 統計処理用言語  プログラムに慣れていない人向け s <-100000 x <-runif(s)  ベクトル計算に特化した言語 y <-runif(s) sum(x^2+y^2<=1)*4/s  統計処理、グラフ記述用ライブラリが豊富  日本語にも対応 セマンティクスは比較的先進的  高階関数などの機能  オブジェクト指向にも一応対応している 22
  • 23. 構造化 命令型Lua 登場時期:1993年 動的型付け コンパクトな言語仕様  実行環境の容量はでPerl/Ruby/Pythonなどより二桁下  厳選されているので、記述力は十分にある スクリプト言語にしては大変高速な動作 function sum(num1, num2)  C関数の呼び出しも簡単 local total = num1 + num2 return total 他アプリケーションへの組み込みに向く end  ゲームとか 23
  • 24. 当ドキュメントにあるソースコードはネット上に公開されているものを利用しました。 24