Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
41529a7
fix mistake in rusts-into-in-scala
soc Jun 10, 2022
0a94755
hide some wip pages
soc Jun 11, 2022
8f5dbe7
reduce title size
soc Jun 11, 2022
118230f
add cranelift links
soc Jun 11, 2022
1ae45a8
add fixing swift
soc Jun 11, 2022
03e7d02
no underline for footnote refs
soc Jun 11, 2022
45496de
add binary operators
soc Jun 11, 2022
107f654
add annotations-obsolete-modifiers-attempts to index
soc Jun 11, 2022
827da39
improve comparing-and-sorting
soc Jun 11, 2022
49a1088
extend equality-and-identity (Rust)
soc Jun 11, 2022
cead034
add sad-state-of-programming-on-linux
soc Jun 14, 2022
f943a28
increase font size on medium-width page
soc Jun 14, 2022
853362d
fix padding on small widths
soc Jun 14, 2022
d596d93
add "Kinds Are Calling Conventions" to index
soc Jun 15, 2022
3e9c574
add "Dynamic Linking in Swift" to index
soc Jun 15, 2022
11b3204
add "C Isn't A Programming Language Anymore" and "To Save C, We Must …
soc Jun 15, 2022
0ed2e0e
add "Domains as Cargo Namespaces"
soc Jun 16, 2022
ca15bf2
add link to stop-using-angle-brackets-for-generics
soc Jun 21, 2022
07acc96
add JVM Anatomy Quarks
soc Jun 23, 2022
17d2bbc
add more inter-page linking
soc Jun 23, 2022
db713bf
publish and link naming-conventions-lookup
soc Jun 23, 2022
b01192a
add link to The Impoliteness of Overriding Methods
soc Jun 24, 2022
46457cf
filter more "Language Design: " from pagination
soc Jun 25, 2022
4b15b61
work on naming-conventions-stream, publish
soc Jun 25, 2022
e3f6c8d
publish the-cost-of-everything
soc Jul 7, 2022
f0b2b0c
publish fields-methods-properties-pick-two
soc Jul 7, 2022
7bdc865
publish useful-syntax-sugar
soc Jul 9, 2022
520a5a6
overhaul unary operators, organize index
soc Jul 16, 2022
2a2599f
delete unused favicons
soc Jul 16, 2022
837ba4e
use Fira Mono as monospace font
soc Jul 16, 2022
d626cfc
add Modern & Minimal to index
soc Jul 25, 2022
9505e77
add more links
soc Jul 26, 2022
344c5ff
add naming-conventions-streaming to index
soc Jul 26, 2022
b12d139
move generics to projects tab
soc Jul 29, 2022
462a970
adjust code padding
soc Jul 30, 2022
f35e4f2
improve stop-using-angle-brackets-for-generics
soc Jul 30, 2022
d74bfcd
extend `post` layout with update date
soc Jul 30, 2022
f81fa2e
add "Your ABI is Probably Wrong" to index
soc Jul 31, 2022
e562526
move linking/calling convention links to "interfaces" section
soc Aug 1, 2022
3a6a1be
add links to modern & minimal
soc Aug 1, 2022
1c0fa5e
add draft of "typing"
soc Aug 6, 2022
1c83975
add wip "schema-as-source-code"
soc Aug 7, 2022
9a615d4
add link to "minimalism in programming language design"
soc Aug 13, 2022
e6afae3
improve wording in type-annotations
soc Aug 21, 2022
681354f
add Core as project
soc Aug 23, 2022
738156f
add "Almost Rules" link to index
soc Aug 24, 2022
5aab492
update generics
soc Aug 26, 2022
e9e57b4
add "Wirth Evolution" to index
soc Sep 12, 2022
1061bad
drop About from header links, add Index
soc Sep 26, 2022
6ddcf5e
add "Memories: Edinburgh ML to Standard ML" to index
soc Oct 5, 2022
ef0c52c
rename and update "Binary Operators"
soc Oct 28, 2022
8bdc00b
add result-naming
soc Oct 31, 2022
1e8cb77
add `enum` to keywords
soc Nov 7, 2022
7fcad96
add "Comparison with Rust" to unified-condition-expressions
soc Nov 7, 2022
6267caf
add consistent-keyword-length
soc Nov 19, 2022
5e12306
add Fira Code and Inter fonts
soc Nov 19, 2022
d781a8b
add "Linear Address Masking" link to index
soc Nov 22, 2022
d96db7d
replace "nondefinitional-enums" with "unions"
soc Nov 26, 2022
542446d
add "Pointer Compression in V8" link to index
soc Nov 29, 2022
af69a68
add "Pointer Compression" and "Header Compression", add section to index
soc Nov 29, 2022
68e46f1
fix wrong image descriptions in "Package Objects"
soc Dec 2, 2022
00f40e7
fix table in "Unary Operators Are Unnecessary"
soc Dec 2, 2022
ff68cbb
reduce weight of bold/strong text
soc Dec 3, 2022
8f98a3f
add "drop-break-and-continue"
soc Dec 10, 2022
afa463a
add "Rust compatibility" articles
soc Dec 16, 2022
8cf1f18
add link "Compiling Swift Generics" to index
soc Dec 19, 2022
df4d8e3
add "On ELF" links to index
soc Jan 6, 2023
54663dd
extend naming-conventions-conversion
soc Jan 14, 2023
5c158f7
extend naming-conventions-creation
soc Jan 14, 2023
1acc7e3
add "The Day The Standard Library Died" link to index
soc Jan 16, 2023
b1b11b1
update `reject`/`retain` naming in naming-conventions-streaming
soc Jan 16, 2023
5837619
improve readability by greying out discarded naming alternatives
soc Jan 20, 2023
bc62583
extend `naming-conventions-streaming`
soc Feb 10, 2023
63c3430
fix link in "stop-using-angle-brackets-for-generics"
soc Feb 13, 2023
8a1c18e
fix mistake in code example in "useful-syntax-sugar"
soc Feb 13, 2023
6ff01f8
add links to language comparisons to index
soc Mar 9, 2023
f38cd0a
add "My thoughts on OCaml" to links
soc Apr 27, 2023
acebc02
make frontpage sections targetable/highlighted by URL hash
soc Jul 3, 2023
bba6e12
extend "binary operators" article
soc Jul 10, 2023
c449740
add Sofia Sans font and use it
soc Jul 22, 2023
a53e6c5
frontpage: add more padding, remove a:link underline
soc Jul 23, 2023
a5a21a8
drop ".html" from links on "texts" page
soc Jul 31, 2023
693abf8
draw diagrams in color that works on both light- and dark-mode
soc Aug 1, 2023
78d200d
add x86 prefixes and escape opcodes flowchart
soc Jul 30, 2023
27a949c
remove `const` and add `export` in `consistent-keyword-length`
soc Sep 15, 2023
985e355
add "Rust's Struct Initializer Syntax Was a Mistake" draft
soc Sep 20, 2023
12248dc
add link to "Just for fun: What happens when you shift a register by …
soc Sep 24, 2023
33db118
add link to "RISC-V: The Middling, the Bad, the Ugly" article
soc Sep 24, 2023
a436b08
Update rust-struct-initializer-mistake.md
soc Sep 24, 2023
2c34d29
improve lower-bar-of-rust-2
soc Nov 16, 2023
427a4cb
update Core link from `/manifesto` to `/design`
soc Nov 26, 2023
9c8a0f7
drop row with irrelevant language from index
soc Nov 26, 2023
3171c26
move "Linear Address Masking" to correct place
soc Nov 30, 2023
fd35a98
add link to Sea of Nodes tutorial
soc Dec 3, 2023
e3a592a
drop obsolete Scala talks, drop "Talks" column, make "Links" use 2 co…
soc Dec 3, 2023
e4e9d8d
optimize column widths
soc Dec 3, 2023
1e41a1b
rename "Package Objects" to "Package Objects in Scala"
soc Dec 23, 2023
76d4584
rename "Notes on Rust" to "Mistakes in Rust"
soc Dec 23, 2023
c6f5ccb
add "Rust's Struct Initializer Syntax Was a Mistake" to index
soc Dec 23, 2023
4108e1d
add "Ownership you can count on" link, replacing duplicate link
soc Dec 22, 2023
5270836
add "Compact Base64-first Database-friendly UIDs" article
soc Jan 1, 2024
e71aa17
improve Rust-related articles
soc Jan 22, 2024
f04c922
add more Rust articles to "Links"
soc Jan 23, 2024
3155b66
update "Consistent Keyword Length"
soc Feb 13, 2024
a660435
add "Hundred year mistakes" to index
soc Feb 22, 2024
cade35a
update "unified condition expressions"
soc Apr 1, 2024
2903a5f
add "Language Design" slides
soc Feb 29, 2024
a04399f
add "Naming Conventions – Options"
soc Jul 6, 2024
c7eb850
update x86 prefixes and escape opcodes flowchart ...
soc Aug 2, 2024
5e396d6
add "Rust's Almost-Rules"
soc Aug 6, 2024
acb36e4
update "Naming Conventions – Part 5: Streaming"
soc Dec 27, 2024
cce451c
add BaseUid comparison table
soc Dec 30, 2024
8268eae
fix wrong arrow in x86 prefixes and escape opcodes flowchart
soc Jan 11, 2025
cfc5e68
update turnBack to not block Reddit for a while
soc Jan 16, 2025
3ac54cf
add link to implementations of BaseUid
soc Feb 4, 2025
ec24b85
NOOP
marcelhas Feb 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ email: simon@ochsenreither.de
description: >
baseurl: "" # the subpath of your site, e.g. /blog
url: "" # the base hostname & protocol for your site
twitter_username: oxnrtr
github_username: soc
plugins:
- jekyll-redirect-from
Expand All @@ -28,18 +27,22 @@ collections:
output: true
name: "Standards"
published: true
hardware:
output: true
name: "Hardware"
published: true
languages:
output: true
name: "Languages"
published: true
runtimes:
output: true
name: "Runtimes"
published: true
interfaces:
output: true
name: "Interfaces"
published: true
hardware:
output: true
name: "Hardware"
published: true
scala:
output: true
name: "Scala"
Expand All @@ -56,19 +59,24 @@ defaults:
layout: post
-
scope:
type: hardware
type: languages
values:
layout: post
-
scope:
type: languages
type: runtimes
values:
layout: post
-
scope:
type: interfaces
values:
layout: post
-
scope:
type: hardware
values:
layout: post
-
scope:
type: scala
Expand Down
19 changes: 0 additions & 19 deletions _drafts/the-cost-of-everything.md

