LINUX.ORG.RU

Состоялся релиз PowerShell 7

 ,


0

0

4 марта вышла в свет новая версия PowerShell 7.

PowerShell представляет собой «кроссплатформенный фреймворк автоматизации ПО и конфигурирования, оптимизированный для структурированных данных, REST API и объектных моделей», который включает в себя командную оболочку, объекто-ориентированный язык и набор средств для исполнения сценариев и управляющих модулей.

Из новых возможностей отмечены:

  • Параллельная обработка объектов в ForEach-Object
  • Новые операторы: тернарный условный оператор ?:; управляющие операторы || и &&, аналогичные таким же операторам в bash; условные NULL-операторы ?? и ?=, отдающие значение справа в случае, если значение слева равно NULL
  • Улучшенное представление описания ошибок и командлет Get-Error для вызова детального описания ошибок
  • Вызов ресурсов службы настройки требуемого состояния (DSC) непосредственно из PowerShell (в экспериментальной стадии)
  • Улучшенная обратная совместимость с Windows PowerShell

Версия доступна к использованию дистрибутивами Linux, поддерживающими .NET Core 3.1, сообществом предоставлены пакеты для Arch и Kali Linux.

Snap-пакет в Ubuntu 16.04 вызывает ошибку сегментирования, в связи с чем предлагается установка в поставке DEB или tar.gz.

>>> Подробности

★★★

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

в 80-х годах программисты «ходили в шкурах от динозавров».

Сложно сказать, что лучше - шкуры динозавров или тот убогий шмот, который выпускала промышленность СССР )))

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

Сложно сказать, что лучше - шкуры динозавров или тот убогий шмот, который выпускала промышленность СССР )))

Как сказать …
Обувь была очень качественная.
На трех колесный детский велосипед можно было смело сажать мужика весом 200 кг. …

Не все было плохо.

Но крышки от унитазов /как делали Beatles/ на себя нельзя было цеплять.

Владимир

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

Погуглите «Но крышки от унитазов Beatles».

Владимир

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

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

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

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')
text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')
for temp in text_1:
	file_out.write(temp[3:14] + '\n')
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод:

2020-03-12 19:18:03.775619

2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод:

1584030638.01605

1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.

PS Только обратил внимание: perl пишет в файл «как есть», а питон добавляет к концу CRLF, ну да, он же текстовый. А если открыть файл на запись как ‘wb’, то питон немедля начинает ругаться на то, что строку так в файл писать нельзя, надо byte-object. В perl всей этой головной боли нет, он просто пишет ровно те данные, что я ему указал.

beck ★★★★
()
Последнее исправление: beck (всего исправлений: 5)
Ответ на: комментарий от beck

Ну какой же вы настырный гражданин :) Правда, любой дата-саентист сказал бы, что вы джун зеленый и не владеете ни разу матчастью.

Вот пример обработки данных на питоне:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(pd.read_csv('filename1.csv'), columns= ['Product1', 'Price1'])
df2 = pd.DataFrame(pd.read_csv('filename2.csv'), columns= ['Product2', 'Price2'])

df1['Price2'] = df2['Price2']
df1['pricesMatch?'] = np.where(df1['Price1'] == df2['Price2'], 'True', 'False')

df1.to_csv('result.csv', index = False, header=True)

Берем два csv файла, зачитываем, сравниваем колонки «цена» и пишем в результирующий файл результат сравнения. Подозреваю, что перлуха закашляется догонять сишные модули Pandas в плане скорости.

Это просто пример, как решаются подобные задачи на питоне, а не вот это вот все. И перлуха в сравнении с питоном тут выглядит как «аццки упоротый ЯП, написанный веселым наркоманом» (с) лурк

Linfan ★★★★★
()
Последнее исправление: Linfan (всего исправлений: 1)
Ответ на: комментарий от anonymous

Обувь была очень качественная.

о да! вся была производной от солдатских кирзачей. Дизайн - 2-3 модели на все магазины города, и наследовался от тех же кирзачей.

На трех колесный детский велосипед можно было смело сажать мужика весом 200 кг.

При условии, что этот мужик сможет лисапед вынести во двор )))

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

питон - тормозное убожество

Можно спорить на тему ЯП до хрипоты. Но вот поиск вакансий «программист python + pandas» дает дофига результатов, а вакансий «программист perl» увы стремится устойчиво к нулю. Причем «python + pandas» это не кодинг «за еду», а вполне осязаемые в снг $2-3k (после налогов).

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

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

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

