LINUX.ORG.RU

C# 9 опережает Rust?

 , ,


0

7

Тут выложили обзор фич C# 9, и там очень много ФП и странного синтаксиса (привет @WitcherGeralt).

Sum Types:

enum class MixedType  
{  
  Person P;  
  ByteOrBool U;  
}

var person = new Person()  
{  
  Firstname = "Bassam";  
  Lastname = "Alugili";  
};  
  
var unionRecord = new MixedType.P(person);
var unionType1 = new MixedType.U(B true);
var unionType2 = new MixedType.U(Y 86uy);

Pattern matching:

public class GenericClass<T> where T : T1 | T2 | T3 

var crazyCollectionFP = new List<int|double|string>{1, 2.3, "bassam"}; 

var result = x switch { true => "Successful", false => 0 }; 

Типы аля Rust:

public class None {}  
public typealias Option<T> = T | None; 
public typealias Result<T> = T | Exception; 

Некое чудо-юдо для автоматической проверки на null:

void M(List<int> list, uint? u)  
{  
  IEnumerable<int> x = list ?? new[] { 1, 2 };  
  var l = u ?? -1;
}  

Что значит uint? - без понятия.

Проверка аргумента на null:

void DoSomething (string txt!)  
{  
  …  
} 

Lambda discard parameters (хз как перевести):

Func zero = (_,_) => 0;  
(_,_) => 1, (int, string) => 1, void local(int , int);

Атрибуты аргументов (опять как в rust):

static bool LocalFunc([NotNull] data)  
{  
  return true;  
} 

Нативный int:

nint nativeInt = 55; // take 4 bytes when I compile in 32 Bit host.  
nint nativeInt = 55; // take 8 bytes when I compile in 64 Bit host with x64 compilation settings.

nuint nativeUnsignedInt = 55; 

А @eao197 говорил, что u32 - это дно. Оказывается нет.

Указатели на функцию (неужели до этого не было?):

unsafe class Example  
{  
  void Example(Action<int> a, delegate*<int, void> f)  
  {  
    a(42);  
    f(42);  
  }  
} 

В целом радует, что идут в сторону ФП и null-safety, но в итоге получаем второй C++, в котором на любой чих есть с десяток конструкций. Что в конечном итоге убивает экосистему.

★★★★★

Ответ на: комментарий от Legioner

Сервер где хочешь. Облака-с.

А на ажуре цена практически одна и та-же и как утверждают докер "даже лучше "

Хотя с последними несовместимыми реализациями жабы все не однозначно, но всеже чаще случается что оно работает везде.

Ну, если с:\хех в пропетис не пропишет

grim ★★☆☆
()
Ответ на: комментарий от grim

Может быть, я неудачные примеры смотрел, но то, что появилось в C# 7 - это какие-то попытки школьников казаться взрослыми.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 2)

в итоге получаем второй C++, в котором на любой чих есть с десяток конструкций. Что в конечном итоге убивает экосистему

Вот эти все супер пупер фичи они имеют вот прям такую жизненную необходимость? Без нечто реализуется в 10 раз сложнее и в 5 раз менее надежно?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от tailgunner

Скорее попытки догнать и перегнать f#. Что само по себе обречено на провал, так как какими ты фичами c# не облагораживай у него всё равно java отовсюду торчит.

anonymous
()

Поясните для дремучих крестовиков

var crazyCollectionFP = new List<int|double|string>{1, 2.3, «bassam»};

Это тупл будет или что? Почему он лист?

CatsCantFly
()
Последнее исправление: CatsCantFly (всего исправлений: 3)
Ответ на: Поясните для дремучих крестовиков от CatsCantFly

Я пропозал не читал и хз как там на самом деле, но по виду я бы сказал что это аналог вот такого С++ кода

auto crazyCollectionFP  = std::list<std::variant<int, double, std::string>> {1, 2.3, "bassam"s};
fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)

но в итоге получаем второй C++, в котором на любой чих есть с десяток конструкций.

лол. смуешно слышать от адепта раста.

раст уже скоро догонит аду по количеству ненужного хлама, который нужно знать, чтоб решить простую задачу.

anonymous
()
Ответ на: комментарий от anonymous

простую задачу

Простая задача это скрипт на 100 строк. И даже он имеет шансы разрастись со временем. И если он начнет расти, простой ЯП будет тебя стопорить. Ведь как говорится, простота хуже воровства. А где воровство – там, как известно, rust

Deleted
()

Прочитал как «C номер 9 опережает раст». Долго думал как это я умудрился пропустить еще 7 сишек после крестов, ну нифига себе запой получился.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Вот эти все супер пупер фичи они имеют вот прям такую жизненную необходимость?

Конечно имеют, иначе пацаны с растишкой засмеют, самооценка упадет, а с ней и потенция.

anonymous
()
Ответ на: комментарий от CatsCantFly

Не было. Можно было общий класс базовый создать если свои типы или базовый класс object использовать или ещё что-нибудь накостылить…

fsb4000 ★★★★★
()
Ответ на: комментарий от CatsCantFly

Это нормальные ADT на уровне языка, с паттерн-матчингом. Куда там варианту.

anonymous
()
Ответ на: комментарий от RazrFalcon

Ну вот, добавят аналог variant через |, который будет даже лучше из-за патерн матчинга

Просто я хотел показать, что object лучше чем void*, то есть любой объект даже после каста знает свой изначальный класс..

fsb4000 ★★★★★
()

list ?? new[] { 1, 2 };

Что значит uint? - без понятия.

Nullable types и null-coalescing operator завезли в C# во второй версии, в 2005 году. Дальше не читал. Автор, пойди проспись.

beaver
()
Ответ на: комментарий от WitcherGeralt

А теперь тупой мудак альбатрос потер сообщение о том, что тупой мудак альбатрос трет сообщения.

anonymous
()
Ответ на: комментарий от anonymous

А теперь тупой мудак альбатрос потер сообщение о том, что тупой мудак альбатрос трет сообщения.

Рекурсия.
«Граф знает счет на своем счету».

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Вот щас обидно стало. Почему это я тупой? Я острый дерзкий мудак.

Альбатрос.

anonymous
()
Ответ на: комментарий от anonymous

Не каждого, тот же С например не шибко изменился за последние лет 30. Появился всякий сахар, но его крайне мало. А уж кучи непонятных фич и в помине нет.

Это судьба любого языка, который пытаются приспособить и для одних и для других и для хипстеров и для лохов.

ixrws ★★★
()
Ответ на: комментарий от slackwarrior

Мы с моим парнем Одалистом тоже боксенгом занимаемся, а то нас постоянно гомофобы бьют :(

Grzegorz

anonymous
()
Ответ на: комментарий от anonymous

Владимир

А ведь это мило, что лор превращается в двачик. @maxcom, давай трипкоды введём? Гулять так гулять, а?

anonymous
()
Ответ на: комментарий от anonymous

Вы неправильно занимаетесь, потому и бьют. При сжатии ладони не нужно захватывать писюн партнера, и движения должны быть резкими выпадами, а не поглаживанием вверх-вниз.

Ираклий

anonymous
()

идут в сторону ФП и null-safety

В шарпе с рождения НПЕ-фобия.

ya-betmen ★★★★★
()
Ответ на: комментарий от lovesan

C# уже давно является самым удобным и продвинутым языком из мейнстримных. Rust рядом не валялся.

Он и не собирался становится самым удобным. Он максимально надежный, а потом уж всё остальное по мере возможности. А шарп местами нелогичен, но несложно привыкнуть.

q0tw4 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.