This file was deleted.

6 changes: 3 additions & 3 deletions _includes/pagination.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@
{% assign previous_url = page.previous.url %}
{% assign previous_title = page.previous.title %}
<div class="left">
<a class="pagination-item" href="{{ previous_url }}">{{ previous_title }}</a>
<a class="pagination-item" href="{{ previous_url }}">{{ previous_title | remove_first: "Language Design: " }}</a>
</div>
{% endif %}{% endif %}

{% if page.page_next_url %}
{% assign next_url = page.page_next_url %}
{% assign next_title = page.page_next_title %}
<div class="right">
<a class="pagination-item" href="{{ next_url }}">{{ next_title | remove_first: "Language Design: " }}</a>
<a class="pagination-item" href="{{ next_url }}">{{ next_title | remove_first: "Language Design: " }}</a>
</div>
{% else %}{% if page.next %}
{% assign next_url = page.next.url %}
{% assign next_title = page.next.title %}
<div class="right">
<a class="pagination-item" href="{{ next_url }}">{{ next_title }}</a>
<a class="pagination-item" href="{{ next_url }}">{{ next_title | remove_first: "Language Design: " }}</a>
</div>
{% endif %}{% endif %}
</nav>
88 changes: 88 additions & 0 deletions _interfaces/x86-prefixes-and-escape-opcodes-flowchart.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
title: "x86 prefixes and escape opcodes flowchart"
date: 2023-07-29
updated: 2023-09-24
markdeep: true
---

