2023年2月28日火曜日

java/Kotlinが苦手です @JvmStatic(34)

皆さんこんにちは.毎日何かしら作っているヒラサカです.

USBオシロを作る取り組みの第33回でUSB2.0転送レートが3MByte/Secしか出ないと実測され、やる気がしなしなになってしまいました.しかし不屈の闘志で立ち上がったわたしは、AndroidスマホをUSB hostとして運用してみることにしました.USB BULK転送をすりゃいいのでなんとか自力でできるんじゃないかと思います.

開発環境はAndroidStudioで、言語はjava/Kotlinを使っています.

でも、つくづく思うのは、java/Kotlinはわたしのsoftware能力の上を行ってますね.

Cみたく関数を書くための仕組みだけが提供されている平易な言語がわたしの対応能力の上限です.ところがjava/Kotlinときたらobjectやthreadのための仕組みがどっちゃりと上乗せされていてややこしくて困る.interface, abstract, this, it, final, synchronized, throw, super, companion, inner,,,,,


それで、netで拾ったUSB COMのデバドラ(java)を参考にしているのですが、sourceにjavaとKotlinが混ざってると読みづらいのでKotlinに書き換えているところ.

それで、う~んと思ってしまったのが@JvmStaticっていうマイナーな制御句でした.

とあるjavaのcodeにstatic関数がありました.
 class Clock {
     public static long nsec() { return System.nanoTime(); }
 }
これをKotlinに書き換えるのですが、Kotlinにはstaticが無いのでcompanionという宣言?で囲みますとstaticっぽく使える事になっています.javaよりもKotlinが好きなわたしですが、これはjavaの方が良いと思いますがね.
 class Clock {
     companion object {
          fun nsec(): Long { return System.nanoTime() }
     }
 }

なのですが、このKotlin codeをビルドできません.
static関数nsec()を呼び出すjava codeで「staticじゃないから呼べない」とエラーが出ます.

元々嫌な感じはするんです.AndroidStudioの処理系はKotlin/javaのmix codeに対応しているのか?という疑問です.
 関数定義:Kotlin
 関数呼出:java
これまではKotlin/java混在のビルドは円満に通っていましたから疑いは無用のはずでした.でも上の通りになってしまい、昨夜から悩んでいました.

そんな折、これを読んだら @JvmStatic @JvmFieldという気になるwordがありました.

さっそく試します.エラーが消えました.う~む、これって言語仕様なのかな? どっちかというとコンパイラへの指示じゃなかろうか? 混在ダメですか....
 class Clock {
     companion object {
          @JvmStatic fun nsec(): Long { return System.nanoTime() }
     }
 }

教訓: Kotlin/java混在には気をつけよう

33へ    35へ

かしこ

