Re[12]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 11:55
Оценка:
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, vfedosov, Вы писали:


V>>Ну я попытался на своей VS2013 (более новые версии не доступны в нашей конторе) скомпилять следующий код:

V>>ошибка: Error 1 Could not find an implementation of the query pattern for source type 'double[*,*]'. 'Select' not found. Are you missing a reference or a using directive for 'System.Linq'? c:\users\vfedosov\documents\visual studio 2013\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs 30 34 ConsoleApplication2

R>Там ссылку указали: https://github.com/evilguest/linq2d


R>Почитай, а лучше видео глянь. Все там достойно и на уровне, генерируется нативный код с векторными инструкциями.


Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.
Отредактировано 05.09.2021 11:56 vfedosov . Предыдущая версия .
Re[15]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: rameel https://github.com/rsdn/CodeJam
Дата: 05.09.21 12:01
Оценка: 1 (1)
Здравствуйте, vfedosov, Вы писали:

V>Ну давай рассмотрим простую задачу — задание пишу вообще от балды —


V>На Пайтоне я решу задачу не задумываясь так (наверняка есть решения и еще более лаконичные):

V>
V>employees = []

V>for line in open("D:\\test.txt", encoding="utf-8").readlines():
V>    items = line.split(",")
V>    employees.append((items[0], int(items[1])))

V>employees.sort(key=lambda i: i[1])
V>print("Employee with the biggest salary is: ", employees[-1][0])
V>


V>Это полное решение — не нужны никакие import, не нужен проектный файл — это уже готовый к исполнению файл

V>На C# я буду вынужден нахреначить минимум втрое больше кода и еще и проект создать для этого:

Не будешь, вот тоже полностью валидный и готовый к исполнению файл

using System.IO;
using System.Text;

var q = from line in File.ReadAllLines(@"D:\test.txt", Encoding.UTF8)
        let data = line.Split(',')
        let salary = int.Parse(data[1])
        orderby salary
        select (data[0], salary);

Console.WriteLine("Employee with the biggest salary is: " + q.Last().salary);


В 10 шарпе даже эти using не нужно будет писать, так как будут включены по умолчанию
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[13]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: rameel https://github.com/rsdn/CodeJam
Дата: 05.09.21 12:03
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.


Надеюсь в корке запускал?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[13]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: rameel https://github.com/rsdn/CodeJam
Дата: 05.09.21 12:13
Оценка:
Здравствуйте, vfedosov, Вы писали:

R>>Почитай, а лучше видео глянь. Все там достойно и на уровне, генерируется нативный код с векторными инструкциями.


V>Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.


Так ты его даже и не запускал
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Отредактировано 05.09.2021 12:30 rameel . Предыдущая версия . Еще …
Отредактировано 05.09.2021 12:29 rameel . Предыдущая версия .
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vaa  
Дата: 05.09.21 12:30
Оценка:
Здравствуйте, rameel, Вы писали:

R>В 10 шарпе даже эти using не нужно будет писать, так как будут включены по умолчанию


Отключить-то хоть можно будет?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[17]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: rameel https://github.com/rsdn/CodeJam
Дата: 05.09.21 12:32
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Отключить-то хоть можно будет?


Можно, можно переопределить или свои добавить в implicit usings
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[15]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vaa  
Дата: 05.09.21 12:35
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>
V>employees.sort(key=lambda i: i[1])
V>print("Employee with the biggest salary is: ", employees[-1][0])
V>


синтаксис лямбды выглядит как и так сойдет.
employees[-1][0] — тоже сомнительно. обычно -1 как результат поиска отсутствующего элемента.
все остальное 0..n-1
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 12:38
Оценка:
R>Не будешь, вот тоже полностью валидный и готовый к исполнению файл

R>
R>using System.IO;
R>using System.Text;

R>var q = from line in File.ReadAllLines(@"D:\test.txt", Encoding.UTF8)
R>        let data = line.Split(',')
R>        let salary = int.Parse(data[1])
R>        orderby salary
R>        select (data[0], salary);

R>Console.WriteLine("Employee with the biggest salary is: " + q.Last().salary);
R>


R>В 10 шарпе даже эти using не нужно будет писать, так как будут включены по умолчанию


