Трурль,
ПК>>Нужно ключевое слово, обозначающее автоматический вывод типа, а не являющееся признаком объявления переменной. Не вижу, каким образом var справляется с первой задачей лучше, чем auto...
Т>Ну, можно попробовать let
Да, type inference by ocaml очень симпатичная вещь. Правда и там есть минусик:
let a = 1.0 +. float_of_int 1;;
Вот эти козявки +. и float_of_int портят всю красоту
Здравствуйте, eugals, Вы писали:
VD>>И чем это будет отличаться от вызова функции? E>Именем. Вряд ли кому-то взбредет в голову называть функцию "MyClass". E>К тому же, что касается Джавы, то там есть общепринятая Naming Convention, в сообветствии с которой классы называются в "паскале", а методы в "кемеле".
1. На яве свет клином не сошелся. В Шарпе конвенции как раз такие что имена методов и классов все пишутся в паскальных соглашениях.
2. Это не застрахует просто не верного названия. Конвенции соблюдают далеко не все.
3. Вместо MyClass в программе может быть Xyz и можно будет долго потом бить себя в грудь и обзывать всех ламерами.
В общем, пустой разговор. Проблем в написании ключевого слова нет. Места оно занимает не много. Это поведение совпадает с С++ и тем самым позволяет проще переходить на Шарп с этого языка. Так что обсуждать особо нечего. Эдак можно до чего хочешь докапаться.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Нужно ключевое слово, обозначающее автоматический вывод типа, а не являющееся признаком объявления переменной. Не вижу, каким образом var справляется с первой задачей лучше, чем auto...
var просто понятно. А auto нет. Только и всего. Конечно зазубрив что auto == объявлению переменной дальше можнобудет жить спокойно. Но интуитивности это не прибавит и язык будет изучать еще сложнее. В прочем это уже капля в море. К тому же не факт что пойдет даже это предложение.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VladD2,
VD>>>И чем это будет отличаться от вызова функции? E>>Именем. Вряд ли кому-то взбредет в голову называть функцию "MyClass".
VD>1. На яве свет клином не сошелся. В Шарпе конвенции как раз такие что имена методов и классов все пишутся в паскальных соглашениях. VD>2. Это не застрахует просто не верного названия. Конвенции соблюдают далеко не все. VD>3. Вместо MyClass в программе может быть Xyz и можно будет долго потом бить себя в грудь и обзывать всех ламерами.
Так то оно так, но конвенции о наименованиях суть следствия синтаксиса языка. Не содержал бы шарп new — конвенции (возможно) были бы другими.
VD>В общем, пустой разговор. Проблем в написании ключевого слова нет. Места оно занимает не много. Это поведение совпадает с С++ и тем самым позволяет проще переходить на Шарп с этого языка. Так что обсуждать особо нечего. Эдак можно до чего хочешь докапаться.
Шарп с Джавой конечно уже не переделаешь, а вот при создании своего языка может пригодиться.
Здравствуйте, L.C.R., Вы писали:
LCR>Так то оно так, но конвенции о наименованиях суть следствия синтаксиса языка. Не содержал бы шарп new — конвенции (возможно) были бы другими.
Возможно. Как и возможно, что были бы такими же. В конце концов Ява тоже new имеет, но конвенции несколько отличаются.
LCR>Шарп с Джавой конечно уже не переделаешь, а вот при создании своего языка может пригодиться.
Языков без new хватет. Та же Дельфи.
Мне другое поражает. Зачем докапываться до невызывающих проблем вещей когда полно действительно неудобных? Например, в классах приходится называть конструтктор именем класса. Проблем от этого море. А ведь можно было бы назвать "Constructor" и проблем бы небыло. Или вот в Шарпе неудобно инициализировать статически инициализируемые массивы если тип элемента не встроенных примитив.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VladD2,
LCR>>Шарп с Джавой конечно уже не переделаешь, а вот при создании своего языка может пригодиться. VD>Языков без new хватет. Та же Дельфи.
Создавать свой язык приходится тогда, когда существующие языки подходят негладко к проблемной области. Дельфи — лишь один из многих "неподходящих гладко".
VD>Мне другое поражает. Зачем докапываться до невызывающих проблем вещей когда полно действительно неудобных? Например, в классах приходится называть конструтктор именем класса. Проблем от этого море. А ведь можно было бы назвать "Constructor" и проблем бы небыло. Или вот в Шарпе неудобно инициализировать статически инициализируемые массивы если тип элемента не встроенных примитив.
Take it easy. Меня только интересовал вопрос, потеряет ли что-нибудь язык, если выкинуть из него new. Этот вопрос пришёл мне в голову, когда я разглядывал результаты эксперимента Nemerle. В этом языке есть любопытные моменты, и в частности есть type inference и при создании объектов не нужен new:
[c#]
new Class (parms) // C#
Class (parms) // Nemerle
[c]
xxx: Пожалуй имеет смысл предупредить о следующем: я не собираюсь развязывать войну Nemerle vs All — это только эксперимент. Могу только сказать, что я планирую пост о возможностях этого языка.
Здравствуйте, L.C.R., Вы писали:
LCR>Создавать свой язык приходится тогда, когда существующие языки подходят негладко к проблемной области. Дельфи — лишь один из многих "неподходящих гладко".
DSL?
LCR>Take it easy. Меня только интересовал вопрос, потеряет ли что-нибудь язык, если выкинуть из него new.
Потеряет. Язык спроектирован в рассчете на использование new. И по-моему ничего ровным счетом не приобретет.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Никогда не использовал. Маленького своего джарчика в каталоге lib хватает за глаза. Но гляну на досуге.
LCR>>Take it easy. Меня только интересовал вопрос, потеряет ли что-нибудь язык, если выкинуть из него new.
VD>Потеряет. Язык спроектирован в рассчете на использование new. И по-моему ничего ровным счетом не приобретет.
Ну в-общем посмотрел я в хистори форума и в сети — понял только, что DSL — это нечто аморфное и неконкретное, вообще непонятно что. Что ты имел ввиду-то, говоря "DSL"?
Здравствуйте, L.C.R., Вы писали:
LCR>Ну в-общем посмотрел я в хистори форума и в сети — понял только, что DSL — это нечто аморфное и неконкретное, вообще непонятно что. Что ты имел ввиду-то, говоря "DSL"?
AndrewVK,
LCR>>Ну в-общем посмотрел я в хистори форума и в сети — понял только, что DSL — это нечто аморфное и неконкретное, вообще непонятно что. Что ты имел ввиду-то, говоря "DSL"?
AVK>http://en.wikipedia.org/wiki/Domain_Specific_Language
Во-во, я и говорю — аморфное. Это не язык вовсе, а видимо некоторое направление в программировании. Кроме того, у меня возникает ощущение, что большинство программистов используют DSL в своей работе, даже не подозревая об этом. Этот "DSL" — это семейство классов, функций и переменных. Domain Specific? Безусловно. Language? Да!
Впрочем, к new это уже имеет отдалённое отношение.
Здравствуйте, L.C.R., Вы писали:
LCR>Во-во, я и говорю — аморфное. Это не язык вовсе, а видимо некоторое направление в программировании.
Язык, язык.
LCR> Кроме того, у меня возникает ощущение, что большинство программистов используют DSL в своей работе, даже не подозревая об этом. Этот "DSL" — это семейство классов, функций и переменных. Domain Specific? Безусловно. Language? Да!
Нет. Классы есть классы. Например, код эффективного парсера — это огромная куча функций (а может и классов) понять которую очень не просто. А вот граматика записанная в EBNF — это очено даже понятная вещь. Так вот EBNF — это и есть DSL. А генератор парсеров — это транслятор переводящий этот DSL в язык общего назначения для последующей компиляции.
В общем, идея простая. Мы создаем очень высокоуровневый язык за счет того, что затачиваем его на решение конкретных проблем. А потом создаем нечто позволяющее выполнять этот язык или преобрзовывать в менее специализированный.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, L.C.R., Вы писали:
LCR>xxx: Пожалуй имеет смысл предупредить о следующем: я не собираюсь развязывать войну Nemerle vs All — это только эксперимент. Могу только сказать, что я планирую пост о возможностях этого языка.
И как реализация планов?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, L.C.R., Вы писали:
LCR>Речь пойдет о new.
LCR>Наши любимые C# и Java имеют избыточный синтаксис для создания объекта — оба этих языка используют ключевое слово new для создания объектов в куче. Спрашивается, зачем оно (ключевое слово) нужно, если всё равно создавать на стеке объекты ссылочных типов невозможно, так что приписывание лишнего new не несёт никакого дополнительного смысла.
LCR>Не лучше ли использовать просто: LCR>
LCR>MyClass c = MyClass(10, 20);
LCR>
Это не просто -- это сложно.
Просто -- вот.
MyClass c(10, 20);
LCR>В Джаве new было введено исключительно по политическим причинам, чтобы облегчить переход C++ программистов на Джаве облегчив им узнавание привычных конструкций (создание объектов в куче). В Шарп, вероятно, new было содрано с Джавы, дабы облегчить переход C++ и Джава — программистов на Шарп
LCR>Вопрос: согласны ли вы, что new избыточен? Нет ли каких-нибудь синтаксических косяков (гипотетическое) исключение new из этих языков?
Избыточен. Посто Майкрософт старалась как лучше, а получилось как всегда.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Шахтер, Вы писали:
Ш>>Это не просто -- это сложно. Ш>>Просто -- вот. Ш>>
Ш>>MyClass c(10, 20);
Ш>>
СГ>У объектной переменной есть два типа — статический и динамический. СГ>Запись, навроде такой:
СГ>MyAbstractBaseClassOrInterface obj = new MyExtensionConcreteClass(params...);
СГ>позволяет указать сразу два типа.