Здравствуйте, C.A.B, Вы писали:
WH>>>>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом. CAB>>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)? WH>>Нет. CAB>Почему?
По тому, что МП работает не во время работы кода, а во время компиляции кода.
Те инструмент МП навязывает свою вычислительную модель компилятору, а не рабочей программе.
При этом вычислительная модель инструмента заточена именно под компиляторы из-за чего их легко делать.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Ikemefula, Вы писали:
I>Хороший дизайн в любой парадигме делать очень трудно. Вообще в любой. ООП здесь ничем особым не выделяется. Хоть ФП, хоть обобщенное, хоть макры — дизайнить апи модулей крайне непросто.
Осталось понять, что делать дизайн на МП проще.
Просто по тому, что нет навязанной вычислительной модели.
Ибо в любом другом случае нам не только нужно дизайн делать но еще и заботиться о том чтобы этот дизайн не конфликтовал с вычислительной моделью того языка на котором потом всё это будем писать.
I>Инверсия управления это так — вызывающий код становится вызываемым или так — обязанности из вызывающего кода кочуют в вызываемый или так — зависимости вызывающего кода кочуют в вызываемый. Собственно именно из за этой инверсии на ДСЛ так легко писать(тем кто в теме), — все что надо, из вызывающего ушло в вызываемый.
Ничего не понял. Я знаю про IoC паттерн. Но как это всё к языкам относиться?
Давай пример попроще.
Где тут инверсия управления:
// A Hello World! program in C#. using System;
namespace HelloWorld
{
class Hello
{
static void Main()
{
Console.WriteLine("Hello World!");
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
I>Ну так возьми в команду студента 2-3го курса и покажи как все круто. У меня в команде такие были, ООП им ничем не мешало.
А почему ты думаешь, что МП им будет мешать?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
WH>>>>>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом. CAB>>>>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)? WH>По тому, что МП работает не во время работы кода, а во время компиляции кода. WH>Те инструмент МП навязывает свою вычислительную модель компилятору, а не рабочей программе. WH>При этом вычислительная модель инструмента заточена именно под компиляторы из-за чего их легко делать.
Cool! Какое это имеет отношение к борьбе программиста с МП?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[39]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, C.A.B, Вы писали:
CAB>Cool! Какое это имеет отношение к борьбе программиста с МП?
Никакого. Программист борется не с МП. Программист борется с ООП, ФП, ЛП итп. Ибо они навязывают вычислительную модель работающей программы. А на их компиляторы ты вообще никак повлиять не можешь.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, Mamut, Вы писали:
M>Потому что для ООП и ФП уже существуют и инструменты и практики и т.п. Что есть для DSL кроме битья пяткой в грудь, что DSL — это мегакруто и там сразу все доступно?
Ну так это совершенно другие проблемы. С ними как раз никто не спорит. В том то и дело, что нет пока адекватных инструментов, потому нет практик.
M>Да-да-да. Вот буквально каждый писатель DSL начнет заниматься суперкомпиляцией, ага
Понимаешь, если делать как ты, записывать DSL в отстойные технологии, то этих писателей вообще не будет. Суперкомпиляция сейчас удобна только в языках с ПМ и квазицитатами, а их нет в мейнстриме. Nemerle, при всех своих недостатках, стоит тут на передовой позиции и позволяет достаточно легко делать то, во что ты никак не веришь.
M>И из этого ты делаешь вывод, что все DSL будут такими?
Я делаю вывод, что такие DSL возможны. И если будет возможность создавать их легко, то такие DSL будут появляться в промышленных количествах. И это здорово. Ты же отрицаешь саму возможность, принципиально, а тех кто работает в этом направлении норовишь поддеть при каждом удобном случае.
Z>>Лично ты регулярно выносишь в ключевые недостатки DSL вещи совершенно ортогональные. Качество документации, качество кода и порог вхождения. Все это, в случае с DSL будет не хуже, а порог вхождения еще лучше аналогичного решения без MP.
M>Сказки. Аргументы, почему это сказки, уже приводились тут не раз. Пока что для DSL банально отсутсвуют какие-либо инструменты для обеспечения всего тобой перечисленного. Но да, «будет не хуже», ага-ага
Те аргументы, что приводились, опровергались не раз. Мы опять уперлись в инструменты. Видишь, ты уже почти согласился, что технология не при чем, просто нужное ПО еще не разработано. Впрочем и того, что есть вполне достаточно, чтобы уже можно было как-то использовать. Но сделать лучше можно еще много чего, большинство путей видны и открыты. Та же генерация доки по грамматикам из xml-docs далеко не рокет сайенс, ее просто кому-то надо взять и сделать. Если не хочется делать, а хочется похаять, не надо нападать на WH, попробуй разобраться в том, что он делает и обхаять конкретно, по существу. Но это требует усилий, я понимаю.
Re[40]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
WH>Если не хочется делать, а хочется похаять, не надо нападать на WH, попробуй разобраться в том, что он делает и обхаять конкретно, по существу. Но это требует усилий, я понимаю.
Было бы что обсуждать. Пока что от WH сотоварищи слышны строго и исключительно сказки. Напомнить тебе недавние попытки узнать о текущем состоянии проекта? «Идите в жопу, ничего рассказывать не будем».
WH>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ...
WH>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет...
CAB>Разве само МП не является "моделью вычислений"(с которой надо будет бороться)?
WH>По тому, что МП работает не во время работы кода, а во время компиляции кода...
CAB>Cool! Какое это имеет отношение к борьбе программиста с МП?
WH>Никакого...
Ну, то есть начали мы с порогов вхождения(ООП vs МП), а потом как-то внезапно перешли к программам и компиляторам
Али я чего не понял?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[42]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, C.A.B, Вы писали:
CAB>Ну, то есть начали мы с порогов вхождения(ООП vs МП), а потом как-то внезапно перешли к программам и компиляторам CAB>Али я чего не понял?
В каком месте шел разговор про борьбу с МП? Разговор изначально был про то, что с МП бороться не нужно в отличие от остального.
А к программам и компиляторам мы перешли по тому, что я тебе объяснял, почему так происходит.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[43]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
CAB>>Али я чего не понял? WH>В каком месте шел разговор про борьбу с МП? Разговор изначально был про то, что с МП бороться не нужно в отличие от остального.
Тогда, я всё таки не понял. WH>А к программам и компиляторам мы перешли по тому, что я тебе объяснял, почему так происходит.
Ok, давай лучше на пример: допустим нам нужно написать программу, например пусть это будет какой ни будь специфический калькулятор(валютный к примеру).
ООП: спецификация -> дизайн UI -> дизайн классов(здесь борьбу с ООП) -> кодирование(и здесь, в меньшей степени) -> тестирование
МП: спецификация -> дизайн UI -> ???
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[44]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, C.A.B, Вы писали:
WH>>А к программам и компиляторам мы перешли по тому, что я тебе объяснял, почему так происходит. CAB>Ok, давай лучше на пример: допустим нам нужно написать программу, например пусть это будет какой ни будь специфический калькулятор(валютный к примеру).
Какой еще калькулятор? Один едит и десяток кнопок?
Что тут вообще можно проектировать?
Хотя и тут ООП будет вставлять палки в колеса.
Посмотри, как можно сделать ДСЛ для ГУИ. http://nemerlewebsamples.apphb.com/
Сравни с WPF на C#...
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
CAB>>Ok, давай лучше на пример: допустим нам нужно написать программу, например пусть это будет какой ни будь специфический калькулятор(валютный к примеру). WH>Какой еще калькулятор? Один едит и десяток кнопок? WH>Что тут вообще можно проектировать? WH>Хотя и тут ООП будет вставлять палки в колеса.
Ну хорошо, пусть это будет например система бух. учёта или система управления полётами.
ООП: спецификация -> дизайн UI -> дизайн классов(здесь борьбу с ООП) -> кодирование(и здесь, в меньшей степени) -> тестирование
МП: спецификация -> дизайн UI -> ???
WH>Посмотри, как можно сделать ДСЛ для ГУИ. WH>http://nemerlewebsamples.apphb.com/
Определённо не хватает комментариев
Скрытый текст
using NemerleWeb;
using System.Linq;
using System.Collections.Generic;
using Nemerle.ComputationExpressions;
namespace NemerleWeb.Samples
{
[Unit]
class CompListPage
{
Alphabet : array[string] { get; set; } //<-- что значит "{ get; set; }"?
OddLettersOnly : bool { get; set; }
LetterCount : int { get; set; }
Letters : list[string]
{
get
{
comp list
{
for (mutable i = 0; i < LetterCount; i++) //<-- что здесь происходит(разве DSL для GUI не должен быть декларативным)? when (!OddLettersOnly || i % 2 == 1)
yield Alphabet[i];
}
}
}
public this()
{
Alphabet = array["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
LetterCount = 3;
}
public More() : void//<-- зачем тащить логику в GUI-DSL?
{
when (LetterCount < Alphabet.Count())
LetterCount++;
}
public Less() : void
{
when(LetterCount > 0)
LetterCount--;
}
[Html]
public View() : string
{
<#
<div> //<-- HTML имхо, тоже стоит спрятать(на фоне остального смотрится не айс).
<h3>Alphabet</h3>
<button click="$More">More</button>
<button click="$Less">Less</button>
Odd letters only <input type="checkbox"checked="$OddLettersOnly" />
<div class="name-list">
<span $foreach(l in Letters)>
$(l + " ")
</span>
</div>
</div>
#>
}
}
}
и графического редактора.
Но вообще прикольно, да.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[46]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, IT, Вы писали:
IT>Лучше прикинь другое. Для сапорта и мейнтененса никто не нужен, потому что сапорт и мейнтененс настолько тривиальны, что занимают от нуля до половины процента времени. У меня вообще хобби такое создавать решения не требующие саппорта. А если я уйду, то минимум год с моим кодом будет всё в порядке. В нём легко разберуться и легко начнут сапортить, пока не понавносят туда изменений, которые напрочь уничтожат всю вложенную туда простоту мейнтейнабилити и саппортобилити. И пофиг будут там МП и DSL или их там не будет.
Это у тебя так или вообще по индустрии ?
Где взять людей вроде тебя на каждый из проектов ?
Re[45]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, WolfHound, Вы писали:
WH>Хотя и тут ООП будет вставлять палки в колеса. WH>Посмотри, как можно сделать ДСЛ для ГУИ. WH>http://nemerlewebsamples.apphb.com/
WH>Сравни с WPF на C#...
Судя по тому что примеров в немерлевеб не добавляется, то за полгода, что ты показываешь эту ссылку, ничего не изменилось. Похоже, немерлевеб это фремворк для написания ровно таких UI как в примерах по твоей ссылке.
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, IT, Вы писали:
T>>Теперь, если посмотреть на возраст типичного разработчика, то оказывается что ему ~27 лет, то есть, 5 лет после университета в виде фуллтайма на продакшне, а разрабы от 10 лет и выше составляют всего единицы процентов, от силы десяток, если случится чудо.
IT>Боюсь, что твои сведения устарели минимум лет на пять и средний возраст давно уже перевалил за тридцатник. Индустрия стремительно стареет, хотелось бы, чтобы она при этом ещё и так же стремительно мудрела.
Скорее всего стареет твоя тима, ты сам и твое окружение, а свежий контингент контора просто перестала набирать. Сейчас команды в т.ч. удаленные сплошняком из студентов и прочих джуниоров вообще норма.
Откуда старение возьмется, если стартапы, молодые фирмочки, мелкие студии плодятся как кролики ?
Re[32]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, WolfHound, Вы писали:
T>>Причина не в этом. Писать код который пишет другой код на порядок сложнее. Хоть с инструментами, хоть без. Сначала нужно решить задачу А, потом написать код, который напишет код решения задачи А. То есть, решать нужно 2 задачи. Но это не все. Результат(код) ты увидишь только после генерации. При этом в обычном программировании ты этот результат(код) видишь практически все время перед глазами. Вот теперь становится ясно, почему квазицитирование достаточно легко поднимается людьми, хотя бы и в кастрированом виде, SLE, — результат(код) видет точно так же непосредтсвенно по мере написания его. Точно так же понятно, почему Т4 хорошо идет — результат не надо додумывать при правильном подходе. И это так же объясняет, почему дсл и макры идут туго — результат лежит где хрен знает где, а потому без тула вообще никуда, или же результат недоступен вовсе и нужно обладать хорошей прокачкой скилов что бы этот результат представить. Собтсвенно эти же недостатки есть и у SRE — результат очень сложно представить. WH>И ты ничего не угадал. Ибо не видел, как IT с SRE работает.
Не волнуйся, именно у него, собтсвенно, я и подсмотрел "Emit c человеческим лицом".
WH>Как видишь практически квазицитаты MSIL'а. WH>Вот только очень уж MSIL низкоуровневый. Работать с ним неудобно.
Девелоперы не пишут на ИЛ, этот язык для прикладных и даже для фремворковых девелоперов чужой. Им нужно переводить все это в свой основной язык и поэтму все что я сказал про SRE абсолютно справедливо — результат ты или не увидишь вообще, или увидишь после н-приёмчиков.
The animals went in two by two, hurrah, hurrah...
Re[34]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, WolfHound, Вы писали:
WH>>>1)Порог вхождения в ООП намного больше. Я серьёзно. Ибо сделать хороший ОО дизайн намного сложнее, чем хороший ДСЛ. Более того хороший ДСЛ возможен для любой предметной области которую вообще возможно формализовать. Для ООП, ФП, ЛП,... и любого другого программирования, которое навязывает вычислительную модель это не верно.
T>>Где можно ознакомиться с методикой сравнения сложности ?
WH>Она вся в цитате, на которую ты отвечаешь.
Это неверно. МП можно изучать только после освоения ООП, ФП и тд. Открой код макров и убедись сам.
WH>Другими словами МП проще всего остального просто по тому, что всё остальное навязывает модель вычислений, а МП нет. Из-за этого при решении задачи другими средствами тебе приходится не только решать задачу, но еще и бороться с инструментом.
Модель вычислений навязывает не ООП, а задача со своими требованиями и ограничениями. Сложность с дизайном в том, что это проектирование взаимодействия, а следовательно очень много элементов, которые влияют на конечное решение. Новичку просто невозможно взять в мозг все элементы.
The animals went in two by two, hurrah, hurrah...
Re[37]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, WolfHound, Вы писали:
T>>В стл все алгоритмы и структуры данных тривиальные, их изучают максимум на втором-третьем курсе. Все сложность там в АПИ и композиции. А вот ВПФ это вещь действительно очень сложная, рядом с стл и не лежала. WH>Ну, так покажи мне студента который WPF сделает.
Я же доступно объяснил — ВПФ это очень сложная задача. Из того, что ООП это просто, никак не следует, что и ВПФ станет проще. Дизайн в люьбой парадигме на порядок сложнее самой парадигмы, с этим ничего не поделаешь.
The animals went in two by two, hurrah, hurrah...
Re[30]: А при чем тут DSL? (в продолжении темы о языках общего назначения)
Здравствуйте, IT, Вы писали:
IT>Боюсь, что твои сведения устарели минимум лет на пять и средний возраст давно уже перевалил за тридцатник. Индустрия стремительно стареет, хотелось бы, чтобы она при этом ещё и так же стремительно мудрела.
Скорее есть тенденция оттока молодых из некоторых областей и переход в какой нибудь мобайл, а соответсвенно некоторые фирмы и даже области превращаются в псарни из старпёров.