И как его запускать? Я пробовал скомпилять это в VS2013 — не поддерживается. Тут https://dotnetfiddle.net/ — тоже не работает — пишет, что A namespace cannot directly contain members such as fields or methods.
В принципе это уже смотрится неплохо, но ИМХО поздно. Пайтон, где подобная лаконичность доступна уже 20 лет, уже набрал обороты и с ним вряд ли удастся конкурировать.
Re[15]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.09.21 12:39
Оценка:
Здравствуйте, vfedosov, Вы писали:


V>Кроме кучи лишнего кода, связанного с уровнями доступами, декларациями классов, библиотеками, который мне для простого решения вообще не нужен, еще и сам основной код, получился несколько менее компактным и читабельным. В этом коде можно заметить 2 вещи, в которых Пайтон лучше шарпа. Это парсинг строки к int — в Пайтоне делается так: (int) str. Так же сортировки в Пайтоне поудобнее — не нужен компарер — можно задать ключ. Но это мелочи по сравнению с мусорным для простого проекта декларативным кодом.


Еще раз статическая типизация перевешивает все другие возможности.
Как правило питон используется без статической типизации. И поверь мне бывшему 1С нику, я знаю о чем говорю
и солнце б утром не вставало, когда бы не было меня
Re[14]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 12:50
Оценка:
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, vfedosov, Вы писали:


R>>>Почитай, а лучше видео глянь. Все там достойно и на уровне, генерируется нативный код с векторными инструкциями.


V>>Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.


R>Так ты его даже и не запускал


Я работал с Linq много в прежние годы и знаю его неплохо. То, что он в нативные конструкции преобразовывается, просто забылось за 7 лет пока не работал — раньше и это читал. Но сейчас я время на изучение шарпа тратить не буду — шарпа нет в моих приоритетах — уж прости. Если зарплаты на нем начнут делать зарплаты на плюсах и пайтоне — может и вернусь на шарп. Но есть нюанс — шарп слишком прост в освоении, а задачи, решаемые на шарпе тоже достаточно простые. Поэтому вчерашние студенты после года работы начинают конкурировать с сеньорами, и это ведет к проблемам с повышением зарплаты, и с простотой замены тебя на другого спеца. На плюсах это совсем не так — большинство вчерашних студентов с визгом бегут от этих страшных плюсов. Те, кто не убежал еще долго не могут работать самостоятельно. И таски там куда сложнее и интереснее — image processing, computer vision. Очень малый процент разработчиков способен подобные задачи решать эффективно. А спрос большой -> много денег и уверенность, что тебя не заменять завтра. Ну а Пайтон полезен в связке с плюсами, так-же в работе с AI, OpenCV etc.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 13:01
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, vfedosov, Вы писали:



V>>Кроме кучи лишнего кода, связанного с уровнями доступами, декларациями классов, библиотеками, который мне для простого решения вообще не нужен, еще и сам основной код, получился несколько менее компактным и читабельным. В этом коде можно заметить 2 вещи, в которых Пайтон лучше шарпа. Это парсинг строки к int — в Пайтоне делается так: (int) str. Так же сортировки в Пайтоне поудобнее — не нужен компарер — можно задать ключ. Но это мелочи по сравнению с мусорным для простого проекта декларативным кодом.


S>Еще раз статическая типизация перевешивает все другие возможности.

S>Как правило питон используется без статической типизации. И поверь мне бывшему 1С нику, я знаю о чем говорю

Я уже в разработке 20 лет и мне не нужно "верить" — я знаю, что типизация нужна. Но для нетривиальных решений. Для описанного скрипта она нахрен не нужна. Она не везде нужна даже в больших проектах. Если у тебя 2 приватные функи объявлены рядом в коде и первая вызывает вторую и ты уверен, что вторая больше никогда не потребуется, то можно обойтись без типизации — ты ничего потеряешь. Проверено многократно. Типизация внутри функции мне также не дает ничего — в основном чисто мусор. Типы ясны из контекста — за редким исключением. Безусловно полезна типизация интерфейсов — особенно на уровне классов, которые доступны из других модулей. Тут вообще без нее никак — иначе проект скатывается в гавно влет. Короче, у любого инструмента есть границы полезности. Для одних проектов хороший инструмент — Шарп, для других Пайтон. Те кто утверждает, что Шарп везде лучше — фанатики. Так же как и те, кто утверждает подобное про Пайтон. Я бы сказал, что пока нет единого языка для всех целей — да он и не факт, что возможен.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 13:06
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, vfedosov, Вы писали:


