FR wrote:
>WH>class Some1: >WH> def Foo(self): >WH> print "hello1" > >WH>class Some2: >WH> def Foo(self): >WH> print "hello2" > >WH>def Bar(obj): >WH> obj.Foo() > >WH>obj1 = Some1() >WH>Bar(obj1) > >WH>obj2 = Some2() >WH>Bar(obj2) >WH> > > > Это проблема не из-за того что в питоне динамическая типизация, а > из-за того что функция Bar обобщеная, то же самое будет и в плюсах с > шаблонами, в принципе вполне разрешима и в плюсах(частичной > специализацией) и в питоне(динамическим определнием типа внутри Bar).
1. В C# эта проблема не возникнет _вообще_ (если функция Bar не будет
использовать reflection для вызова obj.Foo).
2. В С++ аналогичный код:
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, WFrag, Вы писали:
WF>>Я думаю, потому что никому нафиг не надо C++. Изображать LISP-ом C++ синтаксис — совершенно бесполезное занятие. WF>>Вот тебе Pascal вместо C++: WF>>http://arxiv.org/abs/cs.PL/0409016 WH>А отладчик и автокомплит на этом DSL работать будут?
А ты пробовал когда-нибудь встроить в свою программу среду разработки от MS и сделать из этого DSL? Хотя бы специально для этого предназначенный Visual Basic for Applications? А ты попробуй. Тогда понятно станет, почему большинство производителей предпочитают так не делать, не покупаясь на замануху вроде отладчика и автокомплита. Все эти мульки в результате проще самому написать.
Кстати, предупреждая ответы в духе "а вот .NET" — проект Visual Studio for Applications.NET свернут осенью прошлого года. Нет никакого дотнета . А прежде чем предлагать с каждой копией продукта тащить полноценный VS.NET подумайте о том, как это будет лицензироваться и сколько будет стоить вашему клиенту.
Здравствуйте, Cyberax, Вы писали:
C>Мне, например, вот надо
Я имею ввиду, изображать C++ на LISP.
>> Изображать LISP-ом C++ синтаксис — совершенно бесполезное занятие.
C>Говорили "любой", а выходит что кроме замен на инфиксные операции и C>переименований некоторых функций, дальше вся синтаксическая гибкость C>Лиспа и не идет.
Почему? Хитрость простая. Текст на DSL-языке — это просто строка, макрос может сделать с ней (в compile-time) все, что угодно — в том числе распарсить язык и отобразить в "скобочки" (которые в свою очередь разворачиваются другими макросами в низкоуровневый код).
C>И причем здесь ORM? Просто так, чтобы к слову? В той же Hibernate'е XML C>используется только для того, чтобы задавать настройки, то есть в C>качестве такого продвинутого ini-файла. Лисп там ну абсолютно никакой C>разницы бы не сделал.
Настройки — это тоже язык. Только в случае Java нам остается только интепретатор — загрузчик настроек. А в случае LISP мы могли бы его компилировать (вернее сумму настройки+модельные классы+бизнес логика) получая исключительно исполняемый код. И не нужно грузить настройки — они "вкомпилируются" в программу (Partial Evaluation во всей красе).
То есть даем на вход модельные классы+настройки (маппинг), получаем исполняемый код, заточенный под данные классы и настройки (грубо говоря, выполнение конкретных SQL выражений в нужных местах).
>> так и в питоне можно запустить PyChecker и получить тоже >> AttributeError: Test instance has no attribute 'test_method'
C>А _откуда_ PyChecker узнает, что some_external_function возвращает C>переменную типа Test? Язык-то динамический.
Сначала он импортирует все модули и все что можно проанализировать анализирует,
Потом все таки запускает программу, и тоже анализирует.
C>В С++ тип декларируется в описании переменной.
>> C>Темплейты в С++ — это огромное его преимущество, и ничуть не >> сомнительное. >> обобщенное программирование в питоне тоже.
C>Нету его там в нормальном. Есть name-based polymorphism, который по сути C>тоже есть в шаблонах С++, это используется для CRTP (Curously Recurring C>Template Pattern).
однако это не мешает легко писать на питоне обобщенный и повторно используймый код
>> C>Не факт. >> Если судить по играм то факт.
C>А есть игры с C# для скриптов (для сравнения)?
Не знаю. Есть игры целиком написанные на шарпе.
>> C>Только если при этом он будет делать примерно то же, что и "hello >> world". >> ты контекст отслеживай, я говорил про настроечные скрипты в играх, это >> "умный" ini файл.
C>В современных играх — уже не просто ini-файл.
В современных играх скрипты используются для разных целей, в том числе и для создания умных ini, и для описания логики игровых объектов и для реализации GUI.
Здравствуйте, Gaperton, Вы писали:
G>А ты пробовал когда-нибудь встроить в свою программу среду разработки от MS и сделать из этого DSL?
Именно этим я сейчас и занимаюсь. При том вполне успешно. G>Хотя бы специально для этого предназначенный Visual Basic for Applications? А ты попробуй. Тогда понятно станет, почему большинство производителей предпочитают так не делать, не покупаясь на замануху вроде отладчика и автокомплита. Все эти мульки в результате проще самому написать.
Написать аналог ReSharpera? Да вы батенька .
G>Кстати, предупреждая ответы в духе "а вот .NET" — проект Visual Studio for Applications.NET свернут осенью прошлого года. Нет никакого дотнета . А прежде чем предлагать с каждой копией продукта тащить полноценный VS.NET подумайте о том, как это будет лицензироваться и сколько будет стоить вашему клиенту.
0$ Ибо есть есть экспресы.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, AndrewVK, Вы писали:
GZ>>PS: вот если бы они коды JIT открыли, вот тогда Net компиляторы в натив начали бы плодится как грибы.
AVK>Очень вряд ли. К примеру дженерики без JIT не реализуемы принципиально.
Я говорил только о компиляции CLI под различные процы и операционки. Ну я думаю, и качество компиляторов и их оптимизаторов при этом быстро бы повысилось.
Gaperton wrote:
> <http://arxiv.org/abs/cs.PL/0409016>WH>А отладчик и автокомплит на > этом DSL работать будут? > А ты пробовал когда-нибудь встроить в свою программу среду разработки > от MS и сделать из этого DSL? Хотя бы специально для этого > предназначенный Visual Basic for Applications? А ты попробуй.
Я пробовал. Все делается весьма просто — экспортируются свои объекты в
контекст VBA и все работает. Что характерно, работает без проблем —
отлаживать и писать код для автоматизации в VBA очень удобно.
> Тогда понятно станет, почему большинство производителей предпочитают > так не делать, не покупаясь на замануху вроде отладчика и > автокомплита. Все эти мульки в результате проще самому написать.
Агащаз. Даже отладчик типа VBAшного — это недели работы, автокомплит и
среда разработки — месяцы.
> Кстати, предупреждая ответы в духе "а вот .NET" — проект Visual Studio > for Applications.NET *свернут *осенью прошлого года. Нет никакого > дотнета . А прежде чем предлагать с каждой копией продукта тащить > полноценный VS.NET
Мы спрашивали у МС — нам сказали, что по VSIP можно будет поставлять
урезанную Студию. А те же VS Express вполне себе маленькие по объему.
> подумайте о том, как это будет лицензироваться и сколько будет стоить > вашему клиенту.
FR>>>Раньше и для си был lint очень похож на PyCheker. WH>>Вот только когда пишешь на С++ потребности во всяких lint'ах почемуто не возникает. Может из-за статической типизации?
FR>Нет, сейчас компиляторы просто стали умнее и выдают намного больше предупреждений, так что lint уже просто не нужен.
Не знаю, чем раньше lint занимался, но lint в VW ST (называемый Code Critic) выдаёт предупреждения при использованию некоторых конструкций (напр. переопределено "=", но не "hash"; переменная объекта перекрыта временной переменной; слишком длинный метод и пр.). слыхал, что такая штука есть и в IDEA. Так что, думаю, что нужен
E>А про какие аварии вообще идет речь?
E>Я говорил об Ариан 5, который при старте взорвался. E>Еще был, кажется, MarsExplorer, который врезался в марс из-за того, что в модуле подлета все считалось в одних единицах, а в модуле посадки в других. Интересно, на чем этот софт был написан. E>Еще был какой-то случай, когда в программе на Фортране при написании константы вместо десятичной точки поставили запятую.
А один военный корабль вообще на буксире тащить пришлось. Из-за деления на ноль
Здравствуйте, Cyberax, Вы писали:
C>Gaperton wrote:
>> <http://arxiv.org/abs/cs.PL/0409016>WH>А отладчик и автокомплит на >> этом DSL работать будут? >> А ты пробовал когда-нибудь встроить в свою программу среду разработки >> от MS и сделать из этого DSL? Хотя бы специально для этого >> предназначенный Visual Basic for Applications? А ты попробуй.
C>Я пробовал. Все делается весьма просто — экспортируются свои объекты в C>контекст VBA и все работает. Что характерно, работает без проблем — C>отлаживать и писать код для автоматизации в VBA очень удобно.
А ты попробуй движок VBA в многопоточном режиме (в этом режиме свои объекты ты туда вставить не сможешь).
Кстати, VB — это не DSL. Чтобы сделать его похожим на DSL, попробуй добавить препроцессор и постпроцессор (интересно, как ты вообще это сделаешь, сохранив встроенный редактор и отладчик). Попробуй именить тулбары, меню. Сделать полноценное решение с DSL при помощи VBA настолько трудоемко, что сравнимо с написанием всего с нуля.
>> Тогда понятно станет, почему большинство производителей предпочитают >> так не делать, не покупаясь на замануху вроде отладчика и >> автокомплита. Все эти мульки в результате проще самому написать.
C>Агащаз. Даже отладчик типа VBAшного — это недели работы, автокомплит и C>среда разработки — месяцы.
G>>Да правда чтоли? VB со своим IDispatch, JScript, PHP, Perl и ваш любимый C# c контейнерами Object-ов — типизированны по самое нехочу? WH>С++, C#2...
WFrag wrote:
> C>Говорили "любой", а выходит что кроме замен на инфиксные операции и > C>переименований некоторых функций, дальше вся синтаксическая гибкость > C>Лиспа и не идет. > Почему? Хитрость простая. Текст на DSL-языке — это просто строка, > макрос может сделать с ней (в compile-time) все, что угодно — в том > числе распарсить язык и отобразить в "скобочки" (которые в свою > очередь разворачиваются другими макросами в низкоуровневый код).
И какие в этом преимущества? Точно так же, берем обычный
рекурсивно-нисходящий парсер, пишем для него грамматику DSLя и
транслятор в целевой язык (Java, например). Трудозатраты примерно такие же.
> C>И причем здесь ORM? Просто так, чтобы к слову? В той же Hibernate'е XML > C>используется только для того, чтобы задавать настройки, то есть в > C>качестве такого продвинутого ini-файла. Лисп там ну абсолютно никакой > C>разницы бы не сделал. > Настройки — это тоже язык.
Да, называется XML.
> Только в случае Java нам остается только интепретатор — загрузчик > настроек. А в случае LISP мы могли бы его компилировать (вернее сумму > настройки+модельные классы+бизнес логика) получая исключительно > исполняемый код.
Вы всерьез считаете, что генерация прокси-классов и метаинформации из
описания — это самая большая часть ORM?
В Hibernate'е, кстати, можно mapping задавать прямо из Java-кода в
runtime'е при желании.
> И не нужно грузить настройки — они "вкомпилируются" в программу > (Partial Evaluation во всей красе).
А что это даст, необходимость перекомпиляции при изменении настроек?
Спасибо, не надо.
> То есть даем на вход модельные классы+настройки (маппинг), получаем > исполняемый код, заточенный под данные классы и настройки (грубо > говоря, выполнение конкретных SQL выражений в нужных местах).
Есть и для Java такие системы. В JDO, например, специальный компилятор
по mapping'у инструментирует байт-код скомпилированных классов.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Gaperton, Вы писали:
G>>А ты пробовал когда-нибудь встроить в свою программу среду разработки от MS и сделать из этого DSL? WH>Именно этим я сейчас и занимаюсь. При том вполне успешно. G>>Хотя бы специально для этого предназначенный Visual Basic for Applications? А ты попробуй. Тогда понятно станет, почему большинство производителей предпочитают так не делать, не покупаясь на замануху вроде отладчика и автокомплита. Все эти мульки в результате проще самому написать. WH>Написать аналог ReSharpera? Да вы батенька .
А ReSharper сможет работать с вашим собственным языком и достанется вашим клиентам бесплатно? Вы, батенька, вообще в курсе, что такое DSL? Кстати, я работая на С++ прекрасно обхожусь без вашего ReSharpera. И неудержимой тяги писать его аналог не испытываю.
G>>Кстати, предупреждая ответы в духе "а вот .NET" — проект Visual Studio for Applications.NET свернут осенью прошлого года. Нет никакого дотнета . А прежде чем предлагать с каждой копией продукта тащить полноценный VS.NET подумайте о том, как это будет лицензироваться и сколько будет стоить вашему клиенту. WH>0$ Ибо есть есть экспресы.
Это, конечно, меняет дело.
FR wrote:
> C>А _откуда_ PyChecker узнает, что some_external_function возвращает > C>переменную типа Test? Язык-то динамический. > Сначала он импортирует все модули и все что можно проанализировать > анализирует, > Потом все таки запускает программу, и тоже анализирует.
Это значит "вернутся на клетку 1", то есть мы не можем убедится в
корректности программы пока ее не запустим.
> C>Нету его там в нормальном. Есть name-based polymorphism, который по > сути > C>тоже есть в шаблонах С++, это используется для CRTP (Curously Recurring > C>Template Pattern). > однако это не мешает легко писать на питоне обобщенный и повторно > используймый код
А необобщенный (чиста конкретный) код на Python'е писать можно?
> C>В современных играх — уже не просто ini-файл. > В современных играх скрипты используются для разных целей, в том числе > и для создания умных ini, и для описания логики игровых объектов и для > реализации GUI.
Да, поэтому и важна их отлаживаемость и удобство написания.
Gaperton wrote:
> C>Я пробовал. Все делается весьма просто — экспортируются свои объекты в > C>контекст VBA и все работает. Что характерно, работает без проблем — > C>отлаживать и писать код для автоматизации в VBA очень удобно. > А ты попробуй движок VBA в многопоточном режиме (в этом режиме свои > объекты ты туда вставить не сможешь).
А нафиг? Мне хватает однопоточного.
> Кстати, VB — это не DSL. Чтобы сделать его похожим на DSL, попробуй > добавить препроцессор и постпроцессор (интересно, как ты вообще это > сделаешь, сохранив встроенный редактор и отладчик). Попробуй именить > тулбары, меню. Сделать *полноценное *решение с *DSL *при помощи VBA > настолько трудоемко, что сравнимо с написанием всего с нуля.
VBA — это сам по себе DSL, с достаточно широким доменом.
> C>Агащаз. Даже отладчик типа VBAшного — это недели работы, автокомплит и > C>среда разработки — месяцы. > Eclipse.
Здравствуйте, Cyberax, Вы писали:
C>Gaperton wrote:
>> C>Я пробовал. Все делается весьма просто — экспортируются свои объекты в >> C>контекст VBA и все работает. Что характерно, работает без проблем — >> C>отлаживать и писать код для автоматизации в VBA очень удобно. >> А ты попробуй движок VBA в многопоточном режиме (в этом режиме свои >> объекты ты туда вставить не сможешь).
C>А нафиг? Мне хватает однопоточного.
Тогда конечно все проще, везет тебе. Еще ложка дегтя — это работает очень медленно — насколько я помню VBA в этом режиме интерпретирующий. Впрочем, в этом смысле должно быть не хуже Питона. Ну и, ктати, если тебе в будущем понадобится несколько инстансов VBA runtime в одном процессе — придется вешаться.
>> Кстати, VB — это не DSL. Чтобы сделать его похожим на DSL, попробуй >> добавить препроцессор и постпроцессор (интересно, как ты вообще это >> сделаешь, сохранив встроенный редактор и отладчик). Попробуй именить >> тулбары, меню. Сделать *полноценное *решение с *DSL *при помощи VBA >> настолько трудоемко, что сравнимо с написанием всего с нуля.
C>VBA — это сам по себе DSL, с достаточно широким доменом.
Ну какой это Domain Specific Language. Это обычный General Purpose Visual Basic, которому ты можешь поправить объектную модель. И она там, кстати, убога — нет наследования реализации. Что очень и очень плохо. А препроцессор и постпроцессор кода ты вставить туда не можешь, т.е. ты не можешь изменить вид программы и в общем случае заставишь пользователя делать ручками больше работы. Какой там DSL... Для простых задач это все канает, но для реализации серьезного DSL это не подходит.
>> C>Агащаз. Даже отладчик типа VBAшного — это недели работы, автокомплит и >> C>среда разработки — месяцы. >> Eclipse. C>Ява не умеет OLE, например.
"OLE, OLE — это просто слезы" (с). А оно нужно, если пишешь на яве? Но если очень хочется, то, например,
1) Есть COM-CORBA прокси. А CORBA ява умеет.
2) Есть прямой Java-.NET interop от сторонних производителей.
3) В конце концов есть нативные интерфейсы, через которые можно все. Только нафига?