![]() ![]() |
![]() |
|
![]() |
||
![]() |
2023-11-25
Javaを中心に偏見ベースでプログラミング言語の関係をまとめた
オブジェクト指向言語の話をするときに便利なように、Javaを中心にプログラミング言語をまとめてみました。
Javaに影響与えるか、Javaから影響を受けるか、という感じですね。
Simula
オブジェクト指向はここから始まったと言われています。
クラス、オブジェクト、継承、仮想関数(多態)といった、オブジェクト指向の基本要素が備わっていました。
ただし、「オブジェクト指向」という言葉は生まれていません。
Smalltalk
Simulaから発想を得て「オブジェクト指向」という言葉を生んだのはアラン・ケイでした。
しかし、モデルとしてはSimulaとは異なりメッセージングを主体としたものでした。また、アラン・ケイの「オブジェクト指向」はプログラミングのパラダイムだけではなく、人がコンピュータをどのように扱うかというメタファであり、ダイナブックというハードウェアやそのユーザーインタフェースを含むものでした。
Smalltalkは、そのような思想でコンピュータを扱うための環境として開発されました。
ここでSmalltalkに関しては3つのバージョンを分けていますが、これは「オブジェクト指向」の源流としてのSmalltalkを扱うときに、バージョン間の変遷が重要になるからです。
メッセージングのオブジェクト指向によるコンピューティングを実現するために開発された最初のバージョンはSmalltalk 72ですが、Smalltalk-76ではSimulaのオブジェクト指向のようなクラスや継承を取り入れています。
そして、Smalltalk-80として商用化され現場のプログラマが使うようになったのですが、このバージョンに関してアラン・ケイは「Smalltalk-80は私の手を離れ、Lisp好きの影響を強く受けてた」のようなことを言ったようです。
https://matz.rubyist.net/20060608.html
また、エンドユーザーではなく開発現場のプログラマが使うようになったことを「Smalltalkの死」とも表現しているようです。
https://sumim.hatenablog.com/entry/20060612/p1
つまり、商用化され広く開発で使われるようになったSmalltalkを「アラン・ケイのオブジェクト指向を実現する言語」というのはあまり適切ではないということです。
C++のオブジェクト指向とSmalltalkのオブジェクト指向は違うといわれることがありますが、GoFの「デザインパターン」がSmalltalkで整理され出版されるときにC++に書き直されたことからわかるよう、両者とも同じ問題が発生し同じく継承を使った解決方法をとることになるくらい似ていたということになります。
C++
C++はCにSimulaのクラスを導入したものです。
詳しくはこちらの本に。
C++の設計と進化
作者:Bjarne Stroustrup,ビョーン ストラウストラップ
ソフトバンククリエイティブ
Amazon
Java
JavaはC++をベースにしたように言われますが、実際にはObjective-Cの後継です。Objective-CにC++の構文を載せた、というのが適切だと思います。
インタフェースはObjective-Cのプロトコルであり、クラスが大文字はじめ、メソッドやフィールドは小文字という命名規約もObjective-Cと同様です。
Objective-CはCにSmalltalkのオブジェクト指向を持ってきたものなので、Javaのオブジェクト指向もSmalltalk由来と言えます。
JavaがC++ではなくObjective-Cの流れであるという話は、Javaの開発者のひとりであるPatrick Naughtonのメールのアーカイブに。
https://web.archive.org/web/20110713014816/http://cs.gmu.edu/~sean/stuff/java-objc.html
JavaScript
クラス、インスタンス、オブジェクトという用語の区別に悩んだことはないでしょうか?「クラスのオブジェクト」と言ったとき、クラスを表すオブジェクトなのかクラスがインスタンス化されたオブジェクトなのか、そもそもこの説明なにいってるかようわからん、になったりしてないでしょうか。
そこで、「全部オブジェクトでええやん、新しいオブジェクトを作るときには、プロトタイプになるオブジェクトをコピーすればええやん」という考えのもとSelfという言語ができました。
そして、インターネットが流行ったときにブラウザの中でプログラムを動かしたいなーとBreandan Eichを呼んできてSchemeを動かさせようとしたところ、当時話題になっていたJavaに似せる必要があるということでSelfのプロトタイプベースのオブジェクト指向を取り込みつつJavaの見た目とライブラリをかぶせてJavaScriptができあがりました。
ライブラリをそのまま移植したため、java.util.Dateの2000年バグまでもってきてしまったと後悔していますね。あとプリミティブも。
JavaScript誕生の話はこちら
https://brendaneich.com/2008/04/popularity/
C♯
C#へと至る道も長いですね。
まずWindows用にDelphiという開発環境がありました。これはPascalという言語にオブジェクト指向をのせたObject Pascalという言語を使っていました。VBのような開発環境ですが、VBよりかなりいいという評判に。
そして、Delphiと同じことをC++でやれるようにと、C++Builderが開発されました。このとき、ボタンのイベントハンドラを登録するときに関数ポインタにイベントの受け取りオブジェクトも結び付ける必要があったため、__closureという拡張が行われています。
さて、そんなところにJavaが流行ってきました。MicrosoftとしてはJavaでWindowsアプリを作れるようにしたい、そこにDelphi/C++Bulderの開発者であるAnders Hejlsbergが、Borlandの開発環境部門廃止で会社を追い出されたので、Javaを拡張してJ++を作ってもらったのでした。この拡張は、C++Builderの__closureをJavaに持ってきたもので、delegateと呼ばれました。
しかし、Write Once Run Anywareを掲げてJavaを作っていたSun Microsystemsはそんな独自拡張を許すわけもなく。
ということでMicrosoftはJavaを離れ、C#という独自言語を作ったのでした。
PHP
PHPはPHP/FIをもうちょっとちゃんとしてPHP3になったときに流行りました。
そして用途が広まるときにZend社が入ってある程度しっかりしたものにしつつ、オブジェクト指向を取り入れたのがPHP4です。このとき、Javaが超流行ってたため、PHPのオブジェクト指向はJavaの機能を再現した感じになっています。
Scala, Kotlin, Swift
ScalaはJavaの資産を利用しつつ関数型をとりこんで実用的に仕上げた言語です。
Kotlinは歴史の積もったJavaをリセットして現代的につくりなおした言語といえます。
SwiftはObjective-Cの代替として現代的につくりなおされた言語ですね。
と、そんな感じでまとめてみました。
※補足 RubyやPython、RustやGoについては、この図にいれてもどこからも線が引かれないか、「オブジェクト指向の機能あるんだからSimulaかSmalltalkの影響は受けとるやろ」程度のつながりになってそんな面白くないなーとなって載せてないです。GoはCに、RustはC++につなげて「代替したい」くらいの関係に・・・(あとJavaとつなげて「反面教師」ってやるか)
あと、いろいろ掘り出せば際限ないので、Tiobe index20位、せめて50位に入る程度にメジャーなものってやるとGroovyやClosureは外れて・・・。オブジェクト指向の話としてそんなに発展もないし。
プログラミング言語図鑑
作者:増井 敏克
ソシム
Amazon
nowokay 2023-11-25 18:03
もっと読む
コメントを書く
Javaを中心に偏見ベースでプログラミング言語の関係をまとめた
▼ ▶
2014
2014 / 2
▼ ▶
2013
2013 / 9
2013 / 8
2013 / 7
2013 / 5
2013 / 3
2013 / 2
2013 / 1
▼ ▶
2012
2012 / 12
2012 / 11
2012 / 10
2012 / 9
2012 / 8
2012 / 7
2012 / 6
2012 / 5
2012 / 4
2012 / 3
2012 / 2
2012 / 1
▼ ▶
2011
2011 / 12
2011 / 11
2011 / 10
2011 / 9
2011 / 8
2011 / 7
2011 / 6
2011 / 5
2011 / 4
2011 / 3
2011 / 2
2011 / 1
▼ ▶
2010
2010 / 12
2010 / 11
2010 / 10
2010 / 9
2010 / 8
2010 / 7
2010 / 6
2010 / 5
2010 / 4
2010 / 3
2010 / 2
2010 / 1
▼ ▶
2009
2009 / 12
2009 / 11
2009 / 10
2009 / 9
2009 / 8
2009 / 7
2009 / 6
2009 / 5
2009 / 4
2009 / 3
2009 / 2
2009 / 1
▼ ▶
2008
2008 / 12
2008 / 11
2008 / 10
2008 / 9
2008 / 8
2008 / 7
2008 / 6
2008 / 5
2008 / 4
2008 / 3
2008 / 2
2008 / 1
▼ ▶
2007
2007 / 12
2007 / 11
2007 / 10
2007 / 9
2007 / 8
2007 / 7
2007 / 6
2007 / 5
2007 / 4
2007 / 3
2007 / 2
2007 / 1
▼ ▶
2006
2006 / 12
2006 / 11
2006 / 10
2006 / 9
2006 / 8
2006 / 7
2006 / 6
2006 / 5
2006 / 4
2006 / 3
2006 / 2
2006 / 1
▼ ▶
2005
2005 / 12
2005 / 11
2005 / 10
2005 / 9
2005 / 8
2005 / 7
2005 / 6
2005 / 5
2005 / 4
2005 / 3
2005 / 2
2005 / 1
▼ ▶
2004
2004 / 12
2004 / 11
2004 / 10
2004 / 9
2004 / 8
2004 / 7
2004 / 6
2004 / 5
2004 / 4
2004 / 3
2004 / 2
▼ ▶
2013
2013 / 5
2013 / 1
▼ ▶
2012
2012 / 4
2012 / 3
2012 / 1
▼ ▶
2011
2011 / 12
2011 / 11
2011 / 6
2011 / 5
2011 / 4
2011 / 3
2011 / 2
▼ ▶
2010
2010 / 11
2010 / 10
2010 / 9
2010 / 7
2010 / 6
2010 / 5
2010 / 4
2010 / 3
2010 / 2
2010 / 1
▼ ▶
2009
2009 / 8
2009 / 6
2009 / 5
2009 / 4
2009 / 3
2009 / 2
2009 / 1
▼ ▶
2008
2008 / 12
2008 / 11
2008 / 10
2008 / 9
2008 / 8
2008 / 7
2008 / 6
2008 / 5
2008 / 4
2008 / 3
2008 / 2
2008 / 1
▼ ▶
2007
2007 / 12
2007 / 11
2007 / 10
2007 / 9
2007 / 8
2007 / 7
2007 / 6
2007 / 5
2007 / 4
2007 / 3
2007 / 2
2007 / 1
▼ ▶
2006
2006 / 12
2006 / 11
2006 / 10
2006 / 9
2006 / 8
2006 / 7
2006 / 6
2006 / 5
2006 / 4
2006 / 3
2006 / 2
2006 / 1
▼ ▶
2013
2013 / 12
▼ ▶
2012
2012 / 12
▼ ▶
2011
2011 / 12
2011 / 8
2011 / 7
2011 / 6
2011 / 3
2011 / 1
▼ ▶
2010
2010 / 8
2010 / 7
2010 / 6
2010 / 5
2010 / 3
2010 / 2
▼ ▶
2009
2009 / 12
2009 / 9
2009 / 7
2009 / 6
2009 / 4
2009 / 3
2009 / 2
▼ ▶
2008
2008 / 12
2008 / 10
2008 / 8
2008 / 4
2008 / 3
2008 / 2
2008 / 1
▼ ▶
2007
2007 / 12
2007 / 11
2007 / 10
2007 / 7
2007 / 6
2007 / 5
2007 / 4
2007 / 3
2007 / 2
2007 / 1
▼ ▶
2006
2006 / 12
2006 / 11
2006 / 10
2006 / 9
2006 / 8
2006 / 7
2006 / 6
2006 / 5
2006 / 4
2006 / 3
2006 / 2
2006 / 1
▼ ▶
2005
2005 / 12
2005 / 11
2005 / 10
2005 / 9
2005 / 8
2005 / 7
2005 / 6
2005 / 5
2005 / 4
2005 / 3
2005 / 2
2005 / 1
▼ ▶
2004
2004 / 12
2004 / 11
2004 / 10
2004 / 9
2004 / 8
2004 / 7
記事はありません
▼ ▶
2022
2022 / 12
2022 / 5
▼ ▶
2021
2021 / 12
2021 / 3
▼ ▶
2020
2020 / 9
2020 / 6
2020 / 3
▼ ▶
2019
2019 / 6
2019 / 5
2019 / 4
2019 / 3
▼ ▶
2018
2018 / 12
2018 / 10
2018 / 8
2018 / 7
2018 / 6
▼ ▶
2016
2016 / 9
2016 / 3
▼ ▶
2015
2015 / 4
▼ ▶
2014
2014 / 1
▼ ▶
2013
2013 / 12
2013 / 6
2013 / 5
2013 / 3
2013 / 1
▼ ▶
2012
2012 / 12
2012 / 6
2012 / 4
2012 / 3
2012 / 2
▼ ▶
2011
2011 / 12
2011 / 10
2011 / 8
2011 / 7
2011 / 6
2011 / 4
2011 / 3
2011 / 2
2011 / 1
▼ ▶
2010
2010 / 12
2010 / 11
2010 / 10
2010 / 9
2010 / 8
2010 / 7
2010 / 5
2010 / 1
▼ ▶
2009
2009 / 12
2009 / 11
2009 / 10
2009 / 9
2009 / 8
2009 / 7
2009 / 6
2009 / 4
2009 / 3
2009 / 2
2009 / 1
▼ ▶
2008
2008 / 12
2008 / 11
2008 / 10
2008 / 9
2008 / 8
2008 / 7
2008 / 6
2008 / 5
2008 / 4
2008 / 3
2008 / 2
▼ ▶
2007
2007 / 11
2007 / 10
2007 / 9
2007 / 8
2007 / 7
2007 / 6
2007 / 5
2007 / 4
2007 / 3
2007 / 2
Error 404--Not Found
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.4.5 404 Not Found
The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent.
If the server does not wish to make this information available to the client, the status code 403 (Forbidden) can be used instead. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address.
Error 404--Not Found
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.4.5 404 Not Found
The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent.
If the server does not wish to make this information available to the client, the status code 403 (Forbidden) can be used instead. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address.
このブログについて
月の生活 | よなよなエール公式ウェブサイト「よなよなの里」
読者になる
FAQ / お問い合わせ窓口
海外POSシステム開発エンジニア募集 by 株式会社Abby
現在、大規模チェーンレストラン向けのレストラン店舗運営システムを開発しています。展開先はアメリカ、オーストラリア、台湾、マレーシア、...
www.wantedly.com
Unityでスマホ、Switchのゲーム開発をしたいエンジニアを募集! by 株式会社Abby
今回は、・Unityを使用したNintendo Switch向けのゲーム開発・Unityを使用したスマートフォン向けのゲーム開発...
www.wantedly.com
2016-09-20
Seasar Conference Final
今週の土曜、9/24にSeasar Conference Finalを行います。
10年前に始まったSeasar Conferenceもいよいよ今度でFinalです。
お申し込みはこちら。
http://seasar.connpass.com/event/38679/
Seasar Projectの面白かったところって、開発方法論が盛り上がったところだと思うんですよ。
マーチンファウラーをはじめとして、著名な人たちのほとんどが「ドメインモデル推し」の中、僕は、「ステートレスなサービス + DTO推し」だったからね。S2Daoは、このために作ったようなものです。
あの開発方法論の議論に、かなりの人が参加したり、自分で考えたりしたでしょう。それが、面白かったところです。みんなが自分の事として考えたから。そんな難しい話ではないし、自分のプロジェクトに即いかせる話だしね。
オブジェクト指向ナンチャラとかDDDとか、素晴らしいものなんだけど、自分のプロジェクトで生かそうとするとそう簡単にはいかないからね。
Seasar2の開発が終了した事で、Seasar Projectに関わった多くの人たちの多くの時間が無駄にされたと、思っている人もいるようだけど、僕はそうは思わない。Seasar Projectに関わった事で、プログラマとしての能力や知名度をあげた人とって多い訳だから、それを否定する必要はないと思っています。
今度のSeasar Conferenceでは、「Seasar Projectのふりかえり」と「SXSW攻略法」の二つの話をします。
「Seasar Projectのふりかえり」では、昔話をしてもしょうがないので、いくつかのプロジェクトを「なぜ始めたのか」「うまくいったところとでその理由」「失敗したところとその理由」を話す事で、これから、新しくプロジェクトを立ち上げる人向けに、少しでも役に立つ話が出来ればと思います。
「SXSW攻略法」では、2016年のSXSWで、RealeaseItというアワードでファイナリストに残る事が出来たので、ファイナリストに残るためのこつ、そしてアワードをとれなかった理由。また、SXSWでは、ブースも出したので、ブースを出すときのポイントを話したいと思います。
Seasar Conference Finalお申し込みはこちらです。
http://seasar.connpass.com/event/38679/
■015.004.008
[ EVENT ] 4月8日 Java Day Tokyo 2015 開催!
http://www.oracle.co.jp/jdt2015/
[ BROWSER ] Firefoxのページめくりを加速さ-http://journal.mycom.co.jp/news/2010/02/02/007/index.html
アーカイブ
2009年3月
2008年12月
2008年11月
2008年10月
2008年9月
連載を終了したブログ
コアテクの路地
路地裏 ソース解読研究所
みたのブログ
拓かれた世界に向かって
ペンギン飼育係が見た
ユメのチカラ
独立行政法人情報処理推進機構へ出向になりました。
3月1日付けで独立行政法人情報処理推進機構(IPA)へ出向になりました。オープンソフトウェア・センター研究員を拝命し、本日より同機構へ出勤しています。ミラクル・リナックス時代は大変お世話になり厚く御礼を申し上げます。IPAでも変らづご厚情お願いいたします。略儀ながらおしらせまで。
さて、ミラクル・リナックスからの出向ではありますが、オープンソースソフトウェアや勉強会あるいは若手人材育成(セキュリティ&プログラミングキャンプ、U-20プログラミングコンテスト)などなどにつきましては、今迄どおり、ゆるゆると推進していきたいと思います。皆様のご協力をよろしくお願いいたします。
そして、カーネル読書会も従前どおりやりますので、そちらの方もよろしくお願いいたします。
本日は久々にスーツ&ネクタイ、コスプレでした。(がはは)
Forbidden
You don’t have permission to access /~asaki/p_diary/diary.cgi on this server.
■ Google、「Chromium OS」を公開
http://www.publickey.jp/blog/09/chrome_os.html
■ シャットダウンも日本語入力もできない?
http://blog.livedoor.jp/dankogai/archives/51325262.html
■ Chronium OSのコンパイル手順
http://d.hatena.ne.jp/showyou/20091120/1258687525
■ IBM developerWorks:Scitter(ScalaのTwitterクライアントライブラリ)を使ってTwitterを更新する
http://www.ibm.com/developerworks/jp/java/library/j-scala10209.html
■ IBM developerWorks:Web アプリケーションのセキュリティー: 脆弱性をテストする(WebScarab、Paros Proxyの紹介)
http://www.ibm.com/developerworks/jp/web/library/wa-appsecurity/
■ IE用のJavaScriptパフォーマンス分析ツール「dynaTrace AJAX Edition」
http://journal.mycom.co.jp/news/2009/11/20/017/index.html
■ YouTube:Lisp for High-Performance Transaction Processing
http://www.youtube.com/watch?v=xquJvmHF3S8-■ ブラウザ上で世界中のAM・FMラジオ、ネットラジオが無料で聴けるサイト「Streema」