var или не var?

Автор Тема: var или не var?  (Прочитано 22549 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: var или не var?
« Ответ #30 : 30-11-2015, 15:29:53 »
Это значит, что четко сформулированный код будет одинаково хорошо "Выразителен" на разных языках и дело тут не в "отсутствии выразительности (декларативности) языка", "var" и т.д.
Ну так я еще раз попрошу - если все равно на чем писать - напишите на C# sql запрос, или опишите на нем-же web страницу - помогут Вам типы?
Видимо не было задач, связанных с обработкой больших массивов данных?
Не путайте динамическую типизацию и автоматический вывод типа - автоматом выведен тип или задан вручную - скомпилированно будет одно и то-же.
з.ы. Ну если Вы считаете что Вы больший "ас" по эффективному решению "больших данных" можем и посоревноваться на бутыль коньяка - каждый пишет как хочет и на чем хочет :) .

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: var или не var?
« Ответ #31 : 30-11-2015, 15:54:23 »
Ну если Вы считаете что Вы больший "ас" по эффективному решению "больших данных" можем и посоревноваться на бутыль коньяка - каждый пишет как хочет и на чем хочет :) .
Off-Topic: показать
Привалов Дмитрий, что-то мне подсказывает, что Дима_ не особо рискует потерять коньяк. :)

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: var или не var?
« Ответ #32 : 30-11-2015, 16:22:00 »
каждый пишет как хочет и на чем хочет
И думается мне, что использован будет не C#, а что-то типа F# и функциональный подход, а там с типами и с Var-ами совсем все по другому =о)

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: var или не var?
« Ответ #33 : 30-11-2015, 17:45:03 »
Цитата: Дима_
Перепишите логику любого sql запроса больше 5-ти строк на си - ставь типы или нет - понять действие будет очень тяжело - проблемы не в типах, а отсутствии выразительности

Ну так я еще раз попрошу - если все равно на чем писать - напишите на C# sql запрос, или опишите на нем-же web страницу - помогут Вам типы?

Тип тут действительно и не причем и декларативность и var тоже. В чем проблема понятно описать запрос?
5 строк и что? Вы диван можете тащить целиком по лестнице, а можете разобрать и спустить по частям на лифте.
Разбейте запрос на понятные легко читаемые элементы делов то? Или программа запроса для устройства с ограниченной памятью?
Пример в студию запроса на 5 строк, который нельзя выразить с помощью языка!

 
Цитата: Дима_
Я пишу ровно про это, но с другой стороны - я вообще не хочу смотреть какие типы там вернутся - тип это проблема компилятора - программист должен думать об алгоритме задачи, а не о том через какие там типы это "вывернется". Перепишите логику любого sql запроса больше 5-ти строк на си - ставь типы или нет - понять действие будет очень тяжело - проблемы не в типах, а отсутствии выразительности (декларативности) языка - если у языка нормальная выразительность - явно заданные типы однозначно только мешают как восприятию, так и "сужают" универсальность кода.

Ну если Вы считаете что Вы больший "ас" по эффективному решению "больших данных" можем и посоревноваться на бутыль коньяка - каждый пишет как хочет и на чем хочет :)