Почему перл раскрашен, а питон нет?

Потому что вы невнимательны :) У beck два крашеника - первый питон, второй перл. Мой семпл не раскрашен, потому что он запостчен в lorcode, а не в markdown.

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

Без цифр всё это ни о чем.

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

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

В таком раскладе для вас будет лучше тот вариант, который вам понятен и известен. Но это будет ваш личный частный случай, а не best practice индустрии.

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

При условии, что этот мужик сможет лисапед вынести во двор )))

Что-то в этом есть.
В те далекие времена у машиностроительных заводов был показатель «металлопотребления».

Все старались ...

Владимир

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

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

Цифр нет, говорить не о чем.

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

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

Не переживай, в перлухе есть свой Data::Frame с сишным PDL под капотом

annulen ★★★★★
()

Засрали всю ветку со своими терками питон версус пёрл. Лучше поделитесь своим $profile, может чего-нибудь интересного, какие-нибудь функции, элаисы, сама функция prompt для кастомизации консоли, у кого-нибудь есть свое видение?

(gi $profile).fullname
anonymous
()
Ответ на: комментарий от annulen

Не переживай, в перлухе есть свой Data::Frame с сишным PDL под капотом

Может и есть - в сортах перлухи не силен :) Но в «дикой природе» среди дата-саентистов прижилась парочка питон+пандас, а не перл с чем-то там.

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

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

Цифр нет, говорить не о чем.

Если у вас есть масса свободного времени, то вы можете заняться такими сравнениями. Я, увы, не могу себе позволить такое. Да и смысла в этом особого не вижу - то, что используется в дата-индустрии де-факто, скорее всего и будет усредненно-приемлемым оптимумом.

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

Show me the code.

И таки шо, кода не видно? )))

Без цифр все утверждения голословны.

Измеряйте, ради бога. Кто ж запрещает-то?

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

Я свои цифры измерил и сделал вывод, что питон - тормозное убожество.

Вы продолжаете вертеться как говно на палочке. Ну продолжайте, охота пуще неволи.

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

Я свои цифры измерил и сделал вывод, что питон - тормозное убожество.

Увы-увы, Перлуха Головного Мозга - это серьезно :)

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

Молодой человек, еще раз на пальцах: по куче причин я не буду участвовать в таком «забеге», потому как любые сравнения будут вызывать массу батхерта, хейтерства и бесполезной траты времени. Тем более, что я не перловый программер, а вы не питонист.

И сравнения эти бессмысленны, поскольку для работы с крупными массивами данных в питоне юзают сишные экстеншины, а не базовый синтаксис. Сишный экстеншин априори работает шустрее интерпретатора perl, написанного на сях (хотя тут находились в свое время поциенты, доказывавшие преимущество по перформансу разных интерпретаторов над сями). Если брать сходные экстеншины для перла, то сравнивать качество сишных экстеншинов питона и перла - тоже занятие глупое и бессмысленное.

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

Дружище, ты гонишь. Причём сразу в разных направлениях.

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

for temp in file_in_1:
    print >>file_out, temp[3:14]

в python3 - так -

for temp in file_in_1:
    print(temp[3:14], file=file_out)

Во-вторых, в приведённом образце нет никакой печати текущего времени, этой программе просто нечем сформировать

вывод:
2020-03-12 19:18:03.775619
2020-03-12 19:18:05.362468

т.е. если какая-то программа и показала такой вот результат, то это не та программа, что нам предъявлена.

В третьих, я не поленился подготовить данные - два файла по 100 тыс.строк, каждая из 900 случайных символов [0-9a-z] и запустить и твои образцы и свои. Поскольку я perl не знаю, то я использовал time -p для получения времени.

Вот твой образец на perl:

real 0.68
user 0.47
sys 0.20

вот я удалил накопление подстрок в массивах -

real 0.60
user 0.40
sys 0.19

вот запустил твой код на python2:

real 0.64
user 0.35
sys 0.28

вот запустил твой код на python3:

real 0.89
user 0.43
sys 0.28

вот вместо read&split (бррр…) применил итерацию по файлу - python2:

real 0.22
user 0.16
sys 0.05

Обрати внимание - примерно в три раза быстрее, чем perl.

python3:

real 0.82
user 0.73
sys 0.07

python3, при условии что файлы открываются как двоичные -

real 0.44
user 0.36
sys 0.07

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

Разница – в почти 16 раз.