69 件のコメント:

  1. java は、難しいなあ

    返信削除
    返信
    1. kotlinはjavaに似てるけど微妙です

      削除
    2. なんか、kotlin って、「java を使いやすくしてみました!」というのが、ウリのハズだったけど、結局、
      ・ちょっと込み入ったことをやろうとすると、やっぱり「素のjava」が、必要に
      なったりして、「企画倒れ言語」(むしろ、却って分かりにくくなった)みたいな気がします。
      ※あえて言わせてもらえば、「オナニー言語」ですね。世の中には、こういう、
      「xxの欠点を改良しました!」と、いいつつ「別の欠点が、てんこ盛りになった」言語が、たくさんあります。
      (みんな大好き「オナニー」言語!)

      削除
    3. 私が、python を好きになれないのは、そう言うところがあるからです。
      (Ver2 -> Ver3 で、「別言語」に、なっちゃったし。(そのまま動かないって、酷いよね)きっとまた、Ver4 で、別言語になる予感!)

      削除
    4. そもそも python なんて、「いち個人」が、趣味で作ってたのが始まりだし。
      (なんでそんなのが広まったのかは未だに謎。よく知らない。)
      ※「個人が趣味で作ってた言語」なら、まだ Rubyのほうが全然マシだと思います。(Ruby は、一時勉強しようと思って本まで買ったが、未だに捗らない。一応、ソースが読めるくらいは知っていますが、まだ極めては居ない。)

      削除
    5. 素人の手慰み!

      googleはなんでKotlinを採用しちゃったんでしょ。java熟知者にとって簡単操作なのは良いかもですが、わたしの様なjava未熟者は結局javaをリファレンスにしてkotlinを操作する事になるので二度手間までは行かないが1.5手間ぐらいであります。

      削除
    6. python人気爆発なのでやらない奴はバカなのかと思ってました。機械学習がなんでpythonなのかさっぱり知らない。

      ちなみにわたしはperlであります。script書くぐらいならperlでいいやっていう。
      そういやrubyの時もscriptしか書かないからperlでいいやと思ったんだったなぁ。

      削除
    7. 昨夜、javaのsample codeをkotlinに書き換え終わりました。無駄な手間と思いつつ。

      削除
    8. 言語の評価はとどのつまり給料が高いかどうかだろうか?

      映画の評価はとどのつまり興行収入だろうか?

      rustって言語は儲かりまっか?

      削除
    9. 開発環境のAndroidstudioには、java→kotlin自動変換機能があるんですが、これがバグっうか、methodがごっそりと消滅しちゃう事がありんす。

      削除
  2. 読者 プログラムできる人を天才だと思うくらい尊敬する
    ベーシック位しか
    Cは、授業でやったけどさっぱり
    雑誌のリストをうちこめばできるようにならないかな
    雑誌にCが掲載された頃は、Cのショートプログラム見てない気がする
    同人ハードのお兄さんに使うのにpysonでプログラムするとかいたら敬遠されたと聞いた

    返信削除
    返信
    1. 世の「C言語」は、「方言だらけ」なので、
      ・Windows の C が出来る人 と
      ・Linux の Cが出来る人 では、
      会話が成り立ちません!
      ※実用的なCのプログラムを作ろうとしたら、 if 文 や for 文 を知ってても、殆ど「何の役にも」立ちません。
      実際に必要なのは、
      ・各種ライブラリ(システムによってマチマチ)の、使い方の、「深い理解」です。
      ※一応私は、Windows の C も、Linux の C も、両方やったことがあるから、このことはよくわかります。
      結局、「やったことのないシステム」は、分からない、ということです。

      削除
    2. なので、
      >雑誌のリストをうちこめばできるように
      というのは、難しいです。多分、「それを作った人」でないと、本当の意味は分からないので、(詳細な解説付きなら別だが)
      雑誌のように「不特定多数」が、見るようなモノには、載せづらいです。

      削除
    3. 昔IO誌に16進ダンプありました。ゲームで。芸夢狂人とか。

      削除
    4. アレは、アセンブラで組んでたらしい。スゴイ!

      削除
  3. 読者 目の前で後輩がプログラム本参照せずにすらすら書いてコンパイルエラーなしには驚いた
    デジタルの時代だから、これからは、アナログ回路ができるやつが貴重になると恩師の話
    ハイレゾアナログ回路は、そうかも。ある種の宗教に感じる
    ビデオデッキの中身はかなりアナログ回路ぽい

    返信削除
    返信
    1. >アナログ回路ができるやつが貴重になる

      諸般の事情によりそんなでもないもんです

      削除
    2. >ビデオデッキの中身はかなりアナログ回路
      というより、私は、
      ・サーボの塊
      に、見えますね。初期のビデオは、「アナログサーボ」だったので、「よく訳の分からない基板だらけ」でしたが、後期になると、これもデジタル化して、
      ・だいぶコンパクト
      に、なりました。(その路線が、「DAT」とかに引き継がれていくわけですが・・・)

      削除
    3. >諸般の事情
      今は、いくら「アナログ回路が出来ます!」と、言っても、儲からないです。
      (そもそも、「需要が減って」来たから。但し、仕事にあり付けたら、「ソフト屋よりも高給取り」ではないかと予想します。)

      あと、大きな流れで言うと、
      ・アナログ回路、デジタル回路、ソフトウエア、etc ...
      が、個別にいくら詳しくてもダメ(むしろ、「知ってるのは、前提」みたいな感じ)で、
      ・それらを取り纏める、システム技術
      のほうが、重要になってます。如何に、「適材適所で、技術を使うか?」(その為には、「ぜーんぶの」技術に精通していなければなりません)が、問われる時代になりました。
      ※とはいっても、「『ぜーんぶの』技術に精通してる人」なんて、見たことありません。(少なくとも私は。)
      (精通では無くて、「さわり」くらいなら、私も知ってますが、それでは太刀打ちできない。)

      削除
    4. そうなんですね~
      技術者で永続するのはなにかとムズい
      わたしは脱落組

      削除
    5. 読者 そーなんですね
      今日から 4004設計した日本デジコムの島氏を目標にしよう
      それで、まず、トランジスタ回路のマスクパターンの書き方を学習してですね。<ーその前に日本デジコム入社を目指す。ビデオに秋葉原の風景があったから勤務地秋葉原とかかっこいいぞ<ーきゃくひきにつれられてぼったくられる未来しかみえない

      削除
    6. あの人もそんなに幸福な技術者人生じゃなかった感じで

      削除
    7. 読者 幸福な技術者人生の人をおしえてください 主さまは幸福にみえる(となりの芝生はきれい説)

      削除
    8. わたしは23年間のサラリーマン時代に、貪欲に技術的修練を求めました.しかし、その求道的姿勢に報いるだけの運を天が授けてくださったかどうかにはやや不満があります.なので、わたしは技術者として不運だったと思っています.

      客観的に技術者のaverageと比較するなら、わたしの技術者人生は世間の水準以上だったとは思います.

      削除
    9. >わたしの技術者人生は世間の水準以上
      いやそれは、「技術者」関係なくて、運よく「管理職」に、あり付けたからですよ。
      ※私は生まれてこの方「人を使う立場」に、なったことないので、未だに「(組織上)底辺の立場」しか、なったことが無いです。私も「求道者的」に、技術を追求する人生を送りましたが、同時にそこには「管理職になると、技術を追求できない」とか「管理職はバカばかり」「バカでないと、管理職になれない」と、思っていたからと言うのはあります。
      (こういう発想は「日本的」かと思いきや、海外でも「Dilbert」とかでも、同じような話があるので、そうでも無いらしい。)
      ※私が、「底辺」と「管理職」が、貰える額が、
      ・2~3ケタ以上違う
      というのは、割と最近知った話で、昔は、
      「技術を極めれば、収入も上がる」
      と、信じてました。(そんなことはありません。むしろ「無能な管理職」が、一番高給取りです。私は今でもそう言うの嫌いですが。)
      (志村けんが死んだときにやってた、「いかにして志村けんが有名芸人になったかのドラマ」のなかで、「下っ端と偉い人(彼は途中から、いかりや長介の代わりに、マネージャの立場になった)で、「こんなに貰える額が違うとは思わなかった」「こんなに貰っていいのか?」と言ってるのですが、ホントその通りです。)

      削除
    10. >幸福な技術者人生
      残念ながら、「(真の)技術者で、高給取り」の人を、私は知りません。
      (ビルゲイツも「技術者」かと思いきや、彼は単なる「詐欺師」だったし。)
      ↑の「4004の島氏」も、「幸福」だったのかな?と言われると、微妙だし。
      (今、何やってんだろ? とんと消息を聞かないですね。)
      ※「手っ取り早く」収入を上げるには、「(色んな意味で)人を喰う」しかないです。私は、いかなる意味でも「それを好まない」ので、必然的に、「死ぬまで底辺なんだろうな」と、思っています。

      削除
    11. 面白いテーマなのでさっき新規投稿しました.

      ウッチャンナンチャンは、ウッチャンは番組企画マンを兼務しており、ナンチャンはコメディアンだそうです.どうも二人のギャラには数倍の格差があるらしい....

      ソニーで部下なしの課長の純粋技術者で年収1200ぐらい.統括課長で1300.統括部長で1500ってとこかなぁ.(今はもっと全体的に水準が下がったかも)
      ソニーの連結利益1兆円とかは、給与水準を下げたのも寄与してると思います.知らんけど.

      削除
    12. 30歳係長で600万円.20歳代の平社員だと450とかかなぁ.
      事業部長の最低ランクで1900?
      事業本部長は3000~かなぁ.

      平社員と事業本部長だと桁が1つ違いますね.

      削除
    13. >二人のギャラには数倍の格差があるらしい
      「Apple を作った、2人のスティーブ」の間でも、やはり
      ・スティーブジョブスのほうが、スティーブウォズニアックより、数倍上の資産を持っている
      と、言われてるので、やはり、
      ・「人が喰える人のほうが、収入が高い」
      というのは、業界関係ない真実なんだと思います。
      ※なので、「企業がリストラする」ならば、「工場のラインの作業員」をクビにするよりも、
      「社長や取締役を一人飛ばせば」オシマイ
      なのですが、彼らは「リストラを決定する側」なので、絶対にそう言うことはやりません。
      (代わりに、「多数の下っ端」が、犠牲になるのです・・・)

      削除
    14. さすがはCEO.
      工場従業員がリストラされます.

      削除
  4. 匿名さんって、3人(以上)居るのかしら?
    ・匿名(元祖) さん
    ・匿名 読者 さん
    ・匿名 さん ← この人は。複数いるのか?

    返信削除
    返信
    1. 2人だろうと想像しているのですが、ひょっとすると最大で4人なのかもしれません.謎なのです.

      本日は秋葉原のマルツへ行きます.

      削除
    2. 4ヶ月ぶりの床屋で髪をバッサリ切りました。小僧みたくなりました。

      削除
    3. 読者 イケメンさん髪カットでさらにイケメンでうらやましく思います

      削除
    4. ぼっちゃん小僧になっています

      削除
    5. 読者 どうして夜中に起きているんですか?(仕事猫ネタ)を思い出した 正確には 電話猫 現場猫

      削除
    6. youtubeの大食い番組を見ています.
      でもそろそろ眠くなってきました.おやすみなさぁい

      削除
  5. 匿名と匿名 読者は同じ 読者をよく忘れる
    だから ここに四人いるみたい

    返信削除
    返信
    1. 偽者当てゲームみたくなってきました

      削除
    2. > 読者をよく忘れる
      ならば、4人 ジャナクテ 2人 じゃないの???

      削除
    3. 匿名(偽物)2023年3月1日 13:02

      私が偽物です。よろしく。

      削除
    4. 偽者さん、よろしくでぇす

      削除
  6. 読者 いいな秋葉原 水曜日だからいろいろ開店

    返信削除
    返信
    1. 諸般でアキバ中止になったとです

      削除
    2. 店が定休日でした。気づいてヨカッタ!

      削除
    3. 読者 火曜日木曜日がお休みが秋葉原と思いました。 不動産屋は水曜日休み デパートも自動車屋も ドトールコーヒー隣の隣のMLこんぴゅうたー は 仕入れで岐阜まで行ってときどきお休み ツイッタを見ているとそんなで

      削除
    4. 金曜日に出動かなと思っていますが土曜かもしれません.なるべく土日は避けたいです.

      削除
    5. 読者 半導体農業論ですね 出来は、お天気しだい 15000のうち1つ2つ
      金曜日天気なら良いですね

      削除
  7. 最近は熱心なpython信者になりました。
    ホントよくできています。ただ、組み込み系には使えないかもです。
    言語のつくりに忖度せず、やりたいことを書けばいいようにできている感じです。

    返信削除
    返信
    1. 蛇縛りでcobra→hub→mamushiとか進化してもらえたらいいです

      削除
    2. >ホントよくできています
      私は「python が、よく出来た言語」であることに、異論は無いです。
      但し、↑にも書きましたが、
      ・本質的には「個人が趣味で作った言語」である
      ・「公的な、規格になっていない」ので、仕様が不安定
      (こんな指摘
      http://www.nurs.or.jp/~ogochan/essay/archives/5460
      私が高校の「情報Ⅰ」でPythonを使うことに否定的なわけ
      も、あるくらい。この人が言ってることは、私の考えとほぼ同じである。)
      ・(陰謀論的に見て)「ヘビがシンボル」なモノに、ろくなのがない。この言語はきっと、「DSがらみ」なんだろうな(「AI」でよく使われてるから広まった、というのも非常にソレっぽいし)と、思わなくもない
      とかあって、どうも好きになれない。
      ※リンク先でも言ってるが、「日本人なら、Ruby を使えよ!」には、私も賛成です。

      削除
    3. たしかにpythonがすごいというより、ネットを見ればだいたい誰かが同じことをやっていてgitからコピーすれば済むということが本質かもです。昔の言語だとコピーして自分のソースに組み込んでも先ず一発では動かないことが多かったですが、いまどきの言語はそこで苦労することはないですね。
      dockerとかもそうですが、鬼のようにリッチになった計算資源をプログラマーが楽をするために使える時代がやっと来た感じです。
      言語についての好き嫌いで言うと
      〇アセンブラ(6809)、F_BASSIC、PASCAL、python、
      ✖N88-BASIC、kotolin、アセンブラ(8086)、c、
      なので、ホント趣味ですね。

      削除
    4. おれverilogが好きでたまらない

      削除
    5. 読者 アセンブラにあこがれ

      削除
    6. 肌の合う合わないがありますねよ~。LSI設計はやったことないのでverilogは全然わからないのですが。
      自分は8bit育ちなのでコンパイラよりインタープリタ系が好きです。10,000回ループに10秒くらい掛かっていたあのころを思い出します。

      削除
    7. 表示がぬるぬるするとかw

      削除
    8. 昨今のCPUのアセンブラって、殆ど
      「C言語向けに最適化」
      されてるんで、
      >アセンブラ(8086)
      なんて、実はほとんど
      ・C言語と、1:N で対応してる
      と言っても過言では無いです。
      ※実際、コンパイルしたEXEの、逆アセンブルをとっても、(変な最適化をしない限りは)
      「簡単にソースが想像つく位」に、きれいに並んでいます。
      (なので、「ハンドコンパイル」も、やる気になればできなくない?かも)
      それを応用した、「逆コンパイラ」が、売ってるくらいです。

      削除
    9. ちなみに、私のお気に入り言語は、昔は、「C++」だったのですが、
      最近は「変な方向に向かっている(C++98 辺りまではマトモだったが、今世紀に入ってから、迷走を始めた感じ)」ので、嫌いになりました。
      一時、「php」に、ハマっていたのですが、最近はもっぱら、
      「Javascript(Node.JS)」
      が、気に入ってます。手軽にいろいろ試せるし、ロジックのプロトタイプは、これでばかり作ってます。

      削除
    10. ここまでVBとC#が出て来ず.べつにそれでいいです

      削除
    11. >VBとC#が出て来ず
      両者とも、私は「仕事で、現役で使って」ます。
      話題にするまでもなく、もはや「空気みたい」な、存在と化してますね。私にとっては。

      削除
    12. ひらさか氏の「Verilog」みたいなもの(当たり前にあるモノ)かもしれません。

      削除
    13. VBってexcelのマクロなんでしょ?ってそんなレベルでしか知らないっつう

      C#があるんなら、C♭とかCmとかCm7とか

      削除
    14. >C#があるんなら
      C# って、ホントは、
      「C++++」(= C++ × 2、C++ は、「Cよりも進んだ(C言語で『++』は(ポインタを)進めるという意味なので)言語」という意味だったので、その「一歩先」という意味で、更に「++」を加えた。)
      らしいのですが、それじゃぁ芸がない(笑)ので、「C#」にした、と、言われています。
      ※なので、「音楽記号の♯」ではなくて、「#」です。(文字が違う)

      ※これを真似た?、「なんとか#」という言語が、いくつかあります。
      J# とか F# とか。

      削除
    15. えっ、♯と#ってちがうんだ?
      はじめてのC♯

      削除
    16. >えっ、♯と#ってちがうんだ?
      「C#」は、英語的には、本来「シー・ナンバー」と読むはず。(プッシュホンの#も、ホントは同じ「ナンバー」なんだけど、なじみがないと思ったのか、NTT(電電公社時代から)は、番号案内でも「シャープ」と、読ませてますね。)
      が、なぜか、これで「シー・シャープ」って、読ませてますね。

      Wikipedia の、C# の項では、
      >C# は「C Sharp」(シーシャープ)と発音し、LATIN CAPITAL LETTER C (U+0043) の後に NUMBER SIGN # (U+0023) と書く。 音楽のシャープ (♯, MUSIC SHARP SIGN (U+266F)) ではなくナンバーサイン (#) を採用したのは、フォントやブラウザなどの技術的な制約に加え、ASCIIコードおよび標準的キーボードには前者の記号が存在しないためである。

      ということらしいです。

      削除
    17. ♯で強行してみんなが頭を抱えたら面白かったのに

      削除
    18. murasaki
      ♯と#の違いは知りませんでした!勉強になりますー。
      c#は言語というより、.NETやMFCなどのライブラリを動かすためのスクリプトみたいなイメージです。ライブラリがドロドロの相互依存やバグ対応のために、秘法を知らないと書けないことだらけ。
      c++はとても気持ちよく書けるけど書いたものを自分でも読めないイメージです。::が慣れるまでちょっと嫌でした。

      削除
    19. c::c::c::c::c::c
      ムカデか毛虫に見えて怖い

      削除