nim

2018/03/01(木) 18:32:18.16ID:vh/yy2VS
https://nim-lang.org/
2022/09/11(日) 15:48:57.35ID:o5WJ0zmX
まあ cast に何を期待してるんだと言われればそれまでなんだと思いますが腑に落ちませんでした
2022/09/11(日) 19:01:47.42ID:EVjHVTpm
nimってIDEやデバッガは近いうちに計画されてるの?
vscodeでもいいんだけど、ちゃんとしたデバッガは欲しいな
条件付きブレークポイントやコンテナの中身が見れる程度でいいんだが
2022/09/11(日) 19:50:17.68ID:6Wt0j/hc
>>182

vscodeのプラグイン
nimsaem.nimvscode + webfreak.debug ではだめか?
2022/09/11(日) 22:55:03.70ID:EVjHVTpm
やっぱりその組み合わせか
どうにも使いづらいんだよねぇ
言語仕様は理想に近いんでもっと流行ってほしいんだが、これまでの情勢からあまり期待できなさそうだな
2022/09/12(月) 01:44:56.16ID:I2SXXYSG
>>181
seqをstringにcastしているけど、ちゃんとseqとstringの実装詳細、データ構造を理解した上で安全だという確証があってcast
2022/09/12(月) 01:47:29.58ID:I2SXXYSG
>>181
seqをstringにcastしているけど、ちゃんとseqとstringの実装詳細、データ構造を理解した上で安全だという確証があってcastしてるの?
そうでないならcast使うのはやめたほうがいいよ。
2022/09/12(月) 02:10:20.86ID:I2SXXYSG
>>181
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してる時点でもうデタラメなんだよ。
2022/09/12(月) 02:17:45.60ID:I2SXXYSG
>>182
NimにGDBでデバッグできるようにするプラグインが付属していて
gdbでブレークポイントをおいたり変数の中身を表示したりできます。
https://internet-of-tomohiro.netlify.app/nim/gdb.ja.html
2022/09/12(月) 20:00:29.06ID:YXdRRv20
>>178 >>180
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
2022/09/12(月) 22:26:15.30ID:I2SXXYSG
>>189
castは極力使わないほうがいいのでビット演算使ってu16の値をcharに変換したほうがいいよ。
お手本コードを投稿しようとしたらcloudflareが悪意あるコードと勘違いしてブロックされた
2022/09/12(月) 22:30:11.19ID:I2SXXYSG
こんな感じです
let c=65u16 + n
u16[n * 2] = char(c and 0xff'u16)
u16[n * 2 + 1] = char(c shr 8)
192デフォルトの名無しさん
垢版 |
2022/09/13(火) 11:55:15.89ID:gs7UQvs1
>>176
これ観ろ
https://khchen.github.io/winim/winstr.html
2022/09/13(火) 12:06:13.19ID:0kBS+x4w
言語仕様としてはモダンな言語の中で1番わかりやすいし
Rustで書くほどでもない軽いスクリプトとかならNimで良いんだけど流行らんなあ
やはり個人開発者の言語が流行ることはもうないのか
2022/09/13(火) 15:06:32.01ID:EXK746Ox
>>189 >>192
ありがとうございました
2022/09/13(火) 16:00:02.06ID:EXK746Ox
アク禁?
196デフォルトの名無しさん
垢版 |
2022/09/13(火) 16:03:11.36ID:EXK746Ox
var ws = newWideCString(8) # ws.len == 0
for n in 0..7: ws[n] = Utf16Char(65 + n)
# ws.len == 8
ws[7] = Utf16Char(0) # ws.len == 7
echo ws # ABCDEFG
と比べて
197デフォルトの名無しさん
垢版 |
2022/09/13(火) 16:05:36.05ID:EXK746Ox
なぜ拒否られる?
198デフォルトの名無しさん
垢版 |
2022/09/13(火) 16:06:26.54ID:EXK746Ox
驚き最小の法則ですね
var s = newString(8) # s.len == 8
for n in 0..7: s[n] = char(65 + n)
# s.len == 8
s[7] = '\0' # s.len == 8
echo s # ABCDEFG
199デフォルトの名無しさん
垢版 |
2022/09/13(火) 16:07:15.32ID:EXK746Ox
判った char だけダメなんね
200デフォルトの名無しさん
垢版 |
2022/09/13(火) 16:09:20.44ID:EXK746Ox
驚き最小の法則
var ws = newWideCString(8)
echo ws.len # -> 0
for n in 0..7: ws[n] = Utf16Char(65 + n)
echo ws.len # -> 8
ws[7] = Utf16Char(0)
echo ws.len # -> 7
echo ws # ABCDEFG
と比べて
var s = newString(8)
echo s.len # -> 8
for n in 0..7: s[n] = char(65 + n)
echo s.len # -> 8
s[7] = '\0'
echo s.len # -> 8
echo s # ABCDEFG
201デフォルトの名無しさん
垢版 |
2022/09/13(火) 16:11:32.87ID:EXK746Ox
インド人もびっくり
2022/09/13(火) 19:05:39.59ID:ketgm+4i
Win土人
Nim土人
2022/09/16(金) 10:37:25.88ID:8/QLgRNp
proc testfunc(x: cint): cint {.exportc, cdecl, dynlib.} =
return x
と描かれたソースを
nim c --app:lib -d:release hoge.nim
でコンパイルするとカレントディレクトリに hoge.dll が生成されて
import ctypes
ctypes.cdll.LoadLibrary('./hoge.dll').testfunc(123)
と実行出来たのですが
nim cpp --app:lib -d:release hoge.nim
でコンパイルするとカレントディレクトリに hoge.dll が生成されているはずなのに
LoadLibrary のところで
FileNotFoundError: Could not find module '(fullpath)\hoge.dll' (or one of its dependencies).
Try using the full path with constructor syntax.
と言われてしまいます
多分 or one of its dependencies が引っ掛かっているのではないかと思うのですが
何が足りないのでしょう? stdc++ の shared library ?
2022/09/16(金) 10:57:11.84ID:8/QLgRNp
libstdc++-6.dll
をコピーしてみましたがだめでした
205デフォルトの名無しさん
垢版 |
2022/09/16(金) 11:30:30.18ID:lbCTEBn9
nimpy
nimodule
2022/09/16(金) 13:53:03.44ID:kdRP0PjD
>>203
objdumpっていうプログラムを使えばどのdllを使っているか見れるよ。
使い方忘れたからググってね。
Nimをインストールしたときにgccもインストールしてればそのときにobjdumpも一緒にインストールされる。
他にも依存しているdllを見れるツールは色々あるけど
207デフォルトの名無しさん
垢版 |
2022/09/16(金) 16:11:50.14ID:fQY5NM7R
>>206
windows用にもobjdumpあんの?
2022/09/16(金) 16:24:53.42ID:8/QLgRNp
windows で nim 入れるときに一緒に入った mingw64 の中に objdump がありました
2022/09/16(金) 16:34:58.81ID:8/QLgRNp
>>206
objdump -p hoge.dll | findstr "dll"
で出て来たのが
libgcc_s_seh-1.dll
libstdc++-6.dll
kernel32.dll
msvcrt.dll
でした
libstdc++-6.dll
だけではなく
libgcc_s_seh-1.dll
も必要でした
無事動作しましたありがとう
2022/09/18(日) 09:51:11.78ID:KpBP36NG
>>200
https://github.com/tauplus/nim_doc_ja/blob/master/nim-meory_ja.md#%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9Strings-and-seqs
2022/09/22(木) 10:36:47.71ID:u9/ouAZs
import nimpy
import nimpy/py_lib as lib
initPyLibIfNeeded()
let wx = pyImport("wx")
let app = wx.App()
let frm = wx.Frame(nil, -1, "Hello, work!")
discard frm.Show()
discard app.MainLoop()

簡単杉感嘆
2022/09/22(木) 15:46:35.23ID:zq3yyQIu
こんなのや
https://github.com/khchen/wNim
こんなのも
https://github.com/simonkrauter/NiGui
213デフォルトの名無しさん
垢版 |
2022/09/23(金) 15:49:32.66ID:9eaiNZZz
セルフホスティングくらいでけるのか?
2022/09/23(金) 16:54:42.46ID:COcKyTVz
>>213
セルフホストってどういう意味で言ってるかは知らないけど
Nim forum自体がNimで実装されてるよ。
https://github.com/nim-lang/nimforum
2022/09/23(金) 20:37:31.28ID:vOu7CdIL
プログラミング言語でセルフホスティングっていったらコンパイラが自身の言語で実装できることだろうよ
しかしできたとしてトランスパイラをセルフホスティングと呼んでいいのか
2022/09/23(金) 22:00:58.25ID:U9mPo3hK
出力がC言語か機械語かの違いぐらいだしトランスパイラだとしても普通にセルフホスティングって呼ぶよ
2022/09/23(金) 22:27:48.78ID:COcKyTVz
https://github.com/nim-lang/Nim
ここにNim言語のコンパイラがあるけどソースコードはNim言語で書かれている。
gccなどのCコンパイラとgitがあればソースコードからビルドできる。
ソースコードからビルドするときはまず古いバージョンのNimコンパイラをC言語に変換したものをダウンロードしてCコンパイラでビルドする。
それでビルドしたNimコンパイラで最新のNimコンパイラをビルドする。
2022/09/24(土) 20:13:52.60ID:7pBAspe1
わりとどうでもいいな
2022/09/25(日) 02:56:32.67ID:z6wPsTgH
Cコンパイラは一般的にC言語で実装されているが、どうやってCコンパイラをビルドするのか
あらかじめビルド済みのCコンパイラを持ってきてビルドする
ではそのビルド済みのCコンパイラはどうやってビルドされたというのか
2022/09/25(日) 08:27:58.95ID:bk7Mey46
たぶん世界で最初のC言語はアセンブリかB言語かフォートランか何か別の言語で書かれていたんじゃないの?
221デフォルトの名無しさん
垢版 |
2022/09/26(月) 14:35:28.98ID:heiSJ5NK
BigBangは未だ仮説だ
222デフォルトの名無しさん
垢版 |
2022/09/28(水) 12:46:44.72ID:bM9/UxvQ
toSeq(0..360|24).map(rad)
と描くと
Error: type mismatch: got <SteppedSlice>
と言われて怒られたので
toSeq(0..360).filter(x => x mod 24 == 0).map(rad)
で描き治したら一応動く訳だが
0..360|24
観たいに描く方法は?
2022/09/28(水) 13:40:07.41ID:tqdPdMIm
iterator `|`(x: HSlice; y: int): int =
みたいな演算子のイテレータを定義すればいいじゃん。
2022/09/28(水) 17:12:46.81ID:XnHyDYU1
nim 1.6.8 出た
225デフォルトの名無しさん
垢版 |
2022/09/29(木) 21:45:04.30ID:9HIV6ABQ
ウィ
226デフォルトの名無しさん
垢版 |
2022/10/02(日) 11:50:55.49ID:tLgfuLpM
>>223
iterator items(s: SteppedSlice): int =
var c = s.a
while c <= s.b:
yield c
c += s.step

を定義したらイケました
有賀豚
227デフォルトの名無しさん
垢版 |
2022/10/16(日) 04:20:39.65ID:ccy9anmS
ニンニン
228デフォルトの名無しさん
垢版 |
2022/10/22(土) 14:42:48.48ID:Q+2x5vm1
本日のNimConf2022期待age
2022/11/02(水) 12:51:11.01ID:VT3BATxp
1,2ヶ月くらい前に
Nim言語のマニュアル日本語訳がOSDNのページにアップされていて
これで5年後には結構人気が出るかもと喜んでいたら
突然ページが消滅してショックだった

キャッシュを探したけど発見できないので
コピー持ってる人がいたらどこかにアップしてもらえらばありがたいです
(ライセンス上問題が無ければですが)
2022/11/02(水) 22:26:34.03ID:AEY2Eek1
古いキャッシュならInternet Archiveにあった
https://web.archive.org/web/20201128232605/http://nim-lang-081.osdn.jp/
https://web.archive.org/web/20200928154858/http://nim-lang-081.osdn.jp/docs/manual.html

まあキャッシュ古すぎて更新追いついてないけど
2022/11/02(水) 22:33:40.08ID:AEY2Eek1
https://ja.osdn.net/users/megumi_engines/projects/
このひとがオーナーになってるプロジェクトの1つみたいだけど、Twitterのアカウントも消えちゃってるね
プライベートが忙しくなったのかな
232デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:08:48.38ID:lETVCa2o
Last Update: 2022-09-21 01:12
Nim プログラミング言語 - 非公式日本語版 (翻訳活動終了)に関する活動はすべて終了しました。リポジトリの再公開予定はありません。

理由はよう判らん
githubにfork無かったかな
2022/11/04(金) 07:27:29.10ID:7DKhUjkg
日本語訳マニュアルの代わりになるかどうかはわからんけど
amazonで日本語のNim言語の書籍が売られてるよ。
234デフォルトの名無しさん
垢版 |
2022/11/05(土) 00:35:21.38ID:mvfmSa9B
当時高校生の描いたやつか
CやC++との連携について
一行しか描かれてなかったな
235デフォルトの名無しさん
垢版 |
2022/11/06(日) 13:47:02.47ID:4CeLTSQg
c2nim にがっかり感なんだけど
こんなもん?
それとも使い方間違ってる?
期待し過ぎ?
2022/11/06(日) 16:29:46.57ID:zKDylNc8
単純化した具体例がないとなんとも
2022/11/06(日) 16:42:07.10ID:06z0Icrt
わかっているのかもしれないけど、c2nimはどんなC言語のコードもNim言語に変換するものではない。C言語ライブラリをNim言語から使うためのバインディングをCのヘッダーファイルから生成するツールみたいなものだ。
c2nimに似たことができるこんなツールもあるよ。
https://github.com/PMunch/futhark
2022/11/07(月) 12:40:52.04ID:1sAmX+SP
>>230
全く使えないキャッシュだな
2022/11/07(月) 12:44:41.58ID:1sAmX+SP
>>229
3年前の nim 1.4.0だけど Nim日本語マニュアル
https://github.com/tauplus/nim_doc_ja
240デフォルトの名無しさん
垢版 |
2022/11/07(月) 13:21:56.37ID:V8od12Ai
ダメだこりゃ
みんなでzigに移動しよう
241デフォルトの名無しさん
垢版 |
2022/11/07(月) 14:15:04.63ID:xn4jxoWB
いーんだよ グリーンだよ
242デフォルトの名無しさん
垢版 |
2022/11/08(火) 12:57:20.87ID:CnIxTlte
template hoge(fuga: string): string =
fmt"{fuga}"

観たいなときに fuga が undeclared になるんだけどなんで?
2022/11/08(火) 13:05:00.14ID:CnIxTlte
>>237
なるほど良さげ

Sounds great, what's the catch?
Futhark is currently in an alpha state.
It currently doesn't support C++, and it doesn't understand things like function-style macros.
It might also mess up on definition types I haven't seen yet in the small handful of libraries I've tested it against.
All of these things are things I hope to get fixed up.
244デフォルトの名無しさん
垢版 |
2022/11/08(火) 13:15:11.71ID:CnIxTlte
>>242 自己レス
出来ました本当にありがとうございました
template hoge(fuga: string): string =
block:
let injectedfuga {.inject.} = fuga
fmt"{injected_fuga}"
https://qiita.com/momeemt/items/000d1f6c384f4f00e103
2022/11/08(火) 18:53:20.46ID:nCLZIP1Q
>>244
それは公式ドキュメントのここに書いてあるじゃないですか。
https://nim-lang.org/docs/strformat.html#limitations
2022/11/08(火) 19:07:14.22ID:2BJbmpY0
Pythonスレでテンプレになってる内容をNim用に変更したので
次スレからはテンプレにしてください

-----ここから

Nimの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://glot.io/new/nim    結構使える。
ttps://play.nim-lang.org/   本家。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。

-----ここまで
247デフォルトの名無しさん
垢版 |
2022/11/09(水) 22:27:24.03ID:5vHWfdFN
判り初めた my Revolution
2022/11/10(木) 13:14:50.85ID:JZ2iIpp8
試してみた
本家 https://play.nim-lang.org/#ix=4ftO
スッキリ https://glot.io/snippets/gf9x33imvc
ダメぽよ(実行時エラー?) https://ideone.com/9BYjHA (たまに死ぬよねこのサイト)
貼るだけ? https://pastebin.com/07h9Zjrx

ideoneがダメなのはバージョンの問題?
2022/11/10(木) 13:25:08.92ID:JZ2iIpp8
これで逝けました
https://ideone.com/HBEKZu
pragmaのNimNodeを指定出来なかったらしい
ideone の Nim は (nim 0.19.4)
2022/11/10(木) 14:16:57.58ID:JDmtuJFO
https://wandbox.org/
2022/11/10(木) 15:04:27.30ID:JDmtuJFO
↑のWandboxでも最新の安定版Nimを使えるしコードを共有できる。
2022/11/10(木) 15:55:36.21ID:hnXF7Xx/
ここまでのまとめ
ttps://glot.io/new/nim    結構使える
ttps://wandbox.org/ 最新のNim使える
ttps://play.nim-lang.org/  本家
ttp://pastebin.com/      ソース貼り付けのみ
253デフォルトの名無しさん
垢版 |
2022/11/10(木) 16:23:45.65ID:j+QMfGd1
やっぱオフサイドスタイルはクソかよ。
254デフォルトの名無しさん
垢版 |
2022/11/10(木) 16:52:41.86ID:JZ2iIpp8
>>250
wandboxだと(っていうかそれ以外でもかもだけど)
実行ボタンの上に
$ nim c ./prog.nim
って表示されてて c を cpp に変更したくても出来ない
左上の「コンパイルオプション」らしい枠に cpp を入れると
$ nim c ./prog.nim cpp
になったわ
2022/11/10(木) 20:00:36.53ID:JDmtuJFO
>>254
確かにwandboxだとnim cppでコンパイルできないっぽいね
もしかしたらgithubのwandboxリポジトリに要望を出せば対応してくれるかもしれない。もしくは自分で機能を実装してpull requestを出すか
256デフォルトの名無しさん
垢版 |
2022/11/11(金) 10:16:18.33ID:8dOB0zbX
ここは未完成なのかな
日本語マニュアルっぽいけど
https://2vg.github.io/Nim-World/
257デフォルトの名無しさん
垢版 |
2022/11/12(土) 14:40:51.16ID:OIoQvXCU
自分で育てる感覚楽しいですね
2022/11/15(火) 13:26:12.68ID:QGmQMBHU
type
Hoge* = object
fuga*: int
としないで
type
HogeObj* = object
fuga*: int
Hoge* = ref HogeObj
とするのは必須?習慣?
前者のデメリットは DeepCopy だというのは判るのですが
毎回後者を使った方が良い?
259デフォルトの名無しさん
垢版 |
2022/11/16(水) 09:07:52.80ID:qCq9+PtI
{.byref.} じゃね?
260sage
垢版 |
2022/11/16(水) 13:30:51.35ID:4BSq9VuL
横からだが
>>259 のbyrefと >>258 は完全に等価?
261デフォルトの名無しさん
垢版 |
2022/11/16(水) 15:57:06.50ID:z+sJwdsY
proc 読んだとき ref のフリをする fake が 259
2022/11/16(水) 18:16:18.08ID:kOxph/zs
ref objectは一つのオブジェクトを複数のオブジェクトから参照したいときや継承使ってオブジェクト指向なコードを書くときに必要となる。
それ以外の場合はrefのついていないobjectのほうが速くなることが多い。
ref型は常にヒープに確保されポインタ経由でアクセスされるけどobjectだとスタックに確保できるしポインタで間接的に参照する必要もない。
object型のseqだとメモリ上に連続して確保されるけどref object型のseqにするとメモリ上に連続して確保されるとは限らないからキャッシュミスが起きやすくなる。
ある程度大きなobjectはプロシージャに渡すときに自動的にポインタ経由で渡されるからコピーのコストが問題になることがあんまりないと思うよ。
C++で言えばobjectはstructをそのまま使っている感じでref objectはstructをstd::shared_ptrごしに使っている感じ。
2022/11/17(木) 09:41:27.60ID:V4QZv0Fq
proc incx(i: int): int =
let j = i
{.emit: "++j;".}
result = j

echo incx(5)

https://glot.io/snippets/gfgq0p65a6
let で定義された変数も書き換え可能なんですね素敵ですね
2022/11/17(木) 09:41:55.68ID:V4QZv0Fq
>>259-260
全く別物
2022/11/17(木) 09:45:16.34ID:V4QZv0Fq
>それ以外の場合はrefのついていないobjectのほうが速くなることが多い。

これはどうかなぁ
遅くなることの方が多いと思うが
2022/11/17(木) 10:53:32.89ID:hYmfXxMP
>>265
どうしてrefのついてないobjectのほうが遅くなる場合が多いの?
2022/11/17(木) 14:28:18.19ID:hYmfXxMP
>>263
emit pragma使っているんだからNimの安全性は無効になる。
rustでunsafeを使うようなもの。
2022/11/17(木) 15:18:49.83ID:fBlcqeZM
>>262
>ある程度大きなobjectはプロシージャに渡すときに自動的にポインタ経由で渡されるから

ってことは {.byref.} 描く必要無い?
2022/11/17(木) 17:33:28.89ID:7oSKGzG8
>>268
自動でやるのは関数の引数にオブジェとを渡した時だから
それ以外にコピーが頻繁に発生しないなら
byrefいらないんじゃね?
2022/11/17(木) 18:51:38.00ID:hYmfXxMP
>>268
https://nim-lang.org/docs/manual.html#procedures-var-parameters

var parameters are never necessary for efficient parameter passing. Since non-var parameters cannot be modified the compiler is always free to pass arguments by reference if it considers it can speed up execution.
って書いてあります。
2022/11/17(木) 19:03:15.70ID:hYmfXxMP
>>268
https://nim-lang.org/docs/manual.html#foreign-function-interface-byref-pragma

Nim manualではbyref pragmaがForeign function interfaceの章の下にある。
つまりbyref pragmaはC/C++の関数に引数をポインタ渡ししなきゃいけないときに使うもの。
それ以外のときに使う必要性はほぼ無いってこと。
2022/11/17(木) 21:39:23.14ID:ArWNCDPA
>>265
そんな速度差気付くことある?
273デフォルトの名無しさん
垢版 |
2022/11/18(金) 05:58:57.10ID:AmxJEdx7
君らスタックの消費は気にならんのけ?
2022/11/18(金) 06:16:37.43ID:IYaGyAsl
>>273
10kバイト以上のでかいobjectをたくさん使うとかならスタックを使わないようにref objectにしてヒープに確保してもいいと思う。
けどそんなにでかいobject型のローカル変数をたくさん使うことってあんまりないきがするけど。
275デフォルトの名無しさん
垢版 |
2022/11/18(金) 09:39:59.23ID:IJuokuF8
たとえば
https://qiita.com/dumblepy/items/8d13592d6760d0155d89
>オブジェクトの宣言にはref objectを使います。
>Nimでは関数の引数に入れられた変数の容量に応じてコンパイラが自動で値渡し/参照渡しを調節しますが、
>これは挙動の予測が付かずバグの原因になりえます。
>ref objectでオブジェクトを宣言していれば必ず参照渡しになるので、
>アプリケーション開発ではこちらに統一しましょう。

みたいなことが
276デフォルトの名無しさん
垢版 |
2022/11/18(金) 10:17:44.40ID:IJuokuF8
問題無い訳ではないとも
https://flat-leon.はてぶろ.com/entry/nim_arg_pass
バージョンや記事の年代に気を付けないといかんのかね
2022/11/18(金) 11:42:20.25ID:IJuokuF8
古いけどここの議論は判り易い
https://forum.nim-lang.org/t/1207
2022/11/18(金) 11:48:22.19ID:ygRIcUIa
>>270
それは var の説明であって ref の説明ではないですね
2022/11/18(金) 12:02:19.50ID:IYaGyAsl
>>275
>>278
refのついた型またはvar引数は常に引数を参照渡し(ポインタのコピー)する。
refやvarがついてない場合は引数のサイズにあわせてコピー渡しか参照渡しになるが、どちらにせよプロシージャ内で引数を変更するのは禁止
2022/11/18(金) 12:10:00.28ID:IYaGyAsl
だからデフォルトの引数の渡し方でそれがコピー渡しになろうが参照渡しになろうがそれで挙動が変わったりバグの温床になることはない。
ただしaddrとかemit, Assembler statementなどのNimが安全性を保証してない機能を使う場合は例外だ。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況