V>>
V>>employees.sort(key=lambda i: i[1])
V>>print("Employee with the biggest salary is: ", employees[-1][0])
V>>


vaa>синтаксис лямбды выглядит как и так сойдет.

vaa>employees[-1][0] — тоже сомнительно. обычно -1 как результат поиска отсутствующего элемента.
vaa>все остальное 0..n-1

ничерта не понял. "выглядит как и так сойдет" — это позитивная оценка или негативная?
Индекс -1 в пайтоне означает последний элемент с конца. Весьма удобная хрень.
"все остальное 0..n-1" — это про что? Что мол все отсортировал, а использую один только элемент? Да так — я ж писал — решение пишу не думая — самое простое. Цели оптимизировать не было.
Re[17]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.09.21 13:12
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>Те кто утверждает, что Шарп везде лучше — фанатики. Так же как и те, кто утверждает подобное про Пайтон. Я бы сказал, что пока нет единого языка для всех целей — да он и не факт, что возможен.


Тут проблема в том, что нужно постоянно на нескольких языках программировать. И то нужно некоторое время для перехода с одного языка на другой. Либо использовать только один.
С++ вынуждены использовать питон. Поэтому используют и для других задач. Мне же в моей работе C# только и нужен, изредка интеграции с 1С. Ну и очень редко TS, JS.
Даже F# хочется применять, но пока в одном проекте нельзя применять разные языки это утопия.
Сейчас кстати питон изучают все, а вот C# многие игнорирует. Что с одной стороны и хорошо меньше конкуренция. Но я не сказал бы, что С№ прост в изучении. Да По сравнению м С++ конечно прост, но наворотов сейчас больше чем в той же Java.
и солнце б утром не вставало, когда бы не было меня
Re[11]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.09.21 13:23
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>для одномерного массива вполне компиляется:

V>
V>       static void test()
V>        {
V>            var array2d = new double[1000000];
V>            array2d = (from a in array2d select Math.Min(a * 1.5, 1.0)).ToArray();
V>        }
V>

V>Чего я и ожидал собственно. Или в новых версия .Net есть "implementation of the query pattern for source type 'double[*,*]'" ?
Не в новых версиях .Net, а в библиотеке linq2d.

V>выполняется вдвое быстрее даже без компиляции в exe. А нативный код — С++, который делает ту-же работу, выполняется в 5 раз быстрее. В принципе результат шарпа все равно лучше, чем я ожидал — Linq действительно работает более оптимально, чем я ожидал и умудряется избежать какой-то части лишних действий. Но Пайтон быстрее.


Если взять linq2d, то получится примерно вот что:
    [InProcess]
    public class SimpleBenchmark 
    {
        private double[,] array;
        [GlobalSetup]
        public void Initialize()
        {
            var r = new Random(42);
            array = new double[1000, 1000];
            for (var i = 0; i < array.GetLength(0); i++)
                for (var j = 0; j < array.GetLength(1); j++)
                    array[i, j] = r.NextDouble();
        }
        [Benchmark]
        public double[,] Multiply()
            => (from a in array select Math.Min(a * 1.5, 1)).ToArray();
    }

2d массив 1000*1000 рандомных даблов на моём ноуте обрабатывается примерно 4.7 миллисекунды шарпом, и 2.8мс на C++.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.09.21 13:27
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>Я работал с Linq много в прежние годы и знаю его неплохо. То, что он в нативные конструкции преобразовывается, просто забылось за 7 лет пока не работал — раньше и это читал.

7 лет назад linq2d не было
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[18]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 13:32
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, vfedosov, Вы писали:


V>>Те кто утверждает, что Шарп везде лучше — фанатики. Так же как и те, кто утверждает подобное про Пайтон. Я бы сказал, что пока нет единого языка для всех целей — да он и не факт, что возможен.


