Commit Graph
770 Commits
Author SHA1 Message Date
Jon Meow 80f402e2b6 Warn about watchman (#1052) 2022-01-28 18:20:05 -08:00
Jon Meow 979fe2cd89 Merge naming conventions #861 into the design (#1056)
A pretty straight copy of #861. Cutting down README.md example text since it seemed a little redundant with examples in the bullets.
2022-01-28 18:14:31 -08:00
Jon Meow 90f538f1b1 Remove submodule mentions in tools (#1054) 2022-01-28 18:12:18 -08:00
a2728f82bb Updating function and variable docs (#1017)
I was doing this for #851 initially, but I think #438 and #826 hadn't made it in (possibly intentionally due to #851? I don't recall). 

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-28 11:36:47 -08:00
Geoff Romer 6c3e1f6d7c Revise README and add subdir READMEs (#1023) 2022-01-28 11:33:32 -08:00
Jon Meow dfef55fc2c Improve string lexing performance (#1001)
See benchmark notes on https://github.com/carbon-language/carbon-lang/pull/1001
2022-01-28 10:05:07 -08:00
Jon Meow 9009ae5e1b Cleanup up lit_test and require explicit tool paths (#1049)
I think lit_test accrued a bit of cruft as I switched approaches... I still may go further, but this is particularly fixing a bug where `FileCheck` (instead of `%{FileCheck}`) should've failed in tests.
2022-01-27 16:27:30 -08:00
Jon Meow 18be5692a3 Remove submodules from actions, and enable more pre-commits (#1051) 2022-01-27 16:22:26 -08:00
josh11b 39571f715e Fix "block block" typo (#1053) 2022-01-27 16:22:11 -08:00
Jon Meow d76fe462f6 Have FileCheck dump all input on errors. (#1050)
I'm hoping this improves debugability.
2022-01-27 12:49:44 -08:00
josh11b 3313f6fa9c Fix links from proposals to open discussion minutes (#1048) 2022-01-27 11:54:19 -08:00
Jon Meow eda43faa5a Note namespace and static recommendations in C++ style guide (#1041) 2022-01-27 11:26:47 -08:00
086834d63a Naming conventions (#861)
-   For idiomatic Carbon code:
    -   `UpperCamelCase` will be used when the identifier can be resolved to a
        specific value at compile-time.
    -   `lower_snake_case` will be used when the identifier's value won't be
        known until runtime, such as for variables.
-   For Carbon-provided features:
    -   Keywords and type literals will use `lower_snake_case`.
    -   Other code will use the guidelines for idiomatic Carbon code.

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-01-27 11:25:43 -08:00
6218aff2ba Document and, or, and not from #680 (#1032)
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-27 11:19:21 -08:00
josh11bandRichard Smith 2d567f5824 Generics: Set associated constants using where constraints (#1013)
Change the syntax for setting the associated constants and types in an interface implementation for a type from using `let` declarations as in:
```
class Vector(T:! Type) {
  impl as Iterable {
    let ElementType:! Type = T;
    ...
  }
}
```
to using `where` clauses as in:
```
class Vector(T:! Type) {
  impl as Iterable where .ElementType = T {
    ...
  }
}
```

This is an attempt to simplify by removing redundancy, improve consistency by removing a use of `let` that was different than other examples, and better support forward declaration that a type implements an interface while retaining the information needed for type checking.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-27 11:18:20 -08:00
Jon Meow 94265befee Switch LLVM to a subtree (#1021)
git rm third_party/llvm-project
git subtree add --prefix third_party/llvm-project https://github.com/llvm/llvm-project.git dbf0d8118c --squash

With some fixes for the compile.
2022-01-27 09:25:15 -08:00
Jon Meow 7dcb7a3be8 Drop line because it's a set so arbitrary sorting applies (#1043) 2022-01-26 15:13:26 -08:00
Geoff RomerandJon Meow 1723b4e0b2 Hide Interpreter in .cpp (#1036)
This improves encapsulation, and makes Interpreter lifetimes clearer (and shorter).

Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2022-01-26 09:57:55 -08:00
Jon MeowandGeoff Romer 6a4901a995 Remove LLVM gtest dep and add pre-commit regression check. (#1040)
Co-authored-by: Geoff Romer <gromer@google.com>
2022-01-26 09:28:45 -08:00
Jon Meow b048bb766d Starting to think about toolchain semantic analysis -- create a trivial shell for it. (#1038) 2022-01-25 11:06:16 -08:00
Jon MeowandRichard Smith 22721da92b Avoid unnecessary relexing of the last line (#999)
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-25 10:20:42 -08:00
Jon Meow ad08148304 Specify gql version (#1039)
3.0.0 is incompatible, this is a quick fix
2022-01-24 14:05:35 -08:00
Jon Meow 79e85d4830 Use lit_test for driver (#1037) 2022-01-24 11:15:19 -08:00
josh11bandRichard Smith f4e9063b97 Generics details 8: interface default and final members (#990)
Allowing interfaces to define default values for its associated entities. This:

-   Helps with evolution by reducing the changes needed to add new members to an interface.
-   Reduces boilerplate when some value is more common than others.
-   Addresses the gap between the minimum necessary for a type to provide the desired functionality of an interface and the breadth of API that user's desire.

As an alternative, final values can be provided instead, which can't be overridden, but are more predictable for users and may avoid dynamic dispatch overhead in some cases.

Example:
```
// Interface parameter has a default of `Self`
interface Add(Right:! Type = Self) {
  // `AddWith` *always* equals `Right`
  final let AddWith:! Type = Right;
  // `Result` has a default of `Self`
  let Result:! Type = Self;
  fn DoAdd[me: Self](right: Right) -> Result;
}

impl String as Add() {
  // Right == AddWith == Result == Self == String
  fn DoAdd[me: Self](right: Self) -> Self;
}
```

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-21 14:10:20 -08:00
pk19604014andGeoff Romer 2017eb4da0 Initial implementation of block string literals following lexical_conventions/string_literals.md. (#1028)
* Initial implementation of block string literals following lexical_conventions/string_literals.md.

Enabled yyinput() in flex to implement parsing.
Added ParseBlockStringLiteral() helper to handler further transformations such as indenting.
Modified formar_grammar to support single-quoted strings to prevent a failure on lexer.lpp.

* Fixed _find_string_end quote parameter type int -> str.

* Update executable_semantics/syntax/BUILD

Co-authored-by: Geoff Romer <gromer@google.com>

* Addressed code review comments - split table-drived test into individual tests, renamed constants to match style guide.

* Addressed code review comments -- using EXPECT_THAT_EXPECTED() in tests, lexer comments and code cleanup.

Co-authored-by: Geoff Romer <gromer@google.com>
2022-01-21 13:11:18 -05:00
Geoff RomerandJon Meow c311c8849c Use static name resolution in Interpreter (#1022)
Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2022-01-21 09:48:11 -08:00
Jon Meow d28e75629e Adjust pre-commit order and autoupdate (#1035) 2022-01-21 09:44:50 -08:00
Jon Meow ffc2be92d6 Add carbon to a couple python imports for correctness (#1033) 2022-01-20 08:37:47 -08:00
Jon Meow adee1d7c94 Remove operators.md in favor of expressions/ (#1031) 2022-01-18 15:13:36 -08:00
Jon Meow 81f28687cc Remove XDG reference for now (#1030) 2022-01-18 13:56:54 -08:00
Geoff Romer b954542d06 Reorganize and document Action (#1024) 2022-01-18 13:29:44 -08:00
josh11b ad5072b7b8 Link to Swift re: origin of witness table term (#1029) 2022-01-18 11:17:09 -08:00
josh11bandRichard Smith c08cbdb0bd Clarify class declaration syntax (#1026)
Clarify class declaration syntax

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-14 14:23:43 -08:00
Jon Meow cc1f3a6432 Workaround for libtool_check_unique errors (#1016)
e.g. https://github.com/carbon-language/carbon-lang/runs/4768894988?check_suite_focus=true -- I'm seeing this too frequently and wondering if we can duck it per https://github.com/bazelbuild/bazel/issues/14113#issuecomment-999794586
2022-01-13 14:21:13 -08:00
Jon Meow b672e34bd9 Turn fix_cc_deps into a pre-commit (#1015) 2022-01-13 14:01:45 -08:00
Geoff Romer 461e178273 Store named constant values in the AST (#1011)
This enables us to stop using `Env` in the typechecker. As a byproduct, this commit also restructures the interpreter to handle run-time global initialization as part of ordinary execution, using the Action stack.
2022-01-13 11:07:28 -08:00
Jon Meow d88f95ad31 Add missing syntax deps (#1014) 2022-01-10 14:25:16 -08:00
df63b5e054 auto keyword for vars (#851)
Allow `var <identifier>: auto = <expression>;` syntax.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-01-10 10:08:14 -08:00
josh11bandRichard Smith 00a178769f Principle: One static open extension mechanism (#998)
This is a proposal to adopt interfaces as the single static open extension mechanism for things like selecting how operators are implemented for types.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-07 15:54:27 -08:00
Jon MeowandGeoff Romer 1b4c81fa69 Add script for generating missing C++ deps (#1012)
Co-authored-by: Geoff Romer <gromer@google.com>
2022-01-07 14:44:40 -08:00
Jon Meow cab5bb0158 Clean up SimpleDiagnostic inheritance (#1004) 2022-01-07 11:01:01 -08:00
Jon Meow b7df523dc8 Fix cross-file links in non-proposal files (#1010) 2022-01-07 11:00:21 -08:00
Jon Meow a30a2b6730 Delete empty diagnostic_emitter.cpp (#1007) 2022-01-07 10:36:42 -08:00
b333f48697 Generics details 6: remove facets (#950)
There were some concerns about facet types leaking out of generic code in return types. Some initial fixes for this were done in [PR #900](https://github.com/carbon-language/carbon-lang/pull/900), but there remain concerns, for example when associated types are involved.

In particular, given an interface method with return type using an associated type, as in:

```
interface Deref {
  let Result:! Type;
  fn DoDeref[me: Self]() -> Result;
}

class IntHandle {
  impl as Deref {
    let Result:! Type = i32;
    fn DoDeref[me: Self]() -> Result { ... }
  }
}
```

Since `Result` has type `Type`, we had the problem that `IntHandle.DoDeref` would have to return `i32 as Type`, instead of the desired `i32`.

We also think we can simplify the model by eliminating the facet type concept and syntax.

This proposal removes facet types, introduces archetypes in their place, clarifies how associated types work outside of a generic function, and specifies how a generic `let` statement in a function body works.

Co-authored-by: Wolff Dobson <wolffg@users.noreply.github.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-06 14:08:08 -08:00
josh11bandRichard Smith 1534970146 Implicit conversions for aggregates (#981)
Define initialization, assignment, comparison, and implicit conversion between data classes with different field orders and/or types.

Implements the decision made in #710 .

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-06 11:16:41 -08:00
Geoff Romer e533442028 Use /* instead of #if 0 for NamedEntity interface (#1006) 2022-01-06 10:00:10 -08:00
Jon Meowandjosh11b 24b763c7e8 Fix or remove invalid anchor links, adding pre-commit (#997)
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-01-05 15:00:02 -08:00
Jon Meow 29522e6ed8 Modify parsing to monitor stack depth and error before overflow (#987) 2022-01-05 14:38:16 -08:00
Jon Meow fd489b69ad Lexer style cleanup (#1002) 2022-01-05 10:30:19 -08:00
Jon Meow cba02e1b47 Update WORKSPACE deps (#1003) 2022-01-05 09:45:59 -08:00