Guild icon
swift-developers-japan
main / swift-contrib
OSS Swiftに関する相談所
Avatar
Swift がオープンソースになってしばらく経ちます。 コンパイラや標準ライブラリの開発に手を出してみたいけど、リポジトリを落とした後どうしていいかわからない!という方のために、まずは開発環境の構築方法をご紹介します。基本的には[RE...
omochimetaru 12/27/2017 1:17 PM
Avatar
作りました。
👀 3
😄 3
❤ 6
💯 4
1:21 PM
あ〜 xcodeproj 欲しいだけのときは --skip-build すればよかったの忘れてた。 (edited)
Avatar
AをやるためにBを調べてBを動かすためにCを追いかけて・・・ みたいな (edited)
5:14 AM
ここに表示されないのなんでだろ
5:15 AM
https://github.com/apple/swift/pulse こっちにはちゃんと出るのに。
swift - The Swift Programming Language
Avatar
たぶん、全期間の表示対象者からの絞り込みなのかと思います。
Avatar
あ!なるほど!
5:16 AM
100位の人が19コミットだから、20コミットになったらまた見てみよう。
Avatar
以前、Gardening で何度か Contribute させていただいたのですが、その時はじめて「Gardening」という言葉を知ったのでした https://github.com/apple/swift/pulls?q=gardening+is%3Aopen
swift - The Swift Programming Language
6:37 AM
Gardening という言葉は、「庭いじり/草むしり」的な文脈で、タイポの修正やデッドコードの削除などのちょっとした修正に使われることを @rintaro さんから教えて頂きました(Twitter上で)
Avatar
getTopLeveDecls -> getTopLevelDecls silModue -> silModule Evaludate -> Evaluate OptioanlPayload -> OptionalPayload confromance -> conformance chcking -> checking settting -> setting tpye -> type re...
6:39 AM
多いですねw
Avatar
がんばりましたw
Avatar
最近 @ikesyo さんもガーデニングの話をしてました http://twitter.com/ikesyo/status/938770062483140608
SwiftのOSSプロジェクトでもガーデニングするところたくさんあるのでやっていきましょう💪 https://t.co/Yt8uUAAIkp https://t.co/eE6mJnpq5N
👍 2
Avatar
ErrorをNSErrorに暗黙的に変換してるっぽいところやっとみつけた
Avatar
すごい typo の量だ・・・ getTopLeveDecls -> getTopLevelDecls silModue -> silModule Evaludate -> Evaluate OptioanlPayload -> OptionalPayload confromance -> conformance chcking -> checking settting -> setting tpye -> type resoved -> resolved ahve -> have ? 🤔
😂 1
Avatar
↑結構面白いのが多い
Avatar
Comment of the function says: /// - precondition: end >= start but it actually uses if -> fatalError instead of precondition, Other functions of DateInterval use precondition-s, only this one use...
11:46 AM
これ11月から止まっちゃってるけどそのうち巡回?されるんだろうか?
Avatar
いろいろ見てたら CodaFiさんがボール持ってそうなまま止まってるのたくさんあった
Avatar
#swift-2 で見つけたDecimalのバグ、 https://bugs.swift.org/browse/SR-6671 とりあえずレポート投げておいたけど、もしかして勝手にPR投げてもいいやつだったりします…?
Avatar
良いと思いますよ、そのほうが解決自体も早くなりそう
Avatar
あざます!
Avatar
litとFileCheckの動作何がどうなってんのかわかってきた これ賢いなあ・・・
Avatar
グッジョブです〜
3:35 PM
botにplease testって言うやつって誰でもできたんか?
Avatar
出来ないはずですー。無視されるはず。
Avatar
swift - The Swift Programming Language
😂 1
Avatar
コミット権ある人だけですね
Avatar
ここらへんになんかかいてあった https://swift.org/contributing/#contributing-code
Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.
Avatar
swift - The Swift Programming Language
🙏 1
Avatar
おや、そうですね、こちらもあったんですね!
Avatar
norio_nomura 1/18/2018 1:22 AM
utils/build-script -x --skip-build したら生成されたXcodeプロジェクトの構成が https://qiita.com/rintaro/items/2047a9b88d9249459d9a#xcode-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90 とは全然違うものになってた。
Swift がオープンソースになってしばらく経ちます。 コンパイラや標準ライブラリの開発に手を出してみたいけど、リポジトリを落とした後どうしていいかわからない!という方のために、まずは開発環境の構築方法をご紹介します。基本的には[RE...
Avatar
CMake のバージョンによっても違うみたいです。
Avatar
norio_nomura 1/18/2018 1:24 AM
ぬぬ
Avatar
omochimetaru 1/18/2018 1:24 AM
xcodeprojの生成はcmakeの機能を叩いてるだけだから
Avatar
norio_nomura 1/18/2018 1:25 AM
なるほど。
1:25 AM
cmake version 3.10.1
Avatar
norio_nomura 1/18/2018 1:33 AM
--skip-buildだと当然.gybは未処理なのね。
Avatar
omochimetaru 1/18/2018 1:33 AM
ですね
1:33 AM
gybの適用はcmakeのタスク定義に書かれてます
Avatar
norio_nomura 1/18/2018 1:45 AM
生成されたXcodeプロジェクトにはllvmをビルドする情報が入っていないぽい?
Avatar
omochimetaru 1/18/2018 1:46 AM
LLVMをビルドするxcodeprojは別のところに別のxcodeprojとして作られてますよ
Avatar
norio_nomura 1/18/2018 1:46 AM
おお
Avatar
omochimetaru 1/18/2018 1:46 AM
cmakeレベルで、LLVMのビルドと、swiftのビルドと、cmark(Markdownのライブラリ)のビルド
1:46 AM
の、3つのcmakeになってるから
1:46 AM
xcodeprojも3つある
1:46 AM
xcodeproj同士は依存関係がセットアップされてたと思う・・・
Avatar
norio_nomura 1/18/2018 1:47 AM
なるほど…見つけました。ありがとうございます。
Avatar
omochimetaru 1/18/2018 1:47 AM
あ、ビルドする時に
1:47 AM
xcodeprojを生成するときに指定したconfiguration ( Release ) を
1:47 AM
xcode側のscheme設定でも Build for Run のところで Release にしておかないと
1:47 AM
うまくいかないので注意です (edited)
Avatar
norio_nomura 1/18/2018 1:49 AM
ありがとうございます。
Avatar
norio_nomura 1/18/2018 1:39 PM
Swift 3.1.1まではtoolchainのビルドに成功したリポジトリの状態を保存するために $ git submodule status +2a14f75cef483ab2537f4559d881356e7950236c clang (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +d875488a6a95d5487b7c675f79a8dafef210a65f cmark (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +c6b8e659bd4a561e65f3d206ef10ef5500a3c445 compiler-rt (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +3aabf3431abc2539f0667ff889d7c9e7eec06178 llbuild (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +fcc6492ef1356fe7d66b3589d932aa0575dc2aab lldb (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a-2-gfcc6492ef) +3e9b847792dc205825321269608dc3abee2494ea llvm (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +253e94c1fa511704baeb61cf69995bbf09ba435e ninja (v1.8.2) +4953262288908cbce5a369a5ca43c4ab870e0e53 swift (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a-15-g4953262288) +414ebffa9784b4bd94d821bcab2c03e9bfccf6c3 swift-corelibs-foundation (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +8b72f761a0df76c8d5be00c12bfff9fab182dce7 swift-corelibs-libdispatch (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +732d9533c70dca9ede2c745b64a11f8c7dc7f824 swift-corelibs-xctest (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +01eecd5a83279635823e78101a538132784bc628 swift-integration-tests (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +4a73bf895b6fd9e5f72aad441869ab597e9e3fc3 swift-xcode-playground-support (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a) +495454c155a68d8fa4a40bc423a345385411bac4 swiftpm (swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a-1-g495454c1) の様にgit-submodule(1)で管理してたのだけど、しばらくビルドしてない間にclangがサブモジュールになってるとllvmのビルドに失敗する様になってた。 (edited)
Avatar
norio_nomura 1/18/2018 1:47 PM
https://github.com/apple/swift-clang/commit/6df5701a033460e1ff3858eea57708d4814158a8 でgitのコミットをチェックする際にclangがsubmoduleとなってる可能性をチェックする様になったのだけど、submoduleへのsymlinkになると依存ルール生成がおかしくなる。 $ la llvm/tools/clang lrwxrwxrwx 1 norio staff 11B 7 8 2016 llvm/tools/clang@ -> ../../clang
Summary: When searching for Git version control information, libBasic's CMake checks for the path '.git/logs/HEAD'. However, when LLVM is included as a Git submodule, this path does not exist. Inst...
Avatar
norio_nomura 1/19/2018 2:04 AM
当たり前ではあるけれど、utils/build-script -xで生成したXcodeプロジェクトでもテストを走らせられるのね。
Avatar
omochimetaru 1/19/2018 2:32 AM
ですね、たまに壊れますけど
2:33 AM
cleanしてやり直すと治ったりするからxcode側のキャッシュが不整合になるなどのxcode側の問題に起因している感じがする
Avatar
norio_nomura 1/20/2018 1:09 AM
一部のテストをだけをXcodeから実行できればXcodeだけでイケるのだけど、適当な方法がなさげ…
Avatar
omochimetaru 1/20/2018 3:55 AM
litのコマンドからならテスト名ごとにできるけど
3:56 AM
xcodeからだと根っこの全部実行の形でしか
3:56 AM
取り扱えないですね
3:56 AM
でもソースコードは同じところを見てるから、xcodeとninja両方用意して作業すると良いですすよ
Avatar
norio_nomura 1/20/2018 1:48 PM
結局Xcodeでビルドして、ターミナルで build/Xcode-DebugAssert/swift-macosx-x86_64/test-macosx-x86_64 以下に生成されたテストスクリプトを実行するという手順で。
Avatar
質問です。Swift evolutionに何かしら提案したい場合は、まずforumに投げた方が良いですか?それともSwift-evolutionにPRを投げて、それを元に議論して行く感じですか?(未だにこの辺がわかってなくて)
Avatar
Forum先の気がする
Avatar
なる
Avatar
https://forums.swift.org/c/evolution/pitches で提案して意見を募るで良いと思います。
The Pitches category is an area for pitching ideas for evolution of the Swift language prior to a formal review.
Avatar
わかりました。やってみます!お二人ともありがとうございます
Avatar
[String, String?] を flatMap したら[String: String] になってほしい。そもそもValueがOptionalなDictionary使うなって言われそうだけど。
7:36 AM
これかな
7:37 AM
flatMap→compactMapになったので名前はそっちになるかと。
Avatar
うん、compactの挙動だしそっちだと思ってる。
7:38 AM
今だと [String, String?]をflatMapすると無意味だってことにさっき気づいた (edited)
Avatar
そもそもflatMapにDictionary渡してもDictionaryにはなりませんよね?
Avatar
そっかタプルだ
Avatar
omochimetaru 1/24/2018 7:44 AM
map は mapValue があるんだっけ
Avatar
mapValueが追加されましたね
Avatar
纏めるとほしいのはcompactMapValueだと思う
Avatar
それだ
Avatar
omochimetaru 1/24/2018 7:45 AM
compactMapValue (dict: [K: T], f: (T) -> U?) -> [K: U] // none の行は消える
7:45 AM
てことやね
Avatar
extension Dictionary { func compactMapValues<T>(_ f: Value -> T?) -> [Key: T] } (edited)
7:46 AM
これがほしいっぽい
Avatar
そういうことすな
7:56 AM
こんなの見つけて、気になって試してたら欲しくなったんだよね。 static func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] { var destination = [String: String]() for (key, nillableValue) in source { if let value: Any = nillableValue { destination[key] = “\(value)” } } return destination }
Avatar
inout reduce使うとそこそこキレイになるんじゃないかな
8:00 AM
func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] { return source.reduce(into: [String: String](), { (result, x) in if let value = x.value else { result[x.key] = "\(value)" } }) } (edited)
Avatar
@tarunon ↑の else 要らない気が。 if let value = x.value else { result[x.key] = "\(value)" }
Avatar
気づいて修正してしまいました
Avatar
??こっちでは else 残ったままです。反映されてない???
Avatar
x.value の後ろの else ですよね。 とにかくキレイになった。
Avatar
Dictionary を組み立てるときは inout 版の reduce いいんですよね〜。
Avatar
inout reduceをより便利に使うために (edited)
8:06 AM
inout filter、inout map、inout flatMapもほしい
Avatar
mapupdate 的なやつですか?それはでも inout reduce とはちょっと意味合いが違いますよね?
Avatar
update相当ですね
8:08 AM
例えば[String: [String]]みたいなものをinout reduceで組み立てることを考えると
8:08 AM
欲しくなってくると思います
Avatar
filterflatMapinout のイメージがわかないです。
8:09 AM
update は僕もほしいですね。が、 John McCall がそれ相当のメソッドを WWDC で取り上げてたから、当然そういうもののニーズを Core Team は把握してて、何らかの理由で追加してないんだと勝手に思ってます。
Avatar
filterのinoutは、クロージャ版のremove相当になると思う
8:10 AM
値をチェックしてBoolを返して消す、みたいな
Avatar
omochimetaru 1/24/2018 8:11 AM
それinoutである必要ある?
8:11 AM
読むだけだよ。
Avatar
mutating な気が。
Avatar
mutatingだ
Avatar
omochimetaru 1/24/2018 8:11 AM
ああ。
8:11 AM
mutating な remove は filter のtrue/false逆なやつになるね。
Avatar
extension Array { mutating func remove(_ f: (Element) throws -> Bool) rethrows -> Void { self = try self.filter { try !f($0) } } } こう
Avatar
omochimetaru 1/24/2018 8:12 AM
↑それよく作る
Avatar
Swift 4 continues the evolution of the safe, fast, and expressive language, with better performance and new features. Learn about the new...
Avatar
mutating inoutなmap(update)と、mutatingなfilter(remove)と、mutatingなflatMap(?)がほしい
8:13 AM
正しくはこうですね 🙇
Avatar
書き起こした。 extension MutableCollection { mutating func modifyEach( _ body : (inout Element) -> ()) { for index in self.indices { body(&self[index]) } } }
8:14 AM
↑は頻繁にほしくなるので大体 extension 書いてます。
8:15 AM
@tarunon mutatingflatMap は自身の型が変わっちゃうから無理じゃないですか? (edited)
Avatar
T -> [T]に限定すれば問題ないですよ
8:16 AM
同様にcompactMapも T -> T?で出来ます。
Avatar
ああ、そうですね。
Avatar
高階型無いから現状Array/Optionalだけですけどね。
Avatar
omochimetaru 1/24/2018 8:16 AM
@koher の今書いた modifyEach、bodyの実行中に コレクションの要素数を書き換えると、 forループがおかしくなる恐れがあって、
8:16 AM
LoEでそういう心配がなくなる好例な気がする。
Avatar
その手のって内部でself代入するわけで、メモリ節約できるとかないんで普通に外部で some = some.flatMap { ~ } ってしちゃうので良い気がするんですがどうですかね
Avatar
omochimetaru 1/24/2018 8:17 AM
@t.ae 代入文がユーザサイドに見えるか見えないかという意味論上の違いがある。
Avatar
@omochimetaru まさにその話をしてるはず
Avatar
omochimetaru 1/24/2018 8:18 AM
@koher あ、動画でですか?
Avatar
うん、動画で Ownership 絡みの変更での話をしてる。
Avatar
omochimetaru 1/24/2018 8:18 AM
おお
Avatar
そこの文脈は読んでなかったです。
Avatar
omochimetaru 1/24/2018 8:18 AM
見てみよう
Avatar
ただ、 @omochimetaru が見ても知ってることしかなさそう。
Avatar
omochimetaru 1/24/2018 8:19 AM
元々の LoE が無いバージョンはそういうことしても壊れないように ライブラリコードを頑張って保守的に書く、最適化もされない
Avatar
余談だけど、 WWDC の動画、英語字幕も出せるから英語の勉強にもなりそう。 (edited)
Avatar
omochimetaru 1/24/2018 8:19 AM
ってドキュメントにあるんだけど、実際にどういう保守的な実装ができるのかがよくわかってないまま
8:19 AM
LoEが来てしまったw
Avatar
他にも Core Team の Doug Gregor による 2015 年の発表では、僕と @omochimetaru がよく言ってるイミュータブルオブジェクトと値型みたいな話もすでにキレイにまとめられてた。
Avatar
omochimetaru 1/24/2018 8:22 AM
あら
Avatar
アドバイスもらったの、投げてみました。ありがとうございます🙇‍♀️ https://forums.swift.org/t/pitch-add-compactmapvalues-to-dictionary/8741
Hi, I’d like to propose about compactMapValues in Dictionary. When I imagine removing nil value from dictionary at first as below, but it doesn’t works. "1" : "1", "2" : nil, "3" : "3"].flatMap { $0 } // [(key: "2", value: nil), (key: "1", value: Optional("1")), (key: "3", value: Optional("3"))] To avoid this, I’ve heard using reduce like this. let result = ["1": "1", "2": nil, "3": "3"].reduce(into: [String: String { (result, x) in if let value = x.value { result[x.key] = "(va...
👍 3
Avatar
@d_date この文脈では if let value = x.value { result[x.key] = "\(value)" }if let value = x.value { result[x.key] = value } の方がよさそうです。
Avatar
omochimetaru 1/24/2018 8:34 AM
この動画マニフェスト読む前に見ておきたかった・・・w
Avatar
直しました!ありがとうございます😄
🙂 1
Avatar
omochimetaru 1/24/2018 8:35 AM
この手の「あったら便利」系って
8:35 AM
キリが無いから特に提案しないような気がしてたけど
8:36 AM
そういうわけでもないんかな
Avatar
mapValues があって compactMapValues がないのは変だと想うからありなんじゃないかな?
Avatar
omochimetaru 1/24/2018 8:36 AM
まあ、この場合はそうですね。 Array側のcompactMapも整理されたし。
Avatar
Kishikawa Katsumi 1/24/2018 8:36 AM
どんどん提案したらいいんじゃないかな。
Avatar
omochimetaru 1/24/2018 8:36 AM
でもこの前のboolのtoggleとか
Avatar
それに、それを言い出したら reduce(into:) もだし。
Avatar
omochimetaru 1/24/2018 8:37 AM
どんどん提案が出てきて一つずつ話し合っていけば、だいたいの欲しいものはめっちゃ揃った理想の状態で、コレ以上はもう特にないよね、ってなるんだろうか。
Avatar
update ( modifyEach ) もほしい・・・。
Avatar
Kishikawa Katsumi 1/24/2018 8:38 AM
Swiftの方針が標準ライブラリを便利にするのか、標準ライブラリは最小限に抑えてライブラリに追い出すかにもよると思いますけど。
Avatar
omochimetaru 1/24/2018 8:38 AM
そういう意味ではフォーラムに移行して投稿しやすくなると思うし今後議論が増えそう
Avatar
Kishikawa Katsumi 1/24/2018 8:38 AM
compactMapValues(flatMapValues)は同じような実装たくさん見るし、SwiftPMにもあるので、反響はありそうですね。
8:40 AM
キリが無いから、みたいな問題は別途システムで解決できるのが理想。投稿先を分けるとか、Triage専用の何かがあるとか。
Avatar
omochimetaru 1/24/2018 8:41 AM
なるほど
Avatar
Kishikawa Katsumi 1/24/2018 8:47 AM
Forumだと編集できるのいいですね。
🙂 2
Avatar
今開いてみたら、結構肯定的なコメントがついてました😄
👍 3
Avatar
ある程度落ち着いて、次どうしたらいい?って聞いたら、プロポーサル書いていいんじゃない?って感じだったので、書いてみます。
6:40 AM
Yes, I think this is worth an implementation and a small proposal. We’ve seen clear examples of its usefulness. We have to consider the cognitive weight of adding too many APIs; however, we already have filter and mapValues, and they feel incomplete without compactMapValues – leaving it out would be jarring.
👍 7
Avatar
omochimetaru 1/31/2018 6:42 AM
そこが大仕事ですね頑張って
🙌 1
Avatar
Swiftのビルドで質問なんですけど、pythonって2系の方がいいですか?python3.5.1でビルドしたらエラーになりました。 (edited)
7:33 AM
(あれ、Discordってなにで改行するんだっけ) Shift + enterか (edited)
7:37 AM
[6/1318] Generating Integers.swift from Integers.swift.gyb with ptr size = 8 FAILED: stdlib/public/core/8/Integers.swift cd .../swift/stdlib/public/core && /usr/local/Cellar/cmake/3.10.2/bin/cmake -E make_directory .../build/Ninja-ReleaseAssert/swift-macosx-x86_64/stdlib/public/core/8 && .../.pyenv/versions/3.6.4/bin/python .../swift/utils/gyb -DunicodeGraphemeBreakPropertyFile=.../swift/utils/UnicodeData/GraphemeBreakProperty.txt -DunicodeGraphemeBreakTestFile=.../swift/utils/UnicodeData/GraphemeBreakTest.txt -DCMAKE_SIZEOF_VOID_P=8 -o .../build/Ninja-ReleaseAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift.tmp Integers.swift.gyb && /usr/local/Cellar/cmake/3.10.2/bin/cmake -E copy_if_different .../build/Ninja-ReleaseAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift.tmp .../build/Ninja-ReleaseAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift && /usr/local/Cellar/cmake/3.10.2/bin/cmake -E remove .../build/Ninja-ReleaseAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift.tmp Traceback (most recent call last): File ".../swift/utils/gyb", line 3, in <module> gyb.main() File ".../swift/utils/gyb.py", line 1257, in main args.target.write(execute_template(ast, args.line_directive, **bindings)) File ".../swift/utils/gyb.py", line 1128, in execute_template ast.execute(execution_context) File ".../swift/utils/gyb.py", line 632, in execute x.execute(context) File ".../swift/utils/gyb.py", line 718, in execute result = eval(self.code, context.local_bindings) File ".../swift/stdlib/public/core/Integers.swift.gyb", line 20, in <module> from string import maketrans, capitalize ImportError: cannot import name 'maketrans'
Avatar
I am using petl package which i have installed using pip in virtulaenv with python 3.4. when i tried to test that whether the petl package is installed properly or not in the python shell I have ...
7:56 AM
cannot import maktransのググって一番上これ
7:56 AM
とりあえず2.xで試してみたらいけそう
Avatar
ありがと。さっき2.7にしてビルドしてもダメだったから、クリーンビルドしてみてるところ
Avatar
通った 🙏
👍 1
Avatar
LorenteyさんPitchのときからめっちゃ親切だなーって思ってたけど、この人Appleの人だった。なんか通りそうな気がしてきたので頑張る💪 https://github.com/apple/swift-evolution/pull/787 (edited)
👍 5
Avatar
特にリジェクトしたい理由が出てこなさそうだしいけそう
Avatar
Kishikawa Katsumi 2/16/2018 3:37 AM
丁寧なレビューだ 😍
Avatar
omochimetaru 2/16/2018 3:40 AM
なるほど、プロポーザルのブラッシュアップが事前にやってもらえたのか
Avatar
norio_nomura 2/16/2018 4:50 AM
JSONDecoder.KeyDecodingStrategyに機能追加するPR書いたけど、evolutionプロセスが必要と言われてから放置してしまってるのを思い出した… https://github.com/apple/swift/pull/14039
Adds JSONDecoder.KeyDecodingStrategy.useSnakeCasedKeys. This will make following code works. import Foundation struct S: Codable { var myURLProperty: String } let encoder = JSONEncoder() enco...
Avatar
norio_nomura 2/16/2018 5:00 AM
JSONDecoder自体は割とどうでも良くて、ヘンテコ(に僕には見える)なconvertFromSnakeCaseを関わってるライブラリに移植したくない、というのがモチベーション。 (edited)
Avatar
Evolutionいきましょう💪
Avatar
omochimetaru 3/3/2018 2:32 PM
git-clang-formatうまく動きました。 これを使うと自動で自分がコミットしようとしている変更部分だけに、swiftcのコード規約で自動フォーマットがかけられます。 1. clang/tools/clang-format/git-clang-format を 自分のマシンのパスが通っている場所にコピー 2. swiftcをビルドして生成されるclang-formatコマンドのフルパスをgitの設定に入れる$ git config --global clangFormat.binary <swift-source>/build/<tool>-<variant>/llvm-<target>/bin/clang-format 3. swiftリポジトリで変更をステージする(uncommit changeはなくす) 4. $ git clang-format を実行する 情報ありがとう! @rintaro CC: @giginet @kitasuke (edited)
👍 1
Avatar
omochimetaru 3/4/2018 4:16 AM
この記事では、swiftコンパイラ開発における作業環境構築の知見を紹介します。

リポジトリ構成

swiftコンパイラプロジェクトは、複数のリポジトリから構成されています。その中で主役となるのが[apple/swift](htt...
😍 6
Avatar
omochimetaru 3/4/2018 6:44 AM
In previously, Lexer does not handle nul character in lexTrivia function. So libSyntax lose information about nul character and can not achieve round trip translation. With this PR, I update lexTri...
6:44 AM
Drive-by nit ってなんだろう?
6:45 AM
他にも同様な指摘がされているケースが有って、clang-formatによるフォーマッティングとは別に、コメントの英文を機械検査しているんだと思うんだけど
6:45 AM
そういうものがあるなら機械検査を自分で実行する方法が知りたい。 (edited)
Avatar
Kishikawa Katsumi 3/4/2018 6:45 AM
nitpickと似たような意味じゃないかな。重箱の隅つつきだけど、細かいことだけど。
6:47 AM
調べても出てこないけどコメントの内容からして合ってると思う。
Avatar
omochimetaru 3/4/2018 6:47 AM
あ〜なるほど。Drive-by nit で検索したら、他にもあったけど、全部同じxwuさんのコメントだから、単に言い回しがそうなっているというだけですかね。 https://github.com/apple/swift/search?q=Drive-by+nit&type=Issues&utf8=✓ (edited)
6:48 AM
ありがとうございます。機械的なメッセージかと思ってしまったw
Avatar
Kishikawa Katsumi 3/4/2018 6:48 AM
おそらく。細いこと言うけどスマン、コメントのスタイルはこうしてくれ、って感じ。
🙏 1
Avatar
Drive-by は「立ち寄り」なので、レビュアーになるつもりは無いけど、ちょっと、という時に使われます。
Avatar
omochimetaru 3/4/2018 8:26 AM
ほほ〜〜
Avatar
Drive-by CI とかで、とりあえずCIキックだけしとくね。的な。
Avatar
omochimetaru 3/4/2018 8:27 AM
あ〜なるほど。知らなかったら全然ニュアンスを間違えてそうでした。ありがとうございます。
Avatar
Kishikawa Katsumi 3/4/2018 11:50 AM
Drive by nitで一つじゃなくて、drive by 〜というイディオムでしたか。
Avatar
omochimetaru 3/5/2018 12:01 AM
https://github.com/apple/swift/pull/14505 これ多分僕が投げたPRでエンバグして、 @norio_nomura が報告して、 @rintaro が直してる・・・ 😅
SR-6926 rdar://problem/37290899 This happens when the Parser re-lexing comment tokens that sets ArtificialEOF at the end of comment range. It used to cause an assertion failure (!value || Kind == t...
🙂 1
Avatar
いえいえ大丈夫、エンバグは https://github.com/apple/swift/pull/11809 です。🙂 今まで隠れていたバグがこれで顕在化した。 (edited)
This patch allows Parser to generate a refined token stream to satisfy tooling's need. For syntax coloring, token stream from lexer is insufficient because (1) we have contextual keywords like get ...
Avatar
omochimetaru 3/5/2018 3:19 AM
なるほど。でも自分も範囲指定パースでお尻がちぎられた時の疑似eofに escapedIdentifierフラグが立ってしまうという可能性、全く考慮できてなかった。 (edited)
Avatar
omochimetaru 3/5/2018 10:22 AM
https://github.com/apple/swift/pull/14962#event-1503768210 りんたろさんがJSTだとめちゃくちゃ捗るね
In previously, Lexer does not handle nul character in lexTrivia function. So libSyntax lose information about nul character and can not achieve round trip translation. With this PR, I update lexTri...
Avatar
USいっちゃっても午前中ならなんとかしてくれるんじゃないかな
10:24 AM
つまり午前中はSwiftコントリビュートして午後から仕事 (edited)
Avatar
omochimetaru 3/5/2018 10:24 AM
ビルド待ちとかレビュー待ちとか多いから
10:24 AM
別にずっと張り付いてるわけじゃないんよな
10:25 AM
休憩の時に見ると返事あるみたいな。
Avatar
フーム
Avatar
omochimetaru 3/5/2018 10:25 AM
↑やりとりみればわかるけど微修正繰り返してる
Avatar
swift - The Swift Programming Language
🎉 7
Avatar
omochimetaru 3/5/2018 11:08 AM
お!21コミットでランカー入りした
Avatar
norio_nomura 3/5/2018 11:42 AM
18コミットだった。 $ git log --committer=norio.nomura --oneline --no-merges|wc -l 18
Avatar
omochimetaru 3/5/2018 11:45 AM
SourceKit周りが多いですね
Avatar
二重Optional、オーバーライド出来るようにしたけど、いつもテストがコケる11個がコケてて何もわからん
1:00 PM
こっちや
1:01 PM
結局テスト無事だと思ってたMBPもコケてるし困りました
Avatar
ふむ。github フォークに push していただけまいか。見てみたい。
Avatar
ウィス
1:05 PM
差分はー
1:06 PM
are, 差分入ってない
Avatar
umu
Avatar
すません、コミット忘れてた
1:08 PM
あああ
1:08 PM
ダメだ、この修正ではネストしたOptionalの中のサブクラスがダメだ
1:10 PM
とりあえずpushはしとこ
1:12 PM
でもなんか、コメントにMake sure we only unwrap at most one layer of optional.って書いてあるし、意図してる挙動なのかなぁという気もしてきている
1:14 PM
修正はここ。 https://github.com/tarunon/swift/blob/fix/allow_nested_optional/lib/AST/Type.cpp#L2298 でもこの修正だとネストしたOptionalの中のサブクラス関係が対応できなくなるのでダメ
swift - The Swift Programming Language
1:14 PM
再起じゃないといけない
1:21 PM
// Optional-to-optional. の上に持ってくるだけでいけたりしない物ですか?
Avatar
omochimetaru 3/5/2018 1:21 PM
一昨日見つけてたenum値を変えるだけじゃだめだった?
Avatar
enum値変える方は変えたらバグったっぽいと思っていたが件の11個がFailしてるだけの勘違いの可能性もあり再ビルド
Avatar
omochimetaru 3/5/2018 1:22 PM
作業前の状態でのテスト結果を見ておかないとわからんのよな
1:22 PM
ワンちゃん最初から壊れている
Avatar
順番変える方は試してないのでなんともですが、直感的には変わらないのではという気がしています (edited)
1:24 PM
というかそこは再起で辿らない(Noneでしか突入しないので)入れ替えはいくつかのフローが壊れそう?
Avatar
うむ、だめですね。
Avatar
OptionalToOptionalをとりあえずこのフローに突っ込むのは割りと正解な気がしていて
1:32 PM
そっちを今試しています
1:32 PM
先頭のif文を変える
Avatar
if (insideOptional == OptionalUnwrapping::None || insideOptional == OptionalUnwrapping::OptionalToOptional) { ってことですね? (edited)
Avatar
はい
1:48 PM
いけた気がする
3:23 PM
書きました。
Avatar
omochimetaru 3/6/2018 2:27 AM
@rintaro 困った・・・ https://github.com/apple/swift/pull/14979
This PR add ability to Lexer that it handles invalid chars as trivia. It makes libSyntax can round trip convert swift source which contains invalid chars. Invalid chars means here is invalid UTF-8 ...
Avatar
とりあえずそれでも良いんじゃ無いかという気がするんですけどねー。leading/trailing のセマンティクスをどう定義するかという問題ではあり、不正UTF8でぶった切られるというのは少し実装都合で恣意的であると思いますが。
Avatar
omochimetaru 3/6/2018 2:30 AM
#14979 : シンプルだけど壊れてる #14967 : ちゃんと動くけど保守しづらい
2:31 AM
それも思ったんですけど、こういうのはキッチリ動いてないと、libSyntaxを使ってユーザーがなんか作ったりする時に
2:32 AM
こういうコーナーケースでちょっと変な挙動すると厄介だと思うんですよね
2:32 AM
せっかくlibSyntaxでtriviaのルールがきちんと形式化されているのだし達成したい・・・
2:34 AM
DesignCの亜種として、lexImplの中身を関数切り出しつつ、boolの引数足して、lexTrivia挙動になったりelxImpl挙動になったり、switch-case個別の内部で分岐するとかもありえるんですが
2:34 AM
diffが巨大になっちゃうし可読性が終わる・・・
2:35 AM
そもそもelseルール(switch-caseにおけるdefault)なのが最悪で、そのせいで、全部のcaseを拾わないとtrivia判定ができないんですよね。
2:35 AM
他の // とか <<<< とかは素直に書けるんですけど。
Avatar
僕が実装するなら、lexTrivia のメインの switch に 一般的な文字 A-Z a-z 0-9 記号などのcaseを追加して、default に入るのを避ける方向にすると思います。
2:36 AM
メンテしずらいのは 14967 と一緒だけど。
Avatar
omochimetaru 3/6/2018 2:38 AM
14967はそうなってて、ただし、defaultに入ってから関数で退避しているんですが、直接lexTriviaのswitch-caseにcaseを並べるってことですか? https://github.com/apple/swift/pull/14967/files#diff-bacd55a550c89a67b8a470ce30b46ddaR560
This PR follows my previous PR #14962. I will rebase this after previous PR is merged. This PR update Lexer to support invalid characters as trivia. Currently, libSyntax does not support them, so r...
Avatar
omochimetaru 3/6/2018 2:43 AM
まあそのほうが関数の内外で重複する判定は避けられるし、lexTriviaとlexImplで二重化してるのはある意味他の文字もそうだし、確かにそれが良さそうですねえ・・・
2:45 AM
てか Z1の自己書き換え回避のための \x5a1 面白いですよね
Avatar
自己書換しちゃうのめんどくさいっすねw
Avatar
omochimetaru 3/6/2018 2:47 AM
ちょうどワークショップのときに最初それで事故って、mzpさんが思いついてくれたw
Avatar
関連としては、 RUN:\ で複数行継続できるので、
2:48 AM
// RUN: cat %s | sed \ // CC 82 is U+0302, invalid for identifier start, valid for identifier body. // RUN: -e 's/'$(echo -ne "\x5a1")'/'$(echo -ne "\xc2")'/g' \ // E2 80 9D is U+201D, right quote. // RUN: -e 's/'$(echo -ne "\x5a2")'/'$(echo -ne "\xe2\x80\x9d")'/g' \ ... // RUN: > %t とかもできますよ。 (edited)
Avatar
omochimetaru 3/6/2018 2:49 AM
あ〜 RUN: のパラメータが結合されるんですか
2:49 AM
その間にコメント差し込むのオシャレですね
2:49 AM
なんかもうメタ文法が絡みすぎててスゴイけど
2:49 AM
あ、でもそうか、sedのコマンドとして
2:50 AM
-e って複数かけるんですね。
Avatar
そうなのです。
Avatar
omochimetaru 3/6/2018 2:51 AM
ありがとうございます、次やってみます
12:55 AM
C++にまだ慣れてなくて自信ないんですが、
12:56 AM
ここでmoveしたtripleを下でまた使ってるのが怪しく見えますが、認識合ってますかね
Avatar
omochimetaru 3/7/2018 12:58 AM
ほんとだ!
12:58 AM
これはダメ
Avatar
普通にダメでしょうねぇ。
Avatar
omochimetaru 3/7/2018 12:58 AM
確かめるためには
12:59 AM
Triple型のムーブコンストラクタを作って、受け取ったrvalue(代入右辺側 を 破壊してみれば良いです
12:59 AM
現状だと多分実際のところは右辺側の破壊が特にないから
1:00 AM
セマンティックは壊れてるけど実害が出ない(ただのコピーであってmoveが無くても同じ)
1:00 AM
状態だと思う
Avatar
Contribute to swift-llvm development by creating an account on GitHub.
Avatar
omochimetaru 3/7/2018 1:02 AM
一つ目の分岐とその後のセクションでは左辺側使ってるし書き換え途中に力尽きたのでは
1:03 AM
1:03 AM
まだムーブコンストラクタが無い
1:04 AM
std stringも持ってるしついでに実装すると良いのでは
Avatar
なるほど、ありがとうございます!
1:11 AM
ムーブコンストラクターは http://en.cppreference.com/w/cpp/language/move_constructor "Implicitly-declared move constructor" が存在している気もする
Avatar
omochimetaru 3/7/2018 1:15 AM
あ、本当だ コピーコンストラクタだけ定義されてるように見えたけど、よく見たらこれ違う explicit Triple(const Twine &Str)
1:15 AM
Big5が一つもないから全部自動定義されるパターンっぽい。
1:16 AM
そうするとstd::stringが破壊されてないのが謎だなあ
1:17 AM
OSTypeってフィールドはコピーな型だから動いてるのかも
1:18 AM
moveの後にstd string Dataの方にアクセスするなんらかのプロパティを呼ぶとわかりそう
Avatar
ちょっと理解が進んだ、ありがとうございます 🙏
1:21 AM
そのうち直してみよう
Avatar
omochimetaru 3/7/2018 1:22 AM
よく気がつきましたね
Avatar
どういう経緯で見つけたか思い出した。前に https://github.com/apple/swift/pull/13315 こういうPRを出したことがあって(まだOSX残ってる箇所多いから変えたい気はする)、 #if os(...) のOSXとmacOSはどうやって定義・管理されているのか気になって見ていたら
1:29 AM
LangOptionsに辿り着いたのだった
Avatar
omochimetaru 3/7/2018 1:30 AM
あ〜、LangOptionsってコレなのか!w
Avatar
はい、上の方の SupportedConditionalCompilation... ってのを見ると馴染みがある
Avatar
omochimetaru 3/7/2018 1:32 AM
static const StringRef SupportedConditionalCompilationOSs[] = { "OSX", "macOS", "tvOS", "watchOS", "iOS", "Linux", "FreeBSD", "Windows", "Android", "PS4", "Cygwin", "Haiku", }; (edited)
1:33 AM
マック2つあってウケる
Avatar
test/decl/class/override.swift 雰囲気Optionalとsubclassの組み合わせに関してテストが書かれてないような感じ
2:30 AM
それも追加しつつ、自分が追加したケースの証明を書くのが良いのかしら
Avatar
omochimetaru 3/7/2018 2:31 AM
うん、新しいテスト+新しい機能を同時にコミットするっぽい
Avatar
「既存の機能でテストしてないやん!でもうちは似た機能追加してそれはテストしたいねん!」
2:31 AM
これ
Avatar
omochimetaru 3/7/2018 2:31 AM
新しいテストが古い実装でコケる事を観察できないけどそれはPRで説明+試したければ部分チェックアウト
2:32 AM
あーでもあれだ
2:32 AM
古い実装で、成功するようにテストを書いてから
2:32 AM
テストのexpectedを変更+新しい機能
2:32 AM
に分けても良いと思うよ
2:32 AM
そのほうが振る舞いが変わる事が表現できるし。
Avatar
Optional overrideの一般化にあたって
2:33 AM
Animal,Catをclassとしたときに
2:34 AM
foo()->Animal? から override foo()->Cat もできるべき(というか前から出来てる)けどそのテストが存在していない
2:35 AM
じゃあまずこのテスト追記するコミットから歴史を始めるべきか
Avatar
omochimetaru 3/7/2018 2:36 AM
それが良いと思う
Avatar
㌧ しかしこれ…
Avatar
omochimetaru 3/7/2018 2:36 AM
[NFC] (Non Functional Changes)ってタグとかキーワードを見かけるので最初のコミットはそれつけとくといいのかな?
2:36 AM
テスト追加でもNFCなのかよくわからない
2:36 AM
リファクタリングだとついてたりする
2:38 AM
foo()->Animal? から override foo()->Cat もできるべき(というか前から出来てる)けどそのテストが存在していない
それテスト無いんだw
Avatar
無いぽい
2:39 AM
てかね、この一般化追加したくないよーーー
2:39 AM
やだやだやだ
Avatar
omochimetaru 3/7/2018 2:39 AM
潰す方向はSwif-Evolへどうぞ・・・
Avatar
これ追加する過程でOptional overrideを封印する方法も理解した。
Avatar
omochimetaru 3/7/2018 2:40 AM
でもまあいったん今の中途半端な状態をできる側で綺麗にしてからevol行けば良いのでは
Avatar
そうね
2:40 AM
@objc func特有の特別な振る舞いとして許可した方がいいという方向に進めていきたい
2:41 AM
現に@objc funcなら1重のクラスのOptionalしか許可されてなくていい塩梅なんだよ
Avatar
おお、封印に期待swift
Avatar
norio_nomura 3/7/2018 6:45 AM
xfailなテストを追加するコミットと、fixしてxfailを外すコミットを追加するといいのでは。
Avatar
omochimetaru 3/7/2018 6:46 AM
ああそうか、現状追認系はそれもありですね
6:47 AM
ちょうどそういうテーマを抱えてるからそうやって分けて出してみようかな
Avatar
omochimetaru 3/7/2018 12:30 PM
LLVM LibraryにはString.format的なものはないんだろうか
Avatar
デバッグプリントかな?
Avatar
omochimetaru 3/7/2018 12:30 PM
うん
Avatar
dumpとかなかったっけ
Avatar
omochimetaru 3/7/2018 12:31 PM
見当たらんなあ
Avatar
object.dump()みたいなの
Avatar
Override matching is already a different thing than subtypes, and I think the point is that this isn't a new special case; it's fixing the logic for an existing special case. FWIW this is already a reusable API, TypeBase::matches.
12:16 AM
TypeBaseにもmatchesあるのか
Avatar
そういえば上にあったclang-format, git-clang-format、brewで入れるのが簡単でした(swift-clangで魔改造されていないという前提で)
Avatar
omochimetaru 3/8/2018 1:30 AM
brewで入れる手もあるんですね。
1:34 AM
特にswift関係なさそうだしそれが良さそうです
Avatar
確かに僕もbrewで入れた気がする。簡単だった
Avatar
omochimetaru 3/8/2018 4:28 AM
Our nightly master branch build on s390x failed with the following error: 09:09:39 /home/swiftbuild/workspace/Swift/CONFIG/FIVE/GIT_BRANCH/master/label/csz25097/swift/lib/Parse/Lexer.cpp:2460:17: error: overflow converting case value to switch condition type (-2 to 254) [-Werror,-Wswitch] 09:09:39 case -1: case -2: 09:09:39 ^ 09:09:39 /home/swiftbuild/workspace/Swift/CONFIG/FIVE/GIT_BRANCH/master/label/csz25097/swift/lib/Parse/Lexer.cpp:2460:8: error: overflow converting case ...
4:28 AM
ワイのPRが、フォーラムの方から、こいつのせいで壊れてんってメンションされたw
4:29 AM
evolしか見てなかったけどなんか話し合いっぽい場所もあるのか
4:31 AM
char が signed なら動くが unsigned な世界では壊れるコードを書いてしまった
Avatar
こいつのせいwワロタ
Avatar
うが、 github コード permlink が展開された。
Avatar
omochimetaru 3/8/2018 4:33 AM
いやーこれ、それぞれの部品は既存実装からコピペしてたんだけど
4:33 AM
組み合わせるときにそこの考慮して直さないといけないってやつだった
Avatar
omochimetaru 3/8/2018 4:34 AM
このキャスト気持ち悪いし case の方を (char)0xFE, (char)0xFF にしたいな (edited)
Avatar
それは同意
Avatar
omochimetaru 3/8/2018 4:35 AM
そもそもUTF16-BOMをsignedで見て-1と-2やん って書いたコードここではじめてみた
4:38 AM
davezarzycki has 2 repositories available. Follow their code on GitHub.
4:38 AM
2014年にSVNでこの人がコミットしてるけど
4:38 AM
4:38 AM
ああ、名前の表記途中で変えてるのか
4:39 AM
うーんでもこれテストどうしたらええねん?
4:41 AM
とりあえず丸い方法でPRだけ出すか
Avatar
そも 先頭以外の UTF16 BOM なんて単なる不正 UTF8 シーケンスなので、initialize() 内で処理しちゃってもいいような。それ以外は default に流すで。 (edited)
Avatar
omochimetaru 3/8/2018 5:48 AM
それもそうなんですよね
5:48 AM
途中のUTF8BOMについては特に気配りがないし。
5:51 AM
一応UTF8とUTF16BEをcatしたソースコードを読み込ませたりしたときに
5:51 AM
UTF16先頭から末尾までが一個のunknown tokenになるという機能があるけど (edited)
5:51 AM
それが必要なのかというとウーン?
Avatar
Optional override、一般的なサブタイピングと処理を一緒にするべきっしょ論が出てきたのでExisitential周りで壊れ発生してると思うけど大丈夫なん?って返した (edited)
8:48 AM
ほぼ予想通りの泥沼展開
🙃 1
Avatar
最終目標はOptionalのサブタイプの封印なのでこのPRはどっちにコケてもいいけど、議論の材料になるようなPRはどんどん出していきたい感
Avatar
omochimetaru 3/9/2018 1:08 AM
Existencialへのオーバーライドでもちゃんとthunk出せるからそれもいけるので、 オーバーライドと関数のサブタイピングを同じにしよう ってスラバは言ってるのかな
Avatar
ぽいね
1:09 AM
ギョム終わったら関数統一プラン試してみる
Avatar
omochimetaru 3/9/2018 1:09 AM
とりあえず同じにすべきなのは賛成だ
1:09 AM
現状のとっ散らかりをまず調べてから作戦整理かな?
1:13 AM
ちょっと触り始めるといろいろタスクが見えてくるのあるよな
Avatar
シンプルにこれ使うようになってればよさそうなもんですけどね〜、そうなってないのはなんか理由があったのかな https://github.com/apple/swift/blob/0ae61f65c90ccaf5419645edc773cc98e100af02/lib/Sema/TypeCheckConstraints.cpp#L2766-L2770
swift - The Swift Programming Language
Avatar
昔Existentialを返す関数をoverrideして任意の型を返すようにすると
2:08 AM
そこのメモリレイアウトが崩壊して実行時に死ぬみたいなのがあった気がする、それの修正と思う
Avatar
なるほど〜そこでopen existentialを挟み込む方向でなく通常のサブタイピングの処理から外れて特別扱いする方に進化してしまったのかな。。
Avatar
そんな気がする
Avatar
レビュー始まった https://github.com/apple/swift/pull/15017 Nit ってなんだろって思ったら、細かいことって意味なんすね。
コードレビューの際に、重箱の隅をつつくような指摘をするときにぴったりの表現です。
http://0xcc.net/blog/archives/000169.html
Introducing compact map values on hashed map collection discussed on apple/swift-evolution#787
👍 1
Avatar
omochimetaru 3/9/2018 6:40 AM
nitの話このスレの [前週日曜日 午後3時45分] にもあったw
Avatar
Kishikawa Katsumi 3/9/2018 6:42 AM
細かいことやけどゴメン、って言いたい時にnitpickて付けとくと安心。便利。
Avatar
スレ読んでないことがバレてしまったw
Avatar
コードレビューする時に、
7:09 AM
[NIT] とか [Q] とか If my understanding is collect… とか そういうの書いておくと何書いてもオッケー
Avatar
correct
Avatar
ほんまや
Avatar
Kishikawa Katsumi 3/9/2018 7:09 AM
Qってなんですか?
Avatar
よくやるねんなー
7:09 AM
Questionの意図で使います
Avatar
Kishikawa Katsumi 3/9/2018 7:09 AM
あ、なるほど。これなんでこうしてるの?みたいな感じですね。
Avatar
そんな感じ
Avatar
omochimetaru 3/9/2018 7:10 AM
@tarunon たるノンスレ
7:10 AM
アツい展開になってるw
Avatar
マジ
Avatar
omochimetaru 3/9/2018 7:11 AM
これはグチャじゃなくてObjC用の仕様なんじゃいって
7:11 AM
rudkxさんがw
Avatar
オッ^^
Avatar
omochimetaru 3/9/2018 7:11 AM
俺らの最初の読みの線だねこれは
7:11 AM
There is definitely non-accidental history behind why we cannot just test subtyping here. We allow overriding Objective-C methods that take unaudited pointer arguments (imported as IUOs) with Swift methods that take non-optional arguments. There may be other reasons as well.
Avatar
それね
Avatar
omochimetaru 3/9/2018 7:12 AM
IUOにも言及してるし。
7:12 AM
tarunon的にはこの主張はちょうどいいのか。じゃあ @objc にしようぜって話になるし。 (edited)
Avatar
それ!
Avatar
omochimetaru 3/9/2018 7:13 AM
アツいな〜〜〜
Avatar
激アツ
Avatar
omochimetaru 3/9/2018 7:13 AM
てかコアチームもマジでフワフワしてるんだなあw
Avatar
でも最初に手を出すべき難易度ではなかった
7:13 AM
いきなり最難関の本丸に突撃してしまった感ある
7:13 AM
これぐらいならラクっしょ~~って思ったら本丸だったとき
Avatar
ハードモード
10:44 AM
とりあえず僕はコードを眺めたくて極めて細かい修正から入ろうとしてて、
10:45 AM
今はtypedefをusingにちょっとずつ置き換えるかと思ってます
Avatar
omochimetaru 3/9/2018 12:31 PM
そういう作業やるとその過程でプロジェクト全体を俯瞰できて良さそう
Avatar
そういえば先週rintaroさんから聞いたBen Cohenが@airspeedswiftだと分かって、人とアカウントが一致した
Avatar
@ikesyo AirspeedVelocity で AirspeedSwift で Ben Cohen でややこしいんですよね😅 今はこっちも Ben Cohen になって整理されたみたいですが。 https://twitter.com/AirspeedSwift
swift std lib @ 🍏
Tweets
2436
Followers
8933
Avatar
なるほどややこしいw
Avatar
どの文脈で話したのか忘れちゃいました。 https://www.dotconferences.com/2018/01/ben-cohen-extending-the-standard-library この件でしたっけ?
You can play a part in making Swift a more expressive language! Ben talks about enhancing the Swift standard library, which is the basic vocabulary for writing programs in Swift.
Avatar
それですね!
👍 1
Avatar
omochimetaru 3/10/2018 7:28 AM
@rintaro ここまでやっておいて Restart: 消せるの気付かなかったの悔しいw
Avatar
へへへw
Avatar
omochimetaru 3/10/2018 7:32 AM
ループするのはスキップする場合だけで、トークンが来るって保証されてるなら絶対に終端するわけですね、いや〜なるほどだった
Avatar
けどここスピード改善の余地あると思ってなかったので、さすがだと思いました。 (edited)
Avatar
omochimetaru 3/10/2018 7:37 AM
嬉しいw スピードが改善してるのかは自信ないですけどね・・・Triviaを配列に詰めたりするし。 (edited)
Avatar
ところがですねぇ、実測済みなのです。
Avatar
omochimetaru 3/10/2018 7:38 AM
マジか
7:38 AM
そこらへんの計測方法とかまだよくわかってないのでやっていきたい
7:39 AM
制御フローについては最初見たときから比べてだいぶきれいになってきたので
7:39 AM
かなり満足してきています
Avatar
いや、単純に time swift -frontend -parse デカい.swift ですよ。
Avatar
omochimetaru 3/10/2018 7:40 AM
あーまあそうか、Parseの処理は同じなんだから
7:40 AM
Lexerの差分だけが出るんか。
7:41 AM
Trivia自体が連続スペースをintで持ったりしてるのもかなりいいんだろうなあと思ってます
Avatar
0.79s が 0.78s (56MiB 840k Line) になった程度なので、パフォーマンス的なメリットはほとんど無いと思いますが、制御フロー整理できてこれは優秀。 (edited)
Avatar
omochimetaru 3/10/2018 7:46 AM
コンパイラとして見れば後ろの型推論とかが桁違いに重いでしょうしね
Avatar
はい、パースはコンパイル全体の数パーセントしか占めません。
👀 1
Avatar
Slavaのアドバイス通り共通のサブタイピングを利用した処理で書いてみると色々おもしろい動きになって、 1. protocol Animal, class Cat: Animal の場合、返り値のcovarianceはOKクラッシュもしない、引数のcontravarianceはコンパイルエラー 2. protocol Animal, struct Dog: Animal の場合、両方ダメ 3. OptionalはOK こんな感じになった (edited)
Avatar
2勘違いだった
6:02 AM
引数の時は来てないから別のところ通ってるぽいな
Avatar
omochimetaru 3/11/2018 7:07 AM
取り消し線はニョロ2つ
👌 1
Avatar
masterのバリデーションテスト(built-script -T)は通るのに自分のブランチだとバリデーションテストがこけます。特にテストが起きるような修正もないしmasterだと通るし原因がさっぱり分からないんですが、そういうこともあるんですか? ninja: error: rebuilding 'build.ninja': subcommand failed このPRでプッシュしてるコミットでこけます... https://github.com/apple/swift/pull/14963
I defined new string constants in String.h for Builtin so that we could replace string value with it. Added BUILTIN_NAME Added BUILTIN_TYPE_NAMEs It might be a bit different case, but should I ...
Avatar
omochimetaru 3/13/2018 2:09 AM
プッシュしてるコミットが乗ってるmasterと今のmasterがズレてないですか?
2:09 AM
当時のmasterが壊れてて今のmasterが壊れてないならそうなるので、 プッシュしてるやつを今のmasterにrebaseすれば
2:09 AM
なおるはず
Avatar
ローカルのブランチにはmasterで進んでる分はマージしてるんですよね。その上でさらなる変更を含んだコミットをしてからバリデーションテストこけるので、今masterマージコミットの戻してバリデーションテスト走らせてます。 ただ自分の変更でテストこける時でも上のような良く分からないエラーメッセージになるケースもあるんですか? (edited)
Avatar
omochimetaru 3/13/2018 2:17 AM
ああ、なんかninjaがおかしくなってるのか
2:17 AM
同じメッセージではないけど僕もなんかテスト通らなくなったけどクリーンリビルドしたら解決したことは何回かあります
2:18 AM
build-script--clean つけると
Avatar
MacProで通らなくなったのそれかな
Avatar
このタイミングでクリーンリビルドか
Avatar
omochimetaru 3/13/2018 2:18 AM
最初からフルリビルドになるけど治るかも?
Avatar
同じコミットでMBPなら通ったからクリーン、、いや、したはず
2:18 AM
帰ったら試そう
Avatar
やってみます!ありがとうございます。
Avatar
テストないけどapproveしてもらって、別の話題で盛り上がってる。 https://github.com/apple/swift/pull/15017#issuecomment-372404603
Introducing compactMapValues(_:) to Dictionary discussed on apple/swift-evolution#787
Avatar
実装自体はreduceだから性能はreduce依存になってる気がするんだけど
Avatar
filterと同じになるんだね
Avatar
メモリ確保でk点超えるときに再確保が起きて遅くなる
2:28 AM
可能性がある気がする
2:29 AM
なんかサイズ指定して生成できなかったっけ?それで元のサイズとりあえず指定したら
2:29 AM
はやくなんねーかな
Avatar
そんな話をここでしてるっぽい https://bugs.swift.org/browse/SR-3268
Avatar
omochimetaru 3/13/2018 2:29 AM
However, I don't think we need to worry about this here. While Swift's hash seed is currently global, I plan to switch to per-instance or per-capacity seeds soon. Either of those would perturb element ordering, eliminating the quadratic behavior.
2:29 AM
このコメントがあるってことは
Avatar
It was recently discovered that some surprising operations on Rust’s standard hash table types could go quadratic. Perhaps the simplest illustration is this snippet from a comment, here simplified...
Avatar
omochimetaru 3/13/2018 2:30 AM
ハッシュテーブルのリハッシュが起きたときに重くなってるんじゃない?
Avatar
ははぁ
Avatar
omochimetaru 3/13/2018 2:31 AM
Avatar
Dictionaryをkey-valueのArrayからinitできましたよね、そっちは踏みますか?
Avatar
ざっくり僕の理解だと、ハッシュテーブルを、新規のハッシュテーブルにコピーするときに、元のハッシュテーブルの bucket オーダーで 要素一つ一つコピーしていくと、コピー先のテーブルで bucket の衝突が起きやすくなるっていう事だと思います。 (edited)
Avatar
この場合keyの重複がないことが保証できるから、ちょっとばかし早くて安全じゃないapiとかあればそっち使える
Avatar
↓これでバケットサイズ確保しとくんじゃダメですか? https://developer.apple.com/documentation/swift/dictionary/1539319-init
2:36 AM
(元スレ見れてないです)
2:37 AM
ちなみに、 count を指定するんじゃダメです。
Avatar
compactMapValues の場合 値がほぼ nil のときにスペース無駄が多すぎになってしまうので、そこをどう考えるかでしょうね。
Avatar
なるほど。
2:39 AM
ちなみに Java の HashMap はもう少し細やかなコントロールができて、 capacity だけじゃなくて load factor も指定できます。 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#HashMap-int-float-
Avatar
norio_nomura 3/13/2018 2:40 AM
rustで使われたworkaroundの再hashが有効なら、Swiftもそれでいけるのでは?
2:42 AM
あ、プロセス単位でのランダマイズが実装されただけだから、ダメなのかな。 https://github.com/apple/swift/pull/14913
This PR implements resilient hashing for stdlib types and types with synthesized Hashable implementations. It changes the standard hash function to SipHash-1-3 with a per-execution random seed. Bac...
2:43 AM
あいや、インスタンス単位でもいけそうか。
Avatar
omochimetaru 3/13/2018 2:45 AM
ザッと読んだけどよくわからなかった・・・
2:45 AM
@kitasuke ninja: error: rebuilding 'build.ninja': subcommand failed
Avatar
多分これをやってみるんだろうな。 Set and Dictionary currently use a global random seed; we should perturb that seed with something to eliminate this issue. Simply XORing either the storage address or the capacity to the seed would eliminate the O(n^2) behavior. Per-instance seeding with the storage address is generally a good idea, except in cases where we want repeatable results – in test suites and the like. In those environments, we disable random hash seeding, but these operations should still not regress to quadratic performance. So when a hash seed override is in effect, we should still use the storage capacity as the hash seed. https://bugs.swift.org/browse/SR-3268?focusedCommentId=33436&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-33436
Avatar
omochimetaru 3/13/2018 2:45 AM
こっちでも発生したよ
Avatar
Dictionary.init(uniqueKeysWithValues: <#T##Sequence#>)
2:46 AM
これを使うと良いのでは
2:46 AM
ハッシュ云々に関してはこのAPIが責任を持ってやるべきなのでこっちに任せる
Avatar
それだと一度 Array を経由することになって遅くないですか?
Avatar
そっちのほうが遅いのか…
Avatar
omochimetaru 3/13/2018 2:47 AM
ハッシュ衝突時のふるまいが関係有ることはわかったけどなんで同じ辞書を複製するときの話になったりhash関数が違うと起こらないのかがよくわからない、あとでじっくり読み返す
Avatar
てか、 Swift の Dictionary って chaining じゃないのか。 Robin Hood Hashing って初めて知った。
2:49 AM
@omochimetaru
In this example, the first loop (populating one) finishes fairly quickly, as you would expect, but the second loop (copying into two) takes much, much longer.
use std::collections::hash_set::HashSet; fn main() { println!("populating..."); let mut one = HashSet::new(); for i in 1..5000000 { one.insert(i); } println!("cloning..."); let mut two = HashSet::new(); for v in one { two.insert(v); } }
2:49 AM
まずこれが理解できてなかったのでそもそも自分がわかってないんだとわかった。
Avatar
omochimetaru 3/13/2018 2:50 AM
あ〜
2:50 AM
出てくる順番の問題ってことか
2:51 AM
衝突したときにその同じインデックスになる集団を格納しているところの
2:51 AM
挿入手順が最悪ケースになりまくるという感じかな?
Avatar
norio_nomura 3/13/2018 2:57 AM
3日前に追加されたばかりのAPIを活用とかカッコイイ
Avatar
omochimetaru 3/13/2018 2:59 AM
Robin Hood Hashingは
3:00 AM
オープンアドレス法の改良亜種なのか。
Avatar
print("start") var x: Set<Int> = [] for i in 0 ..< 5000000 { x.insert(i) } print("initialized") var y: Set<Int> = [] for j in x { y.insert(j) } print("copied") これで実感できます。
Avatar
omochimetaru 3/13/2018 3:01 AM
@kitasuke cleanしてもなんか変なエラーになるね
Avatar
オープンアドレス法は線形走査法のイメージしかなくて、普通はチェイン法が使われるものだと思ってた。今は Robin Hood Hashing がモダンなのかぁ。
Avatar
omochimetaru 3/13/2018 3:04 AM
iMacProだと12コアだけビルドに割り当てても全く作業環境が低下しなくてめちゃいい
Avatar
12コア「だけ」👀
Avatar
@omochimetaru わざわざありがとうございます!僕のラップトップは貧弱なのでまだビルド終わってなかったですw じゃあ自分の変更をプッシュしちゃおうかな。文字列を定数で置換するだけだから念のためにテストしてるだけだし。
Avatar
omochimetaru 3/13/2018 3:13 AM
@kitasuke あいや、クリーンしつつkitaさんのブランチをビルドしたけど、エラーになってしまったということですが、rebaseしてなかったんでもう一回やってみてます
🙇 1
Avatar
omochimetaru 3/13/2018 3:42 AM
@kitasuke Expected Passes : 10703 Expected Failures : 26 Unsupported Tests : 347 -- check-swift-validation-macosx-x86_64 finished -- --- Finished tests for swift --- * 6b13f75ee6 (HEAD -> replace-of-builtin-string-with-constant) Define BUILTIN_NAME constant in `Strings.h` * a5268f8d19 (origin/master, origin/HEAD, master) Merge pull request #15189 from huonw/one-unnamed-owned-argument |\ | * e7002b6413 [AST] ParenType needs enough bits to store ValueOwnership::Owned. * | 96b695b55c [Update-checkout] Update the swift-4.2-branch to match clang, llvm, and compiler-rt branches * | 23d65887c5 Merge pull request #15191 from graydon/nonportable-batch-seed-test-shuffle-specific |\ \ | * | 0cfb0b9c84 [BatchMode] Fix non-portable test that relies on std::shuffle implementation. * | | f9b3e14137 [stdlib] Use Swift-native Character iteration for hasPrefix/Suffix (#14390) * | | a5db08643f Merge pull request #15195 from slavapestov/test-19978257 |\ \ \
3:42 AM
オッケーだった ↓の上にrebaseしたあとの状態で-r -T --clean。 a5268f8d19 (origin/master, origin/HEAD, master) Merge pull request #15189 from huonw/one-unnamed-owned-argument
Avatar
おーありがとうございます!僕のはまだテスト走ってて絶望してるところでした。 --cleanするという技を知れたので助かりました!
✌ 1
Avatar
@rintaro swift/utils/build-script --benchmark を実行してるのですが、指定した任意のBenchmarkのみ実行する方法はありますか?
Avatar
benchmark の runner 直接叩けばいけたはずですが、 build-script 経由でそのオプションはなさそうですね。
11:33 PM
{builddir}/swift-macosx-x86_64/bin/Benchmark_O --list でベンチマーク一覧
11:34 PM
{builddir}/swift-macosx-x86_64/bin/Benchmark_O {ベンチマーク名} でそのベンチマークだけ実行
Avatar
https://github.com/apple/swift/pull/15214 で懸念されている件のベンチマークが追加されたみたいですね。
Dictionary and Set currently exhibit O(n^2) behavior for certain operations involving copying elements in bulk. Add benchmarks to verify an upcoming fix and to catch regressions later. This is part...
Avatar
@rintaro ありがとうございます!あとでまたやってみます!
Avatar
benchmarkとれたけど、baseline (master branchでのbenchmark) が必要というエラーメッセージが出てきて、めんどくさいのでそのままプッシュしてしまった。
Avatar
@rintaro 他のコンパイラは読んだことないので分からないですが、マングル化に使う特別な意味合いを持つ文字列は定数化しないものなんですか? ASTMangler, Remangler, IRGenMangler等で使われてるやつです。 https://github.com/apple/swift/blob/master/lib/Demangling/Remangler.cpp#L597:L634
swift - The Swift Programming Language
Avatar
omochimetaru 3/19/2018 3:44 AM
@kitasuke これマングル(エンコード)するところと、対になるデマングルするところがあるはずで、リテラルが重複でハードコードされてるだろうから、共通化したほうが絶対いいと思うわ・・・ (edited)
Avatar
僕もそう思ったんですよ。マングルはまだ詳しくないから念のために聞いてみたかった。軽く検索した限りでも何箇所かでハードコードされてた
Avatar
omochimetaru 3/19/2018 3:46 AM
どんな特殊文字があるのかっていう一覧も、これだとこのファイルを全体的に眺めないとわからないよね
3:46 AM
他のメソッドにも散らばってるし
Avatar
これもまたStrings.hに定義するのが良いのかな?良い加減太って来たぞw このPRがマージされそうな雰囲気出てるから良いんだろうけど... https://github.com/apple/swift/pull/14963
I defined new string constants in String.h for Builtin so that we could replace string value with it. Added BUILTIN_NAME Added BUILTIN_TYPE_NAMEs It might be a bit different case, but should I ...
Avatar
omochimetaru 3/19/2018 3:49 AM
Strings.hは多分いろんなところからincludeされていて
3:49 AM
そういうファイルが変更されるとC++のビルドは
3:49 AM
何もかもリコンパイルになってしまうので
3:49 AM
Mangle関係のモジュールでしか関係ない定義についてはMangle関係のフォルダの中にヘッダーを置いて
3:49 AM
関連するところだけからincludeするほうが良いです
3:49 AM
あとinclude依存関係が増えるとループもしやすくなって依存が壊れがち
3:50 AM
マジックリテラルをシンボル化するリファクタリングと、 そのシンボル定義をどこから可視にするかっていうレイアウトの設計は、 別のタスクとして考えて、1個目については最小影響範囲で実現すると良いと思うってことです
Avatar
言われてみると確かに。Mangleフォルダにヘッダー置くのが良さそう
Avatar
omochimetaru 3/19/2018 3:51 AM
BuildInの件については最初からSWIFT_SHIMS_NAMEとかがあったから
3:51 AM
まあいいかなって感じなのと跨いで参照するモジュールも多いから、ややこしいし。
Avatar
いや、ASTとかIRGenで使ってたか。そこのファイルだけはそのヘッダーをincludeすれば良いか
Avatar
omochimetaru 3/19/2018 3:53 AM
.cpp側からピンポイントでincludeするのが無難そうですね
3:53 AM
PR出す時に、「影響最小化するようにinclude戦略取ったけどここはどう思う?」って書いておくのが良いと思う。 (edited)
Avatar
そうですね、とりあえずPR出して聞いてみたいと思います!ありがとうございます!
Avatar
omochimetaru 3/19/2018 3:55 AM
マングラーとかはそれなりに機能がモジュール化されてるしちゃんと見ると直しどころとかあるかもしれないですね
3:56 AM
特に最近大きめの変更とかもあったし、雑な実装になってるところとかあるかも (edited)
Avatar
マングラーは面白そうなので少しだけ見はじめました。まだ何でOldManglerがあったかの背景は知らないけどw
Avatar
omochimetaru 3/19/2018 3:58 AM
なんか最近かわったんですよ
3:59 AM
昔は、ラベル名と型名を交互に並べてたんだけど
3:59 AM
ラベル名は関数名で、型名はオーバーロード部分だよねということで
3:59 AM
ラベル名を前に並べて、型名を後ろに並べるように変わった
4:00 AM
そのアップデートの時に古い仕様を保存するためにのこしたのがOldじゃないかなあ
Avatar
結構最近のことなんですね。もっと昔の時代かと思ってました。
Avatar
omochimetaru 3/19/2018 4:01 AM
(もしかしたら、歴史上の昔の別の変更できたものかもしれんですが)
4:02 AM
あれです、Swift5にむけてABIの議論がされた一貫のようです
4:02 AM
この間のvaper勉強会の時に noppoman さんのスライドに出てきたシンボルは旧形式だったぐらいホットな話題です https://vapormeetuptokyo.connpass.com/event/77789/
## イベント概要 # VaporMeetupTokyo Vapor meetup in Tokyo 1st. Youtubeで配信します!19:00 スタート https://www.youtube.com/channel/UCQSdXXHq6tvvTDA58EqcfEQ/live Swiftはバージョン3以降OSSとなり、LinuxやAndroidなど...
Avatar
そうそう、try! Swift後の飲み会でnoppomanさんにマングルのこと色々教えてもらいましたw
Avatar
omochimetaru 3/19/2018 4:04 AM
ほおw
Avatar
彼は飲み会だけ参加だったw
Avatar
ああー、乗り遅れました。マングラーはあまり見て無いです。lib/Demangling lib/AST/ASTMangler lib/IRGen/IRGenManger がそれぞれ何の役割なのかも知らないレベル。
Avatar
omochimetaru 3/19/2018 6:46 AM
ASTManglerはinline化とかのためにバイナリにASTを添付しておくためのやつじゃないかと予想してる(名前だけ
Avatar
@kitasuke とりあえず、これだけの重複があるから 定数化したらメリットあるぜみたいなのを https://forums.swift.org/c/development/compiler で議論したほうが安全と思います。
For developers to discuss the development and implementation of the Swift compiler, low-level runtime, and SourceKit.
👀 1
Avatar
分かりました!フォーラムに書いてみます
Avatar
Mangler/Demangler の対という事に関しては、 Demangler は結局 char での switch で分岐しまくるのが一番速度が出るわけで、定数化するメリットは感じずらいことが多いと思う。 (edited)
Avatar
omochimetaru 3/19/2018 6:53 AM
Avatar
そうなのか
Avatar
omochimetaru 3/19/2018 6:58 AM
エンコード側はこれでいいけど const char str[] = "B";
6:58 AM
あ、でもどうだろ、デコード側も switch (...) { case str[0]: ...; } (edited)
6:59 AM
これで定数展開されて同じコードになる気もする
6:59 AM
あ、書けないか!?
6:59 AM
構文的に。
7:00 AM
caseのオペランドは定数整数式しか書けなかった気がするけどC++的にフォーマルに定数整数式になるかというとわからんな (edited)
7:01 AM
C++17ならconstexprで解決するかもしれないけど14プロジェクトだしマクロマジックになるかもなあ・・・
Avatar
まだそこまで考えてなかった... C++は書いてみないとわからん。そういうのも含めてフォーラムで提案するべきなんだな
Avatar
omochimetaru 3/19/2018 7:03 AM
まあパッチ作る作業始めれば気づけるというのもある
Avatar
軽く作り始めてみて、メリット出そうだったら 議論上げるのが良いと思いますよ。 (edited)
7:06 AM
一気にパッチ作れてしまうのであれば、フォーラムに上げずに GitHub で投げてしまって良いと思います。
7:09 AM
時間かかるけど作っても受け入れられるか不安なときは全部作る前にフォーラムに上げた方が良いと思います。 (edited)
Avatar
分かりました、一回作ってみて考えます。ありがとうございます!
Avatar
ProposalもApprovedになりました。 status が pending-proposal になってるんですけど、この場合、こちらから何かすることありますか? (edited)
Avatar
コアチームの誰かがレビューマネージャになって、Proposalマージ、SE採番、レビュー期間スケジューリング、フォーラムに投げるというのを行います。今の段階では特にこちらからすることは無く、待ちですね。
2:26 AM
一週間くらい音沙汰なかったら、 GitHub で状況問い合わせてみてください。
Avatar
@rintaro ありがとうございます!一旦待ってみます!
Avatar
name manglingの件は量が多すぎるのでフォーラムに投稿してみました。 https://forums.swift.org/t/hardcoded-symbol-strings-for-name-mangling/11216
I can see lots of hardcoded symbol strings for name mangling e.g. _Tt or i in llib/Demangling/Demangler.cpp, lib/Demangling/Remangler.cpp and so on. there isn’t a header file contains constant value for the symbols, there is a list of mangled n...
5:01 AM
ドキュメントでは種類ごとにリストで見れるようになってた。これを定数化して一覧に見れるヘッダーファイルが欲しいな https://github.com/apple/swift/blob/master/docs/ABI/Mangling.rst (edited)
swift - The Swift Programming Language
Avatar
上のフォーラムで聞いてみたマングルの定数化は否定的なコメントをもらったので修正は見送りですね...
👍 1
1:25 AM
popular topicsに入っていた
Avatar
その割にはコメント1件しかつかない!
😇 1
Avatar
https://github.com/apple/swift/pull/15738 build-script -x で生成した xcodeproj の グループ構成が変わったのは CMake のバージョンによるものでは無かったみたいです。 (edited)
Re-enable the use of folders with the USE_FOLDER setting. This got lost a while ago when we stopped including LLVM's top-level CMakeLists.txt. Put a bunch of new targets into folders. Shoul...
Avatar
swift - The Swift Programming Language
6:05 AM
あどうでしょう…欲しい結果より先にエラーが挙げられたらエラーをあげるのは別に間違ってはいないか… 🤔
6:09 AM
うーんよくよく考えてみれば確かに仕様として間違ってはいないですね、なぜわざわざエラーを作って止める作り方をしてるのかはちょっと気になりますが…
Avatar
norio_nomura 4/10/2018 6:12 AM
forEachthrowしないと途中で止められないから?
Avatar
Kishikawa Katsumi 4/10/2018 6:14 AM
for loopで書けば良さそうに思いますけどどうなんでしょうね。
6:14 AM
The implementation for first(where:) uses forEach and throws an error to escape execution—this works properly, but when an Xcode breakpoint is added for Swift errors, that throw triggers the breakp...
6:14 AM
^ 読んでないけど、過去に議論ずみっぽい?
Avatar
to avoid allocating an iterator for types where that is expensive
イテレータを作るコストが高い場合に、forEach をそのタイプに実装することでタイプごとの最適化が可能であると。
(edited)
Avatar
norio_nomura 4/10/2018 6:21 AM
stdlibに含まれる各種forEachは全部for inで書かれてるぽい?
Avatar
全く意図しない箇所でerror breakpoint発火するのはひどいと思うんですけど、それは重要じゃないのかという気持ちになりますね
Avatar
Kishikawa Katsumi 4/10/2018 7:27 AM
それはノイズになることは多ので、できれば言語のライブラリでは避けてほしいけど、中でキャッチして続行っていうのは普通の処理なので、仕方ないかなとも思います。
Avatar
omochimetaru 4/10/2018 7:29 AM
・for in でイテレータ作るよりもforEachのほうが早い  ってトピックと ・throwされるとデバッガが引っかかって嫌 ってトピックは
7:29 AM
両方解決できるのでは?
7:29 AM
あ、だめか
7:30 AM
forEachを中断する方法が例外しかない事に起因してるのか。
7:31 AM
継続するかどうかをreturnするクロージャを取る版のforEachがあったら良さそう。
Avatar
継続するかどうかをreturnするクロージャを取る版
NSArrayのenumerateObjectsがそういう感じでしたね。stop pointer
(edited)
Avatar
omochimetaru 4/10/2018 7:34 AM
あった気がする
7:34 AM
しかもfor inよりforEachにそういうパフォーマンス上の優位性があるなら
7:34 AM
これってstdlibに限った話ではなくて
7:35 AM
ユーザレイヤでも使ったほうがいいテクニックだから
7:35 AM
なおさら欲しいな。
Avatar
first(whereのちょろっと上にforEachがfor inで実装されてるんですけど...最適化のかかり方が変わるとかですかね?
Avatar
struct Foo : Sequence { struct Iterator : IteratorProtocol { mutating func next() -> Int? { return nil } } func makeIterator() -> Foo.Iterator { return Iterator() } func forEach(_ body: (Int) throws -> Void) rethrows { try body(1) try body(2) try body(3) } } let a = Foo() let b = a.first(where: { $0 == 2 }) print(b) こういう場合に Iterator が使われずに forEach が呼ばれるので、Iterator のオーバーヘッドを背負う必要がなくなるということですね。
Avatar
なるほどです
Avatar
なるほど
Avatar
omochimetaru 5/10/2018 1:47 AM
お。Hasher周りが落ち着いたからかな?
Avatar
@d_date [core team: needs implementation] ラベルついちゃっているので、何が足りないのか問い合わせたほうが良いと思います。
Avatar
@rintaro#0001 🙆‍♀️
Avatar
文句言いながら凄い適当に書いた英語のブログに、なぜかSlavaさんからコメントきたw https://twitter.com/slava_pestov/status/995856606582599682
@kitasuke Nice writeup. For what it’s worth, alloc_stack always uses the stack as of Swift 4.0, even for dynamically-sized allocations. Want to send us a PR to update SIL.rst? :)
Avatar
omochimetaru 5/14/2018 3:36 AM
おおw
Avatar
どうやって見つけたかは見当つかんけど嬉しい!英語で書いてよかった!
Avatar
omochimetaru 5/14/2018 3:41 AM
Slavaが指摘してるのは、記事中で引用してる So there is no guarantee that the allocated memory is really located on the stack. のセンテンスが、今はもう嘘だから直さない?って事?
Avatar
それを今まさにここで聞こうと思ってましたw たぶんそのことですよね。単純にその行消すだけでも良いかも
3:42 AM
If a type is runtime-sized, the compiler must emit code to potentially dynamically allocate memory. So there is no guarantee that the allocated memory is really located on the stack.
3:43 AM
この変更はSwift 4.0からなのか。そこのdiff見るの楽しそうだけど、探すの大変そう...
Avatar
omochimetaru 5/14/2018 3:44 AM
探してみる。
3:49 AM
discourage accidental use of them. Relatedly, fix several bugs where we were accidentally using dynamic allocas.
Avatar
これか。確かにこの人はこの辺のコードいじってますね
Avatar
omochimetaru 5/14/2018 3:50 AM
auto temp = ti.allocateStack(IGF, paramType, "indirect-temporary");
3:50 AM
allocateStackに "indirect-temporary" を渡しているのがそれっぽい匂いがする
3:51 AM
NonFixedTypeInfo.allocateStack 関数もこの辺の話に関係ありそう
Avatar
そもそもこの辺の処理はIRGenなのか
Avatar
omochimetaru 5/14/2018 3:52 AM
ああ、うん、だと思う
3:53 AM
SILの時点では alloc_stack 命令なのは変わらないから
3:53 AM
それが実際にどういうマシン操作になるのかを決めるのがIRGenの仕事。 (edited)
3:53 AM
…he heap Allocate buffers for local generic/resilient values on the stack. alloc_stack instructions in the entry block are translated using a dynamic alloca instruction with variables size. All ot...
3:53 AM
IRGen: Allocate generic/resilient values on the stack instead of on t… …he heap
3:53 AM
それっぽいタイトルのコミット。
3:55 AM
あ、これっぽいな
Avatar
確かに。最初のPRでいくつか定義されたものが消されてる。 DynamicAllocaとか
3:56 AM
てことはclean up...はリファクタなのか、最適化なのか
Avatar
omochimetaru 5/14/2018 3:56 AM
このコミットのNonFixedTypoInfo.cppで、 allocateStackの実装が IGF.createFixedSizeBufferAlloca(name); から emitDynamicAlloca(IGF, T, isInEntryBlock); に変わってる。
3:57 AM
コメントも // Make a fixed-size buffer. から // Allocate memory on the stack. になってるし。
Avatar
おー本当だ!
3:58 AM
PRのdiffベースで見たら何とか理解できる気はするので、凄い助かる
Avatar
omochimetaru 5/14/2018 4:00 AM
allock_stackがスタックとは限らないって過去の状態面白いね
Avatar
うん。面白い。意外と昔のコード読んだ方が面白いかも。改善の過程知れるし
Avatar
omochimetaru 5/14/2018 4:01 AM
そうなんだよなあ
4:01 AM
今回の場合はシンプルになったパターンだと思うけど、高度複雑化してる箇所は古い実装のほうがわかりやすかったりする
Avatar
そうですね。これはわいわいswiftcで皆んなでわいわい出来そう
Avatar
omochimetaru 5/14/2018 4:11 AM
おー確認取れた。
4:12 AM
@kitasuke The second change, yes. I think the first is just a cleanup
Avatar
omochiさんのおかげだ、ありがとうございます!twitterでカジュアルに聞いて答えてくれるの素晴らしい
Avatar
omochimetaru 5/14/2018 4:13 AM
オープンソースはありがてえなあ
4:13 AM
あとツイッター
Avatar
良い世界だ
🙂 1
Avatar
@kitasuke
確かにこの人はこの辺のコードいじってますね
この人、 Swift Core Team の John McCall さんですね。 https://swift.org/community/#community-structure ↓を書いた人です。 Error Handling Rationale and Proposal https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst Ownership https://github.com/apple/swift/blob/master/docs/OwnershipManifesto.md
(edited)
Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.
swift - The Swift Programming Language
swift - The Swift Programming Language
Avatar
全般的に触ってるのか。超人すぎる...
Avatar
omochimetaru 5/14/2018 5:13 AM
スラバとジョンマッコールとクリスラトナーはSwift四天王って感じする
Avatar
三人しかいないw
Avatar
Doug?
Avatar
omochimetaru 5/14/2018 5:13 AM
たしかに!
Avatar
Joe Groff は?
Avatar
omochimetaru 5/14/2018 5:14 AM
あふれた
Avatar
この前の PR のときに気付いて↓の PR も送ったんだけど誰も反応してくれない・・・ https://github.com/apple/swift/pull/16415
This PR improves the output format of benchmark tests. Currently, the output is something like below. # TEST SAMPLES MIN(μs) MAX(μs) MEAN(μs) SD(μs) MEDIAN(μs) MAX_RSS(B) ......
Avatar
omochimetaru 5/15/2018 1:38 AM
僕もそういうのある
😂 1
1:40 AM
コメントが0個のopen PRは300個中30個ぐらいあるようだ。
1:40 AM
WIPが多いからもっと少ないか
1:40 AM
Topics related to development and implementation of Swift
1:41 AM
こっちにスレ立てるっていう手もあるかも
Avatar
まあこれはそこまでするほどの PR じゃないからいいんだけど・・・。ベンチマークテストの出力フォーマットが崩れてたから直しただけなので。
Avatar
この件は、statusをAwaiting reviewに変えて、Implementationを明示的につける必要があったみたい。
@d_date [core team: needs implementation] ラベルついちゃっているので、何が足りないのか問い合わせたほうが良いと思います。
May 11, 2018
(edited)
Avatar
omochimetaru 5/25/2018 3:04 PM
デフォルトでbenchmarkがビルドされるのって昔からでしたっけ?
Avatar
昔からですねー。最近は --skip-build-benchmarks がすごく速く打てるようになってきました。
4:43 PM
Purpose This PR modifies build-script and build-script-impl such that they no longer build the benchmark suite by default. Instead it's completely opt-in using the new --build-benchmarks and --...
Avatar
omochimetaru 5/26/2018 4:11 AM
あれえ、そうかあ。 最近ビルドするとベンチマークのビルドに無茶苦茶時間がかかって、しかも全然並列化されなくてimacproでも遅いんですよね。 以前はスキップしなくても特に気にならなかったのですが。 単純にベンチマークの数が増えたとかなのか、、、? (edited)
Avatar
最近benchmarkビルドしてないので、時間あるときに試して見ます。一応、swift本体はデバッグビルドではないのですね?
Avatar
omochimetaru 5/26/2018 4:15 AM
いえ、—xcode —debugです
Avatar
なるほど。 --debug でも以前はそんなに気にならなかったと。
Avatar
omochimetaru 5/26/2018 4:17 AM
はい。ただ、ちょっとそこらへん記憶の自信が無くて、聞いてます
Avatar
とりあえず記憶の限りデフォルトでビルドされてたと思います。
Avatar
omochimetaru 5/26/2018 4:19 AM
なるほど。 ベンチマークがOnone, O, Osizeの全部ビルドされるのも昔からですか?
Avatar
あー、 Osize はそれが導入されてから以降なので最近といえば最近です。
4:22 AM
https://github.com/apple/swift/pull/12315 ただその前は Ounchecked がビルドされていたみたいなので、対して変化はなさそう。
We don't measure Ounchecked anymore. On the other hand we want to benchmark the Osize build.
Avatar
omochimetaru 5/26/2018 4:24 AM
なるほど〜 元からっぽいですね ありがとうございました
Avatar
omochimetaru 6/1/2018 4:28 PM
sw2.Animal.init$S3sw26AnimalCACycfc になるマングリング理解した
4:28 PM
AC のところがやべえわ
Avatar
@omochimetaru LLVM 系のコンテナ中身デバッガで見るのが大変問題って解決しました?
Avatar
omochimetaru 6/4/2018 5:59 AM
$lldb expr Type.Dump() で中途半端に解決しました (edited)
6:00 AM
DenceMapとかはDumpも無いし困る
Avatar
https://forums.swift.org/t/debugging-with-xcode-lldb/5391 どれだけ役立つのか分からないし、試したこともないんですけど、一応参考リンクです。
Hi, I’m using LLDB when debugging in Xcode. p x->dump() works fine, but what about vectors? For example SmallVectorImpl doesn’t offer dump(), and I can’t even get it’s size: error: Couldn't lookup symbols: __ZNK4llvm25SmallVectorTemplateCommonIN5swift11const...
Avatar
omochimetaru 6/4/2018 6:01 AM
完全にまさにこれだ ありがとうございます
6:03 AM
なるほど・・・ (2) を試してみよう
7:36 AM
気になる。
7:41 AM
思ったより些細な変更だった。
Avatar
WWDCのSwift labマジで最高!swiftcのPRの相談にslavaとかDougがのってくれる!
😆 6
Avatar
Dougがバグチケット作るの手伝ってくれて捗った!
😃 5
Avatar
I created a Slack for anyone who wants to contribute to Swift. This is 100% unofficial. All are welcome. We’ll use the Swift code of conduct. Join here: https://t.co/Yq2DFix2DF Let’s help each other contribute!
👀 1
6:47 AM
ObjCのメソッドの hogehogeWithFugafugaがSwiftから見ると hogehoge(fugafuga:) になるやつ
6:48 AM
↑こんな定義でがんばってたんやなw
Avatar
omochimetaru 6/12/2018 4:56 AM
Issue If we pass a raw SIL file as input to sil-opt, we get duplicated import declarations like below. Here is commands to reproduce sil-opt $sil-opt input.sil > output.sil input.sil sil_stage ...
4:56 AM
@kitasuke このパッチって、sil-optの制御で固定で出しちゃう処理と、SILPrinterが出しちゃう処理の2つあるうちの
4:56 AM
後者を潰したんだと理解しているけど
4:57 AM
その他に ・前者を潰す ・前者の処理で後者で出力しているかどうかを判定した上で重複するなら潰す というアプローチがありえると思っていて
4:57 AM
どういう判断で ・後者を潰す にしたのか知りたい
Avatar
sil-optの制御で固定で出しちゃう処理は、結局SILPrinterを通ってるんですよ。なのでSILPrinterさえ直せば全部解決
Avatar
omochimetaru 6/12/2018 4:58 AM
あれ、そうすると、「1回だけ出す」処理はどこにあるの?
Avatar
sil-optとswiftc -emit-silの両方のコマンドで同じ問題があって、それがSILPrinterのせいだった
Avatar
omochimetaru 6/12/2018 4:59 AM
ああ!w
Avatar
べたがき
Avatar
omochimetaru 6/12/2018 4:59 AM
ええw
4:59 AM
そういうことか。SILPrinterの中に 固定のと、ASTで出すのがあるのか。
Avatar
これはラボの時にSlavaも、そもそもこれ自体微妙な気もするけど、まあ良いかって感じだったw
4:59 AM
そうそう
Avatar
omochimetaru 6/12/2018 5:00 AM
2687-2689を削除するだけではだめだったの?
5:00 AM
先頭の方に出したい?
Avatar
それだと、inputファイルがswiftの時にimportが出力されなくなる
Avatar
omochimetaru 6/12/2018 5:01 AM
あ〜
Avatar
ASTはimport declないからASTPrinterにはimportの分だけ行かない
5:01 AM
SILPrinterとASTPrinterのこの微妙な関係がきもいw
Avatar
omochimetaru 6/12/2018 5:01 AM
なるほど、SwiftソースからSILに変換するときに
5:02 AM
固定の3つのimportが追加される
5:02 AM
っていうふるまいが必要なのか。
5:02 AM
でもSILから作ったASTでも同じ機構を使ってるから、SIL -> SIL のときには増殖していたと
Avatar
そうそう、SILが持ってるimport BuiltinがASTPrinterに反映されちゃうんですよね
Avatar
omochimetaru 6/12/2018 5:03 AM
なるほどなあ
5:04 AM
ありがとうよくわかった
🤞 1
5:04 AM
printSILWitnessTables(PrintCtx, getWitnessTableList()); printSILDefaultWitnessTables(PrintCtx, getDefaultWitnessTableList());
5:04 AM
DefaultWitnessTableってなんだろ。
Avatar
そこは残念ながらまだ調べれてないです...
Avatar
omochimetaru 6/12/2018 5:07 AM
なるほど。
Avatar
とりあえず雑に見つけたドキュメントだとこんな感じ /// A mapping from each requirement of a protocol to the SIL-level entity /// satisfying the requirement for a concrete type. class SILWitnessTable : public llvm::ilist_node<SILWitnessTable>, public SILAllocated<SILWitnessTable> /// A mapping from each requirement of a protocol to the SIL-level entity /// satisfying the requirement for conformances which do not explicitly /// provide a witness. class SILDefaultWitnessTable : public llvm::ilist_node<SILDefaultWitnessTable>, public SILAllocated<SILDefaultWitnessTable>
Avatar
omochimetaru 6/12/2018 5:48 AM
フーム
Avatar
default_witness_table は -enable-resilience のときに出力される、protocol extension のデフォルト実装のテーブルっていう事なんですが、僕もよく知らないです。
6:10 AM
@swift-4.1.3 -frontend -enable-resilience -emit-sil public protocol P { func foo() func bar() } extension P { public func foo() {} } (edited)
🛠 1
Avatar
swiftbot BOT 6/12/2018 6:10 AM
Author icon
rintaro
public protocol P { func foo() func bar() } extension P { public func foo() {} }
Version:
swift-4.1.1-RELEASE
Output:
Error:
Avatar
omochimetaru 6/12/2018 6:12 AM
protocol extensionのデフォルト実装のテーブル・・・
6:12 AM
実行時にその型自体のconformanceではなくてそのデフォルト実装に切り替わる(フォールバック?)する
6:12 AM
シナリオがある?
6:13 AM
あ、それとも、conformanceを示すものじゃなくて、protocol型に付随して生成されるってことかな。
Avatar
exit status: 1 with stderr:<unknown>:0: error: unknown argument: '-frontend' <unknown>:0: error: unknown argument: '-enable-resilience' <unknown>:0: error: option '-emit-sil' is not supported by 'swift'; did you mean to use 'swiftc'?
Avatar
あれ、-frontend だめか。
6:14 AM
sil_default_witness_table P { method #P.foo!1: <Self where Self : P> (Self) -> () -> () : @$S4test1PP3fooyyF // test.P.foo() -> () no_default }
Avatar
omochimetaru 6/12/2018 6:15 AM
なるほど
6:15 AM
Pについてできるものか。
6:16 AM
あとはそれがいつ使われるのかと、enable-resilienceが必要ってことは、 もし生成されてないときに、クラッシュする?パターンがあるってことですよね
6:16 AM
それが生成されてない場合にできない事が何かしらある
Avatar
norio_nomura 6/12/2018 6:28 AM
swiftcではなくswiftなので、-Xfrontendを使ってください。 @swift-4.1.3 -Xfrontend -enable-resilience -Xfrontend -emit-sil public protocol P { func foo() func bar() } extension P { public func foo() {} }
👍 1
Avatar
sil_stage canonical import Builtin import Swift import SwiftShims public protocol P { func foo() func bar() } extension P { public func foo() } // main sil @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>): %2 = integer_literal $Builtin.Int32, 0 // user: %3 %3 = struct $Int32 (%2 : $Builtin.Int32) // user: %4 return %3 : $Int32 // id: %4 } // end sil function 'main' // P.foo() sil private [transparent] [thunk] @_T04main1PP3fooyyF : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> () { // %0 // user: %2 bb0(%0 : $*τ_0_0): // function_ref P.foo() %1 = function_ref @_T04main1PPAAE3fooyyF : $@convention(method) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> () // user: %2 %2 = apply %1<τ_0_0>(%0) : $@convention(method) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> () %3 = tuple () // user: %4 return %3 : $() // id: %4 } // end sil function '_T04main1PP3fooyyF' // P.foo() sil @_T04main1PPAAE3fooyyF : $@convention(method) <Self where Self : P> (@in_guaranteed Self) -> () { // %0 // user: %1 bb0(%0 : $*Self): debug_value_addr %0 : $*Self, let, name "self", argno 1 // id: %1 %2 = tuple () // user: %3 return %2 : $() // id: %3 } // end sil function '_T04main1PPAAE3fooyyF' sil_default_witness_table P { method #P.foo!1: <Self where Self : P> (Self) -> () -> () : @_T04main1PP3fooyyF // main.P.foo() -> () no_default }
Avatar
omochimetaru 6/12/2018 6:29 AM
@swift-4.1.3 -Xfrontend -emit-sil public protocol P { func foo() func bar() } extension P { public func foo() {} }
Avatar
sil_stage canonical import Builtin import Swift import SwiftShims public protocol P { func foo() func bar() } extension P { public func foo() } // main sil @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>): %2 = integer_literal $Builtin.Int32, 0 // user: %3 %3 = struct $Int32 (%2 : $Builtin.Int32) // user: %4 return %3 : $Int32 // id: %4 } // end sil function 'main' // P.foo() sil @_T04main1PPAAE3fooyyF : $@convention(method) <Self where Self : P> (@in_guaranteed Self) -> () { // %0 // user: %1 bb0(%0 : $*Self): debug_value_addr %0 : $*Self, let, name "self", argno 1 // id: %1 %2 = tuple () // user: %3 return %2 : $() // id: %3 } // end sil function '_T04main1PPAAE3fooyyF'
Avatar
omochimetaru 6/12/2018 6:29 AM
ほんとだ。オプションが無いと出ない。 (edited)
Avatar
へーこれは面白い
Avatar
omochimetaru 6/12/2018 6:29 AM
単純に考えて
6:30 AM
本来はビルド時にdefault実装を参照するから必要無いわけで
6:30 AM
てことは、外部モジュールをあとからビルドしたときに
6:30 AM
その外部モジュールが、利用するライブラリのソースが見えないとき?に
6:30 AM
必要になる要素だよね
6:31 AM
あとはバージョン差分か
6:31 AM
リザイレンスって言ってるしモジュール跨ぎの定義変更とかバージョンズレが関係ありそうだけどややこしいな・・・
6:32 AM
ModuleM.protocolP と ModuleO.classA があるときに、 AがPをconformしていて、ただそこでそのときにMで定義されたデフォルト実装を使用しているとき
6:33 AM
現状の挙動だとおそらく M の実装を取り込んで ModuleO がビルドされるけど
6:33 AM
リザイレンスを考慮した(Swift5 ABI)挙動ではこれを
6:33 AM
ModuleO側のロジックとしてはModuleMの中に定義されたdefaultWTを参照するコードにコンパイルしておいて
6:34 AM
後にModuleMのprotocolPのデフォルト実装が変更されたときにも
6:34 AM
その変更に追従できるようになるとかそんなんかね。
Avatar
ほーなるほど
Avatar
omochimetaru 6/12/2018 6:38 AM
推測を積み上げただけなので! そのうちちゃんと調べます
Avatar
僕もまだSIL見て挙動を解明するのは亀ペースなので、ちゃんと調べて報告します
Avatar
omochimetaru 6/13/2018 5:01 AM
Swift does not support the SDK 'MacOSX10.13.sdk'
5:01 AM
masterがビルドできない・・
5:02 AM
僕のマシンの環境固有問題なのか、それとも、モハベ必須になった? (edited)
Avatar
現状 Xcode 10 beta が必要でございます
Avatar
omochimetaru 6/13/2018 5:02 AM
なったのか〜〜〜〜!
5:05 AM
入れてあるしリビルドしてきます。
Avatar
ビルドディレクトリいったん削除したほうが安全かも。 --clean でもいいですが。
Avatar
omochimetaru 6/13/2018 5:07 AM
消します消します
5:55 AM
これにつまづいて死亡 (edited)
Avatar
omochimetaru 6/14/2018 1:58 AM
再挑戦 まただめだったら素直にスナップショットまで巻き戻そう。 (edited)
Avatar
omochimetaru 6/14/2018 9:21 AM
(lldb) p argv (llvm::SmallVector<const char *, 256>) $0 = { llvm::SmallVectorImpl<const char *> = { llvm::SmallVectorTemplateBase<const char *, true> = { llvm::SmallVectorTemplateCommon<const char *> = { llvm::SmallVectorBase = (BeginX = 0x00007ffeeadd2d28, EndX = 0x00007ffeeadd2d90, CapacityX = 0x00007ffeeadd3528) FirstEl = { llvm::AlignedCharArray<8, 8> = (buffer = char [8] @ 0x00007fcf3885f218) } } } } Storage = { InlineElts = { [0] = { llvm::AlignedCharArray<8, 8> = (buffer = char [8] @ 0x00007fcf3885f220) } [1] = { llvm::AlignedCharArray<8, 8> = (buffer = char [8] @ 0x00007fcf3885f228) } [2] = { llvm::AlignedCharArray<8, 8> = (buffer = char [8] @ 0x00007fcf3885f230) }
9:22 AM
(lldb) command script import /Users/omochi/work/swift-source/llvm/utils/lldbDataFormatters.py (lldb) p argv (llvm::SmallVector<const char *, 256>) $3 = ([0] = "/Users/omochi/work/swift-source/build/Xcode-DebugAssert/swift-macosx-x86_64/Debug/bin/swift", [1] = "-frontend", [2] = "-emit-ir", [3] = "-primary-file", [4] = "a.swift", [5] = "-target", [6] = "x86_64-apple-darwin17.6.0", [7] = "-enable-objc-interop", [8] = "-color-diagnostics", [9] = "-module-name", [10] = "a", [11] = "-o", [12] = "-")
💯 1
9:22 AM
革命だ
Avatar
ほぉー、なるほど。
Avatar
omochimetaru 6/15/2018 9:25 AM
内部クラスの文字列化のAPIが多種多様すぎる・・・
Avatar
lldb不安定だなあ
11:28 AM
いけるときはいけるんだけど、だめなところだとだめ、xcodeごとフリーズする
Avatar
文字列化のAPIって、StringRefとかですか?
Avatar
omochimetaru 6/16/2018 6:36 AM
getString()とかmangleAsString()とか
6:37 AM
getNameとか
Avatar
ざっとIRGen読んでみたけど難しかった。全体を把握出来てないと、そういった多様なAPIの使用用途が分からないので困りますよねー。計画されて実装されたAPIなのか、単にミスって似たようなやつ作っただけなのか判別つかないw
Avatar
omochimetaru 6/16/2018 8:58 PM
わかってくるとそういう機微が読み取れるけど、なかなか遠い
Avatar
omochimetaru 6/17/2018 1:21 PM
うーん0616もビルドできない。
Avatar
omochimetaru 6/17/2018 1:52 PM
0531 + Xcode10betaもだめだなあ 0531 + Xcode9.4はいけるんだけど。
Avatar
masterのスナップショットが2日前くらいから、SwiftNIOやVaporのビルドでコンパイラがクラッシュする様になってるな。
Avatar
あらら
12:39 AM
—xcode全然ダメだけど—ninjaならいけるのかな マシン2台でダメだったから自分だけの問題と思えない
Avatar
norio_nomura 6/18/2018 1:14 AM
む、久しぶりにSwiftをビルドしてみるかな。
Avatar
norio_nomura 6/18/2018 4:52 AM
普通にビルド(swift/utils/build-script)終わった。 (edited)
Avatar
omochimetaru 6/18/2018 5:02 AM
あれ、マジですか
5:02 AM
--xcodeと--debugはつけてます?
Avatar
norio_nomura 6/18/2018 5:10 AM
オプション無しです。
Avatar
omochimetaru 6/18/2018 5:10 AM
なるほど。なしは--ninjaだから行けそうな気はする
Avatar
オプションなしだと --ninja --debug なので --xcode の問題っぽいですね。
Avatar
norio_nomura 6/18/2018 5:12 AM
--xcode --debug付きも試してみる。
Avatar
omochimetaru 6/18/2018 5:12 AM
ありがとうございます
Avatar
norio_nomura 6/18/2018 6:20 AM
error: Build input file cannot be found: '/Users/norio/github/swift-dev/build/Xcode-DebugAssert/swift-macosx-x86_64/lib/Syntax/8/Trivia.cpp' ** BUILD FAILED ** The following build commands failed: CompileC /Users/norio/github/swift-dev/build/Xcode-DebugAssert/swift-macosx-x86_64/lib/Syntax/Swift.build/Debug/swiftSyntax.build/Objects-normal/x86_64/Trivia.o /Users/norio/github/swift-dev/build/Xcode-DebugAssert/swift-macosx-x86_64/lib/Syntax/8/Trivia.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure) swift/utils/build-script: fatal error: command terminated with a non-zero exit status 65, aborting swift/utils/build-script --xcode --debug 318.61s user 85.88s system 10% cpu 1:05:10.49 total
6:22 AM
/Users/norio/github/swift-dev/build/Xcode-DebugAssert/swift-macosx-x86_64/lib/Syntax/8/Trivia.cpp 自体は存在してる。
Avatar
再度同コマンドで実行したらどうなります?
Avatar
omochimetaru 6/18/2018 6:23 AM
僕の壊れ方と違うな。
Avatar
norio_nomura 6/18/2018 6:24 AM
実行中です>同コマンド
Avatar
norio_nomura 6/18/2018 6:43 AM
先ほどのエラーが出た箇所は無事に通過しました。
Avatar
依存関係の不具合のようですねー。 https://bugs.swift.org/browse/SR-7959 https://bugs.swift.org/browse/SR-7961 あたりか。
Avatar
norio_nomura 6/18/2018 7:02 AM
clang: error: no such file or directory: '/Users/norio/github/swift-dev/build/Xcode-DebugAssert/swift-macosx-x86_64/stdlib/public/stubs/Swift.build/Debug/swiftStdlibStubs-macosx-x86_64.build/Objects-normal/undefined_arch/dummy.o' ** BUILD FAILED ** The following build commands failed: Ld /Users/norio/github/swift-dev/build/Xcode-DebugAssert/swift-macosx-x86_64/Debug/lib/swift/macosx/x86_64/libswiftCore.dylib normal x86_64 (1 failure) swift/utils/build-script: fatal error: command terminated with a non-zero exit status 65, aborting swift/utils/build-script --xcode --debug 33.72s user 6.88s system 1% cpu 40:17.78 total これでSR-7959とSR-7961の両方をコンプリート。
Avatar
omochimetaru 6/18/2018 7:03 AM
あ、このundefined_archで *.o が見つからないのは僕も踏んだやつです。
Avatar
norio_nomura 6/18/2018 7:05 AM
再実行も即座に失敗。
Avatar
https://github.com/apple/swift/pull/17647 リファレンスサイクルを静的検知できるようになりそうです。
Repurpose the walker for diagnosing implicit 'self' usage in closures to diagnose certain forms of reference cycles. Around assignment expressions with closure sources, we walk to the captu...
😍 3
Avatar
やっとレビューはじまった!
🎉 9
Avatar
omochimetaru 7/5/2018 7:06 AM
Xcode-beta3でもまだビルドできないや
7:06 AM
clang: error: no such file or directory: '/Users/omochi/work/swift-source/build/Xcode-DebugAssert/swift-macosx-x86_64/stdlib/public/runtime/Swift.build/Debug/swiftRuntime-macosx-x86_64.build/Objects-normal/undefined_arch/AnyHashableSupport.o' clang: error: no such file or directory: '/Users/omochi/work/swift-source/build/Xcode-DebugAssert/swift-macosx-x86_64/stdlib/public/runtime/Swift.build/Debug/swiftRuntime-macosx-x86_64.build/Objects-normal/undefined_arch/Array.o' clang: error: no such file or directory: '/Users/omochi/work/swift-source/build/Xcode-DebugAssert/swift-macosx-x86_64/stdlib/public/runtime/Swift.build/Debug/swiftRuntime-macosx-x86_64.build/Objects-normal/undefined_arch/Casting.o'
Avatar
norio_nomura 7/5/2018 9:26 PM
cmake を更新したらビルドできたという情報 https://twitter.com/mdiep/status/1014818943847096320
I’m able to build again! I had to install a newer, unreleased version of cmake that uses the old Xcode build system. (brew install --HEAD cmake) https://t.co/u0J4lxbMfN
Avatar
omochimetaru 7/6/2018 12:43 AM
おお。
12:45 AM
xcode10でnew build systemになって壊れてたのを、新しいcmakeで明示的にold build systemを使う事で回避、みたいな感じかな、やってみます
Avatar
https://gitlab.kitware.com/cmake/cmake/issues/18088 これが umbrella issue のようですね。 undefined_arch 問題にもリンクあり。
Xcode 10 comes with a "new build system" for which CMake will need updates to keep things working. I'm opening this as a tracking issue. CMake's test suite has many...
Avatar
omochimetaru 7/6/2018 12:52 AM
おおー本当だ。なるほどcmake側のissueになるんですね。
Avatar
norio_nomura 7/6/2018 2:40 AM
cmakeを更新してbuild-script --xcode --release --clean通った。 echo Build\ all\ projects Build all projects ** BUILD SUCCEEDED ** [2580.828 sec] swift/utils/build-script --xcode --release --clean 20093.85s user 1040.46s system 312% cpu 1:52:47.09 total
Avatar
omochimetaru 7/6/2018 2:41 AM
ちょうどこちらでも通りました、今生成されたXcodeの方でのビルドをしているところです
2:44 AM
いけた
2:44 AM
cmakeの情報共有ありがとうございました!
🙂 1
2:49 AM
The review of SE-0218 — Introduce compactMapValues to Dictionary begins now and runs through July 11, 2018. Reviews are an important part of the Swift evolution process. All review feedback should be either on this forum thread or, if you would like to keep your feedback p...
Avatar
昨日Ben Cohenさんからレビュー始めるよメールもらった。特に問題なさそうなのに、レビュー始めるのを知らせてくれるのうれしい。 just a heads-up, I will be kicking off the review of your proposal tomorrow, running through the following Monday. It's a pretty non-controversial proposal :) so I don't expect many issues in the review but just wanted to let you know. (edited)
Avatar
omochimetaru 7/6/2018 3:51 AM
お〜 そういう感じなんですね。
Avatar
All of the authors of "Unwrap or Die" were surprised when the proposal was suddenly posted for review. Please change your policies such that you will notify proposal authors before beginning reviews. It's possible authors may want to make last-minute clarifications or change...
Avatar
たしかにこれは荒れてますねw https://forums.swift.org/t/se-0217-the-unwrap-or-die-operator/14107 (edited)
The review of SE-0217 — Introducing the !! "Unwrap or Die" operator to the Swift Standard Library begins now and runs through July 7, 2018. Reviews are an important part of the Swift evolution process. All review feedback should be either on this forum thread or, if you wo...
Avatar
omochimetaru 7/6/2018 3:53 AM
All of the authors of "Unwrap or Die" were surprised when the proposal was suddenly posted for review.
ははん
3:54 AM
!! スレよく伸びるよね
Avatar
そのAuthorの中にBen Cohenさんもいるから、Review Managerとして気をつかってくれたのかもw (edited)
12:36 AM
Acceptされました😆
👏 16
Avatar
norio_nomura 7/19/2018 2:40 AM
最近、SourceKitがらみは よく @rintaro さんに直してもらってる気がするから、これもそうなる気がする。 https://bugs.swift.org/browse/SR-8315
Avatar
omochimetaru 7/23/2018 6:47 AM
lldbから式を実行しようとしてこんな感じのエラーが出ることがあって謎だったんだけど (lldb) p PrintOptions() error: Couldn't lookup symbols: __ZNSt3__18functionIFNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPKN5swift9ValueDeclEEEC1Ev __ZNSt3__18functionIFbPKN5swift13ExtensionDeclEEEC1Ev __ZNSt3__16vectorIN5swift11AnyAttrKindENS_9allocatorIS2_EEEC1Ev __ZNSt3__110shared_ptrIN5swift18ShouldPrintCheckerEEC1Ev
6:48 AM
lldbのREPLからだとC++のテンプレートクラスのコード生成がされないっぽいな
6:48 AM
バイナリの中に具体化されたシンボルがある組じゃないと実行できない
Avatar
omochimetaru 7/23/2018 7:28 AM
https://github.com/apple/swift/pull/18142 微妙な1行プルリク出した。通るかな・・・
This PR add default constructor of PrintOptions explicitly. This is already implemented by c++ compiler implicitly. But, it can not be called from lldb session. (lldb) p f->getLoweredFunctionTyp...
Avatar
なるほどー。これって ty->getString() は lldb で通らないってことなんですよね?
Avatar
omochimetaru 7/23/2018 7:34 AM
はい。それはこうなる。 (lldb) p type->getString() error: too few arguments to function call, expected 1, have 0 'getString' declared here
7:34 AM
getStringは1引数 + デフォルト引数になっているんだけど、lldbのexprはデフォルト引数が使えないみたいです。
7:35 AM
この問題単体で言えば、 Type::getString() の 0引数版オーバーロードを作って、1引数版のデフォルト引数をなくす、という手もあるしそっちのほうが便利だけど、 それはコーディングスタイルへの影響が大きそうだから自重した。
7:37 AM
もうちょっと言うと、BracketOptionsのデフォルトコンストラクタは無いんだけど、 4引数コンストラクタがあって、それが全部デフォルト引数で埋まってるものが、 デフォルトコンストラクタとして機能してる。 LLDBからだとそれがただの4引数コンストラクタに見えていて、 間接的にPrintOptionsのデフォルトコンストラクタが無い、という話になってる。
Avatar
omochimetaru 7/24/2018 1:39 AM
ん〜 そういうもんだから諦めて, getStringじゃなくてdumpつかったら、って言われてしまったw
Avatar
あー、LLDB って default parameter 使えないんですね。知りませんでした
Avatar
omochimetaru 7/27/2018 8:15 AM
コンパイルされて存在するシンボルが呼び出せるだけという事みたいですね、地味に不便・・・
Avatar
norio_nomura 8/5/2018 7:18 AM
Xcode 10で、Command Line Toolsがインストールされてる場合にxcrun --show-sdk-path/Library/Developer/CommandLineTools/SDKs/MacOSX.sdkを返す問題、xcrun --show-sdk-path --sdk macosxとすればちゃんと/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdkを返すことが分かった。
Avatar
swiftcのlldbでdumpメソッドが使えなくて困ってる
3:38 PM
Avatar
omochimetaru 8/8/2018 3:39 PM
1回目しか見えないの?
Avatar
一回目も見えないです。
Avatar
omochimetaru 8/8/2018 3:39 PM
ああ、読み違えた。
3:40 PM
#swiftc チャンネルに移動しましょう
Avatar
norio_nomura 9/18/2018 7:09 AM
少し前に swift-4.2 のボットが動かなくなっていた不具合 https://bugs.swift.org/browse/SR-8759https://github.com/apple/swift-corelibs-foundation/pull/1554/commits/9019439af335822229a4373986c6da0ce2f6efa9 をチェリーピックすれば直るぽい。
A lot of fields not copied It works very bad when Content-Length set but httpBody loosed after COW
Avatar
norio_nomura 9/22/2018 4:01 AM
swift-4.2-DEVELOPMENT-SNAPSHOT-2018-09-21-aで直ったのを確認した。
Avatar
first(where:) とかあるぐらいなので、こんなのも通るのかなと思ってるこの頃 extension Sequence { @inlinable public func indices( where predicate: (Element) throws -> Bool ) rethrows -> [Int] { return try self.enumerated().compactMap({ if try predicate($0.element) { return $0.offset } return nil }) } } let array = [1,2,3,4,5,6,7,8] print(array.indices(where: { $0 % 2 == 0})) //[1, 3, 5, 7]
Avatar
omochimetaru 9/27/2018 1:25 AM
インデックスを全部返すって今まであるっけ? インデックス複数は、削除や挿入に使うと数値がズレてしまうから、使いにくそうだ?
Avatar
Collection.indices があります。@d_date さんのこれとは意味合いが違うので混乱しそう。
1:30 AM
なので、Collection.indices(where:) -> [Self.Index] のほうが筋がいいと思います。 が、 indices(where:) だと Index/Element どちらに対しての条件なのかわかりにくいので、ネーミングが難しい。
Avatar
どっちかというと、 Collection.firstIndex(where:) とか BidirectionalCollection.lastIndex(where:) の仲間になると思うんですが、それはそうと、 lastIndex(where:)Collection にないのには理由があるのかな。
Avatar
omochimetaru 9/27/2018 1:40 AM
var a = AnyCollection([1,2,3]) let idxs = a.indices print(idxs)
1:40 AM
indicesはコレクションによっていろんな型があるんですな
Avatar
Bidirectionalだと逆順で探査可能だけど、生Collectionはその限りでない
Avatar
omochimetaru 9/27/2018 1:40 AM
元コレクションへのリファレンスを持って、途中で変更があったらコピーされるとも書いてあった
1:41 AM
If you mutate the collection while iterating over its indices, a strong reference can result in an unexpected copy of the collection
Avatar
逆順では探索不可能でも、正順で探索して最後に見つかったものなら、と思ったんですが
Avatar
omochimetaru 9/27/2018 1:41 AM
その意味では、数値はズレないですね。
Avatar
enum LinkedList<T>とかだと、lastIndexは作らない方が良さそう
1:41 AM
いやぁ、計算量がw
Avatar
omochimetaru 9/27/2018 1:41 AM
SWIFT RUNTIME BUG: unable to demangle type of field '_startIndex'. mangled type name is '5IndexSlQz'
1:42 AM
ついでに↑のコードでこれが出た
Avatar
可能か不可能かでいえば、O(n)になっちゃえば可能で、でもそれをprotocolとしてやるのはアレですよね
Avatar
lastIndex(where:)Complexity: O(*n*), where *n* is the length of the collection. で定義されているので 生 Collection でも OK っちゃあ OK なんですけどね。
Avatar
subscriptも同様にO(1)で参照できないといけない気がする
1:42 AM
あいや
1:43 AM
O(n)実装をrequireで要求するのは違うんじゃないかな?と
Avatar
プロトコル使う側としては、O(n)以下を期待したらいいんですよね。
1:44 AM
Complexity: O(n), where n is the length of the collection.
1:44 AM
ほんとだ、なんでw
1:44 AM
1:44 AM
あ〜・・・
Avatar
いや、ワーストケースはOnだから
1:44 AM
先頭ならO(1)
Avatar
omochimetaru 9/27/2018 1:45 AM
それはfirstIndexでも全く同じ話だよね
1:45 AM
違うか
1:45 AM
Bidirectionalは逆走していって最初のでショートカットできるけど
Avatar
lastIndexは前から探索だと常にO(n)ですね。
Avatar
そうそう
Avatar
omochimetaru 9/27/2018 1:45 AM
Collectionだとケツまで見ないといけないから常にフルスキャンなのか。
Avatar
firstIndex(where:)O(n) 定義ですよ。
Avatar
それって最悪オーダーで見てますよね?
Avatar
omochimetaru 9/27/2018 1:46 AM
オーダー表記だと「常にフルスキャンか、ショートカットしうるか」は
1:46 AM
区別できない
Avatar
そういうことですね < 最悪オーダー (edited)
Avatar
いやぁ計算量は
1:46 AM
最良と平均と最悪をだな、、、
Avatar
omochimetaru 9/27/2018 1:47 AM
この場合nだけじゃなくて
1:47 AM
欲しい要素が入っている個数mもいれて
1:47 AM
nとmの関数なら平均が議論できるね
Avatar
まあでもCollection周りのprotocolの定義って
1:47 AM
ちゃんと計算量に応じてデザインされてるので嬉しいです
1:47 AM
subscriptがRandomAccessで初めて生えるの、サイコーって感じだった (edited)
Avatar
firstIndex が先頭から X% のあたりに存在してることを期待しても O(n) で、先頭から M 個以内に存在することを期待してる場合だけが O(1) な気が。
Avatar
omochimetaru 9/27/2018 1:48 AM
O(kn) ですね kはmとnの関数
1:48 AM
nだけで見たオーダーで言えば同じ (edited)
Avatar
まあだから、実用面で悪くなるケースができるだけ少なくなるようにデザインしてるってことですよね。> lastIndex(where:)Collection にない理由。
Avatar
後実装者の負担とかもありそうです
Avatar
いや、それは protocol extension を定義しておけば (edited)
Avatar
あー、、いけるのか?
1:52 AM
reversed().firstIndex(q)とかならいけそうですけど
1:52 AM
生成コストも出てきてなかなか穏やかじゃない
Avatar
omochimetaru 9/27/2018 1:52 AM
firstIndexの実装をそのまま最後までループ回すだけじゃない?
Avatar
Avatar
似たような話で言うと、 Array には popFirst はないけど ArraySlice には popFirst がある。
Avatar
omochimetaru 9/27/2018 1:53 AM
直近のindexを覚えておいて、ループが終わってからそれを返す。
Avatar
あそうか、最後まで見て最後に残ったやつ返せばok
1:53 AM
確かに
Avatar
いや、違うのか、これは挙動的に startIndexArray ではずらせないからか。
Avatar
話を戻すと、 @d_date のやつはextensionで書いてあるから。
1:55 AM
もともと、 Sequence になってるんだけど、 firstIndex(where:)Collection で、 lastIndex(where:)BidirectionalCollection だなーと思ったのがぼくの疑問の発端で。
Avatar
Collection ならこんな感じですね。 extension Collection { @inlinable public func indices( where predicate: (Element) throws -> Bool ) rethrows -> [Index] { return try indices.filter { try predicate(self[$0]) } } }
Avatar
omochimetaru 9/27/2018 1:57 AM
良いですねえ
Avatar
だから、どのプロトコルに生やすのが適切なのかって考えると難しいなあと
Avatar
omochimetaru 9/27/2018 1:58 AM
enumerated().compactMap { predicate($0.element) ? $0.index : nil } (edited)
1:59 AM
これをその場で書くのは疲れるしあったら便利な気がしてきた
Avatar
リストだと、正順、逆順、ランダムアクセス、追加挿入削除がそれぞれ計算量に関わってくるので
Avatar
omochimetaru 9/27/2018 1:59 AM
rintaroさんの書き方が効率良いけとその場で書くにはselfが右にもう一度出てくるから苦しいし関数化されてるのは良さそう
Avatar
Collection, Bidirectional, RandomAccess, Mutableあたりまで意識してればオッケーな気がします
Avatar
omochimetaru 9/27/2018 2:00 AM
indicesは全部返すから
2:00 AM
Collectionの全ループので
2:00 AM
全部いっしょじゃない?
Avatar
そだね
Avatar
そうすると、 Sequence にはインデックスの概念がないから、 Collection に生やすのがいいのか。
Avatar
indices.filter 無駄がありそうな気がしたけど、 Array.IndicesRange<Int> なのか。
Avatar
あ、 enumerated() で列挙されるタプルの index は、 CollectionIndex とは違うのね。
Avatar
norio_nomura 9/27/2018 2:05 AM
lazy不憫な子…
Avatar
omochimetaru 9/27/2018 2:06 AM
あ、 enumerated() で列挙されるタプルの index は、 Collection の Index とは違うのね。
オワー、なるほど
Avatar
あ、lazyちゃんの存在忘れてたwごめん
Avatar
omochimetaru 9/27/2018 2:08 AM
lazy全然使ってないけどいつかパフォーマンス最適化してるときにココぞと使って問題が解決するときがあったらいいな
Avatar
幅優先探索を深さ優先探索に切り替えるときにめっちゃ使う
Avatar
omochimetaru 9/27/2018 2:09 AM
2:09 AM
その書換は面白いね
2:09 AM
そうかそうなるのか。
Avatar
compactMap->firstとか必須パターンよ
2:10 AM
lazy->compactMap->firstにした方が圧倒的に良いはず
Avatar
omochimetaru 9/27/2018 2:10 AM
圧倒的に良い場面に出会っても
2:10 AM
実際には先頭の数個でショートカットするようなときは
2:10 AM
オーバーヘッドのほうが効きそうだったりするから
2:10 AM
(あと型もややこしくなるし)
Avatar
それは…そうなのじゃ…
Avatar
omochimetaru 9/27/2018 2:11 AM
高速化目的においては問題が顕在化するまで使わないようにしている。
Avatar
深さ優先探索を明示的に意思表示するのに
2:11 AM
lazyつけるなぁ
Avatar
omochimetaru 9/27/2018 2:12 AM
あれ、結果的に得られるものは同じ気がしてきた
2:12 AM
深さ優先探索が幅優先探索になっているわけではない気がする?
2:12 AM
DFSとBFSでは本来、探索対象のツリーから返ってくる要素が異なるよね
2:13 AM
lazyにしてもしなくても、返ってくるものは同じだから。
Avatar
ああそれはそう
2:15 AM
なんだろ、特にfirst/lastを得る際に、深さ優先探索にすると枝刈りが出来るので計算量にインパクトがある、みたいなところが意図したところ
Avatar
omochimetaru 9/27/2018 2:16 AM
深さ優先探索をしてるはずなのに前段で無駄に幅スキャンしてるのをカットできるってことよね
Avatar
表現としてそもそも探索と出してるのがまずいな
2:16 AM
そうそう
Avatar
omochimetaru 9/27/2018 2:17 AM
compactMapFirstが今無い?
2:17 AM
pred: (T) -> U? があるときに、 最初の U を得る
Avatar
mapFirstがあるの?
Avatar
omochimetaru 9/27/2018 2:18 AM
comapctMap(pred).first だと効率悪いから
Avatar
それは普通にfirstか
Avatar
omochimetaru 9/27/2018 2:18 AM
first(where:) だと T を得ちゃうのよな
Avatar
なのでlazy使うのだ
Avatar
omochimetaru 9/27/2018 2:18 AM
たしかに今はそれしかないのか?
Avatar
mapFirst でも普通に lazy.map(...).first じゃない?
Avatar
そうやってます
2:20 AM
Dictionary.compactMapValuesと違って
2:21 AM
別にそこまで困らない代替案あるから
2:21 AM
必要ない気はする
Avatar
omochimetaru 9/27/2018 2:21 AM
compactMap(pred).firstlazy.compactMap(pred).first と書けば最適なのはわかるけど、 それが一番良い状態なのかなあという疑問。
2:21 AM
この先頭の lazy. に込められた意味がおもすぎるというか
2:21 AM
明示的でないというか。
Avatar
いや明示的だと思う
Avatar
omochimetaru 9/27/2018 2:21 AM
ちゃんと理解していないと意味がわからんコードだよね
Avatar
うーん、道具を増やしすぎるとわけわからなくなるから
2:22 AM
(多分無限に道具を追加しないといけなくなりそう)
Avatar
omochimetaru 9/27/2018 2:22 AM
compactMapFirst(pred) だったら
2:22 AM
やりたいことも意味も明示的だし、最適化は隠蔽される。
Avatar
例えばmap.filter.map.filter.map.firstだって
2:22 AM
言ってしまえばあり得るわけでさ
Avatar
既存の道具で簡潔に書けるならそれで良さそう。
Avatar
omochimetaru 9/27/2018 2:22 AM
こういう話をするとlazyで改善するパターンが無限に出てきちゃうのかなあ
Avatar
基本的にはfirst絡む場合だけだと思います
2:23 AM
lastだったらreversed.lazy...firstかな?
Avatar
僕は lazy の価値は 空間効率の良さのほうが大きいとおもいますね。
Avatar
reversedいらないっけ
Avatar
omochimetaru 9/27/2018 2:24 AM
ふむ > 空間効率
2:25 AM
どうせ画像とかが重すぎるからあまり気にしていなかった。
Avatar
巨大なシーケンスの巨大な filtered シーケンス を作るのに、 lazy じゃない filter だと空間効率ばかにならない。
Avatar
omochimetaru 9/27/2018 2:26 AM
巨大ってどれくらいのイメージですか? 1000?
Avatar
数だとエレメントの大きさによってしまうけど、10メガバイトとか。 (edited)
Avatar
omochimetaru 9/27/2018 2:27 AM
なるほど。
2:28 AM
エレメントはポインタのことが多いかなと。
Avatar
first とかでなくても a.filter { $0 % 2 == 0 }.reduce(0, +) とかでも lazy 入れないと filter で作られる Array が使い捨てされて無駄だから lazy 入れた方がお行儀がいいと思う。
2:33 AM
まあ、大抵は問題にならないけど、それを言えば O(n) を気にしなくていいことも多いし。
Avatar
omochimetaru 9/27/2018 2:33 AM
そういうケースで入れると
2:34 AM
firstの前に置くケースが
2:34 AM
余計かすれてくるというか。
2:34 AM
.lazy に込めてる気持ちの強さが場合によって結構異なっているのに
2:34 AM
それがコード上見えてこないのが気になるんですよね
Avatar
Haskell みたいに遅延評価の言語だと基本 lazy 状態だしなぁ。無駄があるなら lazy くらいカジュアルに使ってもいい気が。 (edited)
Avatar
omochimetaru 9/27/2018 2:43 AM
たしかに高階関数で処理していくようなコードではたいていお得だからデフォルトで使うぐらいの気持ちで行くって戦略も合理的な気がする。
Avatar
norio_nomura 9/27/2018 2:44 AM
Haskellの遅延評価とlazyはちょっと違う様な。
Avatar
挙動は違いますが、特に Sequence 関係で必要なものを必要なだけ計算させるという意味で同じ役割を果たせるケースが多いと思います。
Avatar
compactMapの実装見てて気になったんですけど、 https://github.com/apple/swift/blob/dd2f3b43860d7a49e4140c0f4a06217c2fd4829d/stdlib/public/core/FlatMap.swift#L49 本来はOptionalにcompactedが生えていて、compactMapはmap+compactedであるべきなのでは。 flatMapはmap+flattenですよね。
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
Avatar
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
3:30 AM
takasekさんの挙げてるのはLazySequenceProtocolのやつだけど
3:31 AM
Sequenceのやつはそもそもループで書き下されてますね
3:31 AM
Optionalにcompactedが生えていて
これは、 Sequence where Element == Optional<T> に、の意図ですよね
3:34 AM
compactedがそもそも怪しい方法でしか実装できないから、現状だと微妙な気がします もしcompactedが存在するとしたら、map + compacted にするのが良いのかな・・・?
Avatar
Optional<T> { func compacted() throws -> T } というのをイメージしてたんですがerrorに情報ないんで意味がないな… Sequence where Element == Optional<T> でなら意味あるかもしんないけど
Avatar
OptionalflatMap も同じく map + flatten で実装されてないはずですね。 flatten が作れないので。
Avatar
なるほど例外にするというアイデアは無かったです
Avatar
ただ func compacted() throws -> T があったとしても、 compactMap でrethrowsされちゃいけないので、たぶん結局 try? してOptionalに変換することになるんですよね 何も意味がない 他のユースケースでも大抵そうなりそう
Avatar
OptionalはそもそもがOptionalなので エラーをnilで返すと考えればそれ自身がすでにcompacted() といえる
Avatar
ということですね Simple domain error
Avatar
swift-DEVELOPMENT-SNAPSHOT-2018-10-19のLinuxツールチェイン、import Dispatchでエラーになる
2:21 AM
Hosted Continuous Integration for web applications. Set up your application for testing in one click, on the fastest testing platform on the internet.
Avatar
Foundationの開発は リポジトリに入ってる xcworkspace でやるのが標準的っぽいんだけど
3:37 AM
そのためにはXcodeのToolchainを切り替えなきゃいけないから
3:37 AM
普段のToolchainを使う作業と並行してできないのでちょっと面倒だ
Avatar
/Applications/Xcode.app/Contents/MacOS/Xcode -DVTDefaultToolchainOverrideIdentifer org.swift.42120181030aで指定のToolchainを使うXcodeのインスタンスを起動できるよ。
Avatar
以前からSourceKitはsandbox環境下だと動かなかったのだけど、その環境下でもSourceKitのAPIがエラーをちゃんと返してくれてたので問題回避可能だった。しかしMojave 10.14.1?からSourceKitのAPIから呼ばれるlibxpc.dylibのAPI内でクラッシュする様になってしまった。
10:08 AM
それが原因でHomebrewでのSwiftLint 0.28.1リリースが出ない。 https://github.com/Homebrew/homebrew-core/pull/34268
Avatar
CLIプロセスがsandbox環境下にあるかどうかを調べる方法はよくわからないから、SourceKitが初期化時にxpcエラーを受け取ってるかどうか、検出できる様なフックを付けてもらう様なPRを書こうかどうしようか迷ってる。
Avatar
ややこしい
Avatar
  • sandboxが原因でSourceKitの初期化に失敗しても、失敗を検出できない。
  • sandboxだったらSourceKitを使わない様にしたいが、sandboxかどうかわからない。
Avatar
SourceKitの初期化の失敗についてなんらかの情報が取れるようになっていて、その情報から死因がsandboxだと断定できるようになるのが、綺麗な感じがしますね。
Avatar
This PR changes type of Thread.threadDictionary to NSMutableDictionary from Dictionary<String, Any>. The reasons are below. Because apple's implementation for macOS/iOS is so. A current...
12:31 PM
Please test with the following pull request apple/swift-corelibs-xctest#240 @swift-ci test
12:31 PM
↑botくん、こんなややこしい命令もできるんですねw
Avatar
久しぶりにswift-corelibs-foundationへPR書いたのだけど、今のswift-corelibs-foundationのmasterはXcode 10.1添付のtoolchainではビルド出来なかった。 (edited)
Avatar
それは面倒ですねw
Avatar
swift-5.0-DEVELOPMENT-SNAPSHOT-2019-01-22-aでビルド出来た。
Avatar
Xcodeでダメだったのだけど、build-scriptならイケたのだろうか。
Avatar
corelibsもswiftのmasterに追従していくので、最新のtoolchainじゃないとビルドはできなくなってきますね
12:34 PM
https://github.com/apple/swift-corelibs-foundation/blob/master/Docs/GettingStarted.md ここにもThe current Swift toolchainとあります(リンク先はSnapshots) (edited)
The Foundation Project, providing core utilities, internationalization, and OS independence - apple/swift-corelibs-foundation
🙏 1
12:37 PM
build-scriptだとどうなんでしょうね
1:40 PM
しかしよく調べると、元は https://github.com/apple/swift/pull/20315String.Index.init(encodedOffset:)のパラメータの意味合いがこっそり変わっているのが原因で、他にも影響を受けているところがありそう。
Original PR Switch the native encoding of String to be UTF-8 and finalize String's ABI for Swift 5.0. Resolves SR-7602. rdar://problem/42339222
1:43 PM
ぬう、 @rintaro さんは https://bugs.swift.org/browse/SR-9311`String.Index.encodedOffset` doesn't necessarily mean UTF16 offset. とか書いてるな。今までUTF-16オフセットとしてたのが間違いだったのかな?
1:48 PM
ここにもThe current Swift toolchainとあります なるほど。
Avatar
@swift-4.2.4 @swift-5.0.3 import Foundation func printOffset(_ string: String, as name: String) { let offset = string.endIndex.encodedOffset print(""" endIndex.encodedOffset is \(offset) that same with \( offset == string.utf8.distance(from: string.startIndex, to: string.endIndex) ? "utf8" : offset == string.utf16.distance(from: string.startIndex, to: string.endIndex) ? "utf16" : "unknown" ) offset (\(name)) """) } let string = "😀" printOffset(string, as: "String") let nsstring = NSString(data: string.data(using: .utf8)!, encoding: String.Encoding.utf8.rawValue)! as String printOffset(nsstring, as: "String created by NSString API") (edited)
Avatar
endIndex.encodedOffset is 4 that same with utf8 offset (String) endIndex.encodedOffset is 4 that same with utf8 offset (String created by NSString API) (edited)
Avatar
endIndex.encodedOffset is 2 that same with utf16 offset (String) endIndex.encodedOffset is 2 that same with utf16 offset (String created by NSString API) (edited)
Avatar
norio_nomura 1/24/2019 2:19 AM
Swift 4.2.1までString.Index.encodedOffsetはUTF-16のオフセット。 Swift 5ではUTF-8とUTF-16が混在し、 Linuxだと(常に?)UTF-8 macOSだとNativeなStringはUTF-8、NSString APIで作ったStringはUTF-16になる。 $ xcrun --toolchain org.swift.5020190122a swift test.swift endIndex.encodedOffset is 4 that same with utf8 offset (String) endIndex.encodedOffset is 2 that same with utf16 offset (String created by NSString API) $ xcrun --toolchain org.swift.42120181030a swift test.swift endIndex.encodedOffset is 2 that same with utf16 offset (String) endIndex.encodedOffset is 2 that same with utf16 offset (String created by NSString API) (edited)
Avatar
omochimetaru 1/24/2019 3:03 AM
ほ〜〜
3:04 AM
String.Index自身は、今encodedOffsetがどっちなのかは保持していなくて
3:04 AM
外側で正しく扱う必要がある?
3:05 AM
昔はEncoding別にIndexが別の型だったけどString.Indexに共通化するっていう仕様変更が途中であった気がしてて
3:05 AM
でもその状態でString.Indexの中身に種類があるとすると
3:05 AM
元々のバラバラの型だった状態のほうが安全でよろしいような?俺がなんか誤解してそう (edited)
Avatar
norio_nomura 1/24/2019 3:11 AM
今の実装は、String.UTF8View.IndexString.UTF16View.IndexのどちらもString.Indexへのtypealiasになってます。
3:15 AM
問題となるのは、var encodedOffset: IntはUTF-16のオフセットだと決め打ちしてIntを取り出し、UTF16のオフセットとして計算し、それを使ってString.Index.init(encodedOffset:)を呼び出していたコードです。
Avatar
omochimetaru 1/24/2019 3:18 AM
なるほど。 var encodedOffsetとかはinternalだから、Swift Foundation内部実装での話ってことですよね?
3:18 AM
その問題は一般ユーザには関係ないという理解であってます? (edited)
Avatar
norio_nomura 1/24/2019 3:18 AM
いや、encodedOffsetpublicですよ。
Avatar
omochimetaru 1/24/2019 3:19 AM
ホントだ!!!!!!!
3:19 AM
extension String.Index { /// Creates a new index at the specified UTF-16 offset. /// /// - Parameter offset: An offset in UTF-16 code units. public init(encodedOffset offset: Int) /// The offset into a string's UTF-16 encoding for this index. public var encodedOffset: Int { get } ...
3:19 AM
しかも元々UTF-16換算であるとして明記されているのか
3:20 AM
ヤバそう
Avatar
norio_nomura 1/24/2019 3:21 AM
以前の実装も、UTF8Vewi.IndexUTF16View.IndexもどちらもencodedOffsetは同じ値を返してました。(UTF-16ベース) @swift-4.2.4 @swift-5.0.3 import Foundation let string = "\u{1F600}" print(""" utf8.endIndex.encodedOffset: \(string.utf8.endIndex.encodedOffset) utf16.endIndex.encodedOffset: \(string.utf16.endIndex.encodedOffset) distance in utf8: \(string.utf8.distance(from: string.startIndex, to: string.endIndex)) distance in utf16: \(string.utf16.distance(from: string.startIndex, to: string.endIndex)) """) (edited)
Avatar
utf8.endIndex.encodedOffset: 2 utf16.endIndex.encodedOffset: 2 distance in utf8: 4 distance in utf16: 2 (edited)
Avatar
utf8 encodedOffset: 4 utf16 encodedOffset: 4 utf8 distance: 4 utf16 distance: 2 (edited)
Avatar
norio_nomura 1/24/2019 3:29 AM
しかも元々UTF-16換算であるとして明記されているのか 表面上見える変化としてはコメントからUTF-16明記が削除されただけで、注意喚起とか何も無い。
3:31 AM
StringがUTF-8とUTF-16のどちらをencodedOffsetとして使っているかは、startIndexendIndexの距離を計算し、それをendIndex.encodedOffsetと比較してみないと分からない。 (edited)
3:34 AM
NSRangeとか作るときにうっかりencodedOffsetを使っていないか、確認しないとマズイです。
Avatar
utf8.endIndex.encodedOffset: 4 utf16.endIndex.encodedOffset: 4 distance in utf8: 4 distance in utf16: 2
Avatar
norio_nomura 1/24/2019 3:42 AM
GitHub is where people build software. More than 28 million people use GitHub to discover, fork, and contribute to over 85 million projects.
Avatar
omochimetaru 1/24/2019 4:21 AM
🤔 ...
Avatar
norio_nomura 1/24/2019 5:25 AM
swift-corelibs-foundationで実際に壊れてたのを修正するパッチ。 NSStringのAPIがNSRangeで返してきたものをRange<String.Index>へ変換する際に使われてた。 /// Return an `Index` corresponding to the given offset in our UTF-16 /// representation. func _index(_ utf16Index: Int) -> Index { - return Index(encodedOffset: utf16Index + _substringOffset) + return self.utf16.index(self.utf16.startIndex, offsetBy: utf16Index) } https://github.com/apple/swift-corelibs-foundation/pull/1841/commits/de8eaceaa0b8c23ade0690f80c094c3304d31667#diff-45748247f2cea16dbd8450b033d6654fR446
Avatar
String.IndexencodedOffsetについてissue書いた。 https://bugs.swift.org/browse/SR-9749
Avatar
omochimetaru 1/25/2019 1:31 AM
おーーまとめてて偉い・・・
[MUST] Behavior changes should be documented (eg within changelog).
はげしくどうい
Avatar
norio_nomura 1/25/2019 4:28 AM
encodedOffsetinit(encodedOffset:)@available(swift, deprecated: 4.2, obsoleted: 5.0,…)にして、String.Index.utf16CodeUnitOffset(with:), String.Index.utf8CodeUnitOffset(with:), String.Index.init(utf16CodeUnitOffset:within:), String.Index.init(utf16CodeUnitOffset:within:)を新設するPR来た! https://github.com/apple/swift/pull/22108 (edited)
Replace the encodedOffset initializer and var with a pair of initializers and vars specifying the actual encoding. encodedOffset was meant to be used opaquely, but common usage makes assumptions ab...
👀 2
Avatar
norio_nomura 1/25/2019 4:35 AM
思いついたけど、issueに書くのが面倒で省略した新APIとほぼ同じものが入ってる。
Avatar
SwiftSyntax の dump が超絶読みづらい問題、近々会社的な fork からパッチをあげるかもです
3:34 PM
Pretty results of dump() for Syntax The result of dump() with Syntax is not useful. For example, the dumped result of Tests/SwiftSyntaxTest/Inputs/closure.swift is the following: ▿ // A closure without a signature. The test will ensure it stays the same after // applying a rewriting pass. let x: () -> Void = {} ▿ data: SwiftSyntax.SyntaxData - parent: nil ▿ absoluteRaw: SwiftSyntax.AbsoluteRawSyntax - raw: // A closure without a signature. The test will ensure it stays the same after // applying a rewriting pass. let x: () -> Void = {} #0 ▿ super: Swift.ManagedBuffer<SwiftSyntax.RawSyntaxBase, Swift.UInt64> ▿ header: SwiftSyntax.RawSyntaxBase ... This patch improve this result to the following: ▿ SourceFileSyntax ▿ statements: CodeBlockItemListSyntax ▿ 0: CodeBlockItemSyntax ▿ item: VariableDeclSyntax - attributes: nil - modifiers: nil ▿ letOrVarKeyword: TokenSyntax - text: "let" ▿ leadingTrivia: SwiftSyntax.Trivia ▿ pieces: 4 elements ▿ TriviaPiece - lineComment: "// A closure without a signature. The test will ensure it stays the same after" ...
3:35 PM
これ、 https://swift-ast-explorer.kishikawakatsumi.com/ を dump でできるようにするイメージがわかりやすいかもですね。LLDB から見てもきっと便利なはず。
👀 4
Avatar
@Kuniwak うちのマネージャが、「it's great improvement」って言ってました 😊
Avatar
わーい
4:34 AM
このパッチ、来週の水曜に送ります(たぶん)
4:35 AM
(SwiftWednesday という社内有志のわいわい会のネタでした)
Avatar
The result of dump() with Syntax is not useful. For example, the dumped result of Tests/SwiftSyntaxTest/Inputs/closure.swift is the following: ▿ // A closure without a signature. The test will ensu...
😍 3
11:49 AM
@noppe さんとの共同作業でした
🦊 2
Avatar
libSyntaxの方で kw_weak が無い気がするんですが、これって実装するの難しいんですか? SwiftSyntaxで @IBOutlet private weak var button: UIButton! のweakが identifier になってたので、この文脈なら weakKeyword になってほしかった (edited)
Avatar
omochimetaru 3/1/2019 4:33 AM
varが抜けてるけど
Avatar
修正した
Avatar
omochimetaru 3/1/2019 4:35 AM
どんなのがくるのか試そうとしたら固まってしまった https://swift-ast-explorer.kishikawakatsumi.com
4:36 AM
@swift-5.0.3 -frontend -emit-syntax class View { @IBOutlet private weak var button: UIButton! } (edited)
Avatar
swift50 BOT 3/1/2019 4:36 AM
{"id":34,"kind":"SourceFile","layout":[{"id":33,"kind":"CodeBlockItemList","layout":[{"id":30,"kind":"CodeBlockItem","layout":[{"id":29,"kind":"ClassDecl","layout":[null,null,{"id":1,"tokenKind":{"kind":"kw_class"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},{"id":2,"tokenKind":{"kind":"identifier","text":"View"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},null,null,null,{"id":28,"kind":"MemberDeclBlock","layout":[{"id":3,"tokenKind":{"kind":"l_brace"},"leadingTrivia":[],"trailingTrivia":[],"presence":"Present"},{"id":26,"kind":"MemberDeclList","layout":[{"id":25,"kind":"MemberDeclListItem","layout":[{"id":24,"kind":"VariableDecl","layout":[{"id":7,"kind":"AttributeList","layout":[{"id":6,"kind":"Attribute","layout":[{"id":4,"tokenKind":{"kind":"at_sign"},"leadingTrivia":[{"kind":"Newline","value":1},{"kind":"Space","value":2}],"trailingTrivia":[],"presence":"Present"},{"id":5,"tokenKind":{"kind":"identifier","text":"IBOutlet"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},null,null,null,null],"presence":"Present"}],"presence":"Present"},{"id":12,"kind":"ModifierList","layout":[{"id":9,"kind":"DeclModifier","layout":[{"id":8,"tokenKind":{"kind":"kw_private"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},null,null,null],"presence":"Present"},{"id":11,"kind":"DeclModifier","layout":[{"id":10,"tokenKind":{"kind":"identifier","text":"weak"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},null,null,null],"presence":"Present"}],"presence":"Present"},{"id":13,"tokenKind":{"kind":"kw_var"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},{"id":23,"kind":"PatternBindingList","layout":[{"id":22,"kind":"PatternBinding","layout":[{"id":15,"kind":"IdentifierPattern","layout":[{"id":14,"tokenKind":{"kind":"identifier","text":"button (edited)
Avatar
朝試したときは動いててここで確認したんですが、こっちでも固まって動かなくなってしまった...
4:38 AM
{"kind":"identifier","text":"weak"}
Avatar
omochimetaru 3/1/2019 4:38 AM
Avatar
{"kind":"identifier","text":"weak"}じゃなくて{"kind":"kw_weak"}を期待してた
Avatar
omochimetaru 3/1/2019 4:39 AM
なるほど。ModifierListの中の要素としてidentifierとして来るのか。
4:39 AM
kw_weakになっててほしいね
Avatar
うん。ModifierListの中にあるんだから予約語として認識できそうだけど
Avatar
omochimetaru 3/1/2019 4:39 AM
この辺の仕様の網羅性ってよくわからんなあ
4:40 AM
privateのほうはkw_privateになってるしね。
Avatar
軽くググったとおりだと、SwiftSyntaxにもlibSyntaxにも kw_weak はなかった
Avatar
omochimetaru 3/1/2019 4:43 AM
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
4:43 AM
ここ?
Avatar
weak はcontextual keywordで、場所によってキーワードにならないので、Parser都合でそうなってますね。
4:44 AM
どうなるかわからないけど、bugs.swift.org 歓迎です!
Avatar
変数名では weak使えるからidentifierになるのは分かります。この文脈のみキーワードが自然だなと思った次第です
Avatar
omochimetaru 3/1/2019 4:44 AM
@rintaro privatevarはどこでもキーワードってことですか?
Avatar
書いてみます!
Avatar
omochimetaru 3/1/2019 4:44 AM
そんな気もする・・・
4:45 AM
var weak: Int = 0 // var var: Int = 1 // var private: Int = 2
4:47 AM
bool isContextualKeyword(StringRef ContextKW) const { return is(tok::identifier) && !isEscapedIdentifier() && Text == ContextKW; } (edited)
Avatar
private とかはそうなんですが、パラメータラベルにはバッククォートなしで使えたり、最初のkeyword定義と言語仕様の変化と実装都合でいろいろ不整合があります。
4:48 AM
private は keyword だけど、同じ場所で使う open はキーワードじゃない等。
Avatar
omochimetaru 3/1/2019 4:48 AM
CONTEXTUAL_SIMPLE_DECL_ATTR(final, Final, CONTEXTUAL_SIMPLE_DECL_ATTR(required, Required, CONTEXTUAL_SIMPLE_DECL_ATTR(optional, Optional, CONTEXTUAL_SIMPLE_DECL_ATTR(lazy, Lazy, DeclModifier | CONTEXTUAL_SIMPLE_DECL_ATTR(dynamic, Dynamic, CONTEXTUAL_SIMPLE_DECL_ATTR(infix, Infix, CONTEXTUAL_SIMPLE_DECL_ATTR(prefix, Prefix, CONTEXTUAL_SIMPLE_DECL_ATTR(postfix, Postfix, CONTEXTUAL_SIMPLE_DECL_ATTR(__consuming, Consuming, CONTEXTUAL_SIMPLE_DECL_ATTR(mutating, Mutating, CONTEXTUAL_SIMPLE_DECL_ATTR(nonmutating, NonMutating, CONTEXTUAL_SIMPLE_DECL_ATTR(convenience, Convenience, CONTEXTUAL_SIMPLE_DECL_ATTR(override, Override, CONTEXTUAL_DECL_ATTR_ALIAS(open, AccessControl) CONTEXTUAL_DECL_ATTR(weak, ReferenceOwnership, CONTEXTUAL_DECL_ATTR_ALIAS(unowned, ReferenceOwnership) CONTEXTUAL_SIMPLE_DECL_ATTR(indirect, Indirect, DeclModifier |
4:49 AM
おもしろいw > openは違う
4:49 AM
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
Avatar
こんなにいっぱいあるのか
Avatar
omochimetaru 3/1/2019 4:51 AM
@swift-5.0.3 struct Contextuals { var final: Int? var required: Int? var optional: Int? var lazy: Int? var dynamic: Int? var infix: Int? var prefix: Int? var postfix: Int? var __consuming: Int? var mutating: Int? var nonmutating: Int? var convenience: Int? var override: Int? var open: Int? var weak: Int? var unowned: Int? var indirect: Int? }
Avatar
swift50 BOT 3/1/2019 4:51 AM
no output
Avatar
omochimetaru 3/1/2019 4:51 AM
お〜いける
4:51 AM
@kitasuke の要望は↑全部に対して発生するかもしれないな
Avatar
そうやね
4:52 AM
bugs.swift.org書いてみる!
4:53 AM
まあバグじゃないと思うけど
Avatar
omochimetaru 3/1/2019 4:53 AM
「要望」タグもあったきがす
Avatar
それだな
Avatar
最近bannzaiさんのPRで ellipsis (...) token kind 追加したし、やるなら今な気がする。
Avatar
@rintaro 書いてみました。こんな内容で良いですか? https://bugs.swift.org/browse/SR-10024
👍 1
Avatar
Contextual Keywordに対するlibSyntax/SwiftSyntaxの追加の質問です。 変数のsetterの"set"はcontextualKeyword("set")となるのに対し、private(set)の”set”はIdentifier("set")になるのって想定通りなんですか? (edited)
12:33 PM
@swift-5.0.3 -frontend -emit-syntax class View { @IBOutlet private(set) var button: UIButton! var number: Int { get { return number } set { number = 1 } } }
Avatar
{"id":70,"kind":"SourceFile","layout":[{"id":69,"kind":"CodeBlockItemList","layout":[{"id":66,"kind":"CodeBlockItem","layout":[{"id":65,"kind":"ClassDecl","layout":[null,null,{"id":1,"tokenKind":{"kind":"kw_class"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},{"id":2,"tokenKind":{"kind":"identifier","text":"View"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},null,null,null,{"id":64,"kind":"MemberDeclBlock","layout":[{"id":3,"tokenKind":{"kind":"l_brace"},"leadingTrivia":[],"trailingTrivia":[],"presence":"Present"},{"id":62,"kind":"MemberDeclList","layout":[{"id":26,"kind":"MemberDeclListItem","layout":[{"id":25,"kind":"VariableDecl","layout":[{"id":7,"kind":"AttributeList","layout":[{"id":6,"kind":"Attribute","layout":[{"id":4,"tokenKind":{"kind":"at_sign"},"leadingTrivia":[{"kind":"Newline","value":1},{"kind":"Space","value":4}],"trailingTrivia":[],"presence":"Present"},{"id":5,"tokenKind":{"kind":"identifier","text":"IBOutlet"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},null,null,null,null],"presence":"Present"}],"presence":"Present"},{"id":13,"kind":"ModifierList","layout":[{"id":12,"kind":"DeclModifier","layout":[{"id":8,"tokenKind":{"kind":"kw_private"},"leadingTrivia":[],"trailingTrivia":[],"presence":"Present"},{"id":9,"tokenKind":{"kind":"l_paren"},"leadingTrivia":[],"trailingTrivia":[],"presence":"Present"},{"id":10,"tokenKind":{"kind":"identifier","text":"set"},"leadingTrivia":[],"trailingTrivia":[],"presence":"Present"},{"id":11,"tokenKind":{"kind":"r_paren"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"}],"presence":"Present"}],"presence":"Present"},{"id":14,"tokenKind":{"kind":"kw_var"},"leadingTrivia":[],"trailingTrivia":[{"kind":"Space","value":1}],"presence":"Present"},{"id":24,"kind":"PatternBindingList","layout":[{"id":23,"kind":"PatternBinding","layout":[{"id":16,"kind":"Iden
Avatar
話戻るけど、そもそもこの例は新しいTokenKind追加以前に、現状でIdentifierじゃなくてcontextualKeywordになってないのはおかしい気がしてきた... https://bugs.swift.org/browse/SR-10024
Avatar
なるほど、 ContextualKeyword という TokenKind の存在を忘れていました。
6:13 PM
コメントしてみました。
👍 1
Avatar
SwiftSyntax の Pull Request ってどういうフローで merge されてるのでしょうか…?
Avatar
音沙汰なくてフムーとなってました
Avatar
omochimetaru 3/5/2019 2:59 AM
3日ぐらいならSwift本体でも割と放置される感ある
Avatar
なるほど!ありがとうございます
3:18 AM
try! Swift での発表はこのパッチを前提にしているのでちょっとドキドキしています
Avatar
omochimetaru 3/5/2019 3:19 AM
なるほどw
Avatar
コンフリクト…!
5:39 AM
ぐぬぬ
Avatar
SwiftSyntax のテストにMirrorDiffKit 使いたい。。。
11:11 AM
非人道的な差分が出るので。。。
11:13 AM
様子 XCTAssertEqual failed: ("▿ SwiftSyntax.ReversedTokenSequence ▿ node: SwiftSyntax.ArrayExprSyntax ▿ leftSquare: SwiftSyntax.TokenSyntax - text: "]" ▿ leadingTrivia: SwiftSyntax.Trivia - pieces: 0 elements ▿ trailingTrivia: SwiftSyntax.Trivia - pieces: 0 elements - tokenKind: SwiftSyntax.TokenKind.rightSquareBracket ▿ rightSquare: SwiftSyntax.TokenSyntax - text: "[" ▿ leadingTrivia: SwiftSyntax.Trivia - pieces: 0 elements ▿ trailingTrivia: SwiftSyntax.Trivia - pieces: 0 elements - tokenKind: SwiftSyntax.TokenKind.leftSquareBracket ") is not equal to ("▿ SwiftSyntax.ReversedTokenSequence ▿ node: SwiftSyntax.ArrayExprSyntax ▿ leftSquare: SwiftSyntax.TokenSyntax - text: "[" ▿ leadingTrivia: SwiftSyntax.Trivia - pieces: 0 elements ▿ trailingTrivia: SwiftSyntax.Trivia - pieces: 0 elements - tokenKind: SwiftSyntax.TokenKind.leftSquareBracket - elements: SwiftSyntax.ArrayElementListSyntax ▿ rightSquare: SwiftSyntax.TokenSyntax - text: "]" ▿ leadingTrivia: SwiftSyntax.Trivia - pieces: 0 elements ▿ trailingTrivia: SwiftSyntax.Trivia - pieces: 0 elements - tokenKind: SwiftSyntax.TokenKind.rightSquareBracket ")
😯 1
Avatar
解決しました
11:34 AM
XCTAssertEqual がもっといい感じになってくれれば MirrorDiffKit は役割を終えられるのですが…
11:36 AM
これは便利情報なのですが、SwiftSyntax のテストを AppCode/Xcode で走らせる際に、以下の xcconfig 使って swift package generate-xcodeproj するとうまく行きます。パスは適宜直してください: https://gist.github.com/Kuniwak/9d461d8e0c7c055e488f574ecbda7ba0
Useful xcconfig for SwiftSyntax. GitHub Gist: instantly share code, notes, and snippets.
Avatar
SwiftSyntax merge されました! @rintaro さん、ありがとうございました!
🎉 5
Avatar
omochimetaru 3/6/2019 2:48 AM
@Kuniwak
XCTAssertEqual がもっといい感じになってくれれば MirrorDiffKit は役割を終えられるのですが…
とすると、XCTAssertEqualの問題点を指摘して提案を出すのが正規筋な気がします? あれはXcode側だからSwift-Evolutionの枠外なのかな
Avatar
Swift-Evolution の対象外な気がしているんですよね… 仕様ではなく実装なので。
2:59 AM
discussion に投げてみるのはありな気がしています
Avatar
omochimetaru 3/6/2019 2:59 AM
Hi everyone, This is my first post here and my first pitch for Swift. Looking forward to the feedback 🙂 Introduction Swift 2 has introduced error handling mechanism, which has been widely adopted since. Shortly after that, XCTest added error catching support to its asse...
2:59 AM
最近こんなスレッドはありましたよ、参考までに
Avatar
なるほど、ありがとうございます
3:03 AM
パワーが湧いた時に投げてみますね
Avatar
swift-corelibs-foundationのテストをLinux上で走らせるのってどうやればいいんでしょう?
10:51 PM
https://github.com/apple/swift-corelibs-foundation/blob/master/Docs/GettingStarted.md#on-linux に従って、build-scriptを走らせたけど、foundationのテストは実行されていないみたいでした。あと、その後、swift-corelibs-foundationディレクトリでninjaを実行してもbuild.ninjaが見つからない的なエラーになりました。
The Foundation Project, providing core utilities, internationalization, and OS independence - apple/swift-corelibs-foundation
Avatar
あ、ドキュメントに従ったと言っても実際に走らせたのは utils/build-script --release --foundation --xctest --test --jobs 1 です。最初はハマって、おもちさんの去年のやりとりがなかったら解決できなかった。
Avatar
リポジトリの方じゃなくて
12:08 AM
ビルド生成物がある場所の方に
12:08 AM
foundationのディレクトリができてて
12:08 AM
そっちでninjaで叩くのだったような?
Avatar
おお、ありがとうございます。たしかに build/Ninja-ReleaseAssert/foundation-linux-x86_64 にbuild.ninjaができてました。が、そこで、ninja test とやっても No tests were found!!! になっちゃいました 😢
Avatar
omochimetaru 5/30/2019 2:17 AM
ああ、FoundationのGettigStarted.mdだとリポジトリの方で$ ninjaしなさいって書いてあるんですね う〜む、前やったときは文書通りにいけたと思うんですが・・・
2:18 AM
あいや、僕がLinuxで試したのはSwiftC本体までか。 一方でFoundationのビルド/テストはMacでしか経験が無い気もする。
Avatar
try! Swiftのワークショップでやり始めたやつをまだやってるんですがw ようやく形になってきたのでとりあえずLinuxでもテストが通ることを確認しておこうかなと思ったところでつまづいてます
Avatar
omochimetaru 5/30/2019 2:25 AM
@ikesyo さんがきっと経験あるので降臨待機
😀 1
Avatar
僕はMacでしか基本やってなくて、LinuxはCIに任せちゃってますね(トリガー権限あるが故って感じではありますが 🙃
😅 1
4:45 AM
swift-corelibs-foundation has had a CMake based build system for a while now. Switch the official builds over to it. Replace this paragraph with a description of your changes and rationale. Provi...
These set of changes are needed to build with the CMake system.
4:47 AM
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
Avatar
↓あまりよくわかってないんですが、今(少なくともその時点)は、 build.py でテストしてるってことなんですかね。 https://forums.swift.org/t/foundation-converted-to-cmake/17668/6
@Michael_Gottesman - sure! So, we were building XCTest using the CMake based build system, and then when it came time to test, we were using the old build.py script to build and run tests against. This means that we were doing a bunch of unnecessary work on the build bots b...
5:27 AM
また夜にもうちょっとみてみて、どこかで諦めますw
Avatar
omochimetaru 5/30/2019 5:31 AM
TestFoundationっていう実行ファイルをcmakeでビルドするようになっているので
5:31 AM
TestFoundationのビルドと実行を発火できればテストはできるはずで
5:33 AM
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
5:33 AM
build-scriptにその実行っぽい処理はありますね
5:35 AM
基本的にbuild-scriptでテストの実行もできるけど、build-scriptの下段の仕組みとしてcmakeがあって、その下段にninjaがあって、
5:35 AM
ninjaタスクとしても直接発火できるし、cmakeタスクとしても直接発火できるし、みたいに
5:36 AM
多重構造になってる
5:36 AM
The Foundation Project, providing core utilities, internationalization, and OS independence - apple/swift-corelibs-foundation
5:36 AM
ただFoundationは自前のbuild.pyもあって、swift本体側とどういうふうに接続してるのか知らない。
5:37 AM
いけしょーさんが貼ってくれたCMake化の対応はもう取り込まれてて、
5:37 AM
Foundation側にCMakeList.txtが置いてあるから、
5:38 AM
おそらく今の構成だとbuild.pyは関係なくて、swiftc側でcmakeがFoundationのビルドやターゲットも吸い上げて統合処理するんじゃないかしら
Avatar
あ、さっきぼくが貼ったやつは、CMake化したときのトピックなんだろうと思います。なので今どうかはわからないけど、少なくともその時点では、CMakeの方でXCTestもビルドして、でも実際のテストはbuild.pyで再びビルドしてた、ってことなのかなあと読み取りました。
Avatar
omochimetaru 5/30/2019 5:47 AM
あ、はい、そう読めます。
5:47 AM
多分build.pyに引数で(CMakeの方で)ビルドしたXCTestを渡したりして頑張っていた (edited)
5:48 AM
なので今の最新はbuild.pyを使わないCMake完結設計ではないかな
Avatar
ただ、build-scriptに --foundation --xctest --test を渡して実行しても、本体側の?テストケースは実行されるっぽいけど、Foundation側のテストは実行されてないっぽいんですよね。
5:51 AM
というのも、 Foundation側のテストを一部書き換えて必ずコケるようにしたけど、そこはログに上がらなかったし、Failureの数も変わらなかったので。
Avatar
omochimetaru 5/30/2019 5:52 AM
CMake化する作業のときにテストの実行タスクの構築を忘れたのかも
5:53 AM
MacOSでもテスト走らないんですか?
Avatar
ああ、それはどうでしょう。
5:53 AM
Foundation、MacでやるときはXcodeからテストを実行するターゲットが実行できるので。
5:53 AM
そっちでしかテストを走らせたことないです。
Avatar
omochimetaru 5/30/2019 5:53 AM
ああ、Foundation側のxcodeprojですか
Avatar
そうそう。
Avatar
omochimetaru 5/30/2019 5:54 AM
ふむ〜 自分だったらbuild-scriptの解析とデバッグに取り掛かるかなぁ・・・
Avatar
いばらのみちだ。。。
Avatar
omochimetaru 5/30/2019 5:55 AM
pythonとCMakeとshですからねw
Avatar
でも考えたらCIではテストしてくれるんだから、どこかにテストを実行するパスがあるはずですよね。
Avatar
omochimetaru 5/30/2019 6:24 AM
あ、それはそうですね 従来のbuild.pyを発火してると予想・・・
Avatar
ああ。そうかも。。。
Avatar
https://ci.swift.org/job/swift-corelibs-foundation-PR-Linux のログとか見てみるといいのかなと思って、
9:43 AM
Building tests for foundation /usr/bin/cmake --build /home/buildnode/jenkins/workspace/swift-corelibs-foundation-PR-Linux@2/buildbot_linux/foundation-linux-x86_64 -- -j16 TestFoundation
とか
9:46 AM
Running tests for foundation /usr/bin/cmake --build /home/buildnode/jenkins/workspace/swift-corelibs-foundation-PR-Linux@2/buildbot_linux/foundation-linux-x86_64 -- -j16 test
とか?
😃 1
Avatar
そっちっぽいですね。
Avatar
だめだわからない
Avatar
swift-source/swift-corelibs-foundationの下で cmake --build ../build/Ninja-ReleaseAssert/foundation-linux-x86_64 -- TestFoundation とかやってみましたが、 ninja: error: unknown target 'TestFoundation' ですね。ターゲットってどこで決まるんでしょう。そもそもCMake知らないんですよ。。。
10:24 AM
お、CMakeLists.txtを見たら、 if(ENABLE_TESTING) で括られてるな。
Avatar
ものは試しと、CMakeLists.txtの先頭に set(ENABLE_TESTING YES) を追加したのち cmake --build ../build/Ninja-ReleaseAssert/foundation-linux-x86_64 -- -j1 TestFoundation を実行すると、TestFoundationのビルドに入って一歩前進しましたが、 error: no such module 'XCTest' でエラーになったので、XCTestがビルドされていないか参照する扱いになっていない様子で一歩後退。
Avatar
いま追試してみてます
😻 1
Avatar
Skipping Foundation on OS X -- use the Xcode project instead
11:25 AM
mac/ninjaだと実行されねえw
😅 1
11:27 AM
ん〜 同じ構成はmacで検証不能なのかあ
Avatar
build/Ninja-ReleaseAssert/foundation-linux-x86_64にCMakeCache.txtがあってここに環境変数が書き出されていたので、ここの ENABLE_TESTING をYESにして、さらに FOUNDATION_PATH_TO_XCTEST_BUILD にbuild/Ninja-ReleaseAssert/xctest-linux-x86_64 のパスを入れてやったらいけるんじゃないか!と思ってやっているところですが、子供を迎えにいく時間になった。。。やばい。
11:32 AM
たぶん、ぼくが最初にswift本体をビルドしたときのbuild-scriptのオプションが何か足りないんだと思うのですが。
Avatar
ひさびさなので1からdocker/ubuntu18でやってみよ
Avatar
@omochimetaru さんと @ikesyo さんのおかげでとりあえずテストは実行できました 🎉 build/Ninja-ReleaseAssert/foundation-linux-x86_64/CMakeCache.txtの ENABLE_TESTINGYES に、 FOUNDATION_PATH_TO_XCTEST_BUILD に build/Ninja-ReleaseAssert/xctest-linux-x86_64 へのフルパスに、 書き換えて、swift-corelibs-foundationの下で /usr/bin/cmake --build ../build/Ninja-ReleaseAssert/foundation-linux-x86_64 -- -j1 TestFoundation でテストのビルド、そして /usr/bin/cmake --build ../build/Ninja-ReleaseAssert/foundation-linux-x86_64 -- -j1 test でテストの実行。テストコケたのと、どこでコケたのかさっぱりわからない点をのぞいて、とりあえずテストを動かしたかった部分は前進しました。
2:36 PM
でもたぶん、CMakeCache.txtを書き換えるんじゃなくて、書き換え後のように出力されるようにオプションをつけてbuild-scriptを走らせるのが正解かなとは思っています。
Avatar
なお、テストのログは build/Ninja-ReleaseAssert/foundation-linux-x86_64/Testing/Temporary/LastTest.log に出てました。
Avatar
昨日ビルドしようとしたけどコケました macのdockerやはりなんか変な気がする
12:39 AM
前やったときは—jobs 1にしたら解決したけど、時間がかかりすぎちゃうし。
12:39 AM
ひろんさんはdockerでやってますか?
Avatar
dockerで、--jobs 1にしてやってます。
12:58 AM
丸一日かかったけどw
Avatar
omochimetaru 5/31/2019 1:00 AM
なるほど、そうですよね 流石にそれだとビルドスクリプトの解析はイテレーション回せなくて死ねる・・・
1:02 AM
ボリュームブリッジ無しでやってみるか。
Avatar
とりあえず自分の足したとこでテスト失敗してるわけではなさそうだったので、さっさとPR出しちゃいました。 https://github.com/apple/swift-corelibs-foundation/pull/2313
Implement XMLElement.attribute(forLocalName:uri:). Also fix some other incompatibilities between Linux and Darwin about attributes with namespace. In the added test case, all expected values are ac...
Avatar
Linuxでのビルドの方は何度も試行しなおしてたからおかしいのかもと思い、--clean付きで今もう一度走らせました。業務してるうちに終わってくれることを祈って。
Avatar
omochimetaru 5/31/2019 1:24 AM
namespaceオブジェクトのメモリ管理がめんどくさそうと思ってたけど、 xmlNodeオブジェクトの所有として管理されるのか。
Avatar
下のレイヤーでlibxml2を使ってて、そっちでnamespaceの面倒はみてくれるから、その辺の管理はすでにあると言えるんだけど、libxml2のAPIとDarwinのAPIはインタフェースが違うからそこを繋ぐ必要があるのと、あと、Darwinのやつはたぶん下請けがlibxml2じゃないので挙動が違うところのつじつま合わせです。あまり自信はない。
Avatar
omochimetaru 5/31/2019 1:37 AM
Darwinもlibxml2かと思ってました
Avatar
そうかもしれないし、違うかもしれない、そこはわからないw
1:47 AM
PRしておきながら、このAPI、iOSにはないし、最近はXMLを扱うこともあまりないので、やりきるモチベーションが……
1:47 AM
独自パーサだった
😮 1
Avatar
norio_nomura 5/31/2019 6:55 AM
DarwinのFoundationのXMLパーサはCFXML*系を使ってないんじゃないかな。 (edited)
6:57 AM
libxml2も使ってなさそうだけど。
Avatar
あれ、 --jobs 1でも、実は途中でビルドコケてる気がしてきた。↓最後の部分 ******************** Testing Time: 1232.07s ******************** Failing Tests (4): Swift(linux-x86_64) :: ParseableInterface/ModuleCache/force-module-loading-mode-archs.swift Swift(linux-x86_64) :: Index/Store/output-failure.swift Swift(linux-x86_64) :: ParseableInterface/ModuleCache/force-module-loading-mode-framework.swift Swift(linux-x86_64) :: ParseableInterface/ModuleCache/force-module-loading-mode.swift Expected Passes : 4104 Expected Failures : 22 Unsupported Tests : 1124 Unexpected Failures: 4 2 warning(s) in tests. FAILED: test/CMakeFiles/check-swift-linux-x86_64 cd /root/swift-source/build/Ninja-ReleaseAssert/swift-linux-x86_64/test && /usr/bin/cmake -E remove_directory /root/swift-source/build/Ninja-ReleaseAssert/swift-linux-x86_64/./swift-test-results/x86_64-unknown-linux-gnu && /usr/bin/cmake -E make_directory /root/swift-source/build/Ninja-ReleaseAssert/swift-linux-x86_64/./swift-test-results/x86_64-unknown-linux-gnu && /usr/bin/python /root/swift-source/llvm/utils/lit/lit.py --incremental -sv --xunit-xml-output=/root/swift-source/build/Ninja-ReleaseAssert/swift-linux-x86_64/./swift-test-results/x86_64-unknown-linux-gnu/lit-tests.xml --param swift_test_subset=primary --param swift_test_mode=optimize_none /root/swift-source/build/Ninja-ReleaseAssert/swift-linux-x86_64/test-linux-x86_64 ninja: build stopped: subcommand failed. utils/build-script: fatal error: command terminated with a non-zero exit status 1, aborting
Avatar
#testing に書いてたFloat80のXCTAssertEqual のテスト書きたいんですがどこに書くのがいいんでしょうか? 既存のファイルで関係ありそうなのは以下2つがありました。 https://github.com/apple/swift/blob/59031b3987a53cc4b7edd3b672e163540977092c/test/stdlib/XCTest-smoke.swift https://github.com/apple/swift/blob/59031b3987a53cc4b7edd3b672e163540977092c/validation-test/stdlib/XCTest.swift#L221-L243 前者は形だけ置いてるっぽいし名前がXCTest-smokeと一般的なテストを置く場所じゃ無さそうな気がしており、 後者はDoubleだけについてかいてあるものの、 validation-testという場所が型単位で網羅的なテストを書くことに適した場所なのか分からないという状況です。
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
Avatar
omochimetaru 2/27/2020 3:13 AM
最近Pavel Yaskevich(xedin)さんとやりとりしてるんだけど、 自分が24時ごろにアクションすると、あちらが27時ごろに反応してくれて、でもこちらは寝てて、こっちの活動開始の10時ごろがギリギリあちらの閉業時間っぽくて、時差相性がめちゃくちゃ悪い 貴重な同期してる3時間ほどの幅はだいたいローカルのビルド・テストとCIのテスト待ちで消える。 (edited)
Avatar
あるある
3:17 AM
早起きになろう
Avatar
omochimetaru 2/27/2020 3:19 AM
PSTはUTC-8だから、17時間ずれてるのか。こっちの27時〜12時が、あっちの10時〜19時か。
3:20 AM
早起き苦手
Avatar
Swift のために早起き
😪 1
Avatar
omochimetaru 5/22/2020 9:16 PM
小さいプルリクをたくさん出すのと大きいプルリクを1個出すの、 トピックが分割できるならなるべく分割したほうがいいなあと思ってきた。 大きいと話が発散しちゃって全然着地しない。
9:17 PM
急がば回れ感
Avatar
1行づつ...
Avatar
それビルド通らないのでは、、
3:33 AM
しばらく待ってみてもなんの反応もなくて(多分)壊した人もとくに返事なくて
3:34 AM
0o600を0o666にするだけの簡単なパッチを書いて送ったらmergeしてもらえるんですかね。
3:34 AM
apple/swift へのcontrib よくわかってない
Avatar
壊した人は気付いてないんじゃないかな
Avatar
apple/swiftじゃないか、apple/swift-corelibs-foundation
3:36 AM
1年以上まえに壊れたのであと多分だれもcorelibs/foundation使ってない説ある...
😂 1
3:36 AM
どこかに getting started to contribute to Swift てありますかね
Avatar
The Foundation Project, providing core utilities, internationalization, and OS independence - apple/swift-corelibs-foundation
Avatar
それかー
3:39 AM
なんかにサインせよとかないな
Avatar
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/lib/swift/AppKit.swiftmodule/x86_64.swiftinterface:7:8: error: no such module '_SwiftAppKitOverlayShims' import _SwiftAppKitOverlayShims ^ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/lib/swift/AppKit.swiftmodule/x86_64.swiftinterface:1:1: error: failed to build module 'AppKit' from its module interface; the compiler that produced it, 'Apple Swift version 5.2 (swiftlang-1103.8.25.8 clang-1103.0.30.20)', may have used features that aren't supported by this compiler, 'Swift version 5.3-dev (LLVM f59d544d626dfee, Swift cc01438bca1bae7)' // swift-interface-format-version: 1.0 ^ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/lib/swift/AppKit.swiftmodule/x86_64.swiftinterface:7:8: error: no such module '_SwiftAppKitOverlayShims' import _SwiftAppKitOverlayShims ^
10:42 PM
hmm...?
Avatar
Hi everybody, A couple of days ago I stopped being able to build swift, which is weird. The configuration is MacOS 10.5.5 with Xcode 11.5 (Version 11.5 (11E608c)) and the default toolchain (although I have had the same thing happen with other toolchains, and swift also won't...
11:06 PM
Xcode 12じゃないとだめなのかあ
11:06 PM
macOS To build for macOS, you need Xcode 12 beta 3. The required version of Xcode changes frequently, and is often a beta release. Check this document or the host information on https://ci.swift.org for the current required version.
Avatar
swiftへのパッチ作成のために短期的に爆速linux環境を得るのってEC2とかでいいのかな。おすすめありますかね。
Avatar
omochimetaru 8/10/2020 6:12 AM
個人的にはmac向けビルドをXcodeで作業するのが一番やりやすいと思います
Avatar
Problem Data.write(to:) is a only method in the Foundation that can create a regular file. However, it ignores uamask and always set 0600 permission unlike macOS Foundation, which respects process ...
6:41 AM
linuxじゃないとダメなんだよなあ..
6:41 AM
ていうかこのままCIとかにテストさせればいい気がしてきた
6:42 AM
"@swift-ci test linux" ってやるのかな...?
Avatar
omochimetaru 8/10/2020 8:13 AM
CI bot使うにはコミッター権限が必要です
Avatar
そうなんだー。
10:46 AM
バグ作った人がCIキックしたっぽい。
10:47 AM
テストとあるが、これむづいんだよなあ...
12:37 AM
時代はWindows...
Avatar
windows/linux/macOS全部揃えててビルドできるようにみんなしてるんですかね...
1:29 AM
ていうかwindowsのciなかったのかな...
Avatar
omochimetaru 8/21/2020 1:29 AM
windows ciはcompnerdさんが設置したやつあったけど
1:29 AM
公式にまだないんだっけな
Avatar
そうなんだ。。
Avatar
omochimetaru 8/21/2020 1:30 AM
あいや
1:30 AM
あったはず
1:30 AM
githubのPRのとこにでてくるよ
Avatar
哎呀
1:30 AM
んー
Avatar
omochimetaru 8/21/2020 1:31 AM
基本はマージされる前にそこで発見される
1:31 AM
Windowsとは
Avatar
omochimetaru 8/21/2020 1:31 AM
あれ〜?
1:32 AM
そこにwindowsもあったはず 一時的に落ちてるのかな
1:32 AM
多分つかったPOSIX定数がないんだあろうなと思ってる
1:33 AM
WindowsのPOSIXは名ばかり...
1:33 AM
Paltform互換まわりはキビしい
1:34 AM
Visual Studioとかいるのかなあ
Avatar
omochimetaru 8/21/2020 1:35 AM
基本はVisual Studioですね
1:36 AM
コンパイラとかそこに入ってるから。
1:36 AM
細かいところでC++のコンパイルの挙動とか違うし。
Avatar
Windowsって5Gしかないんだ
1:36 AM
Xcodeの半分
Avatar
omochimetaru 8/21/2020 1:37 AM
OSの大きさはmacと比べるべきなんじゃないか
1:37 AM
ただVSは、SDKとは分離されてた気がする
Avatar
vmでやるよりawsでインスタンス建て方が早いかなぁ、、、ツーリングまわりで時間かかりそうだからお金かかりそう
Avatar
omochimetaru 8/21/2020 1:38 AM
開発リソースはWindows SDKだかWindows Kitって名前でソフトウェアの一覧のとこに入る
Avatar
(👆 xcodeがデカすぎることの揶揄です...) (edited)
Avatar
omochimetaru 8/21/2020 1:39 AM
XcodeでかすぎるけどSDK同梱しちゃってるのが主な理由だと思うなあ
Avatar
それなー。
Avatar
omochimetaru 8/21/2020 1:39 AM
Android Studioとよく比較されるけど
Avatar
されるの...!
Avatar
omochimetaru 8/21/2020 1:39 AM
あっちはあっちで起動はするけど最初のSDK取得で結局待ちますよ
Avatar
あれは IntelliJ じゃん
1:40 AM
いろいろ整うのに面倒という意味では10GBのダウンロードも致し方ないというのはわかる
1:41 AM
ただ、差分更新とかないからそういう意味では Android の人たちは多少楽なのではと思ってる
Avatar
omochimetaru 8/21/2020 1:41 AM
まあたしかに
6:24 AM
なるほど、これが Windows のCIか... そしてこれが言ってた定数がないだろう説を説明するログ
Avatar
omochimetaru 8/24/2020 6:24 AM
Avatar
compnerd さんがセットアップしてせっせと自分で実行している感じ...?
Avatar
toolchain.zipのnightlyに近いのが取れるのは助かる
6:42 AM
全部vmでビルドはしんどい...
Avatar
やっとビルドできた... これはしんどい。どこかにまとめておきたい。
Avatar
どのへんがしんどかったですか?
1:54 AM
僕はVisual Studioのデフォルトのツールチェーンがx86向けを指していてハマりました。
Avatar
まじそれですw
1:55 AM
最初はそれ
1:55 AM
デフォルトだと cmake で x86_64 と x86 が混じり合ってるとか気がつけないし、Visual Studio についてくる bat ファイル使って x86_64 にしないとダメとかどこにも書いてないし、でも -m64 渡さないと cmake は x86 にしようとしてくるとか...
Avatar
www
Avatar
あと依存ライブラリの入手手段が一切書いてないけど、vcpkg だと cmake の toolchain ファイルできるからそれが便利とかも、なんだろう、常識なのかしら。
1:55 AM
これも知らなかったので辛かった
1:56 AM
あとは Foundation だけ使いたかったから swiftc は既製品を CI からとってきてってやってて、
Avatar
あー、そのへんの依存物の入手方法はcompnerdさんのCIのビルドスクリプトからパクってました
Avatar
それを cmake で使えるようにするのに -sdk がいるけれど、単に渡すだけだとlibdispatchが2つありますとかになったりとか
1:57 AM
まあわりとそこは理解できるっていう感じなんだけど全体的に cmd.exe が辛過ぎたかな...
Avatar
それは同意です。
Avatar
compnerd さんの成果とてもたすかるんだけど、わかってる人がわかってる人向けに書いてあるので
1:58 AM
わかってない人には???って感じで・・・
1:58 AM
S: ってなんやねんとか。
1:59 AM
それは書いてあるけど。
Avatar
そういう細かいWindowsしぐさが分かってないとしんどいですよね。
Avatar
ほんとです...
Avatar
Swift の swift-corelib-foundation を Windows で手軽にビルドするためのメモ - swift_corelibs_foundation_windows_build-ja.md
❤️ 2
2:33 AM
書いた
Avatar
omochimetaru 8/25/2020 7:00 AM
VSについてくるシェルの方を使うとか意味不明すぎて初見殺しですよね
Avatar
/home/buildnode/jenkins/workspace/swift-corelibs-foundation-PR-Linux/swift-corelibs-foundation/Sources/Foundation/NSData.swift:464:30: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions 16:20:59 let createMode = Int(S_IREAD | S_IWRITE | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) 16:20:59 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (edited)
2:34 AM
いったいなにが...
2:35 AM
定数のORはそんなに型チェックが大変なのか...
2:36 AM
let createMode: Int = Int() って教えてあげないとだめ...?
Avatar
Boolの方を教えないといけなさそう?
Avatar
ビット演算ですね
Avatar
あーー
Avatar
Boolean じゃないです
Avatar
取りあえずBit演算の結果を変数に格納して、それをInt.initに渡すようにすれば
2:37 AM
マシになりそう
Avatar
omochimetaru 8/26/2020 2:38 AM
#define ってSwiftから見て何にインポートされてるんだろう?
Avatar
それじゃあ意味がない
2:38 AM
この定数はプラットフォーム依存
Avatar
omochimetaru 8/26/2020 2:38 AM
Int32 になってないのかな
Avatar
open() はなぜか Int
Avatar
omochimetaru 8/26/2020 2:38 AM
C 文法的にそのままインポートされてるならリテラルになっていて
Avatar
ああ、そういうことか > "Bit演算の結果を変数に格納" (edited)
Avatar
omochimetaru 8/26/2020 2:39 AM
リテラルから Int への推論が絡むなら
Avatar
誤読した、失礼... (edited)
Avatar
omochimetaru 8/26/2020 2:39 AM
重くなるのもわかる
2:39 AM
でもこのケースだと着地が Int() だから Int の fast pathでいけそうなんだよな
2:40 AM
2:40 AM
うわ!!!
2:40 AM
オーバーロードされてる〜〜〜〜〜
Avatar
#if os(Windows) let createMode = Int(ucrt.S_IREAD | ucrt.S_IWRITE) #else let createMode = Int(S_IREAD | S_IWRITE | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) #endif guard let fh = FileHandle(path: path, flags: flags, createMode: createMode) else {
2:40 AM
openじゃなかった、再び失礼
2:41 AM
???
Avatar
やばw
Avatar
まあでもこのFileHandle()Intを要求してくる
Avatar
とりあえずInt32と明記すれば助かる感じかな
Avatar
むむ?
Avatar
omochimetaru 8/26/2020 2:41 AM
いや、コンパイル通るな、これは補完が変なだけか?
Avatar
let tmp: Int32 = S_IREAD | ... let createMode = Int(tmp)
Avatar
POSIX ではこれは mode_t
2:42 AM
mode_t は Int32 かな。
Avatar
omochimetaru 8/26/2020 2:42 AM
public typealias mode_t = __darwin_mode_t public typealias __darwin_mode_t = __uint16_t /* [???] Some file attributes */ public typealias __uint16_t = UInt16
2:42 AM
UInt16らしい。
Avatar
なうほど
Avatar
omochimetaru 8/26/2020 2:42 AM
2:42 AM
あ。
2:43 AM
2:43 AM
Int32は存在しない 補完で出てくるけど
Avatar
エェー
Avatar
omochimetaru 8/26/2020 2:44 AM
openもmode_tで受けてますね
2:44 AM
うーん?なんでだめなんだろう
2:45 AM
2:45 AM
通る。
Avatar
openじゃなくてFileHandleだった
2:45 AM
ていうかこれmacosでは問題ないのかも
Avatar
omochimetaru 8/26/2020 2:45 AM
ですね
Avatar
ciはlinuxで困惑してる (edited)
Avatar
omochimetaru 8/26/2020 2:45 AM
Linuxのときに
2:45 AM
多分定義が違ってなにか面倒なことが起きてる?
Avatar
mode_tはシステム依存で
2:45 AM
なんらかのintegerなんだろうけれど
2:46 AM
それはopaqueなので...
Avatar
omochimetaru 8/26/2020 2:46 AM
Cヘッダとしてはなにかのtypedefに帰着してるはずで
2:46 AM
全部の定数がmode_tになってるなら整数型としても同じはずだから大丈夫な気がするけどなあ。なんだろ
2:46 AM
一つだけmode_tじゃなくて違う定義になってるとかないかしら
Avatar
定数の?
Avatar
omochimetaru 8/26/2020 2:47 AM
S_IREAD とかが。
Avatar
あっ
2:47 AM
あー
2:47 AM
これここにあるべきではないじゃん
2:47 AM
おー
Avatar
omochimetaru 8/26/2020 2:47 AM
ん?
Avatar
すごい
2:47 AM
S_IREADはいらない
Avatar
omochimetaru 8/26/2020 2:48 AM
ええ わからん
Avatar
S_IRUSRだから
2:48 AM
S_IREADはPOSIXじゃないんだ
Avatar
omochimetaru 8/26/2020 2:48 AM
あー
2:48 AM
個別のフラグのやつと
2:48 AM
まとめたやつが違う定義?
Avatar
でも互換で残ってる
2:48 AM
たぶん...
2:48 AM
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) #define S_ISTXT S_ISVTX /* sticky bit: not supported */ #define S_IREAD S_IRUSR /* backward compatability */ #define S_IWRITE S_IWUSR /* backward compatability */ #define S_IEXEC S_IXUSR /* backward compatability */ #endif
Avatar
omochimetaru 8/26/2020 2:49 AM
Linuxだとどうなってるんだろう
Avatar
たぶん define じゃない?
Avatar
omochimetaru 8/26/2020 2:49 AM
それなら S_IRUSR と同じ型になってて平気そうですけどね (edited)
2:51 AM
まあとりあえずORの項数が減らせるので
2:51 AM
コンパイルが間に合うようになる可能性はある・・・
Avatar
これ数の問題...?
Avatar
omochimetaru 8/26/2020 2:54 AM
the compiler is unable to type-check this expression in reasonable time
はそうですよ。
2:55 AM
2:55 AM
↑減らしていくと通ります。
Avatar
なるほど...?
2:57 AM
リテラルだから型がわからなくて
2:57 AM
厳しいってことかな...?
Avatar
これって1つ目に as Type を付ければ解決できるパターン?
Avatar
/usr/include/linux/stat.h:#define S_IRUSR 00400
2:59 AM
こういうことらしい
2:59 AM
これは手元のubuntuだけど。
Avatar
@swift-5.2.5 let a = Int(1 | 2 | 3 | 4 | 5 | 6 | 7)
Avatar
omochimetaru 8/26/2020 2:59 AM
お。
Avatar
なるほど、darwinはmode_tの定数だけど、
2:59 AM
linuxは#define...
Avatar
omochimetaru 8/26/2020 2:59 AM
数値定義になってるのなら、それがどうインポートされるかは気になりますね。
Avatar
exit status: 1 with stderr:<stdin>:1:9: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions let a = Int(1 | 2 | 3 | 4 | 5 | 6 | 7) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Avatar
@swift-5.2.5 let a: Int = 1 as Int | 2 | 3 | 4 | 5 | 6 | 7
Avatar
no output
Avatar
omochimetaru 8/26/2020 3:00 AM
ただの数値リテラルはSwift側に対応する型が無いんだけどまさにリテラルとしてインポートされるんだろうか?
Avatar
確かに
Avatar
omochimetaru 8/26/2020 3:01 AM
@koher が今やった実験からして、もしSwiftにとって数値リテラルとしてインポートされてるなら、それが型推論おもすぎケースになるようだ。
Avatar
Int(S_IRUSR) | Int(S_IRUSW) | ...
3:02 AM
ってやるのが安全?
Avatar
omochimetaru 8/26/2020 3:02 AM
3:02 AM
6個目でだめになった(5個だといける) (edited)
Avatar
2こ誤ったのを減らしたけど6個は必要... (edited)
Avatar
omochimetaru 8/26/2020 3:02 AM
そうですね、個別にIntに包んでやると、これは軽くなります。
Avatar
そうするか
Avatar
omochimetaru 8/26/2020 3:03 AM
koherの書いてるみたいに、最初の一個に as Int するのでも早くなる
Avatar
リテラルだとすると Int() よりも as Int の方がいいのかな?
Avatar
omochimetaru 8/26/2020 3:04 AM
たしかどっちでも全く同じ意味になるように過去にSEが入りました
Avatar
あ、そうなんだ。
3:04 AM
そうなのか
Avatar
omochimetaru 8/26/2020 3:04 AM
それまでは意味が違って違う振る舞いになっていた
Avatar
え...
3:05 AM
まあ違うか。
Avatar
omochimetaru 8/26/2020 3:06 AM
This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. - apple/swift-evolution
3:08 AM
Source compatibiliyのところのコード例が
3:08 AM
昔の振る舞いの、 T(literal) と literal as T で結果が変わるコードの例 (edited)
Avatar
なるほど
3:19 AM
パッチ書くのは大変だ... linux, macOS, windows全部面倒みないといけない
Avatar
omochimetaru 8/26/2020 3:19 AM
OS抽象化レイヤーは大変ですね。
3:20 AM
いったんWASIレイヤーみたいなの通したほうが楽そう。
Avatar
なんか複雑怪奇なんですよ。
3:20 AM
どこかのレイヤーで閉じ込める、みたいにはなってなくて
Avatar
omochimetaru 8/26/2020 3:21 AM
Foundationで閉じ込めてませんか?
Avatar
それぞれ必要な箇所で #if !os(Windows)
3:21 AM
ってなってる
3:21 AM
Foundationのなかの話...
Avatar
omochimetaru 8/26/2020 3:21 AM
ああ。
Avatar
Foundationの外からは平和にみえると思う
Avatar
omochimetaru 8/26/2020 3:22 AM
しかもCoreFoundationもあるから難しそう
Avatar
単純なパッチでも非常に学びが多い... (というかシンドイ、特に Windows)
Avatar
omochimetaru 8/26/2020 3:24 AM
僕も何度か3Desktopクロスに書いたことありますけどWindowsは謎ですね
3:24 AM
POSIXのような微妙に違うやつがあって
3:25 AM
あとなんかsafety CRTみたいなファミリーもあるし。
Avatar
POSIXになりきれなかった何かみたいな。
Avatar
omochimetaru 8/26/2020 3:27 AM
ですね。
Avatar
で、結局 Win32API つかえば解決っていう。
3:27 AM
僕はこいつが嫌い
Avatar
実際Foundationは入り乱れてる。
Avatar
omochimetaru 8/26/2020 3:28 AM
Win64が LLP64を採用したせいで
3:28 AM
long型が32bitのままなので
3:28 AM
2G以上のファイルをシークできないので
3:28 AM
オーバーロードが必要になってる
Avatar
おお、、、
3:31 AM
Linuxだとその問題に対して off_t 型を使う fseeko ってオーバーロードを作ったんだけど
3:31 AM
結局 fseeko は Windows には無いので何も解決しない
Avatar
POSIX的にはどうもしてないのかな...
3:38 AM
off_t か。
Avatar
omochimetaru 8/26/2020 3:40 AM
offtはposixに含まれてるのかな、そこはよくしらない
3:41 AM
てか、パッチ投げてwindows対応でciコケてリジェクトされるのは
3:41 AM
公式にwindowsサポートする事の大きなコストですね
3:42 AM
モチベーションが削がれるコントリビュータは結構いそう
3:42 AM
昔はcompnerdさんが一人で全部追いかけて修正してたから楽だった
3:42 AM
windows対応お助けチームみたいなのがあればいいのに。
Avatar
しかもciがないので
3:43 AM
いや、ciはあるんだけどmerge前に実行されないのでrevertされると人によってはやる気0になるかも (edited)
3:44 AM
Reverts #2851 This breaks on Windows
3:44 AM
とだけ言われていい気がするcontributorは少ないと思う。
3:45 AM
個人的にはやるならちゃんとintegrateされた状態でやるべきで、このまま進むといろんな悲劇が起こりそう
3:45 AM
あるいはもうWSLもあることだし、Windowsのひとには諦めてもらうとか...
Avatar
omochimetaru 8/26/2020 3:45 AM
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
3:45 AM
あれーたしかに無いなあ あったような気がするんだけど夢かな・・・
3:46 AM
ないんですよ
3:46 AM
だからコミッタが前のパッチをマージした。
Avatar
omochimetaru 8/26/2020 3:46 AM
please test Windowsって見た事ある気が済んだけどなあ
Avatar
で、「windowsでこける、revertじゃー」 (edited)
3:46 AM
って言われたらはぁ?ってなる人多いと思う。
Avatar
omochimetaru 8/26/2020 3:46 AM
ですねえ
Avatar
Windows @swift-ci Please test Windows platform Swift Test Windows Platform
3:47 AM
あ、これかな。
Avatar
omochimetaru 8/26/2020 3:47 AM
Avatar
Tensorflow 的な扱い
Avatar
omochimetaru 8/26/2020 3:49 AM
revert理由になるならデフォルトに含めるべきだ・・・
3:49 AM
同じ事なので・・・
Avatar
なかなか厳しいですよねー。ここまで問題追いかけて実行環境つくったりしてパッチつくっていろいろできる環境がある人は少ないと思う。
3:53 AM
環境=時間、知識、マシンリソース、etc.
3:54 AM
そもそもは swiftdoc が使いたかっただけなのに...
3:54 AM
🐐shaving
😩 1
Avatar
/home/buildnode/jenkins/workspace/swift-corelibs-foundation-PR-Linux@2/swift-corelibs-foundation/Sources/Foundation/NSData.swift:468:34: error: ambiguous use of 'S_IRUSR' 11:31:40 let createMode = Int(S_IRUSR) | Int(S_IWUSR) | Int(S_IRGRP) | Int(S_IWGRP) | Int(S_IROTH) | Int(S_IWOTH) 11:31:40 ^
6:51 AM
きびしい
6:53 AM
MSVCRTなのかucrtなのか
6:53 AM
SwiftGlibcなのかGlibcなのか
Avatar
omochimetaru 8/28/2020 8:46 AM
ひどいw
Avatar
100% tests passed, 0 tests failed out of 258
8:55 AM
linuxの環境は簡単だった...
8:55 AM
FROM swiftlang/swift:nightly-focal RUN apt-get update && apt-get install -y \ clang \ cmake \ git \ icu-devtools \ libcurl4-openssl-dev \ libedit-dev \ libicu-dev \ libncurses5-dev \ libpython2-dev \ libsqlite3-dev \ libxml2-dev \ ninja-build \ pkg-config \ python \ python-six \ rsync \ swig \ systemtap-sdt-dev \ tzdata \ uuid-dev RUN mkdir -p /build VOLUME /src WORKDIR /build
8:55 AM
らく
8:55 AM
Windowsとは比べ物にならない
Avatar
A workspace repository for contributing to Swift and related projects on macOS - niw/swift-contribution-workspace
9:25 AM
まとめた
Avatar
Problem Data.write(to:) is a only method in the Foundation that can create a regular file. However, it ignores umask and always set 0600 permission unlike macOS Foundation, which respects process u...
4:47 AM
なんどかのCI実行したのちにやっとグリーンになった
4:47 AM
あとはmergeされるのを待つばかり...
4:48 AM
ていうかなってた。CIの状態がかわってもなんの通知もこないのであった。
Avatar
omochimetaru 9/1/2020 4:48 AM
おつかれさまです
Avatar
Merged!
👏 3
9:48 PM
hope it doesn't get reverted again lol
Avatar
omochimetaru 9/10/2020 9:48 PM
ww
Avatar
seriously tho.
9:49 PM
it took a while...
9:53 PM
これで Swiftdoc が使える...
Avatar
リリースブランチにbug fixコミットをチェリーピックしたいんですけど勝手にPR建てて良いんですかね?
Avatar
CI が影響うけているようにみえるのが release/5.3 では問題にならないんだろうか (edited)
Avatar
これが問題になるのがstaticなstdlibをビルドしない ときだけで、
11:19 PM
CIでは常にstatic stdlibもビルドしてるので問題にならないんですよねー
11:20 PM
swiftwasmのCIがこれの影響でLinuxビルドがコケて気づきました (edited)
Avatar
なるほど...
11:22 PM
PRつくることになにも問題はないような気がするけれど
11:22 PM
chery-pick の作法はありそう
11:22 PM
(一般論として)
Avatar
ですよねー、リリースブランチの運用ルールがあんまりわかってない。
Avatar
担当者と話がついてチェリーピックされることになりそうです↑
12:18 AM
#33678 has accidentally removed a line to generate the glibc modulemap, this PR adds it back.
rtaPog 1
Avatar
https://*.swift.org 全部落ちてる? (edited)
Avatar
ひらけるよ
Avatar
https://ci.swift.org/ 確認しようとしたら開けなかった
Avatar
ciだめだ
10:01 AM
Hello, Am I the only one to find the placement of @ViewBuilder odd when one declares a function argument? // ~~~~ func footer(@ViewBuilder _ footer: () -> Footer) -> some View { ... } I always tend to qualify the type of the function itself, b...
Avatar
フォーラムは生きてるのか
Avatar
bugsだめだ
Avatar
あ、認知してて明日直すとのこと
10:03 AM
よかった
Avatar
どこでそれを
Avatar
slackで。。。
Avatar
裏ルートだ
Avatar
norio_nomura 12/8/2021 1:37 AM
Python 3 has changed to open pipes in binary mode by default. The text=True option to open pipes in text mode was added in Python 3.7. This change will fix update-checkout printing the output of th...
Avatar
久しぶりに swift ビルドしようとしたらできなくなっててつらい...
Avatar
色々と調べ物をしていたら、なんとmacOS 13からCoreFoundationがFoundationに推移的に依存するようになってたことが判明した 😂 https://github.com/apple/swift-corelibs-xctest/pull/476/commits/a6fc1e22485bd36c2aba44dbb5eb84d399fdba55
🤔 2
👀 2
6:50 PM
swift-corelibs-foundationのmacOSビルド壊れまくっててCIがずっと赤い
Avatar
Foundation.frameworkにswift-foundationのコードが入って、CoreFoundationがそれを使うようになったってことかな?
Avatar
そうみたいです
Avatar
try! Swiftのワークショップの準備で久しぶりに見始めましたが、swift-corelibs-foundationをMac(Xcode)で開発するの厳しいっすね……
Avatar
swift-foundationの方が優しいかもしれないです
Avatar
swift-foundationだとSwift Packageでシュッとビルドできるのでそれは間違いないですね
Avatar
corelibs-foundationの方はビルドも難しい上に今テストが完全にmacOS上で壊れてるのでだいぶ厳しい状況ですね。。。
Avatar
Avatar
ikesyo
try! Swiftのワークショップの準備で久しぶりに見始めましたが、swift-corelibs-foundationをMac(Xcode)で開発するの厳しいっすね……
omochimetaru 3/15/2024 2:11 AM
そうなんだ Appleはどうやってんだ
Avatar
corelibs-foundationはnon-Darwin向けなんで問題なし!
Avatar
去年はスッとうごいたイメージでしたが、ここ1年でだいぶ変わったんですね
Avatar
omochimetaru 3/15/2024 2:15 AM
ターゲットはそうだけど開発ホストはmac/Xcodeじゃないのか・・・ (edited)
Avatar
non-Darwin向けの開発するなら開発ホストはmac使わないのでは
Avatar
omochimetaru 3/15/2024 2:36 AM
そういうもんですかね まあ生成物がネイティブで実行できた方がいいのか?
2:36 AM
普段mac/Xcode上でLinuxターゲットで開発してるし、そうじゃないとSwiftが書けないから、想像つかない (edited)
2:37 AM
Linux DesktopでVSCodeで快適に作業できるんだろうか
Avatar
僕はいつもLinuxマシンにsshしてvimで書いてますよ
2:39 AM
(快適とは程遠いけど🥲
Avatar
Kishikawa Katsumi 3/15/2024 2:40 AM
LinuxでVS Codeはけっこう快適だな。
2:40 AM
Copilotおるしな。
Avatar
corelibsが特殊なだけで普通のパッケージ開発はそれなりに快適
Avatar
omochimetaru 3/15/2024 2:40 AM
vimでSwiftってどんなもんなんだ
Avatar
lspあるんで
Avatar
omochimetaru 3/15/2024 2:40 AM
LSPのアダプタを使ってがんばるのか
2:40 AM
ふむー
Avatar
テスト動かせるのは便利ですよ
2:42 AM
とくにプラットフォーム依存なコード書いてると
Avatar
iphoneアプリでないなら大丈夫な気がする
2:52 AM
iphoneアプリでもコンパイルだけXcodeで実行するのはアリかな? (edited)
Avatar
動かす分にはいいけど、エディタ補助はXcodeがほしいですね
Avatar
Xcodeはcopilot動かないぬん…
Avatar
Kishikawa Katsumi 3/15/2024 4:16 AM
いちおうCopilot For Xcodeプラグインがあるよ。
👀 1
Avatar
swift-foundationはそれはそれでMacだと?DateFormat系のテストが通らないものがある 👀 なぜか数字が消え去る…… (edited)
👀 1
Avatar
For some reason the unit being passed to unitIsBaseUnit is being deallocated before the comparison could finish, resulting unitIsBaseUnit always returning false. This is a temporary fix to ensure u...
Avatar
norio_nomura 3/15/2024 5:25 AM
swift-foundationのテストはTimeZone依存のものがある。 Tests/FoundationInternationalizationTests/Formatting/DateFormatStyleTests.swifttestSettingLocaleDate.FormatStyle(timeZone: .gmt)を入れてやる必要がある。
👀 1
👍 1
Avatar
swift-foundation-icu/pull/19の差分を取り込んだら数字が消え去るのは直って、testSettingLocaleだけ落ちるようになりました。それがnomuraさんのやつですね、なるほど。 (edited)
Avatar
norio_nomura 3/15/2024 5:32 AM
先月気づいてたけど、PR書くのをサボってました。
Avatar
// dateFormatter.date(from: "2021-04-12 15:04:32")! これがPSTだとGMT-8で同じく4/12 7時だけど、JSTのGMT+9だと4/13 0時になって日付・曜日が変わるから落ちるんですね…… (edited)
👍 1
Avatar
In JST (GMT+9) the date will be 2021-04-13 00:04:32, so the tests would fail. Kudos to @norio-nomura
🙏 1
Avatar
omochimetaru 3/15/2024 6:08 AM
西海岸でしか通らないテストうけるな
🤣 7
Avatar
corelibs-foundationのテストもXcodeで無理やり実行できているんだけど、boxing・bridgingがおかしそうで、IntをあるメソッドのAnyの引数に渡して、そいつが __SwiftValue.store で中でNSObjectに変換される時に SwiftFoundation.NSNumber になってほしいのに __NSCFNumber になってしまう…… https://github.com/apple/swift-corelibs-foundation/blob/41b71f9ee2deb4065c9e6dd3658253a2f8f85044/Sources/Foundation/Bridging.swift#L180-L186 (edited)
The Foundation Project, providing core utilities, internationalization, and OS independence - apple/swift-corelibs-foundation
8:41 AM
Int → Any → AnyObjectとすると __NSCFNumber になるが、Intから直接AnyObjectにすると SwiftFoundation.NSNumber になる。愉快だ……
Avatar
SwiftFoundationがFoundation.frameworkに依存し始めてしまってその辺すべてが壊れちゃったんですよねぇ
😇 1
Avatar
omochimetaru 3/15/2024 8:44 AM
SwiftFoundationはどのパッケージのこと?
Avatar
corelibs-foundation内のSwift製Foundation実装
🆗 1
Avatar
そうですねー。それなりに時間を掛けて調べてたんですがどうやらすぐに直せそうなものではなさそうで一旦諦めてました https://github.com/apple/swift-corelibs-xctest/pull/476#issuecomment-1960044469
The lit test suite respects MACOSX_DEPLOYMENT_TARGET to determine the -target option passed to compilers. However, the SwiftXCTestFunctionalTests target and the XCTest project do not set MACOSX_DEP...
❤️ 1
Avatar
コメントの返信で結構気持ちが書いてあるんだな
11:08 AM
swift-foundationに寄せていくために実装を共通化したくて、それがmacだとApple Foundationを指す事になって壊れたけど、corelibs-foundationは非mac用の存在だから後回しって感じか
Avatar
norio_nomura 3/29/2024 1:23 AM
Migration Plan: swift-corelibs-foundation to swift-foundation As we progress with our plans for the future of Foundation, it is time to consider in more detail how we will migrate the Swift ecosystem from swift-corelibs-foundation, which is part of the Swift toolchain, to swift-foundation, which is a standalone package. Please let us know your t...
1:23 AM
まずはswift-corelibs-foundationをswift-foundationへ依存したパッケージとしてビルドできるようにするらしい。 https://github.com/apple/swift-corelibs-foundation/compare/main...package (edited)
The Foundation Project, providing core utilities, internationalization, and OS independence - Comparing main...package · apple/swift-corelibs-foundation
Avatar
見てました、corelibs-foundationをSwift Packageにする方向性は考えてなかったけど、納得感がある対応。
1:10 PM
swift-foundationをunified implにしつつ、移行パスとしてSCLFを残す形はキレイだと思う。
Exported 1,670 message(s)
Timezone: UTC+0