<div class="diagram">
start here
|
v
╔═══════════════════════════════════════════════╤══╗ ╔══════════════════════════════════════════════════╗
║ 1-byte instructions (legacy map 0) │0F------------->║ 2-byte instructions (legacy map 1) ║
║ └──╢ ║ ║
╟──────────────────────────────────────────────────╢ .------>║ operand type specified ┌──┐ ┌──┐ ║
║ 40-4F ║ | ║ via mandatory prefixes │38│ │3A--------------.
╟───────────────────────────|──────────────────────╢ | .--->║ - none (packed single) └─|┘ └──┘ ║ |
║ ┌──┐ ┌──┬──┐ | ║ | | ║ - 66 (packed double) | ║ |
║ .--62│ │66│67│ | ║ | | ║ - F2 (scalar single) | ║ |
║ | └──┘ └─|┴─|┘ | ║ | | ║ - F3 (scalar double) | ║ |
║ | | | | ┌──┬──┐ ║ | | ╚═══════════════════════════════|══════════════════╝ |
║ | | | | │C4│C5-----. ║ | | v |
║ | | | | └|─┼──┤ | ║ | | ╔══════════════════════════════════════════════════╗ |
╟──┐ | ┌──┬──┐ | | | | │D5│ | ║ | +--->║ 3-byte instructions (legacy map 2) ║ |
║F0│ | │F2│F3│ | | | | └─|┘ | ║ | | ║ ║ |
╚══╧═|═╧═|╧═|╧══════|══|════|══════|═══|═════|═════╝ | | ║ operand type specified ║ |
| | | ^ | | | ^ | | ^ | | | ║ via mandatory prefixes ║ |
| | | | | | | | | | +---|-----------+ | ║ - none (packed single) ║ |
v '--+---+---+--' v | v v | v m bit | | ║ - 66 (packed double) ║ |
┏━━━━┓ | ┏━━━|┓┏━━━━┓┏━━|━┓┏━━━━┓ | | ║ - F2 (scalar single) ║ |
┃EVEX┃ | ┃REX1┃┃VEX3┃┃REX2┃┃VEX2┃-------' | ║ - F3 (scalar double) ║ |
┗━━|━┛ | ┗━━━━┛┗━━|━┛┗━━━━┛┗━━━━┛ | ╚══════════════════════════════════════════════════╝ |
| | | | |
'----------+------------------+------------------------+ ╔══════════════════════════════════════════════════╗ |
m bits '--->║ 3-byte instructions (legacy map 3) ║<-+
║ ║
║ operand type specified ║
║ via mandatory prefixes ║
║ - none (packed single) ║
║ - 66 (packed double) ║
║ - F2 (scalar single) ║
║ - F3 (scalar double) ║
╚══════════════════════════════════════════════════╝
</div>

