2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

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
名前: E-mail (省略可) :

read.cgi ver.24052200