nim

2018/03/01(木) 18:32:18.16ID:vh/yy2VS
https://nim-lang.org/
102デフォルトの名無しさん
垢版 |
2020/04/07(火) 05:01:02.90ID:FPXvnSDp
逆にマクロの完成度高い言語ってなに?
2020/04/07(火) 07:46:31.57ID:CJzGmfMl
common LISP
2020/04/07(火) 14:00:10.17ID:izX7gbjy
Schemeは?
2020/04/07(火) 19:47:26.61ID:fJ0U2d01
nimのマクロは完成度高いと思う。でも完成度高いマクロという存在自体が糞。
106デフォルトの名無しさん
垢版 |
2020/04/08(水) 12:06:55.28ID:lWfV0IAd
MACRO-80
2020/04/10(金) 23:13:42.18ID:mN42vwgW
>>102
糞マクロを褒めてるのであって
逆じゃないと思うんだが
2020/04/10(金) 23:14:33.21ID:mN42vwgW
>>101>>105が同じってことだろ
common lispなんてはるかに糞になるし
2020/04/10(金) 23:15:34.44ID:mN42vwgW
マクロならrustのが定評あると思うが
2020/09/19(土) 22:27:13.04ID:9NR8PjVh
小数の配列作りたいんだけどやり方教えてください。
[0.0, 0.1, .. 0.9, 1.0] みたいな。