<div class="diagram">
┏━┯━┯━┯━┯━┯━┯━┯━┓ ┏━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┓
┃0 1 0 0 W R X B┃ ┃1 1 0 1 0 1 0 1┃M R X B W R X B┃
┗━┷━┷━┷━┷━┷━┷━┷━┛ ┗━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┛
REX (1-byte prefix) AMD64 (1999/2003) REX (2-byte prefix) APX (2023/????)
- W extends operand size - M selects legacy map 0 or legacy map 1
- R extends register bits - R extends register bits
- X extends index in SIB byte - X extends index in SIB byte
- B extends base in SIB byte - B extends base in SIB byte
- W extends operand size


┏━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┓ ┏━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┓
┃1 1 0 0 0 1 0 1┃Ṙ ⩒ ⩒ ⩒ ⩒ L p p┃ ┃1 1 0 0 0 1 0 0┃Ṙ Ẋ Ḃ m m m m m┃W ⩒ ⩒ ⩒ ⩒ L p p┃
┗━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┛ ┗━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┛
VEX (2-byte prefix) AVX (2008/2011) VEX (3-byte prefix) AVX (2008/2011)
- R extends register bits - R extends register bits
- v encodes additional source register - X extends index in SIB byte
- L selects vector length (0: 128bit | 1: 256bit) - B extends base in SIB byte
- p encodes mandatory prefixes - m encodes escape bytes (1: 0F | 2: 0F38 | 3: 0F3A)
(0: none | 1: 66 | 2: F2 | 3: F3) - W extends operand size
- escape byte 0F implied (legacy map 1) - v encodes additional source register
- L selects vector length (0: 128bit, 1: 256bit)
- p encodes mandatory prefixes
(0: none | 1: 66 | 2: F2 | 3: F3)


┏━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┳━┯━┯━┯━┯━┯━┯━┯━┓ Notes:
┃0 1 1 0 0 0 1 0┃Ṙ Ẋ Ḃ Ṙ B m m m┃W ⩒ ⩒ ⩒ ⩒ Ẋ p p┃z Ŀ L b ⩒ a a a┃ - years after the instruction set extension
┗━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┻━┷━┷━┷━┷━┷━┷━┷━┛ denote when it was first announced/shipped
EVEX (4-byte prefix) AVX-512 (2013/2017) - letters with a dot above denote that the
- R extends register bits prefix contains the bit in inverted form
- X extends index in SIB byte - the diagram elides escape bytes D8 til DF
- B extends base in SIB byte - the EVEX prefix has additional variations
- m encodes escape bytes (1: 0F | 2: 0F38 | 3: 0F3A) not shown here for encoding
- W extends operand size - VEX instructions
- v encodes additional source register - legacy instructions
- p encodes mandatory prefixes (0: none | 1: 66 | 2: F2 | 3: F3) - conditional CMP/TEST
- z selects merge mode (0: zero | 1: merge)
- Ŀ selects vector length (512bit) or rounding control mode (with L)
- L selects vector length (256bit)
- b encodes source broadcast or rounding control (with Ŀ and L) or exception suppression
</div>
1 change: 1 addition & 0 deletions _languages/alasca/classes-values.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Classes and Values"
date: 2018-08-31 12:00:00 +0200
published: false
---

