Здравствуйте, 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>Почитай, а лучше видео глянь. Все там достойно и на уровне, генерируется нативный код с векторными инструкциями.
Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.
Здравствуйте, 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 забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, vfedosov, Вы писали:
V>Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.
Надеюсь в корке запускал?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[13]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, vfedosov, Вы писали:
R>>Почитай, а лучше видео глянь. Все там достойно и на уровне, генерируется нативный код с векторными инструкциями.
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 забило на дотнет. Питону - да, сишарпу - нет?
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 забило на дотнет. Питону - да, сишарпу - нет?
V>Кроме кучи лишнего кода, связанного с уровнями доступами, декларациями классов, библиотеками, который мне для простого решения вообще не нужен, еще и сам основной код, получился несколько менее компактным и читабельным. В этом коде можно заметить 2 вещи, в которых Пайтон лучше шарпа. Это парсинг строки к int — в Пайтоне делается так: (int) str. Так же сортировки в Пайтоне поудобнее — не нужен компарер — можно задать ключ. Но это мелочи по сравнению с мусорным для простого проекта декларативным кодом.
Еще раз статическая типизация перевешивает все другие возможности.
Как правило питон используется без статической типизации. И поверь мне бывшему 1С нику, я знаю о чем говорю
и солнце б утром не вставало, когда бы не было меня
Re[14]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, rameel, Вы писали:
R>Здравствуйте, vfedosov, Вы писали:
R>>>Почитай, а лучше видео глянь. Все там достойно и на уровне, генерируется нативный код с векторными инструкциями.
V>>Да понял я — тоже мне бином Ньютона. Теория одно, но тесты показывают, что хреново это все работает — хотя и не настолько хреново, как я ожидал.
R>Так ты его даже и не запускал
Я работал с Linq много в прежние годы и знаю его неплохо. То, что он в нативные конструкции преобразовывается, просто забылось за 7 лет пока не работал — раньше и это читал. Но сейчас я время на изучение шарпа тратить не буду — шарпа нет в моих приоритетах — уж прости. Если зарплаты на нем начнут делать зарплаты на плюсах и пайтоне — может и вернусь на шарп. Но есть нюанс — шарп слишком прост в освоении, а задачи, решаемые на шарпе тоже достаточно простые. Поэтому вчерашние студенты после года работы начинают конкурировать с сеньорами, и это ведет к проблемам с повышением зарплаты, и с простотой замены тебя на другого спеца. На плюсах это совсем не так — большинство вчерашних студентов с визгом бегут от этих страшных плюсов. Те, кто не убежал еще долго не могут работать самостоятельно. И таски там куда сложнее и интереснее — image processing, computer vision. Очень малый процент разработчиков способен подобные задачи решать эффективно. А спрос большой -> много денег и уверенность, что тебя не заменять завтра. Ну а Пайтон полезен в связке с плюсами, так-же в работе с AI, OpenCV etc.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, vfedosov, Вы писали:
V>>Кроме кучи лишнего кода, связанного с уровнями доступами, декларациями классов, библиотеками, который мне для простого решения вообще не нужен, еще и сам основной код, получился несколько менее компактным и читабельным. В этом коде можно заметить 2 вещи, в которых Пайтон лучше шарпа. Это парсинг строки к int — в Пайтоне делается так: (int) str. Так же сортировки в Пайтоне поудобнее — не нужен компарер — можно задать ключ. Но это мелочи по сравнению с мусорным для простого проекта декларативным кодом.
S>Еще раз статическая типизация перевешивает все другие возможности. S>Как правило питон используется без статической типизации. И поверь мне бывшему 1С нику, я знаю о чем говорю
Я уже в разработке 20 лет и мне не нужно "верить" — я знаю, что типизация нужна. Но для нетривиальных решений. Для описанного скрипта она нахрен не нужна. Она не везде нужна даже в больших проектах. Если у тебя 2 приватные функи объявлены рядом в коде и первая вызывает вторую и ты уверен, что вторая больше никогда не потребуется, то можно обойтись без типизации — ты ничего потеряешь. Проверено многократно. Типизация внутри функции мне также не дает ничего — в основном чисто мусор. Типы ясны из контекста — за редким исключением. Безусловно полезна типизация интерфейсов — особенно на уровне классов, которые доступны из других модулей. Тут вообще без нее никак — иначе проект скатывается в гавно влет. Короче, у любого инструмента есть границы полезности. Для одних проектов хороший инструмент — Шарп, для других Пайтон. Те кто утверждает, что Шарп везде лучше — фанатики. Так же как и те, кто утверждает подобное про Пайтон. Я бы сказал, что пока нет единого языка для всех целей — да он и не факт, что возможен.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, 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 забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, vfedosov, Вы писали:
V>Те кто утверждает, что Шарп везде лучше — фанатики. Так же как и те, кто утверждает подобное про Пайтон. Я бы сказал, что пока нет единого языка для всех целей — да он и не факт, что возможен.
Тут проблема в том, что нужно постоянно на нескольких языках программировать. И то нужно некоторое время для перехода с одного языка на другой. Либо использовать только один.
С++ вынуждены использовать питон. Поэтому используют и для других задач. Мне же в моей работе C# только и нужен, изредка интеграции с 1С. Ну и очень редко TS, JS.
Даже F# хочется применять, но пока в одном проекте нельзя применять разные языки это утопия.
Сейчас кстати питон изучают все, а вот C# многие игнорирует. Что с одной стороны и хорошо меньше конкуренция. Но я не сказал бы, что С№ прост в изучении. Да По сравнению м С++ конечно прост, но наворотов сейчас больше чем в той же Java.
и солнце б утром не вставало, когда бы не было меня
Re[11]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, 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 забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, vfedosov, Вы писали:
V>Я работал с Linq много в прежние годы и знаю его неплохо. То, что он в нативные конструкции преобразовывается, просто забылось за 7 лет пока не работал — раньше и это читал.
7 лет назад linq2d не было
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[18]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, vfedosov, Вы писали:
V>>Те кто утверждает, что Шарп везде лучше — фанатики. Так же как и те, кто утверждает подобное про Пайтон. Я бы сказал, что пока нет единого языка для всех целей — да он и не факт, что возможен.
S> Тут проблема в том, что нужно постоянно на нескольких языках программировать.
ИМХО это не проблема — это решение. Проблема в том, что спрос на языки меняется и то, что сегодня популярно, завтра может умереть. Поэтому надо выходить из зоны комфорта и писать на разных языках. Это как в той истории с мышкой: мышка, которая живет в сыре, должна постоянно принюхиваться — а не подгнивает ли сыр. Если подгнивает, то срочно нужно искать другой — иначе голодная смерть. А еще лучше всегда иметь другой сыр про запас.
Re[16]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, vfedosov, Вы писали:
V>>Я работал с Linq много в прежние годы и знаю его неплохо. То, что он в нативные конструкции преобразовывается, просто забылось за 7 лет пока не работал — раньше и это читал. S>7 лет назад linq2d не было
Ну глянул — да — вполне естественное развитие концепции linq для 2D. Но Numpy эту штуку делает просто за счет тесной интеграции с Tensor Flow, OpenCV и многими другими крутыми библиотеками. А по синтаксису +- одно и то-же. А Numpy существует уже лет 20 — к ней уже привыкли и она заняла нишу. Так что Шарп поздновато включается. Хотя, для тех, кто должен прикрутить имадж процессинг к существующему проекту, эта штука незаменима.
Здравствуйте, Sinclair, Вы писали: S>2d массив 1000*1000 рандомных даблов на моём ноуте обрабатывается примерно 4.7 миллисекунды шарпом, и 2.8мс на C++.
Если использовать кэщирование, т.е. не генерировать SIMD код на каждую операцию с массивом, то C# на пару процентов быстрее С++
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, 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 забило на дотнет. Питону - да, сишарпу - нет?