---
title: Deprecated
slug: deprecated
createdAt: 2021-06-29T17:47:28.000Z
---

A general rule of thumb is if works in C# it works in Shift. Except for those 45,000 "features" of C# that are being sunset and are not supported in Shift.

Some common rationales

- Niche - Nothing wrong with the feature/function/mechanics but very small footprint or use case. Currently not planned to be implemented to reduce the breadth of the language. Entirely open for being included at a latter time.
  - Often if this feature was introduced it may be reimagined/tinkered with and not identical to how it behaves in C#.
  - Any thoughts/considerations if it was introduced may accompany the niche definition.
- Relic - A part of C# that I feel shouldn't exist anymore because a similiar or better effect can be achieved via an alternative path
- Blocked - Intentionally intended to be never implemented

As mentioned in the philosophy section, if you desparate need this functionality you can achieve it via a bound C# assembly, since all C# libraries are consumable in Shift.

***

These features and a general thought on why is listed below.

# General

- `checked` <font color="#3b9f0f">niche</font> - Having math work differently inside of the block is ugly
- `const` <font color="#3b9f0f">niche</font> - There currently are no field modifiers so this would break that convention. Maybe ok?
- `delegate` <font color="#fcb900">relic</font> -Unnecessary with the introduction of Method\<P,R>. Never to be introduced as the generic variant is preferred.
- `event` <font color="#fcb900">relic</font> - Succeeded by the Event class. No need to be a keyword.
  - Since the event keyword has been removed these aren't needed
    - `Add`
    - `Remove`
- `extern` <font color="#3b9f0f">niche</font> - Likely will think up a more first class binding feature for interopt if directly supported
- `extern alias` <font color="#3b9f0f">niche</font> - Never encountered use of this once
- `fixed` <font color="#eb144c">blocked</font> - Unsafe code will not be part of Shift
- global niche/blocked - Blocked? but maybe niche. Feels unmanaged to me.
- `goto` <font color="#eb144c">blocked</font> - This was bad day 1.&#x20;
- `lock` <font color="#3b9f0f">niche</font> - Do we really need this with SemaphoreSlim existing? Not against reintroducing
- managed blocked - unsafe code
- `nameof` relic - Strongly typed reflection makes this unnecessary
- `null` <font color="#eb144c">blocked</font> - Null will not exist. Use Nullable\<T> instead.
- `out` <font color="#eb144c">blocked</font>
- `partial` <font color="#eb144c">blocked</font> - No spliting definitions. Autogenerated code is evil too.
- `readonly` <font color="#fcb900">relic</font> - Different type classes provide this functionality
- `ref` <font color="#eb144c">blocked</font> - There is no pass by value in Shift, so ref is never needed
- `sealed` <font color="#eb144c">blocked</font> - You should never be unable to derive from a class
- `sizeof` <font color="#eb144c">blocked</font> - Safe but only needed with unsafe code
- `stackalloc` blocked - unsafe
- `static` <font color="#fcb900">relic</font> - Achievable with libraries + records
- `typeof` <font color="#fcb900">relic</font> - Type definitions already are type instances in C#, no need to wrap with the typeof() operator
- `unchecked` <font color="#eb144c">blocked</font> - unsafe
- `unmanaged` <font color="#eb144c">blocked</font> - unsafe
- `unsafe` <font color="#eb144c">blocked</font> - unsafe
- `virtual` <font color="#eb144c">blocked</font> - Intentional to stop derived variants changing base behavior.
- `volatile` <font color="#3b9f0f">niche</font> - Modifier conversation

# Properties

At the moment properties as syntactic sugar are not supported. Instead use the Property\<T,G,S> service.&#x20;

This is currently intentional to make it more obvious that side effects are in play with data storage.

This means these keywords aren't available

- get
- set
- value
- init

# Linq Query Syntax

At the moment query syntax is not supported.

This is purely time/complexity driven. Secondarily having an embedded DSL inside of the language feels wrong. Open for being reintroduced as C# has it or in another form down the road.

This means that these keywords aren't available

- ascending
- descending
- equals
- from
- group
- into
- join
- let
- on
- orderby
- select

# Access Modifiers

There are no access modifiers in Shift. Everything is `public` by design.

This means that these keywords aren't available

- public
- internal
- protected
- private

# Reflection

Reflection has been completely overhauled. In general the entire interface for reflection and how Type in C# works, is different in Shift.

See [Reflection](docId\:kNgFmkpqanGqKwZJdNkJc) for more context.
