Cụ thể, tôi có một số chức năng ghi nhật ký Swift 3.0 bao bọc tất cả các câu lệnh của chúng trong một if
chỉ thực thi khi một thao tác trên hai giá trị static const
được kết nối từ ObjC có kết quả không đồng bộ.Làm thế nào tôi có thể thấy tối ưu hóa trình biên dịch áp dụng cho mã Swift của tôi?
func logStuff(_ message: @autoclosure() -> String) {
if a & b != 0 {
// log stuff here...
}
}
Biến a
và b
được khai báo trong phần đầu cầu nối của tôi như thế này:
static const NSUInteger a = <some literal>;
static const NSUInteger b = <some literal>;
trình biên dịch sẽ bõ mẫu âm chót toàn bộ cuộc gọi đến logStuff()
khi kết quả của a & b
là zero và toàn tối ưu hóa mô-đun được kích hoạt?
Câu trả lời cụ thể cho câu hỏi này sẽ được đánh giá cao, nhưng một cách để dễ dàng xem những gì tối ưu hóa thực sự được áp dụng bởi LLVM trong mọi tình huống sẽ là lý tưởng.
Bạn có thể loại ngắn mạch câu hỏi này hoàn toàn: tại sao không chỉ sử dụng một khuôn khổ đăng nhập được thành lập? – Alexander
Đã sử dụng CocoaLumberjack. Đang cố gắng sao chép "khai thác gỗ hạt mịn" được mô tả [tại đây] (https://github.com/CocoaLumberjack/CocoaLumberjack/blob/master/Documentation/FineGrainedLogging.md) cho ObjC mà không bị ảnh hưởng đến hiệu suất trong sản xuất. – jbelkins
Trình biên dịch có một vài công tắc sẽ cung cấp cho bạn kết quả sau các giai đoạn khác nhau, ví dụ: '-emit-assembly'. –