Kotlin 4
レス数が950を超えています。1000を超えると書き込みができなくなります。
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
https://kotlinlang.org
※前スレ
http://mevius.5ch.net/test/read.cgi/tech/1521401186/ やってみたかっただけでしょ
所詮オモチャなんだから ARC with cyclic collector というのをちらほら見る
弱参照を使わなくても既存コードのままで問題無いようだ
ただこれがGCのような停止時間を発生させるかなどはよく分からなかった 諸々の問題の解決を試みているうちに、気がついたら出来上がったものはGCそのものだったというオチになりそう
既存の枯れた技術を舐めてかかって自分で実装してみてはじめてそれが十分に優れていたことに気付く
技術の過度な抽象化による間違った万能感に陥りがちなITエンジニアにはよくあること オリジナル言語を頑張って作ったが結局動作的にLispになったみたいな話だな そのまんまでしょ。弱参照ないARCで管理するが、循環参照用に定期的にGCは走らせる。 だから循環参照するクラス大量だとフルGC走らせるのと同じことになるが、大抵のプログラムでは循環参照するクラスはそんな大量じゃないので大抵のケースではARC with cyclic collectorの方が速くなるとか ところでkotlinにweak reference見たいのあったっけ? >>875
nativeでは kotlin.native.ref.WeakReference
jvmでは java.lang.ref.WeakReference が有る
jsには無いからcommonにも無い javaや.netにあるのは知ってるから質問けど
そっか、所詮、最大公約数になるから他の言語に引きずられまくりでjsとかにねぇからkotlinで標準で用意されてねぇのか。 いやKotlinに無い理由はJavaにあるからだよ
建前はともかく、実態はAltJavaとしてしか使われてないしJBもそれを前提に開発してるのが実情 現状だとメモリ管理は対応プラットフォームの機能に寄生するみたいな感じになってるのは気になるね
iOS向けだとiOSのARCを利用するし、Cなら手動で開放してる
Kotlin/Native として統一的なメモリ管理機構を作らないと、プラットフォームを超えたコードの共有化とかはかなり限定的なものになりそう
しかし統一的なメモリ管理機構を言語で用意すると、プラットフォーム側で用意してるメモリ管理機構と重複部分ができて無駄だなとも思う
Xamarinとかはそんな感じだし ARCはOS関係無くね、Swiftと同じく普通にコンパイラとランタイムによる実装でしょ
現時点でcommon書くときメモリに関して支障は感じないけど
メモリ管理機構ってJVM上やJS上でどういうのを想定してる? JS はランタイム側でGCやってくれるし、JVMもGCやってくれるので、
アプリケーション側の kotlin コードでメモリ開放する必要ないし、循環参照とかも意識する必要ないでしょう
Kotlin iOS では、Swift や Obj-C と同じランタイム側にあるARCを使っているのではないのかな?
この場合アプリケーション側の kotlin コードでは、循環参照とかを意識しなくてはいけないのでは?
Cライブラリを使ってLinux上で直接動くような Kotlin Native コードの場合には、
malloc や free に相当するもので手動でメモリ確保開放とかやる必要があったりしますよね?
https://kotlinlang.org/docs/reference/native/c_interop.html んなわけあるかい
LLVMで普通に直接動く実行コードを生成してるだけで、iOSのオブジェクトモデルとは別物だ
iOSに循環参照を自動的に見つけて解放してくれるって事実上の独自GCやぞ
そんなもん勝手に組み込めるんならみんなとっくにやっとる var x = Foo()
Bar(x)
x = Boo()
以上のような Kotlin コードをコンパイルしたときに、Boo()の結果を x に代入するまえに x に入っていた Foo() への参照をどう処理するかってこと
Bar(x)の結果、だれかが x に入っていた Foo オブジェクトへの参照を保持している可能性がある
JVMやJSだと単に x を上書きするコードにコンパイルすればいいよね
iOS向けにコンパイルするときには release(x) みたいなのを含んだ LLVM コードに変換される?
もしくは、Kotlin が独自の ARC みたいなの持っていて、それに応じた処置がおこなわれるの?
Linux 向けの Kotlin / Native でコンパイルはこのままできるのかな? >>882 >>884
ObjCランタイムは普通にCのABIのライブラリ群だから
純粋なC言語から呼べるしKotlin/Nativeからも呼べる
iOSでもLinuxでもプラットフォームのAPIを使うには
それに沿ったメモリ構造や解放関数の呼び出しなどのリソース管理が必要だけど
外部呼び出しを除いたKotlin/Nativeの部分にmalloc/free/releaseなどは必要無いよ >>885
そうすると、 Kotlin / Native で普通に確保したオブジェクトの解放はどういう方式で行われているのかな?
リファレンスカウンタ? GCでは無いよね?
リファレンスカウンタだとすれば、Kotlin/JVMでは問題無いオブジェクト同士が参照しあう構造は、避けないとダメだよね ここで不毛な言い争いするくらいなら実際にコード書いて試せばいいのでは。。 >>886
>>873-874 と
https://github.com/JetBrains/kotlin-native/blob/master/FAQ.md
> Q: What is Kotlin/Native memory management model?
> A: Kotlin/Native provides an automated memory management scheme, similar to what Java or Swift provides. The current implementation includes an automated reference counter with a cycle collector to collect cyclical garbage. Kotlin 1.3 には Kotlin Native がバンドルされているみたいに書いてあるWebページがあるが、されてないよね?
bin ディレクトリ以下はいつも通りのスクリプトやバッチファイルがあるだけで kotlin-native はないんだけど。
何かオプションで変わるのか? >>890
ということはNativeがバンドルされているみたいに書いてある可能性があるな 古いIntelliJ(1.3) + Kotlin1.3プラグイン: 表示されず
最新IntelliJ(2.5) 素の状態(1.2.51) : 表示されず
最新IntelliJ(2.5) + Kotlin1.3プラグイン: 新規プロジェクトでKotlin/Nativeが表示された
IntelliJ側も一定以上のバージョンが必要みたい
Gradleプラグインは混ぜる意味無いし、
GitHubのリポジトリ直リリースの方も別のリポジトリと混ぜたりしないだろうから
バンドル云々は関係無いと思う Native使ってみたいけどNativeの恩恵にあずかれそうなアプリねーな 開発環境をインストール出来ない会社のPCで威力を発揮 >>895
そらならKotlinだろうがnativeだろうがインストールできないのでは? タイプミスった
スマホのタイプミスは変になるなあ
とほほ >>897
フリック入力には早く慣れたい、今30文字/分レベル どうやったらKotlinを使えなくできると思うのか、逆に聞きたい >>897
そんな些細なミスでいちいち訂正と言い訳しなくていいよ >>900
Kotlinで書いたコードが動くまでの仕組みの基礎中の基礎を調べた方が良いよ つまりkotlinは一回javaに変換してからコンパイルしてるってこと? JVMはバイトコードを読むもの
Kotlinソースコードはバイトコードを吐く
Javaソースコードもバイトコードを吐く
他のJVM言語(Groovy、Scala、JRuby、Jython等)もバイトコードを吐く
ドゥユゥアンダースタン? >>905
概念的にはそうなんだけど実際にはそういう人間にとってわかりやすい中間的な状態はすっ飛ばして内部でいきなりバイトコード作っている。 >>905
Javaで書かれたコードはClassファイルに変換される
Kotlinで書かれたコードもClassファイルに変換される
つまり、OpenJDK (JVM)から見たら、実行する時点でそのコードがもともとJavaで書かれていたのかKotlinで書かれていたのかの区別はできない。 なるほど ありがとうございます
JDKっていうのはコンパイラだけじゃなくてインタプリタも含まれてるのか そもそもAWSのJDKっても普通のOpenJDKに対して長期的にバグフィックスとセキュリティ修正をするってだけだからな。 Kotlin使っといてJavaのLTS期間がどうとかアホかよ
Kotlinって常に最新バージョンしかサポートされてなくて、
新しいバージョンリリースされた瞬間にサポート切れなんだけど、そこ理解してる? >>910
JDKってか、JVMにバイトコードのインタープリタとJITコンパイラ(実行時によく使用されるメソッドとかをバイトコードから機械語にコンパイルする)が含まれてる >>913
あ、すまん、文脈としては「だからAWSのJDKでだけ動かないなんてことはない」と言いたかった。 >>914
それとJDKのサポート期間と、なんの関係もないじゃん。いったい何と戦ってるのか。 >>917
どのみち放置運用するようなものには全く使えないんだから、半年毎にJDKを更新するくらい大した問題じゃないでしょ >>918
最高に頭の悪い見解をありがとう。
そうだね、うんうん、君の言う通りだよ。 >>918
それが大した問題だからここ何ヶ月も世界中で大騒ぎしてたわけで。。
まあアプリ本体とJDKをDockerかなんかでまとめてコンテナ化とかしてりゃ何の苦労もないけどな、
現実に本番環境でそこまで出来てるところはまだ少数派だろう。 うわー。Pleiades インストールしたら IntelliJ IDEA が日本語に!
慣れてないと違和感あるなこれw eclipseで開発してるやつおる?
最近 eclipse の Kotolin のプラグイン更新されてるみたいだけど、やっぱり IntelliJ の方が断然快適なんだろうか
eclipse ずっと使ってきたから、今から開発環境変えるのも苦労しそう むしろそういったIME使わずに作ってる人いない?
どうも自分で制御出来ない感じが慣れなくって >>923-924
おぢさん達、気持ちはわかるけどその程度のことくらい頑張らないと仕事なくなるよ >>923
IntelliJの良いところは開発環境周りの苦労がほぼないことだよ
eclipseから移るとマジで別世界で漏らしそうになる eclipse使っててよくストレス溜めずにいられるよな >>924
IMEワロス
変数名を日本語にしちゃう人ですかぁ? >>929
日本語で命名するの、騙されたと思ってやってみたらみやすくてワロタわ。
個人プロジェクトでしかやってないけど、テストケースを日本語にしておくとめっちゃ見やすい。 自分も趣味のプロジェクトはテストだけ日本語で書いてる >>923
一回使ってみてから決めたら?
そもそもkotlinやるならintellijのほうがいいと思うが Kotlin使うなら開発元のJetBrainsを支援する意味でもIntelliJの有償版を使うべき
最近はJavaがゴタゴタしてるし、JBが強いスマホ分野ではIDE離れの動きが出てきてるし、開発環境市場はVSCodeが席巻してる
このままだと会社無くなってKotlinも終わっちゃうよ SWT使うから、eclipseのWindowBuilderないとちょっときついのよね
IntelliJ は魅力的だしとりあえずインストールしてみたけど、IDE2つ起動しないといけなくなりそう >>923
プラグインが0.7.2くらいの時に使ったことがあったが、Javaのプログラミングの時にまでエラーが出るようになって、
たまらずアンインストールした。
その後どうなったか知らないが、まだアルファ版のままみたし、もともとのContributorはほとんど関与していなくて、
現在のContributorは実質ほぼ一人だけみたいだから、IntelliJのサポートレベルには
遠く及ばないんじゃなかろうか。
https://github.com/JetBrains/kotlin-eclipse/graphs/contributors >>934
支援させてやるから、俺にも買ってくれよ >>936
やる気なさすぎてワロタ
まあJBがeclipseを手厚くサポートするメリットが何もないもんな kotlin勉強してみたけど、なんていうんだろこれまでだと泥臭い書き方になるものが
すっきりかけるようになっていいな
JavaよりC#のほうがいいと思ってたがC#もdelegateを導入したあたりから複雑化して
いまとなってはkotlinのほうがなんか直感的にわかる 本当に使ってるの?
C#のdelegateは最初のバージョンからあるし、KotlinってC#をリスペクトしてて
盲目的にC#にあるものは全部取り入れてるからC#より複雑だぞ C#よりいい点はレシーバ付きラムダ式と拡張関数の書き方かな
ジェネリクスは…
reifiedはがんばってる気がするけど あんま使ってないんだと思うしスレチだが
最近のC#はdelegate負の遺産として使わないぞ この流れはチャンスだ
使った事ないけどデリゲートって何ですか?
デリケートなら知ってます easy scalaとしてkotlin開発始めたんだからC#関係ないぞw
てかC#もscalaの記法パクってるの多いからな エヴァしか知らないとアニメ表現が全部エヴァのパクリに見える現象がここにも 作ろうとしていたのは静的型付けのgroovyで、静的型付け言語の先輩のC#やScalaの記法を参考にしただけなんですけどね 他の言語やった後に C# やると
event や delegate キーワードはなんじゃこれって思うよね >>945
Cのパクリ言語の多さには驚かされます。 >>943
最後の一文から知りたいのでなくて、ネタをやりたかったのだろうとは思うが、一応説明すると、
基底クラスを継承する代わりに、継承したい基底クラスのインスタンスを指定すると、
あたかも継承したかのように振る舞う機能。
基底クラスのメソッド呼び出しは、上記で指定したインスタンスに委譲(delegate)され、
そのインスタンスのメソッドが呼ばれる。
Effective Javaによると継承は一般的に間違いを起こしやすとしてdelegateするよう勧めている。
overrideするメソッドがたくさんあるけど具象クラスがないインターフェースを実装する時に
ヘルパークラスから生成したインスタンスに委譲すると便利。 KotlinでWindowsとかのデスクトップアプリ作ろうと思ったら、やっぱTornadoFXとかになるの?
ネイティブで作れたら嬉しいんだけど そもそもWindowsのデスクトップアプリを作るなら、C#かC++だろ
なんでわざわざKotlinで作るんだ Kotlinが好きなのかKotlinしか知らないからやろ windows「とかの」
まぁクロスプラット狙ってるならそれでもいいんじやねぇの Javaでクロスプラットフォームなクライアントアプリを作ろうとしたが、クリップボードひとつまともに機能しかった悲しい思い出が甦る TornadeFXとかあかんやろ(見もせずに言ってます)
ティアが嵩むほどシステムの信頼性は下がる(見もせずに言ってます)
Java JavaFX Kotlin あかんやろ、Java標準からも外されるくらいクソなJavaFX、あかんやろ(見もせずに言ってます) とりあえずAndroid用アプリでも作っときなさい。
今はその方が使ってくれる人は多そうだしな。
GUIも問題なし。
そうでなければGUIなしの主にサーバ用プログラム作るかかな。
GUIはクライアント側に任せる。クライアント側は何でも良い。 一つのことにこだわって新しいことの習得がおっくうになるのは老化してる証拠 そうだな。ボケ防止にもなるから新しいことやった方が良い。
ただしボケ防止の場合は完璧な状態になる必要はない。
学習を続けるという脳を使い続ける行為が重要なのであって、完璧になってゴールしてしまったらそこで学習が終わってしまうからだ。 >>959
尊師のお言葉にもあるけど、経験値が増えるにつれて、わざわざ自分で使い込んでみなくてもある程度わかるようになってしまうんだよな
Kotlinなんてまさにそうで、Javaに十分精通してる人なら「ああ、記述をライトにしたAltJavaね。機会があれば使おう。」で終わり Javaで出来ることをKotlinで書くだけだから普通に出来るでしょ
まあそもそもデスクトップアプリをJavaで作ること自体あんまりおすすめしないけど まあそのうちnativeできるし、何かできるんじゃなかろうか。 >>962
確かに老い先短くなると、学習する期間で縮む余命の方が、残りの余命の間に得られる利益を上回るよね。 >>965
余命の問題だけじゃないけどな
・この程度なら必要になったときにググれば十分だ
・類似技術を習得済みだから最悪でも今持ってるスキルの範囲でカバー可能
経験を積めば大抵こうなるから、わざわざ使い込んで試す利益は限りなく低くなる 少なくとも触らないで理解した気になってる奴は成長しない Kotlinに慣れてくるとJavaに戻る気は失せてくる。
型推論とか色々とコンパイラが面倒見てくれるから楽だ。 レス数が950を超えています。1000を超えると書き込みができなくなります。