- `class`: reference type
Expand Down
3 changes: 2 additions & 1 deletion _languages/alasca/collections.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Collections"
date: 2018-08-31 12:00:00 +0200
published: false
---

- collections are immutable
Expand Down Expand Up @@ -35,4 +36,4 @@ value SizeInfo
object Unknown
value Known(Size)
value Bounded(Size)
```
```
1 change: 1 addition & 0 deletions _languages/alasca/conditions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Conditions"
date: 2018-08-31 12:00:00 +0200
published: false
---

See [Unified Condition Syntax](https://soc.github.io/languages/unified-condition-syntax).
1 change: 1 addition & 0 deletions _languages/alasca/functions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Functions"
date: 2018-08-31 12:00:00 +0200
published: false
---

- zero or one paramemter list
Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/identity-equality-hashcode.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Identity, Equality and Hashcode"
date: 2018-08-31 12:00:00 +0200
published: false
---

All values and non-open classes receive a default implementation of equality and identity.
Expand Down
2 changes: 2 additions & 0 deletions _languages/alasca/keywords.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Keywords"
date: 2018-09-07 12:00:00 +0200
published: false
---

**6 letters** namespaces – declaring namespaces and bringing namespaces into scope:
Expand All @@ -15,6 +16,7 @@ date: 2018-09-07 12:00:00 +0200
- `value` (value types)
- `alias` (type aliases)
- `with` ("extends")
- `enum`

**4 letters** control flow:

Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/modifiers.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Modifiers"
date: 2018-09-07 12:00:00 +0200
published: false
---

All modifiers start with an `@` sign and are placed on the preceding line of the element they annotate.
Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/modules.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Modules"
date: 2018-08-31 12:00:00 +0200
published: false
---

Modules contain funs, lets, vars, classes, values, and other modules.
Expand Down
3 changes: 2 additions & 1 deletion _languages/alasca/standard-library.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Standard Library"
date: 2018-08-31 12:00:00 +0200
published: false
---

Ordered from necessary to convenient:
Expand Down Expand Up @@ -136,4 +137,4 @@ object std.regex // important enough for top-level?
```
// "every element except the last one!"
loop(i < arr.length - 1)
// arr.length - 1 == -1 if arr is empty
// arr.length - 1 == -1 if arr is empty
1 change: 1 addition & 0 deletions _languages/alasca/streams.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Streams"
date: 2018-09-31 12:00:00 +0200
published: false
---


Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/string-text.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: String and Text"
date: 2018-08-31 12:00:00 +0200
published: false
---

#### String
Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/syntax-overview.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Syntax Overview"
date: 2018-08-31 12:00:00 +0200
published: false
---

```scala
Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/traits-sealed-enum.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Traits, Sealed Traits and Enum Traits"
date: 2018-08-31 12:00:00 +0200
published: false
---

#### Traits
Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/typeclasses.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Typeclasses"
date: 2018-08-31 12:00:00 +0200
published: false
---

```scala
Expand Down
1 change: 1 addition & 0 deletions _languages/alasca/visibility-exports.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Alasca: Visibility and Exports"
date: 2018-08-31 12:00:00 +0200
published: false
---

- open modules: namespace to place files, at the top of source files
Expand Down
7 changes: 3 additions & 4 deletions _languages/annotations-obsolete-modifiers-attempts.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ title: "Language Design: Annotations Obsolete Modifiers – Failed Attempts"
date: 2021-12-15 14:00:00 +0200
---

#### Failed Attempts

##### Kotlin
#### Kotlin

Kotlin [gave up on it](https://blog.jetbrains.com/kotlin/2015/08/modifiers-vs-annotations/), as they couldn't figure out
how to recognize annotation usages as early in the compiler pipeline as modifiers previously.
Expand All @@ -14,7 +12,8 @@ This lead to the determination that modifiers (without the prefix `@`) had to st
able to omit the prefix `@`, leading to inconsistencies.


##### Ceylon
#### Ceylon

Ceylon tried the route in which [everything is an annotation, but looks like a modifier (i. e. without prefix `@`)](https://ceylon-lang.org/documentation/1.3/reference/structure/annotation/).

This made it hard to distinguish between important keywords, and less important annotations.
Loading