Дружище, фу таким быть.

Впрочем, что тебе аноним, что ты анониму ;) Так, только зубы поскалить.

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

по хорошему нужно проводить несколько измерений

По хорошему сопоставлять эти тесты на одном и том же железе. Результат может разниться, даже в 16 раз.

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

Pls, ткните пальчиком, где я сопоставляю тесты сделанные на разном оборудовании. Я показываю, что на моём стареньком оборудовании (x86_64, proc: Intel(R) Core(TM)2 Duo CPU E7600 @ 3.06GHz, mem: 4x2GiB) python если и проигрывает, то немного. А если привести код в порядок, то даже и выигрывает.

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

Сегодня сделаю, как вы советуете. Это интересно.

Может и правда у меня руки не растут не оттуда.)))

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

Переписал по вашему совету с итератором файла. Однако суть в том, и я об этом писал раньше, что мне в итоге нужно было сравнить эти два массива, поэтому я их и собираю, а не просто выкинуть в файл найденные подстроки. Ну да ладно. Про сравнить пару массивов сделаю ещё один тест. )))

Итак, perl

my $time1 = gettimeofday; 
print "begin: ", $time1, "\n";
open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";
while (<FP_01>) {
	print FP_RES substr($_, 3, 11) . "\n";
}
while (<FP_02>) {
	print FP_RES substr($_, 3, 11) . "\n";
}
close(FP_01);
close(FP_02);
close(FP_RES);
my $time2 = gettimeofday; 
print "end: ", $time2, "\n";

Запустил несколько раз, для усреднить результат:

begin: 1584348067.03854
end: 1584348067.38828

begin: 1584348102.90829
end: 1584348103.25905

begin: 1584348104.91495
end: 1584348105.28588

begin: 1584348138.61802
end: 1584348138.96772

Примерно ~0,35 секунды. Причём расхождение результатов 0,02.

Перейдем к питону:

t = datetime.now()
print(t.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
file_in_1 = open(sys.argv[1], 'r')
file_in_2 = open(sys.argv[2], 'r')
file_out = open(sys.argv[3], 'w')
for temp in file_in_1:
    print(temp[3:14], file=file_out)
for temp in file_in_2:
    print(temp[3:14], file=file_out)
file_in_1.close()
file_in_2.close()
file_out.close()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))

Результаты:

2020-03-16 11:24:57.511136
2020-03-16 11:24:58.786507

2020-03-16 11:25:03.978829
2020-03-16 11:25:05.32895

2020-03-16 11:25:06.698896
2020-03-16 11:25:07.979156

2020-03-16 11:25:09.256597
2020-03-16 11:25:10.594978

2020-03-16 11:27:26.465951
2020-03-16 11:27:27.756798

Примерно ~ 1,3 секунды. А вот расхождение результатов 0,07.

Итого: Perl быстрее в 3,7 раза и к тоже показывает куда более стабильный результат. В общем, как и ожидалось, питон - так и не показал чудесной производительности.

ЗЫ убрал chomp из perl, он не нужен. )))

beck ★★★★
()
Последнее исправление: beck (всего исправлений: 3)
Ответ на: комментарий от beck

Повторим эту операцию 100 раз. Может что поменяется?

perl

begin: 1584349167.14992
end: 1584349202.98215

~ 35,832 секунд

python

2020-03-16 12:00:03.171529
2020-03-16 12:02:07.610397

~ 124,438 секунд

Итого: perl быстрее в 3,47 раза. Ничего не изменилось, питон - тормоз.

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

Ещё напиши, что такое

my $time1 = gettimeofday; 

Я вот перла не знаю, и у меня вот есть кое-какие предположения, но проверить я не могу -

[green@nest ~]$ perl --version

This is perl 5, version 22, subversion 3 (v5.22.3) built for x86_64-linux-thread-multi

Copyright 1987-2017, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

[green@nest ~]$ perl -e 'my $time1 = gettimeofday; print "begin: ", $time1, "\n";'
begin: gettimeofday
[green@nest ~]$

То, что ты урезал осетра и пишешь уже не о 15 раз, а о 3 - уже какой-никакой прогресс.

А вот скажи - если я в perl ввожу строку из файла, она в программе представляется как последовательность байтов или юникодных символов? Просто в python2 строка считывалась и записывалась как последовательностью байтов (для пуристов: если не использовать codecs.open()). В противоположность этому в python3, если не указывать двоичный режим, то при чтении из файла байты преобразуется в последовательность юникодных символов в соответствии тек. локалью, а при записи - из юникодных символов кодируется как последовательность байт. В твоём примере это до дури работы, и если её исключить, то можно сократить время выполнения скрипта.

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

