Slice type coercion

I’m confused with the type coercion around the slice type. Here are examples:

  1. coerce a slice to a many-item pointer. What’s the intention to give up the length property here? E.g.,
const tag_name = @tagName(TestEnum.TestEnumValue);
const ptr_tag_name: [*:0]const u8 = tag_name;

// test/behavior/string_literals.zig file in Zig codebase
  1. comptime slice. Isn’t it runtime-known of the length for a slice? What’s actually a comptime slice?
test "comptime slice" {
    const test_string: []const u8 = "hello";
    try testing.expect(comptimeKnown(test_string));
}

// https://ziggit.dev/t/some-cool-language-tricks/18130#p-80662-h-1-figuring-out-if-a-value-is-comptime-1
pub inline fn comptimeKnown(val: anytype) bool {
    const Tuple = @TypeOf(.{val});
    return @typeInfo(Tuple).@"struct".field_attrs[0].@"comptime";
}
const std = @import("std");
const testing = std.testing;