nim
1 :デフォルトの名無しさん :2018/03/01(木) 18:32:18.16 ID:vh/yy2VS.net https://nim-lang.org/
94 :デフォルトの名無しさん :2019/11/18(月) 17:09:32.08 ID:wQWkNxVm.net 成る程。
95 :デフォルトの名無しさん :2019/12/10(火) 23:17:13.67 ID:DeryhXpR.net nimに対応したソースコード可視化ツールってある?
96 :デフォルトの名無しさん :2019/12/12(木) 17:09:11.38 ID:Lo+C9eAO.net nimってあまりかっこよくないね
97 :デフォルトの名無しさん :2019/12/13(金) 23:01:47.25 ID:sYt6sihU.net Cにコンパイルしてからコード解析ツールに。
98 :デフォルトの名無しさん :2020/03/25(水) 04:10:40.05 ID:k6zngd1F.net nimコードはトランスパイルする前ならクロスプラットフォームなんだろうか?
99 :デフォルトの名無しさん :2020/03/27(金) 15:59:22 ID:6mKroLAz.net こんないい言語なのに結局欠点はCに依存してる点
100 :デフォルトの名無しさん :2020/03/27(金) 16:10:13.08 ID:9RtDMjhb.net あんまり本出ないね むしろチャンスか
101 :デフォルトの名無しさん :2020/03/27(金) 22:55:09 ID:2CmTFgv1.net あの糞マクロ以外大して面白みのない言語だしなぁ
102 :デフォルトの名無しさん :2020/04/07(火) 05:01:02 ID:FPXvnSDp.net 逆にマクロの完成度高い言語ってなに?
103 :デフォルトの名無しさん :2020/04/07(火) 07:46:31.57 ID:CJzGmfMl.net common LISP
104 :デフォルトの名無しさん :2020/04/07(火) 14:00:10 ID:izX7gbjy.net Schemeは?
105 :デフォルトの名無しさん :2020/04/07(火) 19:47:26 ID:fJ0U2d01.net nimのマクロは完成度高いと思う。でも完成度高いマクロという存在自体が糞。
106 :デフォルトの名無しさん :2020/04/08(水) 12:06:55 ID:lWfV0IAd.net MACRO-80
107 :デフォルトの名無しさん :2020/04/10(金) 23:13:42 ID:mN42vwgW.net >>102 糞マクロを褒めてるのであって 逆じゃないと思うんだが
108 :デフォルトの名無しさん :2020/04/10(金) 23:14:33 ID:mN42vwgW.net >>101 >>105 が同じってことだろ common lispなんてはるかに糞になるし
109 :デフォルトの名無しさん :2020/04/10(金) 23:15:34 ID:mN42vwgW.net マクロならrustのが定評あると思うが
110 :デフォルトの名無しさん :2020/08/07(金) 22:39:20.68 ID:r3mpGCFQ6 https://marimay.jp ここで麻雀作ってる
111 :デフォルトの名無しさん :2020/09/19(土) 22:27:13.04 ID:9NR8PjVh.net 小数の配列作りたいんだけどやり方教えてください。 [0.0, 0.1, .. 0.9, 1.0] みたいな。 Python なら hoge = [i/10 for i in range(11)] かな。気持ち悪いけど。
112 :デフォルトの名無しさん :2020/09/22(火) 12:29:56.17 ID:w8JrpHTT.net lc[i*0.1 | i<-0..10 ]
113 :デフォルトの名無しさん :2021/01/10(日) 21:59:51.09 ID:HIznKotv.net >>69 var name = readLine stdin var name = stdin.readLine で完結してるよ、型推論で>>72 にも言った通り型を何回も書く意味がない。付け加えれば()カッコも 要らない。第一引数クロージャーのラムダ式で言えばカッコが必要ないのに書く意味が無い。そして varとletとは不変性だが、rustやVの様にたかがGCを搭載したく無いだけで、どこでもmut mutして プログラマに負担を強いるより良い(あくまで個人の感想です) さらに、procとfuncも、片方が純関数なのはキーワードとして明示できる統一性としてありだね。 まあpragmaが多すぎる気もするけど、if likely(true)/unlikely(false)の様にCPUキャッシュ分岐予測に 直接関与出来る高級言語としては、他に類を見ない。GCが嫌ならOFFに出来るし、そして重い Stop the Worldが嫌ならそれをしないGCに変えることが出来る、言語としては機能が多くて Goの様に究極なシンプル(なのに統一性が微妙)じゃ無いけど、こりゃ良いわ var name = stdin.read LineEnum
114 :デフォルトの名無しさん :2021/01/10(日) 22:14:35.92 ID:HIznKotv.net 付け加えるとHaskellみたいなproc() = の宣言が微妙キモいけどfunc(): T =があるから、まあ妥当だね rubyの様なreturnを書かないのは良い。result=xは便利だけど微妙....でそこまでやるならOptionと Future、そして例外を統一して欲しかったな。 普通にtry: except: finally:があるのも点数が高い。Araqが言う様に例外と(Label)goto based exceptは ほとんど同じ何だから、今どきの言語が例外が無いのはおかしい。まあ他を悪く言う気はないけど Goの様に意味合い的に同じでfinallyに対応するdeferがあるのも良いよね
115 :デフォルトの名無しさん :2021/01/12(火) 15:33:30.76 ID:LUlB/OIG.net 超時空ロングパス
116 :デフォルトの名無しさん :2021/01/12(火) 15:57:17.72 ID:kyPiY518.net この言語がJsと比較で優れてる点ってあるの?
117 :デフォルトの名無しさん :2021/01/13(水) 08:29:44.80 ID:oKh8381v.net JavaScript?であれば、JavaScriptはECMAScriptのバージョンとともに型無しのダックタイプから クラス定義で見られるように型を導入して大規模コードを書く際に静的な安全性を求めてきた、 言語的な特徴でもあった動的なメソッド上書きやapply/callは悪とみなされつつ、改良が進む。 TypeScriptもその特徴であろう、altJSあるいはJSX派生と呼ばれる一種の方言が多量に誕生した 一方でJavaScriptの遅さや1言語依存からwasmが考え出されて多くのコンパイラでwasm開発が できるようになった。Nimも例に漏れずJSバックエンド及びwasmコンパイルが可能である。 Rustもwasm開発はそうだがJSバックエンドは無い、Goもwasmは出来るがサイズが大きい NimはGoに比べても型チェックが厳しい、Rustはそれに借用いわゆるボローチェックがそれに 加わるRustもそうだが型安全性はばつぐんだ
118 :デフォルトの名無しさん :2021/01/14(木) 18:15:15.39 ID:ZgCcmsal.net jsって割と底辺だと思うから Nimはそれより上だろ
119 :デフォルトの名無しさん :2021/02/25(木) 19:45:58.25 ID:twDFYCAL.net 1.4.4 age
120 :デフォルトの名無しさん :2021/04/17(土) 20:22:19.25 ID:f1G9K9An.net 1.4.6 age
121 :デフォルトの名無しさん :2021/04/30(金) 20:42:36.52 ID:+hB3gYz3.net Windows defenderでウイルス判定される
122 :デフォルトの名無しさん :2021/05/01(土) 12:24:15.54 ID:afQILYPs.net それはどうしようもない https://forum.nim-lang.org/t/7830
123 :デフォルトの名無しさん :2021/05/10(月) 13:57:34.01 ID:FH4+0Y9S.net 頼むからもう少し流行ってください。Dropトレイト、Rcトレイトと戯れてあいつのコードを直したくない
124 :デフォルトの名無しさん :2021/05/10(月) 15:07:45.08 ID:lCZGOQhN.net 明日に向かって吠えろ
125 :デフォルトの名無しさん :2021/05/13(木) 14:29:40.54 ID:pHijDXLB.net Software Design に記事持ち込め
126 :デフォルトの名無しさん :2021/05/15(土) 12:35:34.04 ID:eYtIld1h.net https://www.akiradeveloper.com/post/give-up-nim/
127 :デフォルトの名無しさん :2021/05/19(水) 07:49:19.67 ID:mvJC2+U+.net 2015年2月なんて大昔だろ…Version 0.11頃の話、貼る奴w
128 :デフォルトの名無しさん :2021/05/19(水) 07:53:15.04 ID:mvJC2+U+.net 間違えた。 2月だから0.11さえ出てないわ、0.10.2…
129 :デフォルトの名無しさん :2021/05/26(水) 22:06:31.04 ID:5a/xy4zx.net >>121-123 バージョン1.4.8がリリースされました 2021年5月25日ニムチーム Nimチームは、Nim1.4の4番目のパッチリリースであるバージョン1.4.8を発表できることを 嬉しく思います。バージョン1.4.8は、1か月のハードワークの結果であり、23のコミットが 含まれており、最も重要なバグが修正され、ORCメモリ管理がさらに改善されています。 すべてのユーザーにバージョン1.4.8をアップグレードして使用することをお勧めします。 リリースのハイライト develブランチと同様に、v1.4.8はcsources_v1を使用して構築されています。つまり、 AppleM1チップで使用できます。 バージョン1.4.6は、いくつかのウイルス対策ソフトウェアでいくつかの誤検知を引き 起こしました。私たちのテストによると、これはv1.4.8では発生しないはずです。
130 :デフォルトの名無しさん :2021/06/24(木) 16:12:27.31 ID:IeJQfUil.net なんか結局流行らなかったな 2019ごろはちょっと来そうな雰囲気出してたのに
131 :デフォルトの名無しさん :2021/06/24(木) 16:13:02.76 ID:IeJQfUil.net 今でも一番書いてて気持ちいい言語ではあるけど
132 :デフォルトの名無しさん :2021/06/24(木) 17:25:26.02 ID:70oiT5zZ.net Luaといい勝負?
133 :デフォルトの名無しさん :2021/06/27(日) 14:10:40.69 ID:YLAmOs9U.net Luaの理念は、簡素、高効率、高移植性(simple, efficient, extensible)、現在はpowerfulとかに変えた。 JITもあるが型の概念が希薄で基本はNativeではない。GCあり、プロトタイプベースのOOPSもC/C++の 相互運用も図られているが、主な用途は本体のプログラムを拡張するスクリプト、ゲームの拡張や 3Dモデリングソフトなどの拡張。 一方、Nimは「Efficient, expressive, elegant」(効率的、表現力豊か、エレガント)であり、型は厳格。 関数、あるいはプロシージャ呼び出しも厳密。Goにあるinterface{}のようなものは無く、Cというか リンケージ指定、オブジェクトコピー方法、インライン展開など明示するような言語と一体化されたプラグマ。 言語と一体化されたマクロ・テンプレート。状況で選べるGC、例外try-catchとdeferを全否定をしない。 RustのようにGCを排除したためプログラマに押し付けた借用チェックは無い。 Goよりも小さくて速いGC、それによる速度低下は最小限、Rustは学ぶ価値が確かにあるが非常に高い敷居。 Nimは非常に低い敷居(Goほどではないが)、表現力はC/C++そのもの、限りなく抑え込まれたタイプ量。
134 :デフォルトの名無しさん :2021/06/27(日) 20:05:41.95 ID:ytkGpeVG.net そんなにヒドいかな?
135 :デフォルトの名無しさん :2021/08/21(土) 08:23:43.68 ID:7GAoG1Iq.net Nimにガベージコレクション(GC)有りは事実なのですが、 NimはオプションでGC無しにできるので、 Nimバージョン:1.5.1でRustのボローチェッカー に似た「View types」が実装されれば GC無しで、View types参照の有効性を検証する ことによってメモリ安全性を保証しつつ高速化して C/C++/Rustの代替に出来ますか?
136 :デフォルトの名無しさん :2021/08/21(土) 08:47:50.25 ID:7GAoG1Iq.net Nimの実験的特徴 著者: アンドレアス・ルンプ バージョン: 1.5.1 http://nim-lang.github.io/Nim/manual_experimental.html
137 :デフォルトの名無しさん :2021/08/21(土) 22:20:40.33 ID:7GAoG1Iq.net Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 著者: アンドレアス・ルンプ バージョン: 1.5.1 http://nim-lang.github.io/Nim/manual_experimental.html Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
138 :デフォルトの名無しさん :2021/08/22(日) 08:04:08.99 ID:0Cz6ueFz.net Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 バージョン1.5.1 http://nim-lang.github.io/Nim/manual_experimental.html 第二プログラミング言語として Rust はオススメしません Nim をやるのです https://wolfbash.hateblo.jp/entry/2017/07/30/193412 Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
139 :デフォルトの名無しさん :2021/10/02(土) 12:07:48.96 ID:nsqRCPBa.net いつの間にかJetBrainsのプラグインが出てたね。今更気がついたよ これもかなり良いんじゃない? https://plugins.jetbrains.com/plugin/15128-nim
140 :デフォルトの名無しさん :2021/10/27(水) 21:47:06.11 ID:6tzLPjk/.net const str = [0, 1, 2, 3, 4] for i in 0||str.high: echo str[i] # nim --passC:"-fopenmp" --passL:"-fopenmp" c main.nim
141 :デフォルトの名無しさん :2021/10/28(木) 12:20:10.25 ID:hM84Yf/1.net >>92 Cの関数だけでもいろいろなコンパイラーにより規約が違うから、ダイナミックなリンケージを非常に素直に 書ける言語はこれくらいだと思う。rustもFFIで呼べるけど https://ja.wikipedia.org/wiki/ 呼出規約
142 :デフォルトの名無しさん :2021/10/29(金) 07:15:01.84 ID:pQzUwhXN.net Nim言語の開発者が$100k相当のBitcoinの寄付を受け取ったことが話題になっています。 www.reddit.com/r/programming/comments/qg2srd/nim_receives_100k_in_bitcoin_donations/
143 :デフォルトの名無しさん :2021/11/11(木) 20:14:42.95 ID:sY0aXUs3.net >>99 公式での処理系は基本的にはC/C++のトランスコンパラですがJSのトランスコンパラとしても動作します。 言語的には依存している分けではなく、gccやclangの最適化の恩恵を受けるためにあえてそのようにして いるようです。 また直接バイナリを吐き出す別のコンパイラarnetheduck/nlvmもあります。CrystalやRust、Swiftなどの LLVMバックエンドと同じです。コンパイル時間を短縮しllvmバイナリとして僅かに小さくなります。
144 :デフォルトの名無しさん :2021/11/22(月) 17:33:11.29 .net RustよりC++より速いんですか? 始めてみようかな
145 :デフォルトの名無しさん :2021/11/22(月) 20:36:44.15 ID:Jhs76KRN.net いろんな意味で早いと思う
146 :デフォルトの名無しさん :2021/12/17(金) 19:10:05.51 ID:XHqHc5Ln.net Version 1.6.2 released https://nim-lang.org/blog/2021/12/17/version-162-released.html
147 :デフォルトの名無しさん :2022/02/10(木) 01:19:39.92 ID:OVWQX5q0.net Version 1.6.4 released https://nim-lang.org/blog/2022/02/08/version-164-released.html
148 :デフォルトの名無しさん :2022/03/29(火) 04:55:27.78 ID:cbyFlglW.net 1.6.x系だけDLしようとするとマルウェア警告出るんだけどこれ大丈夫なんかね
149 :デフォルトの名無しさん :2022/03/29(火) 14:58:47.55 ID:mXbypgy+.net Nimの公式サイトから入手したものなら大丈夫なはず。 Nimに含まれている実行ファイルやNimでコンパイルしたプログラムがアンチウィルスソフトウェアに誤検出される問題は多くの人々から報告されている。 Nim言語でマルウェアを書いてる人がいるせいで誤検出さるようになったらしい。 アンチウィルスソフトウェアは悪いことしないプログラムでもマルウェアと似たようなビットパターンを見つけるとマルウェアとみなすっぽい。
150 :デフォルトの名無しさん :2022/03/29(火) 15:37:13.13 ID:j1iUrhcV.net >>149 なるほどね? サンキュー😉👍🎶
151 :デフォルトの名無しさん :2022/03/29(火) 20:54:07.21 ID:/9JyHlX1.net マルウェアと誤検知されたくなければnimで開発しない方が無難か。
152 :デフォルトの名無しさん :2022/03/31(木) 21:33:49.63 ID:3qPlBVYz.net 多くの人が使っているプログラムでない限り誤検出される可能性はある。 C++使ってたころにビルドが完了してすぐに誤検出されことがあったし。
153 :デフォルトの名無しさん :2022/03/31(木) 21:54:44.97 ID:EY1WgKK4.net そういうどっちもどっち論じゃないだろ。>>149 は有意に誤検知が多いと言っているように見えるが。
154 :デフォルトの名無しさん :2022/04/01(金) 11:47:01.52 ID:3pastURm.net Nimコンパイラ自体がマルウェア扱いだからな。
155 :デフォルトの名無しさん :2022/04/03(日) 00:58:55.13 ID:29whmEYr.net Nimを書き初めて1ヶ月...procの第一引数に設定したオブジェクトにprocがバインドされる謎構文にはたまげたけど書き味がいいし気に入ったなあ
156 :デフォルトの名無しさん :2022/04/03(日) 10:37:31.39 ID:Ng2sRKnM.net >>155 ちょっと誤解しているようだけど、a.foo()って書いたら自動的にfoo(a)に変換されるだけだよ。 第一引数の型にそのprocがバインドされるわけじゃないよ。 X.nim: type Foo* = object x: int proc foo*(f: Foo) = echo f Y.nim: import X proc bar*(): Foo = Foo() Z.nim: import Y #X.nimをインポートしてないとfoo()は呼べないよ bar().foo()
157 :デフォルトの名無しさん :2022/04/03(日) 10:53:58.62 ID:Ng2sRKnM.net Nimではプロシージャの呼び出し方が何通りかある。 echo("Hello") # Command invocation syntax echo "Hello" # Method call syntax "Hello".echo "Hello".echo() # Generalized raw string literals # 引数が文字列リテラル一個のときのみ echo"Hello"
158 :デフォルトの名無しさん :2022/04/03(日) 20:20:01.30 ID:29whmEYr.net >>156 なるほど👀 それでも変わった感じですよねえ
159 :デフォルトの名無しさん :2022/04/09(土) 11:44:54.12 ID:P+77Yson.net >157 Method call syntax はスマートだから他言語でも流行ってほしいところ。 特にPythonは真っ先に採用して欲しいわ。
160 :デフォルトの名無しさん :2022/04/22(金) 04:37:03.66 ID:Ov5wmYZH.net あまり何通りもあるのはperlみたいになりそうでよろしくないな。
161 :デフォルトの名無しさん :2022/05/05(木) 20:58:23.76 ID:Ofa1pfuz.net Version 1.6.6 released https://nim-lang.org/blog/2022/05/05/version-166-released.html
162 :デフォルトの名無しさん :2022/05/06(金) 17:32:07.42 ID:+sslkA2r.net >>161 急にコンパイルできなくなって困ってたら vccexe,exeがトロイ認定受けて削除されてた… MSはnimをトロイだとみなしてるのか
163 :デフォルトの名無しさん :2022/05/08(日) 11:28:42.79 ID:ttLKa+gZ.net >>162 前に一回同じ現象出たわ コンパイル失敗するしWindows Defenderはうるさいしで何かやらかしたかと思った
164 :デフォルトの名無しさん :2022/05/18(水) 23:08:10.33 ID:7sDXJn10.net ニンニン
165 :デフォルトの名無しさん :2022/05/26(木) 17:01:15.95 ID:DJotMe7OG Nim完全マーク説
166 :デフォルトの名無しさん :2022/06/01(水) 08:37:47.90 ID:DGVHmNlJx Nimをまともに使うならVersion 1.5.8 あたりまでしか入らん
167 :デフォルトの名無しさん :2022/06/14(火) 14:49:13.90 .net 二ムってドイツ製?
168 :デフォルトの名無しさん :2022/06/22(水) 00:08:54.72 ID:mbXzyoju.net Araqってたしか国籍は南米じゃなかったか
169 :デフォルトの名無しさん :2022/06/22(水) 00:28:49.96 ID:mbXzyoju.net >>167 すまんドイツ人だったわ 顔面からずっと南米の人だと思ってた
170 :デフォルトの名無しさん :2022/07/26(火) 18:12:34.65 ID:MxJrqhMY.net ニンニン
171 :デフォルトの名無しさん :2022/07/26(火) 18:15:36.24 ID:gc9s0ohk.net 浣腸
172 :デフォルトの名無しさん :2022/07/27(水) 03:59:11 ID:0dTQJF2a.net Aliasing restrictions in parameter passingかview typesが実装されればNimもRust並にメモリ安全になると思うんだけど。 みんなはどう思う? https://nim-lang.org/docs/manual_experimental.html#aliasing-restrictions-in-parameter-passing https://nim-lang.org/docs/manual_experimental.html#view-types
173 :デフォルトの名無しさん :2022/07/28(木) 11:23:58.38 ID:oB626eDW.net >>172 むしろ--mm:orcならRustよりNimのほうが循環もGCするだけメモリ安全だし、リリースビルドでオーバーフローチェックが意味不明にoffになり、言語仕様としてループindexにunsignedを使うRustのどこが安全なのかと小一時間。 まあNimでのdangerコンパイルと似てるし、構文上まだ危険な超絶ハック表現が出来てしまうので素人にはオススメ出来ない諸刃の剣。だけどsqlパッケージの文字列前提を絶対変えてほしい
174 :デフォルトの名無しさん :2022/07/28(木) 14:19:26.27 ID:1GWFUzAq.net RustのBorrow Checkerはメモリリークを防ぐものではないからね
175 :デフォルトの名無しさん :2022/07/29(金) 02:16:03.41 ID:jt8KW6vh.net nimの言語的とか技術的な弱点や欠点って何?
176 :デフォルトの名無しさん :2022/07/29(金) 03:05:46.34 ID:4AXwbrcj.net templateまたはmacroの第一引数がuntypedだとmethod call syntaxが使えない。 method call syntaxでgenerics parameterを指定するときにfoo.myproc[:int]()みたいな感じで[]の中の初めに':'を付けないといけない。method call syntaxを使わないときは':'は不要。 という感じでmethod call syntaxにちょっとした罠がある。
177 :デフォルトの名無しさん :2022/07/29(金) 12:18:00.08 ID:sEOGgaoM.net macroが全く別言語になってる錆やその他諸々よりも、ちゃんと言語の最小サブセットになってるからまだマシ
178 :デフォルトの名無しさん :2022/07/29(金) 13:08:45.89 ID:jt8KW6vh.net なるほど
179 :デフォルトの名無しさん :[ここ壊れてます] .net win10 x64 nim-1.6.6 x64 です (A) var hoge = newSeq[uint16](16) # hoge[...] に wchar_t の文字列 L'\x0' 終端がある (サロゲートとか無い状態で 4文字分) echo convert(cast[string](hoge[0..3]), "utf-8", "utf-16") (B) var fuga = newSeq[char](16) # fuga[...] に char の文字列 '\x0' 終端がある 4文字分 echo cast[string](fuga[0..3]) (B)の方は期待通り 4文字分出力されるのですが (A)の方はなぜか 2文字くらいで切れてしまいます echo convert(cast[string](hoge[0..7]), "utf-8", "utf-16") と修正すると 4文字出ましたが何か腑に落ちません
180 :デフォルトの名無しさん :2022/09/11(日) 06:48:19.18 ID:u4B58VWk.net >>179 そもそも何をしたいの? windowsで日本語を表示したいだけならutf8を使ってればOk デフォルトでNimのコマンドラインプログラムを実行するとchcp 65001コマンドを実行したときのようにコードページをutf8に変更される。 chcp 65001を実行してもちゃんと日本語が表示されるようにターミナルを設定しよう。 utf16なテキストをutf8に変換して表示したい場合はできるだけcast使わないようにコードを書こう。 castは危険なのでできるだけ使わないようにしよう。 (castはビットパターンが同じまま別の型と見なす変換なので実装詳細を知らずに使ってるとうまく動かない) 最初からstringに文字列を格納するようにするとか、ループで一文字づつstringにコピーすればcastは避けられると思う。
181 :デフォルトの名無しさん :2022/09/11(日) 15:33:59.58 ID:o5WJ0zmX.net 上の例とは若干違いますが var u16 = newSeq[uint16](8) for n in 0..7: u16[n] = cast[uint16](65 + n) u16[7] = 0 echo u16 # -> @[65, 66, 67, 68, 69, 70, 71, 0] echo convert(cast[string](u16), "utf-8", "utf-16") # -> ABCD let u8 = cast[ptr UncheckedArray[array[16, uint8]]](u16[0].addr)[0] echo u8 # -> [65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 0, 0] ABCD のところが ABCDEFG にならないのがなんでかなーというのも 同様の現象が原因だろうと思います
182 :デフォルトの名無しさん :2022/09/11(日) 15:42:19.33 ID:o5WJ0zmX.net echo convert("\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x00\x00", "utf-8", "utf-16") これは ABCDEFG と出力されます
183 :デフォルトの名無しさん :2022/09/11(日) 15:48:12.92 ID:o5WJ0zmX.net >>181 の例で var u16 = newSeq[uint16](16) と定義しておくと(他は変更無し)(後半は0で埋まってる) ABCDEFG と表示されます
184 :デフォルトの名無しさん :2022/09/11(日) 15:48:57.35 ID:o5WJ0zmX.net まあ cast に何を期待してるんだと言われればそれまでなんだと思いますが腑に落ちませんでした
185 :デフォルトの名無しさん :[ここ壊れてます] .net nimってIDEやデバッガは近いうちに計画されてるの? vscodeでもいいんだけど、ちゃんとしたデバッガは欲しいな 条件付きブレークポイントやコンテナの中身が見れる程度でいいんだが
186 :デフォルトの名無しさん :2022/09/11(日) 19:50:17.68 ID:6Wt0j/hc.net >>185 vscodeのプラグイン nimsaem.nimvscode + webfreak.debug ではだめか?
187 :デフォルトの名無しさん :2022/09/11(日) 22:55:03.70 ID:EVjHVTpm.net やっぱりその組み合わせか どうにも使いづらいんだよねぇ 言語仕様は理想に近いんでもっと流行ってほしいんだが、これまでの情勢からあまり期待できなさそうだな
188 :デフォルトの名無しさん :2022/09/12(月) 01:44:56.16 ID:I2SXXYSG.net >>184 seqをstringにcastしているけど、ちゃんとseqとstringの実装詳細、データ構造を理解した上で安全だという確証があってcast
189 :デフォルトの名無しさん :2022/09/12(月) 01:47:29.58 ID:I2SXXYSG.net >>184 seqをstringにcastしているけど、ちゃんとseqとstringの実装詳細、データ構造を理解した上で安全だという確証があってcastしてるの? そうでないならcast使うのはやめたほうがいいよ。
190 :デフォルトの名無しさん :2022/09/12(月) 02:10:20.86 ID:I2SXXYSG.net >>184 seqやstringのデータ構造を理解しcastが何をしているか理解すれば納得できると思うよ https://github.com/nim-lang/Nim/blob/devel/lib/system/seqs_v2.nim https://github.com/nim-lang/Nim/blob/devel/lib/system/strs_v2.nim そもそもseq[uint16]からstringへcastしてる時点でもうデタラメなんだよ。
191 :デフォルトの名無しさん :2022/09/12(月) 02:17:45.60 ID:I2SXXYSG.net >>185 NimにGDBでデバッグできるようにするプラグインが付属していて gdbでブレークポイントをおいたり変数の中身を表示したりできます。 https://internet-of-tomohiro.netlify.app/nim/gdb.ja.html
192 :デフォルトの名無しさん :2022/09/12(月) 20:00:29.06 ID:YXdRRv20.net >>181 >>183 var u16 = newString(16) for n in 0..7: u16[n * 2] = cast[char](65 + n); u16[n * 2 + 1] = '\0' u16[14] = '\0' echo u16 # -> A B C D E F G echo convert(u16, "utf-8", "utf-16") # -> ABCDEFG
193 :デフォルトの名無しさん :2022/09/12(月) 22:26:15.30 ID:I2SXXYSG.net >>192 castは極力使わないほうがいいのでビット演算使ってu16の値をcharに変換したほうがいいよ。 お手本コードを投稿しようとしたらcloudflareが悪意あるコードと勘違いしてブロックされた
194 :デフォルトの名無しさん :2022/09/12(月) 22:30:11.19 ID:I2SXXYSG.net こんな感じです let c=65u16 + n u16[n * 2] = char(c and 0xff'u16) u16[n * 2 + 1] = char(c shr 8)
111 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200
本文 スレッドタイトル 投稿者