~tieong/ziglings

29d32bfa79f462ccae2d392ae3096c63c927d29f — Jonathan Halmen 2 years ago 4c7eebb
fix whitespace line-endings
M exercises/005_arrays2.zig => exercises/005_arrays2.zig +1 -1
@@ 33,7 33,7 @@ pub fn main() void {
    // have a little preview of Zig 'for' loops instead:
    //
    //    for (<item array>) |item| { <do something with item> }
    // 
    //
    // Don't worry, we'll cover looping properly in upcoming
    // lessons.
    //

M exercises/059_integers.zig => exercises/059_integers.zig +1 -1
@@ 23,6 23,6 @@ pub fn main() void {
        0b1101000, // binary
        0x66,      // hex
    };
        

    print("{s} is cool.\n", .{zig});
}

M exercises/060_floats.zig => exercises/060_floats.zig +2 -2
@@ 59,7 59,7 @@ pub fn main() void {
//         |  exponent     significand
//         |
//          sign
//    
//
// This example is the decimal number 3.140625, which happens to
// be the closest representation of Pi we can make with an f16
// due to the way IEEE-754 floating points store digits:


@@ 86,6 86,6 @@ pub fn main() void {
//
// Fun fact: sometimes you'll see the significand labeled as a
// "mantissa" but Donald E. Knuth says not to do that.
//     
//
// C compatibility fact: There is also a Zig floating point type
// specifically for working with C ABIs called c_longdouble.

M exercises/061_coercions.zig => exercises/061_coercions.zig +1 -1
@@ 22,7 22,7 @@
//    const arr: [3]u8 = [3]u8{5, 6, 7};
//    const s: []const u8 = &arr;  // to slice
//    const p: [*]const u8 = &arr; // to many-item pointer
//    
//
// 4. Single-item mutable pointers can coerce to single-item
//    pointers pointing to an array of length 1. (Interesting!)
//

M exercises/064_builtins.zig => exercises/064_builtins.zig +2 -2
@@ 1,7 1,7 @@
//
// The Zig compiler provides "builtin" functions. You've already
// gotten used to seeing an @import() at the top of every
// Ziglings exercise. 
// Ziglings exercise.
//
// We've also seen @intCast() in "016_for2.zig", "058_quiz7.zig";
// and @enumToInt() in "036_enums2.zig".


@@ 51,7 51,7 @@ pub fn main() void {
    //    1111 + 1 = 0000      Yes! (Real answer is 10000)
    //    0000 + 1 = 0001      Yes!
    //    0001 + 1 = 0010      Yes!
    // 
    //
    // Also, check out our fancy formatting! b:0>4 means, "print
    // as a binary number, zero-pad right-aligned four digits."
    print("{b:0>4} + {b:0>4} = {b:0>4} ({})", .{a, b, my_result, overflowed});

M exercises/065_builtins2.zig => exercises/065_builtins2.zig +6 -6
@@ 1,7 1,7 @@
//
// Zig has builtins for mathematical operations such as...
//
//      @sqrt        @sin          @cos 
//      @sqrt        @sin          @cos
//      @exp         @log          @floor
//
// ...and lots of type casting operations such as...


@@ 20,18 20,18 @@
// by exploring just THREE of Zig's MANY introspection abilities:
//
// 1. @This() type
// 
//
// Returns the innermost struct, enum, or union that a function
// call is inside.
//
// 2. @typeInfo(comptime T: type) @import("std").builtin.TypeInfo
// 
//
// Returns information about any type in a TypeInfo union which
// will contain different information depending on which type
// you're examining.
// 
//
// 3. @TypeOf(...) type
// 
//
// Returns the type common to all input parameters (each of which
// may be any expression). The type is resolved using the same
// "peer type resolution" process the compiler itself uses when


@@ 46,7 46,7 @@ const Narcissus = struct {
    me: *Narcissus = undefined,
    myself: *Narcissus = undefined,
    echo: void = undefined,
    

    fn fetchTheMostBeautifulType() type {
        return @This();
    }

M exercises/066_comptime.zig => exercises/066_comptime.zig +1 -1
@@ 27,7 27,7 @@
//
// Zig takes these concepts further by making these optimizations
// an integral part of the language itself!
// 
//
const print = @import("std").debug.print;

pub fn main() void  {

M exercises/067_comptime2.zig => exercises/067_comptime2.zig +1 -1
@@ 8,7 8,7 @@
//        --o--            comptime        *    |      ..    .
//     *    |       *  .        .    .   .    --*--  .     *  .
//  .     .    .    .   . . .      .        .   |   .    .  .
//        
//
// When placed before a variable declaration, 'comptime'
// guarantees that every usage of that variable will be performed
// at compile time.

M exercises/069_comptime4.zig => exercises/069_comptime4.zig +1 -1
@@ 49,6 49,6 @@ fn makeSequence(comptime T: type, ??? size: usize) [???]T {
    while (i < size) : (i += 1) {
        sequence[i] = @intCast(T, i) + 1;
    }
    

    return sequence;
}

M exercises/070_comptime5.zig => exercises/070_comptime5.zig +1 -1
@@ 140,6 140,6 @@ fn isADuck(possible_duck: anytype) bool {
        // error, not a runtime panic or crash!
        possible_duck.quack();
    }
        

    return is_duck;
}

M exercises/072_comptime7.zig => exercises/072_comptime7.zig +2 -2
@@ 49,7 49,7 @@ pub fn main() void {
            '*' => value *= digit,
            else => unreachable,
        }
        // ...But it's quite a bit more exciting than it first appears. 
        // ...But it's quite a bit more exciting than it first appears.
        // The 'inline while' no longer exists at runtime and neither
        // does anything else not touched directly by runtime
        // code. The 'instructions' string, for example, does not


@@ 61,6 61,6 @@ pub fn main() void {
        // code at compile time. Guess we're compiler writers
        // now. See? The wizard hat was justified after all.
    }
    

    print("{}\n", .{value});
}

M exercises/073_comptime8.zig => exercises/073_comptime8.zig +1 -1
@@ 56,7 56,7 @@ fn getLlama(i: usize) u32 {
}

// Fun fact: this assert() function is identical to
// std.debug.assert() from the Zig Standard Library. 
// std.debug.assert() from the Zig Standard Library.
fn assert(ok: bool) void {
    if (!ok) unreachable;
}

M exercises/075_quiz8.zig => exercises/075_quiz8.zig +1 -1
@@ 69,7 69,7 @@ const f_paths = [_]Path{ makePath(&f, &d, 7) };
//
// For example, we could create our own "path language" and
// create Paths from that. Something like this, perhaps:
// 
//
//    a -> (b[2])
//    b -> (a[2] d[1])
//    c -> (d[3] e[2])

M exercises/077_sentinels2.zig => exercises/077_sentinels2.zig +1 -1
@@ 22,7 22,7 @@
// Versatility! Zig strings are compatible with C strings (which
// are null-terminated) AND can be coerced to a variety of other
// Zig types:
// 
//
//     const a: [5]u8 = "array".*;
//     const b: *const [16]u8 = "pointer to array";
//     const c: []const u8 = "slice";

M exercises/079_quoted_identifiers.zig => exercises/079_quoted_identifiers.zig +1 -1
@@ 13,7 13,7 @@
// past the authorities: the @"" identifier quoting syntax.
//
//     @"foo"
//     
//
// Please help us safely smuggle these fugitive identifiers into
// our program:
//

M exercises/082_anonymous_structs3.zig => exercises/082_anonymous_structs3.zig +1 -1
@@ 29,7 29,7 @@
// If a .{} thing is what the print function wants, do we need to
// break our "tuple" apart and put it in another one? No! It's
// redundant! This will print the same thing:
//     
//
//     print("{} {}\n", foo);
//
// Aha! So now we know that print() takes a "tuple". Things are

M exercises/084_async.zig => exercises/084_async.zig +1 -1
@@ 37,7 37,7 @@
//     fn bar() void {
//         fooThatSuspends();
//     }
//     
//
// 6. The main() function cannot be async!
//
// Given facts 3 and 4, how do we fix this program (broken by facts

M exercises/085_async2.zig => exercises/085_async2.zig +0 -1
@@ 26,4 26,3 @@ fn foo() void {
    suspend {}
    print("async!\n", .{});
}


M exercises/090_async7.zig => exercises/090_async7.zig +1 -1
@@ 10,7 10,7 @@
//     fn bar() void {
//         fooThatMightSuspend(true); // Now bar() is async!
//     }
// 
//
// But if you KNOW the function won't suspend, you can make a
// promise to the compiler with the 'nosuspend' keyword:
//