Как стать автором
Обновить
14
0

Пользователь

Отправить сообщение
as — это приведение типа, is это проверка типа. Семантически логичнее is.
Ну, вы же только два смотрели? Про них я вам и рассказываю.

Кстати, этот шаблон можно обобщить для большинства сериалов, к сожалению.
Серьёзно? Все сезоны сериала построены по одному шаблону: команда что-то делает, потом случается «большой облом» и в конце сезона они как-то почти выкручиваются, но оставляют задел и нерешённые задачи на следующий сезон. Что вы такого увидели в заголовке, чего вы не ожидали?
Это была пародия на ТВ рекламу facebook
Несколько недель использую Rider для работы. Кончено, приходится постоянно переключаться в VS, но не жалуюсь, понимаю, что это EAP. Однако, очень страдаю из-за обилия мадженты в коде. Очень хочется более спокойную тему, как в VS.

Я скорее апеллировал к утверждению о том, что нужно быть участником и призёром программистских олимпиад, этим я не занимался ни до, ни во время обучения. Так-то раньше практически все вузы имели подобные программы, по которым можно было поступить до общих экзаменов.
Я в 2006 году поступал, там был просто отдельный отбор в середине учебного года. Нужно было решить какие-то задачки, после математического кружка это было несложно.
Если не ошибаюсь, нельзя было выбрать кафедру во время общих вступительных экзаменов летом, но в сентябре, учась в 11 классе, можно было записаться на «особый» отбор, пройти два уровня экзаменов и уже в феврале считаться зачисленным на кафедру.
Я учился на ИТП КТ, и пришёл именно «с улицы». Программированием занимался для себя, в олимпиадах не учавствовал, да этого и не требовалось для поступления.
Мне почему-то выставили Personal plan, при этом денег не просят.
Смешно, но сейчас строчку в анонсе поменяли на «you can even invite collaborators». Похоже, они сами не знают сколько :)
you can even invite a few collaborators.

Увы, бесконечно не получится.

Так и решили: нет нового синтаксиса — нет проблем :)


Давайте ещё раз попробую.


Раньше была контрукция case something: return;. Эта конструкция возвращала из метода, в котором объявлен switch, а не из ветви case.


Так же раньше была конструкция:


void Foo()
{
    Func<int, int> name = x => {return x;}; // возвращаем не из Foo, а из x
    x(); // после return остаёмся в Foo
    return; // а теперь возвращаем из Foo
}

теперь если ввести конструкцию


int Foo(int x){
    switch (x){
        something => return x;
    }
}

она выглядит так, будто мы возвращаем из блока case (который тут неявный), а не из Foo.
Выходит, схожий синтаксис, а поведение отличается. В одном случае выражение не управляет control flow родителя, а во втором случае управляет. Consistency языка нарушается. Вот и решили отказаться в пользу уже существующего синтаксиса.


Я не говорю, что это самая лучшая аргументация, и просто объясняю, чем руководствовались в данном случае.

Верно, тонкостей много. Возьмём тот же пример с rust-подобным синтаксисом. Как я понял, Вы говорите про что-то такое:


switch(c) 
{
    x => Console.WriteLine(x);
}

Такой вариант обсуждался и его не приняли из-за того, что сейчас из case можно вернуть значение:


string Foo(bool x) {
     switch (x) {
        case true : return "hello";
        case false: return "hi";
    }
}

в данном случае return возвращает значение из метода Foo, в котором объявлена конструкция switch.


С другой стороны выражение x => return 10; похоже на объявление лямбда выражения, где return возвращает из этого выражения, а не из метода, в котором объявлено это выражение.


Если взглянуть на rust-подобную конструкцию:


string Foo(bool x) {
   switch(x){
       true => return "hello";
       false => return "hi";
   }
}

семантически похоже на то, что мы возвращаем не из Foo, а из ветви case.

Я понимаю, это достаточно скучный тред, я в нём повторяю одно и тоже, однако меня не слышат. Команда C# не ломает компиляцию существующего кода, в том числе этим обусловлен такой корявый синтаксис в некоторых местах.


Вариантов развивать язык — куча, но конкретная команда выбрала именно такую стратегию для C#. Вот и всё. Если вы готовы выключать функции флажками, добавлять префиксы к именам, заниматься рефакторингами после смены компилятора — хорошо, с вами никто не спорит, но C# дизайнится с оглядкой на другие вещи. Иными словами: я начал тред объяснив почему сделано именно так, а мне все бросились объяснять, что они сделали бы иначе.


P.S. Пример с builder достаточно простой, я не знаю, зачем вы мне объясняете, что его не будут вводить.

Ничего преступного там и нет, обычный код. Я его привёл в пример, как два достаточно крупных проекта, написанных на C#, где не используются префиксы в именах локальных переменных. Конкретно эти два проекта сломаются, если ввести ключевое слово builder.

Октопус бесплатен для маленьких команд (а большие зарабатывают достаточно). И да, вам нужно хранилище артефактов, но если у вас уже есть билд-сервер, то добавить ему степ Octopack и публикацию артефакта не очень трудно. Бесплатный ProGet или любой другой in-house сервис подойдёт.


Кроме того вы получаете нормальные дашборды, нотификации, хранение скриптов, простые роллбэки и шифрование конфигураций. Поверьте, те инвестиции, которые требуются на настройку и развёртку этого решения, окупаются очень быстро. Деплой перестаёт быть проблемой.


Посмотрите на их дэмо сервис, поиграйте. Оно того стоит.

Очень хрупкое решение, если честно.


Есть же Octopus Deploy, который скачает артефакт билда, вытащит одну машину из лоад-балансера, удалит текущую версию сайта, распакует новую версию, заменит плейс-холдеры в конфигурационных файлах, запустит сайт и если сайт ответит на простой heals check, то машина вернётся в лоад-балансер.


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

IntelliSense не очень хорошо подхватывает это, но всё, кроме tuples компилируется нормально.

Информация

В рейтинге
Не участвует
Откуда
Amsterdam, Noord-Holland, Нидерланды
Дата рождения
Зарегистрирован
Активность