「C/C++」を含む日記 RSS

はてなキーワード: C/C++とは

2020-05-24

anond:20200524103107

リンク最適化は、まぁclangだよね。

で、実行時最適化が、まぁJava

C/C++範疇でO3のうえ O4というのは面白い発想だけど実際その技術はもうO3に入っているんじゃないの?とおもうから、調べる

2020-05-23

C言語(またはC++)できると書いてる人に必ず出す問題

int a=1;

int x[] = {2, 3};

int b = a[x];

bに格納される値とその理由を答えよ。

(includeとかmainとかは省略)

ちょっと意地悪な問題だけど、

即答できない人はC/C++根本的に全く理解してないので落としてる。

コンパイルエラーだと思った人は入門書読み直してきてね。

anond:20200523134941

この文法コンパイルエラーになってないということは

プログラミング言語はおそらくC/C++だろう

その場合if(time = 15)は間違いでif(time == 15)となる

2020-04-19

[] [増補改訂関数プログラミング実践入門

コロナ自粛勉強中。以前買ったHaskell本を読み直している。落ち着いて読めば結構理解できる。

https://gihyo.jp/book/2016/978-4-7741-8390-9

この本の概要

現場の方々に向け,関数プログラミングエッセンスを厳選解説した入門書

関数型言語Haskellを用い,基本からJava 8/C/C++/Python/JavaScript/Rubyをはじめ各種命令言語との比較オススメの開発/設計テクニック等を平易に解説

改訂版ではGlasgow Haskell Compiler 8ならびに新機構のStackage/stackへの全面対応関数型言語由来の他言語機能解説章(第8章)の新設(Swift/Go/Rust/C#等の例も紹介)をはじめ実践開発に役立つ解説を増強し,関数型言語でも命令言語でも活かせる「使える基本」を凝縮しました。

こんな方におすすめ

2020-03-28

製造業にいると、コンピュータが遠くなっていく

CPUVHDL,Verilog,System-Verilogで書いたりした時もあった。

USB,HDMI,電池の充電制御,WiFi,自動車など色々やったが、コンピュータが遠くなっていく感じがある。


FPGACPUを書いてOSを起動させたとして、自分普段仕事環境が良くなるわけではない。

ソフトウェアでは次々と開発環境が良くなっていくし、自分で使いやすいようにカスタマイズもできる。

でもハードはそうではない。MS Officeは動くがメモリが4GBでカクカク。

作ったハード自分達が使うわけじゃない。例えば100Gイーサ開発してもその恩恵は得られず1Gbpsが関の山だったりする。


C言語アセンブラまではハードがどう動いているかわかるが、

Python,Go,R,C++,Rubyくらいになると書けるがどう動いてるかわからなくなってブラックボックス化する。

社会的には正しいのだが、自分が関わったハード自分が書いたC/C++コードを上位から呼び出すのはわかるが、

ハードが変わったらブラックボックスになる。ロジアナオシロで見てわかるレベルであればいいが。


またソフト業界とのギャップも感じる。

PandasのTime seriesが時間を扱えるのかと思っていると、ピコ秒が扱えない。

これは1例に過ぎないが、Amazon本屋新刊が出ると買って勉強し、ライブラリ公式ドキュメントも読んでいくが、仕事に直結しない。

クラウド使ってディープラーニングのやり方は沢山情報はあるが、CPU内蔵GPUメモリ4GB+FPGAでやる情報なんてない。

しか電流量絞ってないと物理的に壊れる恐れもある。辛い。


うそう、コロナオーバーシュート話題になったが、

オーバーシュート場所を検出したり、統計処理するようなソフトもパッと出てこないので書いた。

このあたりもソフト業界ギャップを感じてしまう。オシロ機能としてあるわりに、手元のPCだと自作する羽目になる。

2020-02-13

anond:20200212111557

プログラマーだけどC/C++使えれば最悪自分一人は食っていけそうなのでこれ以上仕事に関して成長しようとは思わないな。ま、今の仕事JavascriptとかRubyかばかり書いてるんだけどね。

2019-05-05

組み込みエンジニアの人と友達になりたい

最近第二新卒枠で組み込みエンジニア転職した。

主な業務は某組み込み機器ファームウェア開発だ。

メインの言語はみんな大好きC/C++

月一を目安として、connpass等で勉強会を探して参加している。

中身に興味があるのはもちろんだが、ひそかに社外の組み込みエンジニアの方と話をしてみたいという気持ちがある。

が、組み込みエンジニアがまあ少ない。

IoT関係イベントに行っても組み込みエンジニアは少数だし、いたとしても勤務年数長めの安定感抜群スタメンおじさんばかりだ。

組み込みはじめました!組み込みって何勉強すればいいんすかっ!!」みたいな人ってどこに生息してるの。

組み込みエンジニアにはガチ勢が少ないってこと?

コンプライアンス上共有できない情報が多い業界なのは十二分にわかっているが「いや~!bit節約大事っすよね!」みたいな話をしてみたい。

あと、他社の開発スタイルとか転職情報も聞きたいし、独学してる分野も知りたい。

絶対双方メリットあると思うんだ。

から組み込みエンジニア同士は友達になりましょう。

2019-04-28

C/C++最近モヒカン族Qiitaで「参照渡し」か「参照の値渡し」かで手斧を投げ合いまくってたでしょ

そんな言語初心者向きとかどうとかやばすぎない?スパルタ教育かよ

2019-04-11

C/C++/C#/Python/Swift/JavaScrip/Ruby/PHPって奴は使えないよね

よくプロフィール言語とかFWとかずらっと並べてる奴いるけど

いざ仕事やらせてみると驚くくらい使えない

Hello Worldできたら使える言語ってかんじになるのか?

逆にこういうの見るとこいつはできないやつなんだなってわかるのかもしれない

2019-04-05

anond:20190404131843

対象読者というのは、プロプログラマーを目指すような人たちなのか、そうではないけど理工系C/C++プログラミング必須の人たちなのか、あるいはRとPythonだとかMATLABあたりを使い倒すことになりそうな人たちなのか、そういった話なのでは?

また、プロプログラマーと言っても、Web系もあればSIなんかのシステム系もあれば組み込み系もあるし、狙ってる方向によって重点は変わってくるだろうし。

読んでると、最初からLinux/UnixだしDockerもでてくるしRubyを勧めているし、Web系のプログラマーを目指す人たちで現在コンピュータ系の学校学部にいるわけじゃない人たちが対象読者なのかな?

それ以外の方面に進む可能性もある人たちでもLinux知識有益だろうけど、Docker最初から想定するほどでもないし、RubyWeb系以外ではあまり使われてない上に教育目的には融通がききすぎてお作法が身につきにくそうだし、最初もっと一般的な入門方法いいんじゃないの? Web系以外も念頭において。

2019-02-22

やんちゃエンジニアを欲しがる某会社

やんちゃエンジニアどころか、C/C++の最低限のとこ分かるプログラマーさえ現場レベルで集めるのに四苦八苦してるって聞いたけどね…

2019-02-17

anond:20190217113155

最短ルートは入りたいと思ってる会社が求めているプログラミング言語

つぶしの利く人材なりたければ c/c++, c#, php, ruby, python, javascript あたりだけど

自分C言語できます!」って言うだけで雇ってくれるところは無い気もする。

関数型は覚えるだけ無駄だと思う(ケンカ調)

2019-02-11

anond:20190211120829

ワイの会社C/C++/C#/Objective-C/Swift/Kotlin/Java/javascript/PHP/HTMLやってるから言語によって民度が違うと言われてもピンとこないやで

2019-01-09

anond:20190109143701

もちろん標準で

C/C++だと怪しいかもな(Boost必要かもしれない)

それ以外で存在しないならその言語は欠陥品だから捨てていいよ

2018-03-16

ちょっと羨ましい

プログラマやってるけど、昔話を聞くに、本当に隔世の感があると思わされる。

だって昔のプログラマ仕事って、入念に机上デバッグされたフローチャートを、ただひたすらCOBOLFortranアセンブラ翻訳して、コーディングシートに書くだけの仕事だったんでしょ?

フローチャートで書ける程度のロジックなんて全然難しくないので、シートを書き終わった時点で事実上プログラムは完成したに等しいと。

あとはパンチしてもらって、テストは大抵一回動かすだけで全部問題なく通って一丁上がりと。

そうなると、これはもう気合と体力の問題って話になる。

そりゃ月残業300とか働くのも決して不可能じゃないし、それだってハイになった勢いでガシガシ書けるだろう。

そうやってカネがっぽり稼いで、日々のモヤモヤは酒タバコ麻雀パチンコ風俗スッキリさせて、そんでまた思いっきり働く。それが男だろ!ってノリだよな。

仕事懇意になってるパンチャーのお姉ちゃんと裏で仲良くなって、そのまま付き合って…なんてのも普通にアリだろう。

昭和は明るい時代だったんだなあと、少し羨ましくなる。


今はもう、あらゆることが複雑になりすぎて、設計だってUMLER図で対処できるかすら怪しくなっている。

言語だってJavaだけじゃなく、SQLやら、HTMLCSSJavaScriptと心得てないと仕事にならない。

そして何より、動かして試して、都度直していかないと分からないことだらけになっている。

プログラマの脳にかかる負荷は昔と比べ物にならない。当然あまりに長時間労働事実上不可能

俺は残業100まで行った所で帯状疱疹が出て、シャワーで腰をさすりながらココらへんが限界と思い知らされた。それが10年前。

勿論今はもっと無理が利かない状況。


でも、残業300可能時代を、色んな会社で現役として駆け抜け出世した幹部オヤジ達に、今のプログラマが抱えているアレやコレやらは、多分理解できない。

それくらい、時代が変わりすぎたのだろう。見えている世界が違いすぎる。

から今の若い奴らを根性無しとして完全に見下しているし、本音では「なんだよ急に辞めやがって使えねーなー」とか「アイツ死にやがった、ざまあwww」と思ってる、人でなしの老害ばっかり。

勿論FortranC/C++Javaみたくスキルを身につけてきた人は例外だけど、本当に例外中の例外でめったにいない。

それで「昔のままのノリじゃ、今の開発は絶対に稼げない」ということに思い至らない。

こんなブラック業界、やっぱり一度潰れたほうがいいんだろうと思わされる。

2018-02-19

50代間近、毎月60時間残業しても手取り35万ちょっと。なんか生きるのに

こういうところで、自分の中にある、苦しみや悩みを吐き出す日が

来るとは思っていなかった。

中年を過ぎたオヤジの読みづらい戯れ言だと思われても仕方ない。

からスルーしてくれても問題ない。

仕事IT系システムエンジニアであり、プログラマーでもある。

経験した言語C/C++SQLPL/SQLPHPJS。あとCOBOLは少しはできる。

PHPJSフレームワークはよく知らない。仕事で使う機会が皆無だったからだ。

もちろんシステム設計問題ない。

最近本業タスクが無くなってしまうと、PL/SQL言語類似する

DELPHIを独学している。そのためにスターター版をインストールした。

もちろん、発注元には承認を得た上で残業させてもらっており、その点は感謝している。

ここからが本題。

発注元とは派遣契約。単金がいくらかも知っているから、どのくらいの

金額となるかもわかっている。問題なのは、その間にある会社

その会社で4割以上、ぼったくられている。。

社員扱いにしていると言うが、実際はアルバイトと同じで

有給休暇なんて存在しない。休めば単純に差し引かれるだけ。

から健保負担人間ドックや定期健康診断なんか行けない。

住民税はぼったくられた中には含まれておらず自腹だ。

両親は介護老人ホーム借家暮らしているが、

両親自身年金だけでは暮らせるわけも、毎月15万の仕送りをしている。

私自身はその会社一方的に決めた法人契約アパート暮らしている。

法人契約とは名ばかりで住宅補助は一切無く全額ぼったくられ、

水道光熱費も全額負担

生計が苦しいから、もう少し給与を上げて欲しいと2度、3度と

お願いしたが、40時間残業すれば手取り40万を超えるから大丈夫だと

すべて笑って誤魔化され一蹴された。

年齢からし転職できないと思われている。実際に、自分でも

この年齢で転職は無理だろうと感じている。

できるだけ支出を減らすために、1日1.5食まで減らして暖房も使わず

可能な限り無駄を減らしているが、それでも生保定期積金も難しくなっている。

預金は減る一方で増える見込みはない。そろそろ底が見え始めてきた

これを書いていて思ったのが、ひとつ救いだと思えたのは独身で良かったと。

もし結婚していたらカミさん申し訳ない。

カミさんが協力的な人だったとしても心苦しいし、顔を合わせづらい。

そんな状態が続いたから、なんか生きるのに疲れてきた。

さら支出を減らす努力生保定期積金の解約が必要になっている。

こんな生き方しかできないなら、生きるって何だろうと考える日々を過ごしている。

2017-06-07

anond:20170513175715

残酷だが「職業訓練プログラミング」という人たちはこの業界はあきらめた方があなたのためにとって良い。

そのような人の上司になったことが何度もあるが成功した人を見たことがない。

はいものの、私も35歳から異業種転職にてアプリ屋になったが、転職直前の段階でC/C++/Pascal(Delphi)/html/js/SQL が書けた。

10代前半から8bitCPU(特に名を伏せる)のマシン語(ハンドアセンブル、つまり16進数直書き)でプログラムした経験がある。(もちろんBASICもある)

8bit時代ならメモリー増設設計実装(ハードウエア)ができた。

一応そのような状況ではあってもプロに知り合いもなく心配だったので、

(当時)第二種情報処理技術者試験に3週間の勉強(1.0/日程度)で

一発合格しなければ転職しないというような目標もたててクリアした。

技術的には 0 スタートではかったからこそ転職にも成功できたと思っている。

おっさん技術知識経験ほぼ 0 スタートはきついでしょ。

おっさんなんだからこそ無駄時間を使わないでほしい。

自分も一流でもなんでもないくせに上から目線で自慢話みたいのしてごめんなさい。

あなたに向いた仕事はきっと他にある。がんばれおっさん

2017-04-11

オライリーに出てくるフレンズ

参考:http://www.oreilly.com/animals.csp

2017-03-12

書き換える必要なくね?

大企業銀行で、昔から動いている基幹システムは、大抵メインフレームCOBOLの組み合わせである

それをここ十年くらい、リプレースx86サーバJavaという構成に変更することが多い。

しかし、ハード汎用機からオープン系になるのはともかく、プログラムを別の言語に書き換えるとか、誰も幸せになる気がしない。

ぶっちゃけCOBOLCOBOLのまま移植し、今後も改修を続けるほうが、長い目で見たコストも低くなるのでは?と思うのだ。

その理由はこうだ。


COBOLで書かれたバッチ処理は、設計書の書式がフローチャートであることが多い。

勿論ロクに設計書がない場合もあるだろうけど、いずれにせよCOBOL文法は、「普通の人にとっての仕事らしい仕事」をそのまま入れ子状のフローチャート(分岐の先が別のフローチャート参照みたいになってるやつね)に書き表したものである

そういうモノが既にある企業銀行文化において、当然発注側は担当者からお偉いさんまでCOBOLerフローチャート脳だし、新しいシステム設計でもそれを踏襲しようとする。

というか踏襲すること前提じゃないと設計書をレビューできない。

UMLで考えるようなパラダイムシフトはまず不可能なので、それを求めるのは受注者の傲慢だろう。

というわけで、受注した大手SIerは、ほぼ確実にフローチャートもしくはそれに準じる記法設計書で処理を組み上げざるを得なくなる。


そうなると、実装フローチャート設計を基にコードを書くわけだが、こういう設計ハッカー文化で発展してきた言語(FortranC/C++Javaという流れと、PerlからPythonPHPというインタプリタ系の諸言語)との相性が最悪である

設計とは実装を楽にするために書くのに、これらの言語において、フローチャート設計は役に立たないどころか、邪魔しかない。

からFortranしかなかった頃から、本物のプログラマ達はフローチャートdisってきたわけである

ちなみに筆者はハッカー文化が生み出した恩恵に敬意を示すし、実際とても好きという立場である

しかし、「普通人達普通思考からはかけ離れ過ぎているという意味で、「普通人達普通仕事」をシステム化する時にどこまで役に立つかについては、非常に懐疑的に見ている。

…いささか話が脱線してしまったが、とにかくフローチャートで上がってきた設計書でコードを書くならCOBOLアセンブラ選択すべきだし、それで書けないなら書く意味が無いくらいに思ったほうが良い気がする。


というわけで、自分COBOLからリプレース案件は、その根本的な愚かしさを抱えている現状を見るに、今後一切関わる気はない。

COBOLリプレースするのでない限りは。

2016-07-05

スマホネイティブ開発とハイブリッド開発、どっちが

はてなにはエンジニアクラスタが多いと聞いたので相談してみる。

iPhoneAndroidアプリを開発することになったんだけど、ぶっちゃけハイブリッド開発ってどうなん?

Ionicっていうフレームワークの最新(まだベータ)がいいよとは聞いたのだけど。

SwiftなりJavaなりでネイティブ開発できる人なら、別にハイブリッド開発なんて手を付けないほうがいいと思いますか?

当方SwiftJavaのほか、PHPだったりC/C++あたりのプログラミングの基本は身についてる初級者〜中級者の間くらいのレベルです。

2016-06-17

1.0から学ぶJava

タイトルを見て釣られクマーな皆さんこんにちは

ホッテントリメーカーで作るような煽りタイトルって、みなさんもう見飽きてると思うんですよね。

今調べたらホッテントリメーカー2008年だそうで。どうりでねー。古臭いなーと思いましたよー。

「一から学ぶJava」ってのをね、1.0にするだけでこんなに素敵なタイトルになるんだから面白いですねー。

タイトルを思いついただけだったんですけど、思いついたらやっぱりちゃんと中身も書かないと行けないじゃないですか。やだー

面倒くさいんですけどね。ちょっと1.0から学んでみましょうか。

Java 1.0 1996年1月23日

Javaの1.0がリリースされたのは1996年1月23日ですね。発表されたのが1995年5月23日でJavaの誕生日といった場合にどちらを取るかで揉めることがあります。

かれこれ20年前なわけで、当時のパソコンというとハードウェアはCPU が Pentium 133MHz メモリ16M とかそんな感じだったかなあ。今どきの携帯電話の例としてiPhone 6sを挙げるとCPUが1.85GHz メモリ 2G ってんだから凄いですね。OSは1995年11月23日リリースされたWindows95とかそんな時代背景です。インターネットがようやく一般に普及し始めたところでしょうか。

今から思うと相当弱いハードウェアですけども、そろそろVM方式を採用しても良さそうな、そんな時代でした。インタープリタだと流石に遅い、でもC言語のようなコンパイル言語だと"Write once, run anywhere"とはいかない、という判断もあったのだろうと思います。Javaが純粋なオブジェクト指向言語ではなくintなどのプリミティブ型を持つというのは、当時のマシンスペックを考えた場合、ある程度妥当な判断だったと言えるでしょう。これが後々苦しくなってくるわけなのですが。

Javaを作った会社はSun Microsystems(サン・マイクロシステムズ)というアメリカの会社で、2010年1月27日オラクルにより吸収合併され今はありません。SolarisというOSとSPARCプロセッサでUNIXサーバーの販売で90年代後半までは一人勝ちのような状況だったと聞きます。当時にすでに「ネットワークこそがコンピュータ」(The Network is the Computer)というモットーを掲げてたんだからおかしい。1996年リリースのJavaが標準でネットワーク機能を備えていたのもこのあたりの思想から来ているのかもしれませんね。

当時のプログラミング言語としてC++が挙げられますが、C++でのプログラマへの負担といいますか、ヒューマンエラーの起きやすさといいますか、その辺を改善する目的で開発されたのがJavaだったわけです。

1996年の時点にこんな言語が登場したのですから革新的でした。

いろんな企業がJavaに賛同します。その中にはMicrosoftもありました。この時期、Microsoftは次期のWindows開発用のプラットフォームにJavaを据えようと考えていました。その後、袂を分かつことになるのですが……。

プログラム言語として構文などを見ると、C++を強く意識した構文なのは間違いなく、しかしポインタ演算を廃してポインタを機能を限定した「参照」に置き換えるなど簡素化が多く見られます。C++からはいろんな機能が削られています。関数ポインタ、構造体、演算子オーバーロードテンプレート((テンプレートについては実装が間に合わなかったという話を聞きます))などなど。そのためC++の劣化であるように揶揄する人もいますが、こうしたものを捨てて言語仕様を比較的小さくシンプルに抑えた点は評価に値すると思います。しかし、今でもこうした削減された機能を愛する人からはJavaを腐す要素として挙げられてしまうのでした。

Java 1.1 1997年2月19日

Wikipediaからピックアップすると1.1での大きな機能追加は

といったところです。当初よりJavaの内部文字コードUnicodeで文字を表すchar型は16bitで設計されていました。Unicodeは当時それほど普及しておらず、Unicode対応のテキストエディタさえ少なかったと記憶しています。時代を先取りしていると言えますが、大きな誤算はUnicodeが当初16bitのコードポイントに世界のあらゆる文字を格納しようとしていたことで、漢字圏の我々からすると16bit=65,536程度の空間に文字が全部入るわけないだろ!というものだったが故に早々に破綻し、Unicodeは21bitのコードポイントに拡張されることになるのです。これはまた後の話。

なんにせよ、日本語が対応されたのは1.1からで、日本でのJavaの採用が始まったのはこの頃からと言えましょう。

当時のJavaのGUIはAWTというものでしたが、これを用いたGUIの開発は当時は結構行われていたイメージですね。Visual BASIC でGUIを作るプロダクトも結構あったと思います。GUIのためのオブジェクト指向言語としてJavaが使われていたイメージがありますね。JavaBeansもそのための仕様でした。件のsetter/getterの話題に繋がっていくのですが。

JDBCはJavaとデータベースをつなぐインターフェースです。RMIではあるJava VMから別のJava VMにオブジェクトを送って実行する、といったことができます。こうした機能が用意されたことで、ソフトウェアフロントとしてのGUI、裏方の実装のためのネットワーク機能、データベース機能、さらにはソフトウェアを配布するためのJava Appletという布陣でJavaでのソフトウェア開発が加速していた時代といえます。

Microsoft Visual J++ もこの時代ですよ。

Java 1.1以降のバージョンのものは互換性確認のためにOracle Java Archiveからダウンロードすることができ、今でも入手することができます。もちろん、Java7ですら2015年4月にEOL(End of Life,サポート終了)となっているので、通常利用するのはJava8としてください(本稿執筆時点)。

当時のドキュメントを見るのも一興です。現在と比べると標準APIがかなり小さい。なお、当時のjavadocは今とはデザインが大きく異なります。

  • java.applet
  • java.awt
  • java.awt.datatransfer
  • java.awt.event
  • java.awt.image
  • java.beans
  • java.io
  • java.lang
  • java.lang.reflect
  • java.math
  • java.net
  • java.rmi
  • java.rmi.dgc
  • java.rmi.registry
  • java.rmi.server
  • java.security
  • java.security.acl
  • java.security.interfaces
  • java.sql
  • java.text
  • java.util
  • java.util.zip

この時代であれば、全パッケージを舐めて標準APIを学ぶこともそう難しくはありませんでした。この時代から触っている人間は新バージョンが出るたびに増えるAPIを順に学んでいけたのです。しかし、現代にJavaを学ぶ場合、どのバージョンでは何があって……というのをいちいち学ぶ必要はほぼありません。Java5以前は一緒くたでいいと思いますし、一部のAPIで歴史的経緯があってねーというのを知っていればおそらく十分ではないでしょうか。

Java 1.2 1998年12月8日

strictfpキーワード浮動小数点演算をやる人は覚えておきましょう。JavaはパフォーマンスのためにCPUの浮動小数点演算を扱うことが許されており、そのため実行するCPUによって精度が異なることがあるんですね。まあ今時のCPUだと大丈夫だとは思うんですが。

リフレクション機能ではJavaのクラスを抽象的に扱うことができます。設定ファイルに書かれたクラス名のclassロードして実行する……みたいなことができるんですね。フレームワーク的なものを作る場合には多用することになります。

1.2からは新しいGUIのSwingが採用されました。AWTがOSごとのGUIパーツを用いていたためデザインに違いがあったのに対し、Swingでは統一的なルック・アンド・フィールが用いられるようになりました。まぁ今ならJavaFXを使うのが良いと思います。

初期のJavaはやはりVM方式の実行速度の遅さが指摘されていました。実行時の構文解析を伴わないだけインタープリタよりは早いものの、実行バイナリを作るC/C++よりは遅い、そうした評価です。ここではサン・マイクロシステムズのVMにJIT(ジャストインタイムコンパイラ)が乗ったことが挙げられていますが、JIT自体は別の会社が先駆けて開発していたことは記しておきたいと思います。

JITコンパイラは実行時にJavaのバイトコードを環境のネイティブコードコンパイルして動かす技術です。この後、JITコンパイラ、動的再コンパイル技術、世代別ガベージコレクションを備えたHotspotといった様にJavaVMは進化していきます。現代では実行時の最適化が進み、大きなスケールで見た場合、Javaの実行速度はC/C++での実装と比べてそれほど遅れるものではありません。遅くても倍の時間は掛からない程度といったところでしょうか。

あとは特記すべきはコレクションフレームワークです。皆が多用しているであろうjava.util.Listやjava.util.Mapといったライブラリが整備されたのがこの時なのです。それ以前はjava.util.Vectorやjava.util.Hachtableというクラスが可変長配列の機能を一手に担っていました。今ではVectorやHashtableは使うべきではありません。

Microsoft 離反

Java の開発はSun Microsystems が主導していたけども、すべてがSunのものだったというわけでもなく。Javaには多くの会社が出資していてその中のひとつMicrosoftだったわけですね。

Microsoft の Visual J++ では delegate とか独自機能拡張もありましたけど、裁判で問題になったのは J++ でコンパイルしたclassファイルMicrosoftのVMでしか動かないという部分ですね(他社製のVMで動くclassファイルを作ることもできる)。classファイルがどこのVMでも動くの大事だろ、"Write once, run anywhere"だろ、お前何してくれてんの!と喧嘩になったわけです。当時のMicrosoftブラウザまわりでも独自拡張がやりたい放題、標準規格?なにそれ美味しいの?みたいなスタンスをあちこちで見せていたものです。

結局、この事件でMicrosoftのJavaはバージョン1.1相当でストップ。好き勝手にやれないなら独自に言語作るわーとばかりに.NET フレームワークと C# といった方向に舵を取ります。

JavaがPC上でのUI開発の主力になろうとした勢いはここで潰えます。

Java EE

Java SE とは別にこの時代に Java EEリリースされていることは特記しておきたいですね。これ以後、それまでのCGIに取って代わって、JavaはWebサービスの開発のプラットフォームとして多用されるようになります。

2000年あたりからはJavaはGUI開発というよりは、Webサービスの開発が主流という流れになっていきます。インターネットサービスが非常に発達していった時代、背後ではとてつもない量のJavaのプログラムが支えていたわけです。ただまあ、こうした産業利用は一般的ユーザーの目にはあまり入らないわけです。一般人からすればJavaといえばJava Appletみたいなイメージはずっと残っていたでしょうが、実体としてはJavaといえばServletという時代になっていたわけです。

企業で用いられる社内システムにもServletは多く採用されました。

理由はいろいろ挙げれると思うのですが

というのが大きな理由だろうと思います。JSPというテンプレートエンジンを用いてHTMLを整形してWebページを作り出す、というアーキテクチャある意味では便利で簡単でした。

もっともHTMLの表現力に足を引きずられるため、GUIの機能性という点では後退したわけなのですが。それでもメリットが大きいと判断されたのでしょう。というか、まともにGUIを組めるプログラマがほとんどいないから、GUIのシステム開発がなかなか成功しないってのもあったんでしょうけどね。

iアプリ Javaアプリ EZアプリ

2000年あたりというと携帯電話の普及も取り上げなければなりません。現代のスマホガラケーに比べれば非常に機能は貧弱で、まさに携帯「電話」でした。要するに電話とメールぐらいしかできなかったんですね。

そこにdocomoiアプリJフォン(ボーダフォンを経て現ソフトバンク)のJavaアプリ、auのEZアプリという携帯電話上でちょっとしたアプリが動くよ!というのが乗るようになってきたんです。これがJavaを組込み用途にコンパクトにしたJava MEというものが土台となっていて(正確にはiアプリちょっと違う)Servletと並ぶJava言語の大きなもうひとつの領域となっていました。

iアプリは当初は容量が10k byteまでといった制約があり、容量制限が非常に厳しかったのですが、新機種が出るたびに容量は緩和されていきました。

docomoiアプリ含めiモードによって一世を風靡します。こうした土台を作ると、その上で商売をしたい人がたくさんやってきて、勝手にコンテンツを作ってくれる。docomoはそれらから手数料を取るので労せずして大金を稼げるというわけです。賭場の胴元というわけです。

この賭場が、将来にAppleiPhone, GoogleAndroidに荒らされることになります。docomoがなかなかiPhoneを出さなかったのもiモードという自前の賭場を失うことを良しとしなかったためです。金づるを失ったdocomoSamsungと組んで独自の携帯向けOSであるTizenの開発に乗り出します。そんなTizenですが鳴かず飛ばず。噂ではインドあたりではリリースされたとか、なんとか。

RIA時代

話を2001年に戻しましょう。

Microsoft離反でGUIのプラットフォームとしてのJavaというものは存在感を弱めていました。この分野の復権に寄与したのはJava 1.4 (2002年2月6日)で導入されたJava Web Startです。

Java Appletブラウザ埋め込みで動作したのに対し、Java Web Startではブラウザから起動しつつも独立したアプリとして起動するのです。

Webシステムが企業の社内システムに採用された話は先に述べたとおりですが、やはりWebシステムのGUIというのはHTMLに引きずられて貧弱だったんですね。

端的に言えば入力値が数字かどうか?みたいなチェックがなかなか難しい。HTML上でJavaScriptでやるわけなんですが、なかなか気持よく入力できるような感じにはならなかったんですね。

また、Ajaxによるブラウザのページ遷移を伴わない通信というのが出てきたのも2005年ぐらいなので、入力値に対してサーバ問い合わせするようなことはできなかった。当時だと一旦画面遷移させないとできなかったわけです。

こうした事情から、クライアントサイド、要するにPC側でもっとリッチなUIが使いたい!という要望があったわけです。Webシステム使いにくい!という不満の噴出と言ってもいい。そこで出てきたのがRIA (Rich Internet Applications)というわけです。

Javaは1.0時代のAppletからそうですが、ネットワークを介して別のPCにプログラムを送り込み、そこで動作させるという能力を持っていました。それこそまさにRIAに求められる機能性だったわけですね。

RIAの代表とされるのは

あたりです。三つ巴の戦い、どこに軍配が上がるのか!?と注目されましたが、勝利したのはHTML / JavaScriptでした。

Google MAP で注目を浴びたAjax技術、それまでブラウザでは不可能と思われていた高級なGUIをHTML / JavaScriptで実現させました。もうやめて欲しいですよね。せっかく脱ブラウザの流れが来たと思ったのにまたWebシステムに逆戻りですよ。

RIAが失速した理由として考慮して置かなければいけないのはスマートフォンの台頭です。RIAでは端末を選ばずどこでも同じアプリが動かせる点がポイントひとつでしたが、スマートフォンではそうは行かない。"Write once, run anywhere"を破壊したのはスマートフォンだったというわけです。

しかし、先日インストールなしでアプリを実行するAndroid Instant Appsが発表されたりしまして、結局RIAの思想といいますか、要求というのは今でも息づいているのだなと思った次第です。

Java 5 (2004年9月30日)

1.3 / 1.4 では機能追加はあっても言語構文が大きく変わることはありませんでした。大きく変わったのはJava 5です。この時からバージョニングが変わって1.5ではなく5と表記されるようになりました。

Java5の特徴はなんといってもジェネリクス。それまでjava.util.Listにデータを出し入れするのにはキャストが必須だったわけですが、ようやくキャストから開放され型の安全度がぐっと高まりました。その他に以下のような変更があります。

言語としては随分変わっったわけですが、もうかれこれ10年以上前のことですからこれらの機能が「Java5から導入された」という知識は今となってはあまり必要とされません。これらの機能が使えないJava 1.4で開発をする事案が殆ど無いからです。0ではないのが悲しいところではありますが。

その後

Java 6 (2006年12月11日)がリリースされた後、Java 7 (2011年7月28日) が出るまでJavaは停滞してしまいます。その間にSun Microsystemsという会社がなくなってしまったためです。

Sun Microsystems の経営状況が悪化しており、ついに身売りをすることになりました。身売り先はIBMともGoogleとも噂されましたが結局2010年1月27日オラクル吸収合併されました。

Javaの停滞中にはJava VM上で動く非Java言語も台頭してきました。Scalaなどですね。

やや戻って2007年Androidが発表されます。Androidの開発言語にはJavaが採用されていますが、実行環境はJava VMではなく、ライセンス的な事情でJava(TM)は名乗らない微妙な位置関係にあります。

Java 5 以降で大きく言語仕様に手が入るのは Java 8 (2014年3月18日)です。並列処理を行うためのStream APIと、そのために簡易に関数を定義するためのラムダ式が導入された点が大きいですね。日付APIも刷新されました。

このように、Javaは1.1の黄金時代から今に至るまで利用ジャンルを転戦しながら産業の土台となって支えてきた歴史があります。ジャンルの趨勢により浮き沈みもあります。今後についても決して楽観視はできないでしょう。Javaを学ぶことはプログラミングを学ぶステップとしては意義はあると思いますが、Javaを学べばゴールというわけではありません。プログラム言語次世代へと移りつつあります。業界動向には注視していきましょう。

ログイン ユーザー登録
ようこそ ゲスト さん