タグ

ブックマーク / nagise.hatenablog.jp (12)

  • Project Valhalla 2023 - プログラマーの脳みそ

    2023/03/30 にやったJava仕様勉強会の動画が公開されました。当日はJavaのマスコットDuke風の服で臨みました(どうでもいい裏情報) www.youtube.com セッション資料もアップロードしたので参考にしてください。 Project Valhalla 2023 中間報告 いずれも 2023年3月時点での情報です。JEPもドラフト版だったりするので、将来的に変更が入る可能性が高いことをお断りしておきます。稿では勉強会のセッション内容に加えて、セッション時点で追従できていなかった変更点や、勉強会での指摘を踏まえてフォローアップした内容を含みます。 もしもValhalla世界でJava入門したら ここでは、Valhalla導入後のJava世界だと入門者視点でどのように変わるのかというアプローチをしています。まず、Javaのデータ型は大きくふたつに分類できて、Identity

    Project Valhalla 2023 - プログラマーの脳みそ
    tarchan
    tarchan 2023/04/17
  • 異型のオブジェクト比較 - プログラマーの脳みそ

    異なる型のオブジェクトの順序比較が今回のテーマ。 Javaの場合、オブジェクトの順序を比較する王道はふたつある。 ひとつはjava.lang.Comparable *1(こんぺあらぶる)を実装する「自然順序付け」と呼ばれる方法。 public class A implements Comparable<A> { int a; @Override public int compareTo(A o) { return this.a - o.a; } } もうひとつはjava.util.Comparator (こんぱれーたー)を用いる方法。*2 public class MyComparator implements Comparator<A> { @Override public int compare(A o1, A o2) { return o1.a - o2.a; } } 見て分かるよう

    異型のオブジェクト比較 - プログラマーの脳みそ
  • コードクローンと品質 - プログラマーの脳みそ

    コードクローンと品質について話題になっている。元ネタはこちら。 ソースコードの品質についても、みずほ証券は問題を指摘している。今回のバグがあったプログラム全体について、「ソースコードの著しい重複が見られるなど、エラーの潜在する率が極めて高い作り方をされており、品質が極めて低い」と主張。これに対して東証は「コードクローン(記述の重複)を含むプログラムは、含まないプログラムと比較して信頼性が高いことが定量的な研究で裏付けられている」と反論した。 [論点3]どんな開発手法を適用すべきか | 日経 xTECH(クロステック) この「コードクローンを含むプログラムのほうが信頼性が高い」というのはどこからきた話題なのかという話。 僕が昔読んだ論文で似たような話があったなと思って探してみた。 コードクローンに基づくレガシーソフトウェアの品質の分析(PDF) 論文では,20年以上前に開発され,拡張COB

    コードクローンと品質 - プログラマーの脳みそ
  • 言語機能としての型、概念としての型 - プログラマーの脳みそ

    某エントリが型について再考するきっかけになったのは事実だが、個々人の思想の成否を問う気がないのでとくにリンクはしない。ここでは型とは何かという点について僕なりの思想を記しておきたい。 データ型を区別しない世界 ごくシンプルなチューリングマシンを考えよう。 チューリングの仮想機械は、 無限に長いテープ その中に格納された情報を読み書きするヘッド 機械の内部状態を記憶するメモリ で構成され、内部状態とヘッドから読み出した情報の組み合わせに応じて、次の動作を実行する。 ヘッド位置のテープに情報を書き込む 機械の内部状態を変える ヘッドを右か左に一つ移動する 上の動作を、機械は内部状態が停止状態になるまで反復して実行し続ける。 チューリングマシン この原始的な世界において「型」はない。メモリは抽象的で全てのメモリは同等に扱われ区別する必要はない。 また、チューリングマシンに程近い原始的なプログラム

    言語機能としての型、概念としての型 - プログラマーの脳みそ
    tarchan
    tarchan 2013/03/01
    >比較的強い型付けをもつJavaを引き合いにしても言語機能の型と概念としての型は容易に乖離する。
  • Javaのジェネリクスとリフレクション - プログラマーの脳みそ

    今回のテーマはジェネリクスとリフレクション。Javaのジェネリクスはイレイジャ方式なのでリフレクションでは何も得られないと思ってはいまいか。 public void hoge(List<String> list) {} といったメソッドがあったとして、リフレクションでこのメソッドの情報を得るとしよう。 import java.lang.reflect.*; import java.util.List; public class ReflectionTest { public static void main(String[] args) throws Exception { Method m = ReflectionTest.class.getMethod("hoge", List.class); Type[] types = m.getGenericParameterTypes(); f

    Javaのジェネリクスとリフレクション - プログラマーの脳みそ
  • Javaバイトコードの読み方 - プログラマーの脳みそ

    Javaのデバッグをしていて、ステップ実行中にステップインを繰り返したらソースコードのないところに行き当たったことがあるだろう。あるいはEclipseでF3キーでクラスやメソッド・フィールドの宣言元を辿っていってソースコードのないところに行き当たったことがあるだろう。 Eclipseの場合、"Class File Editor"というものが開く。そこにはJavaのバイトコードのニーモニックがズラズラと並んでいて、「これは読めないや、ワケが分からない」と投げ出してしまったりしていないだろうか。 怖がることはない。ちょっとコツを掴めばすぐに読めるようになる。 Class File Editorの開き方 自前のJavaクラスの場合、ビルドして出来上がったclassファイルを開く必要がある。"Package Explorer"だとclassファイルは隠されていて見えないのでWindow -> Sh

    Javaバイトコードの読み方 - プログラマーの脳みそ
  • Java変態文法最速マスター - プログラマーの脳みそ

    Java基礎文法最速マスター - いろいろ解析日記をリスペクト。 Javaの変態文法・技法一覧です。Javaの基礎をある程度知っている人はこれを読めばJavaの変態をマスターしてJavaを書くことができるようになっています。簡易リファレンスとしても利用できると思いますので、これは足りないと思うものがあれば教えてください。 1.基礎 エンクロージング型内部classの作成 外部classのインスタンスに紐付くインスタンスを生成します。外部クラスのインスタンス - 内部クラスのインスタンス間に、クラス - インスタンスのような関係を持たせることができます。 public class Outer { public class Inner { } } というようなクラスを作った場合、 Outer o = new Outer(); Inner i = o.new Inner(); となります。new

    Java変態文法最速マスター - プログラマーの脳みそ
  • Javaはバイナリをごりごりやるのに弱い - プログラマーの脳みそ

    プログラミングのジャンルは広いもので、しばらくいじってなかったジャンルを久々に触ると記憶違いとかしてて記憶をリフレッシュさせにゃいかんなぁとか思う今日この頃、みなさまいかがお過ごしでしょうか。僕は風邪で寝込んでました。 PCエンジンエミュレータ移植の件 - Aoisomeの以下略で、僕は何を勘違いしたかJavaのbyteをunsignedだと記憶違いしてて恥をかいたところ。そういえば誰かもFlexのバイナリをJavaでごりごり扱おうとしたらsignedで苦労したみたいなこと言ってたっけ。 Javaの仕様を再確認。short、char、byteは演算時に自動的にintにワイドニングして処理される。なので、単純なbyte型変数同士の演算をbyte型に代入するにもキャストが必要になる。 byte a = 1; byte b = 2; byte c = (byte)(a + b); 面倒くさいよね

    Javaはバイナリをごりごりやるのに弱い - プログラマーの脳みそ
    tarchan
    tarchan 2009/12/10
    Javaの整数演算が32bitオンリーなのは、RISC CPUで処理しやすかったからではと推測してみる。
  • java-ja15回で考えたこと - プログラマーの脳みそ

    イベントレポートとかは他に挙げている人が多いので割愛。ここではjava-ja15回で挙がったネタとかで想起されたことを書くことにしよう。プログラマの馬鹿話ってこんなんだぜ的な。 宮武蔵はアジャイラー説 宮武蔵が五輪の書でアジャイルを説いているという説。僕は五輪の書を読んでいないので判断は保留。先物相場が世界に先駆けて日で生まれていたみたいな突飛な面白さがあっていい。会場でも賛否両論と言った感じの反応。 武蔵の肖像画が理解できない人は少なかったみたい。Seasarカンファレンスでネタを飛ばしたら全然理解してくれなくて会場が凍った話とか。たとえ話を出してたとえをみんな知らなかったら確かに泣ける。@cactusmanが今日はスーツコスプレですとか言って会場を凍らせた話も。僕らがそもそも少数派だから会場でネタを言う時は身内で通じたからと言って安易に語ってはいけないというありがたい話。 @t_

    java-ja15回で考えたこと - プログラマーの脳みそ
  • ベーシックインカムでネットゲームを変える - プログラマーの脳みそ

    ネットゲームというのはひとつの新しい架空世界であって、その世界をどのように設計するのかというのは相応に難しい。現実世界の設計には政治家が頭を悩ませるわけだけども、ネットゲームの世界の神はプログラマである。世界を作りたければ、物理学だろうが経済学だろうが生物学だろうが使えそうなものはとにかく興味を持つと良いのだと思う。 ネットゲーム内の通貨の流通量 ファイナルファンタジーXIではネットゲーム内で通貨の流通が増え、大幅なインフレを起こした。Botによる自動操縦で通貨を大量に獲得する連中が出てきたことが一因とされる。 しかし、まず根的な話として、モンスターを倒すという「労働」によって無制限にゲーム世界に通貨が発行されるという世界を設計したことがそもそもの過ちであると言える。モンスター討伐に対してゲームシステムが通貨を発行するのであれば、それに対応して通貨を回収するシステムが必要となる。通常はゲ

    ベーシックインカムでネットゲームを変える - プログラマーの脳みそ
  • Eclipseからテキストエディタに戻れない10の理由 - プログラマーの脳みそ

    ソフトウェアはいろいろな作業の効率化に貢献してきた。プログラミングという作業も例外ではない。現代の高度なIDE(統合開発環境)はプログラマが単純でつまらない作業に時間を割かずに済むようにさまざまな機能を提供してくれる。 もうテキストエディタ+コマンドラインでのコンパイルなんて環境には戻れない。以下は自分が仕事でメインに使っているEclipseというIDEを使い続ける理由。 (追記)私は仕事では主にJavaの開発をやっている。C/C++/C#の開発では以下に挙げるメリットを享受できない部分があることを断っておく。 1. コードの自動補完 標準API+フレームワークのAPIで万単位のクラスが存在するので、暗記は無理。クラスに存在するメソッド名、フィールド名までの暗記はもっと無理。よく使う範囲なら暗記しているけど、typo -> コンパイルエラー -> 探して修正 の手間より、自動補完が断然効率

    Eclipseからテキストエディタに戻れない10の理由 - プログラマーの脳みそ
    tarchan
    tarchan 2008/12/22
    使うと便利なんだけど、インストールなどの手間のかかる機能は使わずじまいになることが多い。
  • プログラミングハイウェイ - プログラマーの脳みそ

    プログラミング能力をつけるための高速道路を造りたいという話 - タムケンブログ Re: プログラミング能力をつけるための高速道路を造りたいという話 - タムケンブログ:Geekなぺーじ 実際、IT業界に身を置いていると教育機関の必要性を強く感じる。 情報工学科という学科を置く大学は数あるが、世の中に求められるのは実務としてプログラミングができる能力を持った人間だったりする。*1 情報工学科というのは座学が主体で実習が主体なわけではない。例えるならば、美大や音大のような、入学時に実技試験があり、在学中も実技を多く行うような、そういったカリキュラムの情報大学が求められている、と思う。*2 なんせ、情報工学出だろうが、情報系の専門学校出だろうが、文系大学出だろうが、新人で採るならひとしく無能だと思わなければならない。そんな出身校よりも、ホビーでプログラムするかどうかを問う方が当りの人材を引き当て

    プログラミングハイウェイ - プログラマーの脳みそ
  • 1