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を使う事で回避、みたいな感じかな、やってみます