Что мешало использовать тот же рантайм и библиотеки, но синтаксис — обычный C# к примеру?
Никакой мороки с изучением другого синтаксиса, любой код можно легко перетащить из обычного проекта в скрипт и наоборот.
C>Что мешало использовать тот же рантайм и библиотеки, но синтаксис — обычный C# к примеру? C>Никакой мороки с изучением другого синтаксиса, любой код можно легко перетащить из обычного проекта в скрипт и наоборот.
Начальству хорошо продаётся то, про что можно заявлять "не требует найма программиста".
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>Я думаю, что разница такая же как между bash и Си. ЭФ>Что мешало использовать синтаксис языка Си? А вот нет, зачем-то придумали синтаксис bash...
ЭФ>В чём конкретно дело — я не задумывался.
В те времена когда это изначально делали, каждый байт был на счету да и компиляция была совсем не быстрой. Ну а потом — "так уж здесь принято".
C> каждый байт был на счету..., а потом — "так уж здесь принято".
Нет, это не единственная причина.
Ещё дело в том, что существует некая абстрактная модель того, как всё это должно работать (передача данных от программы к программе через "пайпы"), эта модель поддерживается соответствующим синтаксисом. В языке C# просто такого нет (и в Си тоже)
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>Нет, это не единственная причина.
C, к тому же — язык низкого уровня. Просто слишком много добавочной работы.
ЭФ>Ещё дело в том, что существует некая абстрактная модель того, как всё это должно работать (передача данных от программы к программе через "пайпы"), эта модель поддерживается соответствующим синтаксисом. В языке C# просто такого нет (и в Си тоже)
В C# это элементарно делается при помощи библиотек.
C> Кхм, серьезно? Там тоже надо управлять памятью вручную и везде сплошные указатели?
В Bash система типов ещё проще, указателей нет, значит сложность у него ниже чем у Си.
Ну хорошо, неправильно выразился. Не "уровня" надо было сказать, а "сложности".
Здравствуйте, Codealot, Вы писали:
C>Что мешало использовать тот же рантайм и библиотеки, но синтаксис — обычный C# к примеру?
Ну они и взяли в качестве основы что-то типа bash.
Для первых версий где еще не было всяких страшных вещей типа объявлений классов (и вроде даже скриптовых свойств еще не было) этого было за глаза.
Более того, основной use case, который предполагался — это написать Pipeline из набора cmdlets. Синтаксис bash здесь просто поет и пляшет.
Всё остальное — это только вспомогательные конструкции.
C>Никакой мороки с изучением другого синтаксиса, любой код можно легко перетащить из обычного проекта в скрипт и наоборот.
Зачем? Если вы уже написали код на C#, то в чем смысл его тащить в PS?
Создайте консольку и вызывайте её или оформите код как cmdlet (это, кстати, очень просто и удобно делается), а затем просто напишите обвязку вида "из этого cmdlet взял, по таким-то полям отфильтровал, в этот cmdlet отдал".
Здравствуйте, Codealot, Вы писали:
C>Что мешало использовать тот же рантайм и библиотеки, но синтаксис — обычный C# к примеру?
на момент придумывание мешали две вещи:
1) "public static void main — оверхед"
2) статическая типизация
На сегодня осталась только вторая проблема
C>Никакой мороки с изучением другого синтаксиса, любой код можно легко перетащить из обычного проекта в скрипт и наоборот.
PowerShell намеренно делали похожим на bash, а не C#, чтобы админы могли писать скрипты, а программисты им могли помогать в этом путем создание модулей и snap-in.
2. В нём очень простой синтаксис для запуска программ. В sh это просто program arg1 arg2
3. В нём очень простой синтаксис для построения pipeline-ов, когда стандартный выход одной программы соединяется со стандартным входом другой программы. В sh это просто program1 arg1 | program2 arg2
4. В нём очень простой синтаксис для вызова под-шеллов, например чтобы передать вывод одной программы как аргумент другой. В sh это просто program1 $(program2).
В обычных ЯП это никак не изменить, никакими библиотеками. Слишком много будет синтаксического мусора.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, gandjustas, Вы писали:
G>>PowerShell намеренно делали похожим на bash, а не C#, чтобы админы могли писать скрипты
ЕМ>Каким образом похожесть на bash, при остальных радикальных отличиях, может помочь админам писать скрипты?
Отличия не настолько радикальные, насколько вы хотите думать.
1) Это даже не про bash, а про командную строку. Основа композиции программ в командной строке — "пайплайн", то есть выход одной программы передается на вход другой и так можно составлять цепочку программ. Это реализовано в pwsh.
2) Набор операторов (if\else, for, switch, function pwsh и их семантика ПОЛНОСТЬЮ совпадает с bash (внезапно!). В некоторых случаях совпадает и синтаксис, например синтаксис сравнения.
3) в pwsh есть алиасы команд, которые совпадают с командами bash
В итоге программу на bash можно превратить в программу на pwsh путем замены и добавления ключевых слов, а также установки скобок в некоторых местах.
При этом pwsh был и остается .net языком, на котором можно сделать все, что можно на .net, кроме создания своих типов.
Здравствуйте, Codealot, Вы писали:
C>Что мешало использовать тот же рантайм и библиотеки, но синтаксис — обычный C# к примеру?
Есть подозрение, что это и было начальной (здравой) идеей. Потом набежали линупсятники и такие: "Так не принято! Нужно каждый раз изобретать новый язык! Юзеры не поймут ваш C#!".
Наделла почесал свои яйца (которыми думал) и дал добро!
На деле практически НИ ОДИН юзер не пишет ничего в шеллах — всё написано обычными программистами, которые вынуждены вместо привычного языка использовать "скриптовую чушь", ограниченную по всем фронтам. Тот же bash — маразм чистой воды, есть же обычный Перл, причём даже с "однострочным вызовом". Но нет, каждому ничтожеству хочется плюнуть в вечность, изобретя "личный язык"!
Здравствуйте, Kolesiki, Вы писали:
K>На деле практически НИ ОДИН юзер не пишет ничего в шеллах — всё написано обычными программистами, которые вынуждены вместо привычного языка использовать "скриптовую чушь", ограниченную по всем фронтам.
Юзер не пишет, а админ — очень даже пишет.
У меня всегда все админы писали pwsh скрипты, при этом не только простые пайплайны готовых команд, но и циклы, преобразования данных и иногда интерактив.
pwsh хорош именно тем, что имеет низкий порог вхождения, но при этом огромные возможности.
По сути единственное ограничение pwsh — невозможность сделать свой тип в pwsh. Но через Add-Type можно создать тип на C# прямо в теле скрипта.
K>Тот же bash — маразм чистой воды, есть же обычный Перл, причём даже с "однострочным вызовом". Но нет, каждому ничтожеству хочется плюнуть в вечность, изобретя "личный язык"!
Лично мне синтаксис bash гораздо больше нравится чем perl, но тут вкусовщина.
Здравствуйте, gandjustas, Вы писали:
G>1) Это даже не про bash, а про командную строку. Основа композиции программ в командной строке — "пайплайн"
Спасибо, я знаю за композиции. Вопрос исключительно о корявом синтаксисе скриптового языка bash.
G>2) Набор операторов (if\else, for, switch, function pwsh и их семантика ПОЛНОСТЬЮ совпадает с bash (внезапно!). В некоторых случаях совпадает и синтаксис, например синтаксис сравнения.
То есть, совпадает как раз самое уродливое. А зачем? Профессиональные виндовые админы никогда массово не изучали bash и не пользовались им.
G>В итоге программу на bash можно превратить в программу на pwsh
Зачем? Это не имеет смысла без превращения винды в линукс или наоборот.
G>При этом pwsh был и остается .net языком, на котором можно сделать все, что можно на .net, кроме создания своих типов.