Соломон Страуструбер
> Да.
> Дельфины считают дельфинокод с двумя пробелами читабельным.
> Крестовики не считают крестокод с двумя проблеами читабельным.
> Всё остальное - субъектив и фанатизм.
Само понятие "читабельность" - субъективно. Я, например, не могу читать паскалоидный код с отступом в два пробела. Нельзя считать объективными критерии, основанные на читаемости.
Объективны те критерии, которые можно описать как "может"-"не может".
Дельфи не может объявлять переменных в коде.
Браинфак не может использовать имена переменных.
и т.д.
Соломон Страуструбер
> Никто бы не стал жертвовать 16 пикселами ради читабельности,
Не 16 пикселей, а 2 символа на каждый отступ.
> Дельфи прекрасно читается уже с двух пробелов.
Вы не поняли свой же аргумент. Дельфи не читается с четырех пробелов. Это уже объективно и не оспоришь.
> уже троллинг пошёл.
Он пошёл с нулевого поста этой темы. (:
-Eugene-
> Я, например, не могу читать паскалоидный код с отступом в два пробела.
А средний дельфин - может.
Надо смотреть, как оценивают свой код те, кто пишет на этом языке. Это достаточно объективно.
laMer007
> Не 16 пикселей, а 2 символа на каждый отступ.
Ну и что, это много?
laMer007
> Дельфи не читается с четырех пробелов.
Нет же.
Соломон Страуструбер
Хех. А я считаю параметром читаемости минимальную загроможденность кода буквами. Код - не сочинение, а алгоритм, в котором должно быть минимум текста. Для пометок существуют комментарии.
И да, средний сишник тоже может читать код с двухпробельными отступами.
Соломон Страуструбер
> Кстати, а не получится ли так, что если заиграться с выводом типов, то
> окажется, что определить тип сможет лишь компилятор, а ИДЕ просто не сможет
> поспевать?
Может конечно...
В scala, например, вообще с поддержкой IDE не все так радужно. Много false-positive сообщений об ошибках, вывод не всегда правильно показывается, хотя в Scala он сильно ограничен по сравнению с Haskell или ML-подобными языками. Но scala вообще та еще песня, из-за кривизны JVM (каждая лямбда - отдельный класс), компилятор стартует секунд 5-6, нужно извращаться с sbt.
Может, под .NET F# или Nemerle получше (но я под винду не пишу ничего).
Там еше прикол такой - типы параметров методов там не выводятся, а вот возвращаемое значение - пожалуйста, из-за чего ВНЕЗАПНО может измениться контракт класса...
Соломон Страуструбер
Какого результата ты хочешь от этой темы?
-Eugene-
> Хех. А я считаю параметром читаемости минимальную загроможденность кода
> буквами. Код - не сочинение, а алгоритм, в котором должно быть минимум текста.
> Для пометок существуют комментарии.
Это уже субъектив, заточенный под конкретный язык. Я вывел количественный параметр, который не связан с синтаксисон напрямую, и который косвенно указывает, что есть что на самом деле.
Che@ter
> Какого результата ты хочешь от этой темы?
Чтобы висела. Чтобы давать ссылки на неё.
Ну высказываться тоже можно, правда, смысла нет, но пусть высказываются все кто хочет.
vladislav
> Может, под .NET F# или Nemerle получше (но я под винду не пишу ничего).
А причем тут винда?
> Там еше прикол такой - типы параметров методов там не выводятся
Scala такая унылая?
> Много false-positive сообщений об ошибках, вывод не всегда правильно показывается, хотя в Scala он сильно ограничен
Печальные скалаИдеПроблемы...
Che@ter
> Какого результата ты хочешь от этой темы?
Как можно больший объём в страницах.
vladislav
> Там еше прикол такой - типы параметров методов там не выводятся,
В смысле?
> а вот
> возвращаемое значение - пожалуйста, из-за чего ВНЕЗАПНО может измениться
> контракт класса...
То есть при описании функции не надо явно говорить, какой тип она возвращает, это понятно по выражению, слоящему после return? Ну, фича хорошая, но для ИДЕ проблемы.
Соломон Страуструбер
> Ну, фича хорошая, но для ИДЕ проблемы.
А при чем тут IDE? В нормальных языках вообще все переменные\константы, параметры методов и результаты функции могут выводится, если нет желания указывать их явно.
> тип она возвращает, это понятно по выражению, слоящему после return
И хорошие IDE тут же выводят типы типы любых идентификаторов, если наводишь мышь.
Это уже даже С++ осилил:
template<class TParam> void func(TParam param)//Тип параметра функции выводится автоматически и имеет тип TParam. //Дельфи так не может? //Это конечно не по алгоритму Хиндли — Милнера, но и это не плохо. { auto f= [=]( ) { return param;//Тип результата функтора выводится автоматическии имеет тип TParam. //Дельфи так не может? } auto var=f( );//Тип переменной выводится автоматически и имеет тип TParam. // Дельфи так не может? //... }
laMer007
> В нормальных языках вообще все переменные\константы, параметры методов и
> результаты функции могут выводится, если нет желания указывать их явно. И
> хорошие IDE тут же выводят типы типы любых идентификаторов, если наводишь мышь.
То есть на лету анализируют код? Круто, чё.
laMer007
> //Дельфи так не может?
Не, не может.
Соломон Страуструбер
> Чтобы висела. Чтобы давать ссылки на неё.
Хвастаться своим фейлом среди знакомых дельфинистов?
Соломон Страуструбер
> Не, не может.
как? если про вывод типов любых идентификаторов то конечно нет, большей части да, поставь уже делфи не 7-ую
Super_inoy
> большей части да, поставь уже делфи не 7-ую
А что именно выводить могут последние дельфи?
С++ может:
1)"Автовывод типов параметров" методов и функций (очевидно это слив в С++).
2)Автовывод типов переменных.
3)Автовывод типов результата функторов.
Вот что же могут вывести дельфи? Если можно, то с примерами кода.
laMer007
> > Может, под .NET F# или Nemerle получше (но я под винду не пишу ничего).
> А причем тут винда?
Ну, Mono - он совсем унылый...
Плюс у нас весь тулчейн - C++/java/python, scala сюда ложится, остальное - нет.
laMer007
> > Там еше прикол такой - типы параметров методов там не выводятся
> Scala такая унылая?
В принципе это нормально и даже наверное правильно, т.к. это все-таки не чисто функциональный язык, а скорре OO с сильным влиянием FP. А автоматический вывод параметров внешних методов довольно сильно мешает перегрузке и переопределению методов, например (очевидно, почему).
Другое дело, что там даже для локальных функций (и, например, приватных методов что есть по сути одно и тоже) механизм вывода довольно слабый. Например, классический fold-left из Haskell:
foldl :: (b -> a -> b) -> b -> [a] -> b
первым параметром идет функция, принимающая значения типа b и a и возвращающая значение типа b, потом идет начальное значение типа b и список типа a. В результате возвращается значение типа b.
Вызов
foldl (+) 0 [1,2,3,4]
успешно определит тип функции (+).
В scala возможности вывода намного хуже, там foldLeft определен примерно так:
trait LinearSeqOptimized[+A,...] {
...
def foldLeft[B](z: B)(f: (B, A) => B): B = ...
}Это метод класса LinearSeqOptimized (что нормально), но на первое место вынесен параметр с начальным значением, причем вызов еще и каррированный.
При таком вызове:
List(1,2,3,4).foldLeft(0)(_ + _)
происходит следующее:
тип A нам известен из List(1,2,3,4). Дальше, List(1,2,3,4).foldLeft(0) возвращает частично-примененную функцию, которая принимает один параметр (функцию обработчик). И главное, что для нее уже известен тип B. Вот только в этом случае scala может нормально вывести типы аргументов лямбды...
Тема в архиве.