В чем суть разговора? c# не достиг декларативности? Какой-же язык по Вашему мнению достиг декларативности и выразительности?
При чем тут "ас" и спор на коньяк?
И почему "как хочет и на чем хочет"? Выбирайте только декларативный, выразительный язык который так отстаиваете, где компилятор все делает за вас и в задании типов  участия не принимается!

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: var или не var?
« Ответ #34 : 30-11-2015, 22:11:31 »
В чем проблема понятно описать запрос?
Да в том что его там не описать - никак, (ну с запросом еще можно выкрутиться - и сказать что Вот есть LINQ, с натяжкой это можно принять за ответ, но что, например, делать с web страницей). Вы на императивном языке можете описать "белеберду" из действий, в которой - даже Вы сами потом будете с карандашом разбираться. А как Вы написанный Вами запрос на сервер отправите? А его-же Вы сможете к csv файлу применить? Нет - Вам будет необходимо вводить дополнительный язык DSL (или воспользоваться существующим). Но в любом случае, он будет "вылезать" за рамки вашего Си (он не для того предназначен). Так вот в DSL'ах конечно можно прикрутить типы - но никто это в здравом уме делать не будет (на практике такого нет), но алгоритм читаться будет многократно четче - собственно Вы его этим языком и описываете - вынося реализацию за скобки. Аннотация типа - это аппендицит идущий еще от ассемблера (хоть там и нету явных типов - а все есть данные, включая код, но он очень "жестко" отреагирует если Вы случайно "запустите данные" - хотя случайно - не получится - ибо на то есть защита на уровне процессора - но это все отдельная история) задача которого объяснить компьютеру "физический" смысл данных. В хаскеле даже булевый тип описан средствами самого языка, без ссылок на "компьютерный" бит - и ничего - прекрасно работает.
По остальным вопросам: суть разговора я уже описал не раз - типы это не то что делает алгоритм читабельней - они дают зацепки мысли и примитивный контроль, но не делают код выразительней.
Про аса и спор - ну так Вы первые начали выдвигать предположения, что это у меня от недостатка опыта в определенных сегментах - может оно и так - готов проверить. Язык я, можете не сомневаться выберу декларативный - мне есть с чем сравнивать - благо неплохо знаю и те и другие.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: var или не var?
« Ответ #35 : 03-12-2015, 08:37:18 »
но что, например, делать с web страницей
то же что и в любом языке, либо оставить в коде и получить нечитабельный код, либо вынести в отдельный файл, тот же html и подгружать отдельно. В итоге редактируете  html редактором, имеете подсветку тегов и т.д. Например так сделано в ASP.NET.

Вы на императивном языке можете описать "белеберду" из действий, в которой - даже Вы сами потом будете с карандашом разбираться. А как Вы написанный Вами запрос на сервер отправите?
...ммм основной код будет "очень сложным", типа такого
LoadHtmlPage("page1");
Request readData = SendRequestToServer("server1");
ApplayToCsv("csv3", readData );
....все действия что просили описал, к языку слабо привязано. А реализация вынесена по классам/функциям которые раз написал и забыл.

Аннотация типа - это аппендицит идущий еще от ассемблера.
Вы первые начали выдвигать предположения, что это у меня от недостатка опыта в определенных сегментах.
Если бы был опыт, то не писали про ненужность типов.
Есть разница когда создаешь массив на разное количество элементов 1000, 100 000, 500 000, 1 000 000, 5 000 000, 100 000 000.
Задайтесь целью создать максимально возможный массив на вашем компьютере, оцените время создания массива, заполнения данными, чтения данных. После изучения и оптимизации к типам может измениться отношение. ;-)

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: var или не var?
« Ответ #36 : 03-12-2015, 10:42:07 »
то же что и в любом языке, либо оставить в коде и получить нечитабельный код, либо вынести в отдельный файл..
Любом котором Вы знаете, например на лиспе пример с http://www.racket-lang.org/:
#lang web-server/insta
;; A "hello world" web server
(define (start request)
  (response/xexpr
   '(html
     (body "Hello World"))))