S> Тут проблема в том, что нужно постоянно на нескольких языках программировать.

ИМХО это не проблема — это решение. Проблема в том, что спрос на языки меняется и то, что сегодня популярно, завтра может умереть. Поэтому надо выходить из зоны комфорта и писать на разных языках. Это как в той истории с мышкой: мышка, которая живет в сыре, должна постоянно принюхиваться — а не подгнивает ли сыр. Если подгнивает, то срочно нужно искать другой — иначе голодная смерть. А еще лучше всегда иметь другой сыр про запас.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 13:38
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, vfedosov, Вы писали:


V>>Я работал с Linq много в прежние годы и знаю его неплохо. То, что он в нативные конструкции преобразовывается, просто забылось за 7 лет пока не работал — раньше и это читал.

S>7 лет назад linq2d не было

Ну глянул — да — вполне естественное развитие концепции linq для 2D. Но Numpy эту штуку делает просто за счет тесной интеграции с Tensor Flow, OpenCV и многими другими крутыми библиотеками. А по синтаксису +- одно и то-же. А Numpy существует уже лет 20 — к ней уже привыкли и она заняла нишу. Так что Шарп поздновато включается. Хотя, для тех, кто должен прикрутить имадж процессинг к существующему проекту, эта штука незаменима.
Отредактировано 05.09.2021 13:48 vfedosov . Предыдущая версия . Еще …
Отредактировано 05.09.2021 13:45 vfedosov . Предыдущая версия .
Отредактировано 05.09.2021 13:45 vfedosov . Предыдущая версия .
Re[12]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.09.21 13:39
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>2d массив 1000*1000 рандомных даблов на моём ноуте обрабатывается примерно 4.7 миллисекунды шарпом, и 2.8мс на C++.
Если использовать кэщирование, т.е. не генерировать SIMD код на каждую операцию с массивом, то C# на пару процентов быстрее С++
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 13:44
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, vfedosov, Вы писали:


V>>для одномерного массива вполне компиляется:

V>>
V>>       static void test()
V>>        {
V>>            var array2d = new double[1000000];
V>>            array2d = (from a in array2d select Math.Min(a * 1.5, 1.0)).ToArray();
V>>        }
V>>

V>>Чего я и ожидал собственно. Или в новых версия .Net есть "implementation of the query pattern for source type 'double[*,*]'" ?
S>Не в новых версиях .Net, а в библиотеке linq2d.

V>>выполняется вдвое быстрее даже без компиляции в exe. А нативный код — С++, который делает ту-же работу, выполняется в 5 раз быстрее. В принципе результат шарпа все равно лучше, чем я ожидал — Linq действительно работает более оптимально, чем я ожидал и умудряется избежать какой-то части лишних действий. Но Пайтон быстрее.


S>Если взять linq2d, то получится примерно вот что:

S>
S>    [InProcess]
S>    public class SimpleBenchmark 
S>    {
S>        private double[,] array;
S>        [GlobalSetup]
S>        public void Initialize()
S>        {
S>            var r = new Random(42);
S>            array = new double[1000, 1000];
S>            for (var i = 0; i < array.GetLength(0); i++)
S>                for (var j = 0; j < array.GetLength(1); j++)
S>                    array[i, j] = r.NextDouble();
S>        }
S>        [Benchmark]
S>        public double[,] Multiply()
S>            => (from a in array select Math.Min(a * 1.5, 1)).ToArray();
S>    }
S>

S>2d массив 1000*1000 рандомных даблов на моём ноуте обрабатывается примерно 4.7 миллисекунды шарпом, и 2.8мс на C++.

Получается по скорости примерно как Numpy работает. Но это сторонняя и скорее всего довольно сырая библиотека, как я понимаю — есть риски что заглючит что-то в продакшине.
Re[17]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: rameel https://github.com/rsdn/CodeJam
Дата: 05.09.21 14:05
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>И как его запускать?


9 шарп

V>Я пробовал скомпилять это в VS2013 — не поддерживается.


8 лет прошло

V> Тут https://dotnetfiddle.net/ — тоже не работает — пишет, что A namespace cannot directly contain members such as fields or methods.


Выбери Compiler: .NET 5 или можешь тут посмотреть Работающий пример
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.