Python なら hoge = [i/10 for i in range(11)] かな。気持ち悪いけど。
2020/09/22(火) 12:29:56.17ID:w8JrpHTT
lc[i*0.1 | i<-0..10 ]
112デフォルトの名無しさん
垢版 |
2021/01/10(日) 21:59:51.09ID:HIznKotv
>>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
113デフォルトの名無しさん
垢版 |
2021/01/10(日) 22:14:35.92ID:HIznKotv
付け加えるとHaskellみたいなproc() = の宣言が微妙キモいけどfunc(): T =があるから、まあ妥当だね
rubyの様なreturnを書かないのは良い。result=xは便利だけど微妙....でそこまでやるならOptionと
Future、そして例外を統一して欲しかったな。
普通にtry: except: finally:があるのも点数が高い。Araqが言う様に例外と(Label)goto based exceptは
ほとんど同じ何だから、今どきの言語が例外が無いのはおかしい。まあ他を悪く言う気はないけど
Goの様に意味合い的に同じでfinallyに対応するdeferがあるのも良いよね
114デフォルトの名無しさん
垢版 |
2021/01/12(火) 15:33:30.76ID:LUlB/OIG
超時空ロングパス
115デフォルトの名無しさん
垢版 |
2021/01/12(火) 15:57:17.72ID:kyPiY518
この言語がJsと比較で優れてる点ってあるの?
116デフォルトの名無しさん
垢版 |
2021/01/13(水) 08:29:44.80ID:oKh8381v
JavaScript?であれば、JavaScriptはECMAScriptのバージョンとともに型無しのダックタイプから
クラス定義で見られるように型を導入して大規模コードを書く際に静的な安全性を求めてきた、
言語的な特徴でもあった動的なメソッド上書きやapply/callは悪とみなされつつ、改良が進む。
TypeScriptもその特徴であろう、altJSあるいはJSX派生と呼ばれる一種の方言が多量に誕生した
一方でJavaScriptの遅さや1言語依存からwasmが考え出されて多くのコンパイラでwasm開発が
できるようになった。Nimも例に漏れずJSバックエンド及びwasmコンパイルが可能である。
Rustもwasm開発はそうだがJSバックエンドは無い、Goもwasmは出来るがサイズが大きい
NimはGoに比べても型チェックが厳しい、Rustはそれに借用いわゆるボローチェックがそれに
加わるRustもそうだが型安全性はばつぐんだ
117デフォルトの名無しさん
垢版 |
2021/01/14(木) 18:15:15.39ID:ZgCcmsal
jsって割と底辺だと思うから
Nimはそれより上だろ
118デフォルトの名無しさん
垢版 |
2021/02/25(木) 19:45:58.25ID:twDFYCAL
1.4.4 age
119デフォルトの名無しさん
垢版 |
2021/04/17(土) 20:22:19.25ID:f1G9K9An
1.4.6 age
2021/04/30(金) 20:42:36.52ID:+hB3gYz3
Windows defenderでウイルス判定される
2021/05/01(土) 12:24:15.54ID:afQILYPs
それはどうしようもない
https://forum.nim-lang.org/t/7830
122デフォルトの名無しさん
垢版 |
2021/05/10(月) 13:57:34.01ID:FH4+0Y9S
頼むからもう少し流行ってください。Dropトレイト、Rcトレイトと戯れてあいつのコードを直したくない
123デフォルトの名無しさん
垢版 |
2021/05/10(月) 15:07:45.08ID:lCZGOQhN
明日に向かって吠えろ
2021/05/13(木) 14:29:40.54ID:pHijDXLB
Software Design に記事持ち込め
125デフォルトの名無しさん
垢版 |
2021/05/15(土) 12:35:34.04ID:eYtIld1h
https://www.akiradeveloper.com/post/give-up-nim/
126デフォルトの名無しさん
垢版 |
2021/05/19(水) 07:49:19.67ID:mvJC2+U+
2015年2月なんて大昔だろ…Version 0.11頃の話、貼る奴w
127デフォルトの名無しさん
垢版 |
2021/05/19(水) 07:53:15.04ID:mvJC2+U+
間違えた。
2月だから0.11さえ出てないわ、0.10.2…
128デフォルトの名無しさん
垢版 |
2021/05/26(水) 22:06:31.04ID:5a/xy4zx
>>120-122
バージョン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では発生しないはずです。
129デフォルトの名無しさん
垢版 |
2021/06/24(木) 16:12:27.31ID:IeJQfUil
なんか結局流行らなかったな
2019ごろはちょっと来そうな雰囲気出してたのに
130デフォルトの名無しさん
垢版 |
2021/06/24(木) 16:13:02.76ID:IeJQfUil
今でも一番書いてて気持ちいい言語ではあるけど
131デフォルトの名無しさん
垢版 |
2021/06/24(木) 17:25:26.02ID:70oiT5zZ
Luaといい勝負?
132デフォルトの名無しさん
垢版 |
2021/06/27(日) 14:10:40.69ID:YLAmOs9U
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++そのもの、限りなく抑え込まれたタイプ量。
2021/06/27(日) 20:05:41.95ID:ytkGpeVG
そんなにヒドいかな?
134デフォルトの名無しさん
垢版 |
2021/08/21(土) 08:23:43.68ID:7GAoG1Iq
Nimにガベージコレクション(GC)有りは事実なのですが、
NimはオプションでGC無しにできるので、
Nimバージョン:1.5.1でRustのボローチェッカー
に似た「View types」が実装されれば
GC無しで、View types参照の有効性を検証する
ことによってメモリ安全性を保証しつつ高速化して
C/C++/Rustの代替に出来ますか?
135デフォルトの名無しさん
垢版 |
2021/08/21(土) 08:47:50.25ID:7GAoG1Iq
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
136デフォルトの名無しさん
垢版 |
2021/08/21(土) 22:20:40.33ID:7GAoG1Iq
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 は我々に教えてくれます
137デフォルトの名無しさん
垢版 |
2021/08/22(日) 08:04:08.99ID:0Cz6ueFz
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 は我々に教えてくれます
2021/10/02(土) 12:07:48.96ID:nsqRCPBa
いつの間にかJetBrainsのプラグインが出てたね。今更気がついたよ
これもかなり良いんじゃない?
https://plugins.jetbrains.com/plugin/15128-nim
139デフォルトの名無しさん
垢版 |
2021/10/27(水) 21:47:06.11ID:6tzLPjk/
const str = [0, 1, 2, 3, 4]
for i in 0||str.high: echo str[i]
# nim --passC:"-fopenmp" --passL:"-fopenmp" c main.nim
140デフォルトの名無しさん
垢版 |
2021/10/28(木) 12:20:10.25ID:hM84Yf/1
>>92
Cの関数だけでもいろいろなコンパイラーにより規約が違うから、ダイナミックなリンケージを非常に素直に
書ける言語はこれくらいだと思う。rustもFFIで呼べるけど
https://ja.wikipedia.org/wiki/呼出規約
2021/10/29(金) 07:15:01.84ID:pQzUwhXN
Nim言語の開発者が$100k相当のBitcoinの寄付を受け取ったことが話題になっています。
www.reddit.com/r/programming/comments/qg2srd/nim_receives_100k_in_bitcoin_donations/
142デフォルトの名無しさん
垢版 |
2021/11/11(木) 20:14:42.95ID:sY0aXUs3
>>99
公式での処理系は基本的にはC/C++のトランスコンパラですがJSのトランスコンパラとしても動作します。
言語的には依存している分けではなく、gccやclangの最適化の恩恵を受けるためにあえてそのようにして
いるようです。
また直接バイナリを吐き出す別のコンパイラarnetheduck/nlvmもあります。CrystalやRust、Swiftなどの
LLVMバックエンドと同じです。コンパイル時間を短縮しllvmバイナリとして僅かに小さくなります。
2021/11/22(月) 17:33:11.29
RustよりC++より速いんですか? 始めてみようかな
2021/11/22(月) 20:36:44.15ID:Jhs76KRN
いろんな意味で早いと思う
2021/12/17(金) 19:10:05.51ID:XHqHc5Ln
Version 1.6.2 released
https://nim-lang.org/blog/2021/12/17/version-162-released.html
2022/02/10(木) 01:19:39.92ID:OVWQX5q0
Version 1.6.4 released
https://nim-lang.org/blog/2022/02/08/version-164-released.html
2022/03/29(火) 04:55:27.78ID:cbyFlglW
1.6.x系だけDLしようとするとマルウェア警告出るんだけどこれ大丈夫なんかね
2022/03/29(火) 14:58:47.55ID:mXbypgy+
Nimの公式サイトから入手したものなら大丈夫なはず。
Nimに含まれている実行ファイルやNimでコンパイルしたプログラムがアンチウィルスソフトウェアに誤検出される問題は多くの人々から報告されている。
Nim言語でマルウェアを書いてる人がいるせいで誤検出さるようになったらしい。
アンチウィルスソフトウェアは悪いことしないプログラムでもマルウェアと似たようなビットパターンを見つけるとマルウェアとみなすっぽい。
2022/03/29(火) 15:37:13.13ID:j1iUrhcV
>>148
なるほどね?
サンキュー😉👍🎶
2022/03/29(火) 20:54:07.21ID:/9JyHlX1
マルウェアと誤検知されたくなければnimで開発しない方が無難か。
2022/03/31(木) 21:33:49.63ID:3qPlBVYz
多くの人が使っているプログラムでない限り誤検出される可能性はある。
C++使ってたころにビルドが完了してすぐに誤検出されことがあったし。
2022/03/31(木) 21:54:44.97ID:EY1WgKK4
そういうどっちもどっち論じゃないだろ。>>148は有意に誤検知が多いと言っているように見えるが。
2022/04/01(金) 11:47:01.52ID:3pastURm
Nimコンパイラ自体がマルウェア扱いだからな。
2022/04/03(日) 00:58:55.13ID:29whmEYr
Nimを書き初めて1ヶ月...procの第一引数に設定したオブジェクトにprocがバインドされる謎構文にはたまげたけど書き味がいいし気に入ったなあ
2022/04/03(日) 10:37:31.39ID:Ng2sRKnM
>>154
ちょっと誤解しているようだけど、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()
2022/04/03(日) 10:53:58.62ID:Ng2sRKnM
Nimではプロシージャの呼び出し方が何通りかある。
echo("Hello")
# Command invocation syntax
echo "Hello"
# Method call syntax
"Hello".echo
"Hello".echo()
# Generalized raw string literals
# 引数が文字列リテラル一個のときのみ
echo"Hello"
2022/04/03(日) 20:20:01.30ID:29whmEYr
>>155
なるほど👀
それでも変わった感じですよねえ
2022/04/09(土) 11:44:54.12ID:P+77Yson
>156
Method call syntax はスマートだから他言語でも流行ってほしいところ。
特にPythonは真っ先に採用して欲しいわ。
159デフォルトの名無しさん
垢版 |
2022/04/22(金) 04:37:03.66ID:Ov5wmYZH
あまり何通りもあるのはperlみたいになりそうでよろしくないな。
2022/05/05(木) 20:58:23.76ID:Ofa1pfuz
Version 1.6.6 released
https://nim-lang.org/blog/2022/05/05/version-166-released.html
2022/05/06(金) 17:32:07.42ID:+sslkA2r
>>160
急にコンパイルできなくなって困ってたら
vccexe,exeがトロイ認定受けて削除されてた…
MSはnimをトロイだとみなしてるのか
2022/05/08(日) 11:28:42.79ID:ttLKa+gZ
>>161
前に一回同じ現象出たわ
コンパイル失敗するしWindows Defenderはうるさいしで何かやらかしたかと思った
163デフォルトの名無しさん
垢版 |
2022/05/18(水) 23:08:10.33ID:7sDXJn10
ニンニン
2022/06/14(火) 14:49:13.90
二ムってドイツ製?
2022/06/22(水) 00:08:54.72ID:mbXzyoju
Araqってたしか国籍は南米じゃなかったか
2022/06/22(水) 00:28:49.96ID:mbXzyoju
>>164
すまんドイツ人だったわ
顔面からずっと南米の人だと思ってた
167デフォルトの名無しさん
垢版 |
2022/07/26(火) 18:12:34.65ID:MxJrqhMY
ニンニン
168デフォルトの名無しさん
垢版 |
2022/07/26(火) 18:15:36.24ID:gc9s0ohk
浣腸
2022/07/27(水) 03:59:11.24ID:0dTQJF2a
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
2022/07/28(木) 11:23:58.38ID:oB626eDW
>>169
むしろ--mm:orcならRustよりNimのほうが循環もGCするだけメモリ安全だし、リリースビルドでオーバーフローチェックが意味不明にoffになり、言語仕様としてループindexにunsignedを使うRustのどこが安全なのかと小一時間。
まあNimでのdangerコンパイルと似てるし、構文上まだ危険な超絶ハック表現が出来てしまうので素人にはオススメ出来ない諸刃の剣。だけどsqlパッケージの文字列前提を絶対変えてほしい
2022/07/28(木) 14:19:26.27ID:1GWFUzAq
RustのBorrow Checkerはメモリリークを防ぐものではないからね
172デフォルトの名無しさん
垢版 |
2022/07/29(金) 02:16:03.41ID:jt8KW6vh
nimの言語的とか技術的な弱点や欠点って何?
2022/07/29(金) 03:05:46.34ID:4AXwbrcj
templateまたはmacroの第一引数がuntypedだとmethod call syntaxが使えない。
method call syntaxでgenerics parameterを指定するときにfoo.myproc[:int]()みたいな感じで[]の中の初めに':'を付けないといけない。method call syntaxを使わないときは':'は不要。
という感じでmethod call syntaxにちょっとした罠がある。
2022/07/29(金) 12:18:00.08ID:sEOGgaoM
macroが全く別言語になってる錆やその他諸々よりも、ちゃんと言語の最小サブセットになってるからまだマシ
175デフォルトの名無しさん
垢版 |
2022/07/29(金) 13:08:45.89ID:jt8KW6vh
なるほど
176デフォルトの名無しさん
垢版 |
2022/09/10(土) 16:11:58.36ID:VwPQQEZG
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文字出ましたが何か腑に落ちません
2022/09/11(日) 06:48:19.18ID:u4B58VWk
>>176
そもそも何をしたいの?
windowsで日本語を表示したいだけならutf8を使ってればOk
デフォルトでNimのコマンドラインプログラムを実行するとchcp 65001コマンドを実行したときのようにコードページをutf8に変更される。
chcp 65001を実行してもちゃんと日本語が表示されるようにターミナルを設定しよう。

utf16なテキストをutf8に変換して表示したい場合はできるだけcast使わないようにコードを書こう。
castは危険なのでできるだけ使わないようにしよう。
(castはビットパターンが同じまま別の型と見なす変換なので実装詳細を知らずに使ってるとうまく動かない)
最初からstringに文字列を格納するようにするとか、ループで一文字づつstringにコピーすればcastは避けられると思う。
2022/09/11(日) 15:33:59.58ID:o5WJ0zmX
上の例とは若干違いますが
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 にならないのがなんでかなーというのも
同様の現象が原因だろうと思います
2022/09/11(日) 15:42:19.33ID:o5WJ0zmX
echo convert("\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x00\x00", "utf-8", "utf-16")
これは
ABCDEFG
と出力されます
2022/09/11(日) 15:48:12.92ID:o5WJ0zmX
>>178 の例で
var u16 = newSeq[uint16](16)
と定義しておくと(他は変更無し)(後半は0で埋まってる)
ABCDEFG
と表示されます
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
インド人もびっくり
レスを投稿する

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

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