И самая суть в том, что лисп это никак не язык для описания Web страниц, это язык на котором можно описать любую семантику средствами самого языка (не путать с синтаксисом - например C# и VB.Net - это один и тот-же язык, вполне допускаю, что оба компилятора рождаются в Microsoft из одного проекта, они отличаются только синтаксисом - то есть "названием" ключевых слов и правилами разметки).
В си семантика очень "слабая", поэтому приходиться создавать отдельные модули на других языках - Linq, Xaml (второй со сноской - т.к. XAML конечно разработан не только для него и собственно начальная цель - разделить - но суть та же - GUI на си не описать).
А то что Вы написали не содержит не символа web страницы.
Про массивы - есть задачи где действительно требуется большой объем данных, но обычно такие порядки я вижу у кодеров которые не потрудились узнать, что такое последовательности, сопоставления, карты, хеши, словари и пр. - покажите мне Вашу реальную задачку где вам понадобился массив на 100 000 000 индексов. И самое главное - а чем будет отличаться коллекция (работа с ней) заполненная указанным типом, от коллекции заполненной типом выведенным компилятором?

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: var или не var?
« Ответ #37 : 03-12-2015, 12:00:59 »
покажите мне Вашу реальную задачку где вам понадобился массив на 100 000 000 индексов
чтение LAS файла, созданного воздушным лазерным сканированием.
http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html

типом выведенным компилятором
встречный вопрос, как компилятор угадает тип?

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: var или не var?
« Ответ #38 : 03-12-2015, 13:31:38 »
Тип угадает по применению - ищи алгоритм Хиндли - Минлера - это база сейчас уже более продвинутые.
з.ы. То есть, получается, Вы ничего не знали о том что такое вывод типа - но активно писали что тип надо обязательно указывать.
з.з.ы. А что для чтения LAS без массива никак? Я не готов вчитываться в мануал в ненужую мне задачу - конкретизируйте - почему там необходимо пременить массив (то есть считать или "развернуть" все (ну или достаточно большую часть) данных в память одновременно) - что Вы делаете (какое преобразование) с данными этого формата? Я слабо верю что их нельзя проиндексировать или просто выполнить последовательное преобразование.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: var или не var?
« Ответ #39 : 03-12-2015, 14:20:33 »
Тип угадает по применению - ищи алгоритм Хиндли - Минлера - это база сейчас уже более продвинутые.
з.ы. То есть, получается, Вы ничего не знали о том что такое вывод типа - но активно писали что тип надо обязательно указывать.
Point3d[] pointArrаy = new Point3d[1000000];
Приведите пример кода с созданием массива по алгоритму Хиндли - Минлера.
Мне очень интересно как компилятор "Тип угадает по применению", без передачи типа и будет ли выделена память сразу или подразумевается выделение по мере заполнения массива?

А что для чтения LAS без массива никак? Я не готов вчитываться в мануал в ненужую мне задачу - конкретизируйте - почему там необходимо пременить массив (то есть считать или "развернуть" все (ну или достаточно большую часть) данных в память одновременно) - что Вы делаете (какое преобразование) с данными этого формата? Я слабо верю что их нельзя проиндексировать или просто выполнить последовательное преобразование.
Задачи были разные, вырезка по произвольному контуру, построение внешнего контура облака точек, визуализация облака.
Для визуализации точки загружались в память видеокарты(не помню точно, вроде 8гб), где можно было покрутить-посмотреть 40-80 млн. в зависимости от настроек.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: var или не var?
« Ответ #40 : 03-12-2015, 15:53:11 »
Приведите пример кода с созданием массива по алгоритму Хиндли - Минлера.
Вы сейчас бред написали - алгоритм  Хиндли - Минлера не создает массив. Он определяет его тип - по применению  - то есть если потом к этому массиву применяется метод который ожидает Point3D - а это можно определить на этапе компиляции - то компилятор понимает что в этом массиве храняться именно Point3d - и проставляет ему соответствующий тип, если -же вы переделаете программу и вместо точек там будут обрабатываться, например ObjectId - конструктору массива будет присвоен соответствующий тип.
Есть еще обобщенные методы - это когда Вы пишите функцию один раз - а их создается по количеству вызывов с уникальной перегрузкой входных типов - примеры ищите сами, а то я не очень понимаю людей которые вначале спорят, выствляя из себя опытных специалистов по данному вопросу, а потом просят привести примеры азов.
По второму вопросу - а что у нас точки в видеокарту только разом загружаются? Или по контуру нельзя отсеять только необходимые точки последовательно.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: var или не var?
« Ответ #41 : 03-12-2015, 18:31:34 »
Он определяет его тип - по применению  - то есть если потом к этому массиву применяется метод который ожидает Point3D.
....хм опять тип, и как это связано с?
Аннотация типа - это аппендицит идущий еще от ассемблера
следующий этап на пути к "Dream language", как избавиться от типа в методе?

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

По второму вопросу - а что у нас точки в видеокарту только разом загружаются? Или по контуру нельзя отсеять только необходимые точки последовательно.
задачи расписывать не вижу смысла, не отклоняйтесь от темы декларативности языка  ;-)

....весть то разговор к чему. Вы сами то хоть представляете целостно картину, как будет выглядеть код без типов в массивах, функциях и объектах? И самое главное как это будет реализовываться?
Скорее всего это возможно, но упрется в тип Object там где не надо,  или компилятор будет подсовывать типы double вместо float и т.д.
...вангую, что код программы будет выглядеть компактнее, но программа либо скушает больше памяти из-за неправильной упаковки типов, либо будет тратить ресурсы на преобразование типов, все это обязательно вылезет на больших массивах!