То, что ты урезал осетра и пишешь уже не о 15 раз, а о 3

Ну так мне ж сказали, что я не умею в питон, я сделал, как правильно.)))

Однако подозреваю, что если собрать массив, то вылезет обратно 15. Не поленюсь, напишу целиком.)))

А вот скажи - если я в perl ввожу строку из файла, она в программе представляется как последовательность байтов или юникодных символов?

Без понятия. Несомненно, можно упороться и начать глубоко оптимизировать, но задача была совсем другой. Склеить пару приложений через файл по-быстрому.

Думаю, что perl работает ровно с тем, что ему дали, без внутреннего конвертирования, как С.

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

Ещё напиши, что такое

my $time1 = gettimeofday; 

Сорри (Time::HiRes для получения долей секунд):

use strict;
use warnings;
use Time::Local;
use Time::HiRes qw/gettimeofday/;

my $time1 = gettimeofday; 
print "Returns ssssssssss.uuuuuu in scalar context: ", $time1, "\n";
beck ★★★★
()
Последнее исправление: beck (всего исправлений: 1)
Ответ на: комментарий от anonymous

как вы распарсите два файла по 90 мб?

Скинь файлы, я так понял 900x100000, не самому же генерить. Скажу сразу, по скорости уступит и perl и python, на 5-10 секунд. Но вопрос для чего эти тесты? Рабочий день 8-10 часов, даже если час будет что-то там парситься, это фигня. А для дома вообще таких задач нет.

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

Знатоки повершелл, а как вы распарсите два файла по 90 мб?

Сначала создаем файл в 100тыс строк, с длиной строки в 900 знаков, распорложенных в рендомном порядке. Это занимает порядка 8 минут:

$text = (('a'..'z') + ('A'..'Z') + (0..7)) * 15

$writer = [io.streamwriter]::new("$env:HOME/Desktop/test_file")

for ($i = 0; $i -le 99999; $i++)
{
    $writer.write(((get-random $text -count 900) -join '') + "`n")
}

$writer.close()

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

$writer = [io.streamwriter]::new("$env:HOME/Desktop/result_file")

0,1 | foreach {

    $reader = [io.streamreader]::new("$env:HOME/Desktop/test_file")

    while ($reader.peek() -ne -1)
    {
	$writer.write($reader.readline().substring(3,11) + "`n")
    }

    $reader.close()
}

$writer.close()

По времени:

measure-command { 2.ps1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 687
Ticks             : 16878560
TotalDays         : 1,95353703703704E-05
TotalHours        : 0,000468848888888889
TotalMinutes      : 0,0281309333333333
TotalSeconds      : 1,687856
TotalMilliseconds : 1687,856

Не так уж и плохо, имхо.

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

Не думал, что эта параша выйдет в топ обсуждаемых на ЛОР.

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

anonymous
()

С каждым релизом все лучше в производительности и возможностей.

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

Не думал, что эта параша выйдет в топ обсуждаемых на ЛОР.

Параша, это ты. Человек, который просто ничего не знает и не умеет.

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

На трех колесный детский велосипед можно было смело сажать мужика весом 200 кг. …

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

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

Трусы, надеюсь, японских школьниц?

anonymous
()

Да, баш это конечно полный звездец. Посмотрите только на это: https://stackoverflow.com/a/47876317

А одно экранирование переменных чего стоит. После человеческих скриптовых язычков, всё это — настоящий шок.

Неужели дуболомы вроде @anc действительно так любят этот мешок граблей, что готовы его так защищать?..

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

баш это конечно полный звездец

Тем не менее его наверное все-таки надо знать. Но я предпочитаю сабж. Если чего в нем не хватает или проще сделать со штатными утилитами, то не стесняюсь их использовать. Например до 7-ой версии нельзя было просмотреть разрешения. Сейчас можно, но только в строчной нотации, а-ля rwx-rwx-rwx, поэтому, когда надо использую тот же stat.

anonymous
()
25 мая 2020 г.
Ответ на: комментарий от annulen

В каком месте «|» позволяет мультиплексировать обработку stdout и stderr?

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

нелюбовь к перлу у меня вполне себе обоснованная - я, в свое время, контрибьютил в postgresql dbi.

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