C#が3位になったことを記念して
 型付け(強い/弱い、動的/静的) 手続型/宣言型 命令型/構造化/オブジェクト指向/関数型 チューリング完全/非チューリング完全                         2
 言語機能   セマンティクス   文法 言語機能のシンプルさ ライブラリの豊富さ 進化の速度 後方互換性の重視 利用されている分野               3
構造化                               オブジェクト指向Java                           総称型                               命令型            ...
構造化             char *strCpy(char *s1, const char *s2)   命令型C            {               char *p = s1;               while...
構造化                                 オブジェクト指向                                 総称型C#                               命令型      ...
using namespace std;      #define foreach BOOST_FOREACH                                                 構造化      int main(...
オブジェクト指向                                構造化Objective-C                     命令型                                登場時期:1983年  ...
<html>       <head><title>output.php</title></head>   オブジェクト指向       <body>       <?php                                   ...
登場時期:1964年(Visual)Basic  BASIC     1980年代に大成功した教育用言語  ~Visual Basic 6     GUI開発の敷居を大幅に引き下げた                        Dim...
構造化                                            オブジェクト指向Python                                      命令型                    ...
$str = "ABCDEFGあいうえお";             for ($i = 0; $i < length($str); $i++) {   構造化                $c = substr($str, $i, 1); ...
構造化                          オブジェクト指向JavaScript                命令型                          登場時期:1995年                    ...
オブジェクト指向                                                構造化                                                命令型Delphi/Objec...
構造化                          オブジェクト指向Ruby                      命令型                          登場時期:1995年                    ...
関数型                                    登場時期:1958年LISP                                動的型付け                           (defu...
構造化                                命令型Pascal                          登場時期:1970年                                静的型付け     ...
構造化                                              命令型Transact-SQL                                  宣言型                     ...
構造化                                            命令型PL-SQL                                      登場時期:1988年                  ...
構造化                                     オブジェクト指向Ada                                  命令型                                  ...
構造化                  命令型Logo              登場時期:1967年                  動的型付け                   手順は   三角 教育用言語             ...
関数型                              オブジェクト指向R                             構造化                              命令型               ...
構造化                                  命令型Lua                               登場時期:1993年                                  動的型付...
当ドキュメントにあるソースコードはネット上に公開されているものを利用しました。                             24
Upcoming SlideShare
Loading in …5
×

Tiobe programming community index for january 2012 top 20

950 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
950
On SlideShare
0
From Embeds
0
Number of Embeds
144
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tiobe programming community index for january 2012 top 20

  1. 1. C#が3位になったことを記念して
  2. 2.  型付け(強い/弱い、動的/静的) 手続型/宣言型 命令型/構造化/オブジェクト指向/関数型 チューリング完全/非チューリング完全 2
  3. 3.  言語機能  セマンティクス  文法 言語機能のシンプルさ ライブラリの豊富さ 進化の速度 後方互換性の重視 利用されている分野 3
  4. 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. 5. 構造化 char *strCpy(char *s1, const char *s2) 命令型C { char *p = s1; while(*s1++ = *s2++); 登場時期:1972年 弱い静的型付け return p; } 中級言語  ポインタ  「自分の足を撃つ自由」を絶対に手放さない言語 組み込みやOS構築用ではいまだ主流 初心者がまず覚えることが多い  教育に向いているかはかなり疑問 データと処理の構造化機能は十分にある 5
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 16. 関数型 登場時期:1958年LISP 動的型付け (defun factorial (n) 先進的機能 (if (<= n 1) 1  関数型言語の祖 (* n (factorial (- n 1)))))  原則的に変数の書き換えはしない  ファーストクラスの関数オブジェクト  その起源は論文上での記述言語  機械語を意識するより便利な機能を追求する文化  長らく人工知能の記述言語によく使われていた 文法的には、とにかく括弧が多い 16
  17. 17. 構造化 命令型Pascal 登場時期:1970年 静的型付け program Hello(output); シンプルな構文 begin writeln(Hello, world!)  プログラム教育用言語 end.  高速コンパイラ作成に向く(LL(1)文法)  Turbo Pascal 変数のスコープ コンパイラの記述ができるほど強力な機能 17
  18. 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. 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. 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. 21. 構造化 命令型Logo 登場時期:1967年 動的型付け 手順は 三角 教育用言語 前へ 100 右へ 120  各国語に翻訳されている 前へ 100  方言多数 右へ 120 前へ 100 タートルグラフィック おわり 構造化機能はある 21
  22. 22. 関数型 オブジェクト指向R 構造化 命令型 登場時期:1996年 動的型付け 統計処理用言語  プログラムに慣れていない人向け s <-100000 x <-runif(s)  ベクトル計算に特化した言語 y <-runif(s) sum(x^2+y^2<=1)*4/s  統計処理、グラフ記述用ライブラリが豊富  日本語にも対応 セマンティクスは比較的先進的  高階関数などの機能  オブジェクト指向にも一応対応している 22
  23. 23. 構造化 命令型Lua 登場時期:1993年 動的型付け コンパクトな言語仕様  実行環境の容量はでPerl/Ruby/Pythonなどより二桁下  厳選されているので、記述力は十分にある スクリプト言語にしては大変高速な動作 function sum(num1, num2)  C関数の呼び出しも簡単 local total = num1 + num2 return total 他アプリケーションへの組み込みに向く end  ゲームとか 23
  24. 24. 当ドキュメントにあるソースコードはネット上に公開されているものを利用しました。 24

×