Как скрестить ужа и ежа или статическую и утиные типизации
От: FR  
Дата: 17.01.07 08:02
Оценка: 44 (6)
Привет всем.

Гвидо ван Россум, главный разработчик питона хочет ввести опциональную статическую типизацию в python 3.0:

http://www.artima.com/weblogs/viewpost.jsp?thread=85551
http://www.artima.com/weblogs/viewpost.jsp?thread=86641

Мне показались очень интересными некторые его рассуждения, вскрывающие и некторые недостатки статической типизации.
Re: Как скрестить ужа и ежа или статическую и утиные типизац
От: FR  
Дата: 17.01.07 12:41
Оценка: 1 (1)
Уточню интересно то, что он разделяет понятие типа и понятие класса. Это насколько я понимаю похоже на хаскелевские полиморфные типы, но отличается от них. Обычно в ООП языках понятие тип и класс эквивалентны (с небольшими вариациями вроде встроенных типов) здесь же предлагается новое понятие тип под которым понимается:

a "type" is an abstract set of method signatures

то есть тип это просто соответствие сигнатур методов класса определенному интерфейсу, утиная типизация остается нас ни кто ни обязывает наследоватся от этого интерфейса, но при этом вводится контроль от очень мягкого до жесткого статического.
На практике это дает к примеру такое, можно вводить обобщенные (и притом утиные) функции работающие только с определеными сущностями, например
def min(a: iterable(T)) -> T:
    .....
Re[2]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 12:50
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>то есть тип это просто соответствие сигнатур методов класса определенному интерфейсу, утиная типизация остается нас ни кто ни обязывает наследоватся от этого интерфейса, но при этом вводится контроль от очень мягкого до жесткого статического.

Т.е. класс есть набор типов чтоли? Или тип один и жёстко задан? Тогда чем от класса отличается? "Не паблик" подробностями?
Не понимаю до конца идеи
Re[3]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 13:11
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, FR, Вы писали:


FR>>то есть тип это просто соответствие сигнатур методов класса определенному интерфейсу, утиная типизация остается нас ни кто ни обязывает наследоватся от этого интерфейса, но при этом вводится контроль от очень мягкого до жесткого статического.

К>Т.е. класс есть набор типов чтоли? Или тип один и жёстко задан? Тогда чем от класса отличается? "Не паблик" подробностями?
К>Не понимаю до конца идеи

Нет класс как был так и остается.
А тип абстактное понятие, важное только например при объявлении функции. Мы можем объявить функцию принимающую определенный интерфейс, так вот любой класс у которого есть все функции с сигнатурой соответствующей этому интерфейсу будет принят, иначе отвергнут (в момент компиляции или runtime исключение). В отличии от статических языков при этом утиная типизация остается в силе, класс не обязан наследоватся от данного интерфейса, нужно только чтобы он ему соответствовал.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 13:14
Оценка:
FR> В отличии от статических языков при этом утиная типизация остается в силе, класс не обязан наследоватся от данного интерфейса, нужно только чтобы он ему соответствовал.

Да еще вот это совокупность классов соответствующих даному интерфейсу и есть тип. То есть понятие абстрактное и расширяемое.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 13:16
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, FR, Вы писали:


FR>>>то есть тип это просто соответствие сигнатур методов класса определенному интерфейсу, утиная типизация остается нас ни кто ни обязывает наследоватся от этого интерфейса, но при этом вводится контроль от очень мягкого до жесткого статического.

К>>Т.е. класс есть набор типов чтоли? Или тип один и жёстко задан? Тогда чем от класса отличается? "Не паблик" подробностями?
К>>Не понимаю до конца идеи

FR>Нет класс как был так и остается.

FR>А тип абстактное понятие, важное только например при объявлении функции. Мы можем объявить функцию принимающую определенный интерфейс, так вот любой класс у которого есть все функции с сигнатурой соответствующей этому интерфейсу будет принят, иначе отвергнут (в момент компиляции или runtime исключение). В отличии от статических языков при этом утиная типизация остается в силе, класс не обязан наследоватся от данного интерфейса, нужно только чтобы он ему соответствовал.

Т.е. получается, что если у нас в фунции для параметра вызываются методы метод1 и мелод2, то получаем, что интерфейс параметра должен их включать?
И при проверке идёт не определение на то, что интерфейс состоит из 2 методово, а то что они есть?
Тогда понятней, спасиб
Re[2]: Как скрестить ужа и ежа или статическую и утиные типи
От: Cyberax Марс  
Дата: 17.01.07 13:16
Оценка: +2
FR wrote:
> На практике это дает к примеру такое, можно вводить обобщенные (и притом
> утиные) функции работающие только с определеными сущностями, например
> def min(a: iterable(T)) -> T:
> .....
Мне это больше всего напоминает концепты из следующего C++.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 13:21
Оценка:
Здравствуйте, FR, Вы писали:


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


FR>Да еще вот это совокупность классов соответствующих даному интерфейсу и есть тип. То есть понятие абстрактное и расширяемое.


Вот тут я уже запутался.
Тип — это совокупность методов опр. объекта? Или параметра метода/функции?
Просто 1-е может быть больше чем 2-е. Т.е. получаем разные типы? Но тип объекта должен быть наследником(не знаю как это сказать, но содержать больше методов, кроме тех что есть у предка) типа, который определён для параметра функции, куда этот объект передаётся, так?
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 13:24
Оценка:
Здравствуйте, Курилка, Вы писали:


К>Т.е. получается, что если у нас в фунции для параметра вызываются методы метод1 и мелод2, то получаем, что интерфейс параметра должен их включать?

К>И при проверке идёт не определение на то, что интерфейс состоит из 2 методово, а то что они есть?
К>Тогда понятней, спасиб

В общем да. Та же утиная типизация но с ограничениями.
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 13:27
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, FR, Вы писали:



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


FR>>Да еще вот это совокупность классов соответствующих даному интерфейсу и есть тип. То есть понятие абстрактное и расширяемое.


К>Вот тут я уже запутался.

К>Тип — это совокупность методов опр. объекта? Или параметра метода/функции?
К>Просто 1-е может быть больше чем 2-е. Т.е. получаем разные типы? Но тип объекта должен быть наследником(не знаю как это сказать, но содержать больше методов, кроме тех что есть у предка) типа, который определён для параметра функции, куда этот объект передаётся, так?

Не забывай про утиную типизацию, нас не волнует что может быть больше пусть будет, главное чтобы в классе было все что есть в интерфейсе.
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 13:30
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, FR, Вы писали:



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


FR>>>Да еще вот это совокупность классов соответствующих даному интерфейсу и есть тип. То есть понятие абстрактное и расширяемое.


К>>Вот тут я уже запутался.

К>>Тип — это совокупность методов опр. объекта? Или параметра метода/функции?
К>>Просто 1-е может быть больше чем 2-е. Т.е. получаем разные типы? Но тип объекта должен быть наследником(не знаю как это сказать, но содержать больше методов, кроме тех что есть у предка) типа, который определён для параметра функции, куда этот объект передаётся, так?

FR>Не забывай про утиную типизацию, нас не волнует что может быть больше пусть будет, главное чтобы в классе было все что есть в интерфейсе.


И чем это противоречит тому, что я сказал? Забыл, наверное, "наследником" в кавычки взять, т.к. типы не есть классы, там множественное "наследование" будет вполне нормальным и т.п. А про суть отношения, которое я "наследованием" обозвал я написал
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: WolfHound  
Дата: 17.01.07 13:53
Оценка:
Здравствуйте, FR, Вы писали:

FR>Нет класс как был так и остается.

FR>А тип абстактное понятие, важное только например при объявлении функции. Мы можем объявить функцию принимающую определенный интерфейс, так вот любой класс у которого есть все функции с сигнатурой соответствующей этому интерфейсу будет принят, иначе отвергнут (в момент компиляции или runtime исключение). В отличии от статических языков при этом утиная типизация остается в силе, класс не обязан наследоватся от данного интерфейса, нужно только чтобы он ему соответствовал.
Вот только создатели OCaml'а и Haskell'я этого не знают...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 14:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Вот только создатели OCaml'а и Haskell'я этого не знают...


Внешне немного похоже, но совсем не то.
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 14:11
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, WolfHound, Вы писали:


WH>>Вот только создатели OCaml'а и Haskell'я этого не знают...


FR>Внешне немного похоже, но совсем не то.


Поясни, в чём принципиальная разница?
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 14:45
Оценка: -2
Здравствуйте, Курилка, Вы писали:


К>Поясни, в чём принципиальная разница?


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

def read(f: file | str) -> str:
    "read data from a file"


То есть это шире чем объектные классы окамла. Те же интерфейсы у ван Россума включают не только сигнатуры методов но и тела, что позволяет в интерфейсе прописывать и Design By Contract и вообще более жесткие ограничения.
Re[3]: Как скрестить ужа и ежа или статическую и утиные типи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.01.07 14:53
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>FR wrote:

>> На практике это дает к примеру такое, можно вводить обобщенные (и притом
>> утиные) функции работающие только с определеными сущностями, например
>> def min(a: iterable(T)) -> T:
>> .....
C>Мне это больше всего напоминает концепты из следующего C++.

А мне это напоминает существующую Скалу. Особенно вот этот пример:
def min(a: T, b: T) -> T:
    if a < b:
        return a
    else:
        return b

и дальнейшие сомнения:

What about min(1, 2.5)? That ought to be valid and return a float. I guess this means that there should be some kind of typing hierarchy that explains how the various numeric types are embedded in each other. The VM already knows about these coercion rules, but the trick is to build them into the type system. I think I would like to do this using a mechanism separate from inheritance, since I really don't think that it is a good idea to require that int is a subclass of float and float a subclass of complex. But the mechanism should also be open to user-defined types; there shouldn't be mechanisms in Python that the user cannot extend (not many, anyway).


В Скале накрутили нехилую иерархию типов, в которой есть общий корень scala.Any (все наследники от него) и общий крайний scala.Nothing (который является наследником от всех). И для того, чтобы параметризованные методы могли работать с родственными типами там понапридумывали разных ко- и контра-вариантностей, ограничений на типы параметров сверху и снизу... В общем, лично у меня в голове не укладывается

Как бы в следующем Питоне не получить чего-нибудь подобного.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 15:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>В Скале накрутили нехилую иерархию типов, в которой есть общий корень scala.Any (все наследники от него) и общий крайний scala.Nothing (который является наследником от всех). И для того, чтобы параметризованные методы могли работать с родственными типами там понапридумывали разных ко- и контра-вариантностей, ограничений на типы параметров сверху и снизу... В общем, лично у меня в голове не укладывается


E>Как бы в следующем Питоне не получить чего-нибудь подобного.


А что тебя в этом пугает? Наоборот всё логично.
И вариантности там в тему вполне.
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 15:22
Оценка:
Здравствуйте, FR, Вы писали:

FR>То есть это шире чем объектные классы окамла. Те же интерфейсы у ван Россума включают не только сигнатуры методов но и тела, что позволяет в интерфейсе прописывать и Design By Contract и вообще более жесткие ограничения.


Поясни выделенное, плиз
В контракте будет конкретная реализация чтоли?
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 15:33
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, FR, Вы писали:


FR>>То есть это шире чем объектные классы окамла. Те же интерфейсы у ван Россума включают не только сигнатуры методов но и тела, что позволяет в интерфейсе прописывать и Design By Contract и вообще более жесткие ограничения.


К>Поясни выделенное, плиз

К>В контракте будет конкретная реализация чтоли?

Вот пример из статьи:

interface I1:
    def fumble(name: str, count: int) -> bool:
        """docstring"""
        assert count > 0
        assert name in ReferenceTable


При реализации метода интерфейса в классе, тело метода из интерфейса будет вызыватся как предусловие.
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.01.07 15:46
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, FR, Вы писали:


FR>>>То есть это шире чем объектные классы окамла. Те же интерфейсы у ван Россума включают не только сигнатуры методов но и тела, что позволяет в интерфейсе прописывать и Design By Contract и вообще более жесткие ограничения.


К>>Поясни выделенное, плиз

К>>В контракте будет конкретная реализация чтоли?

FR>Вот пример из статьи:


FR>
FR>interface I1:
FR>    def fumble(name: str, count: int) -> bool:
FR>        """docstring"""
FR>        assert count > 0
FR>        assert name in ReferenceTable
FR>


FR>При реализации метода интерфейса в классе, тело метода из интерфейса будет вызыватся как предусловие.


Т.е. идеи Мейера, но с несколько другой (более гибкой) системой чтипизации?
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 17.01.07 18:13
Оценка:
Здравствуйте, Курилка, Вы писали:


FR>>При реализации метода интерфейса в классе, тело метода из интерфейса будет вызыватся как предусловие.


К>Т.е. идеи Мейера, но с несколько другой (более гибкой) системой чтипизации?


Угу. Но просто котрактное программирование и сейчас на питоне можно сделать, есть несколько библиотек, синтаксически немного коряво конечно но работает. интересно именно что из всего этого в комплексе получится. Если конечно не отменят. Пока в планах на python 3.0 написано так:

(Maybe) add optional declarations for static typing

Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 17.01.07 18:32
Оценка:
Здравствуйте, eao197, Вы писали:


E>В Скале накрутили нехилую иерархию типов, в которой есть общий корень scala.Any (все наследники от него) и общий крайний scala.Nothing (который является наследником от всех). И для того, чтобы параметризованные методы могли работать с родственными типами там понапридумывали разных ко- и контра-вариантностей, ограничений на типы параметров сверху и снизу... В общем, лично у меня в голове не укладывается


E>Как бы в следующем Питоне не получить чего-нибудь подобного.


Да такая проблема есть и требует разруливания, ван Россум только обозначил ее, про то как хочет разрешить ни слова.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.01.07 19:54
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Нет класс как был так и остается.

FR>А тип абстактное понятие, важное только например при объявлении функции. Мы можем объявить функцию принимающую определенный интерфейс, так вот любой класс у которого есть все функции с сигнатурой соответствующей этому интерфейсу будет принят, иначе отвергнут (в момент компиляции или runtime исключение). В отличии от статических языков при этом утиная типизация остается в силе, класс не обязан наследоватся от данного интерфейса, нужно только чтобы он ему соответствовал.

Это называется утянуть идею у Хаскеля. Надо признать, что в Хаскеле идея классов типов довольно разумна. Как я понимаю разница в основном заключается в том, что в хаскеле надо явно описывать воплощения классов типов для конкретных типов, а Питоне этот процесс будет не явным.

Хаскеле для вывода базовго типа требующегося функции используются ограничения на имена идентификаторов налогаемые системой типов Хиндли-Миллера. Это ограничение с оной стороны запрещает перегрузку методов по имени, но с другой предоставляет полностью автоматический вывод типов. В Питоне ограничения а-ля Хидли-Силлер явно не пройдет. Стало быть вывод типов будет сильно ограничен. Это скорее всего привдет к тому, что весь контроль будет осуществляться в рантайме. А тогда не ясно ради чего затевается игр? И стоит ли она свеч?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.01.07 19:54
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да еще вот это совокупность классов соответствующих даному интерфейсу и есть тип. То есть понятие абстрактное и расширяемое.


Ерунда получается. Интерфейс (в понимании Явы/Шарпа) в такой системе и должен быть 1 в 1 равен классу. А разница должна заключаться тольк в том, что сопоставление кокретного объекта и этого интерфейса/класса должно производитья неявно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [от модератора]
От: IT Россия linq2db.com
Дата: 17.01.07 23:32
Оценка:
Здравствуйте, Курилка, Вы писали:

Предупреждение за оверквотинг. В следущий раз будет бан.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 04:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это называется утянуть идею у Хаскеля. Надо признать, что в Хаскеле идея классов типов довольно разумна. Как я понимаю разница в основном заключается в том, что в хаскеле надо явно описывать воплощения классов типов для конкретных типов, а Питоне этот процесс будет не явным.


Ну питон традиционно оттуда разные вещи утягивает

VD>Хаскеле для вывода базовго типа требующегося функции используются ограничения на имена идентификаторов налогаемые системой типов Хиндли-Миллера. Это ограничение с оной стороны запрещает перегрузку методов по имени, но с другой предоставляет полностью автоматический вывод типов. В Питоне ограничения а-ля Хидли-Силлер явно не пройдет. Стало быть вывод типов будет сильно ограничен. Это скорее всего привдет к тому, что весь контроль будет осуществляться в рантайме. А тогда не ясно ради чего затевается игр? И стоит ли она свеч?


Ты статью внимательнее почитай, там есть про мотивировку и там нет цели выводить все во время компиляции.
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 04:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Да еще вот это совокупность классов соответствующих даному интерфейсу и есть тип. То есть понятие абстрактное и расширяемое.


VD>Ерунда получается. Интерфейс (в понимании Явы/Шарпа) в такой системе и должен быть 1 в 1 равен классу.


Ну у ван Россумма интерфейс понятие более широкое чем в Шарпе, он хочет под интерфейс подвести не только сигнатуру но и контракт.

VD>А разница должна заключаться тольк в том, что сопоставление кокретного объекта и этого интерфейса/класса должно производитья неявно.


Так эта разница как раз и дает возможность легко делать обобщенные функции, так что реально это очень большая разница.
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.01.07 06:01
Оценка: 4 (1)
Здравствуйте, Курилка, Вы писали:

К>А что тебя в этом пугает? Наоборот всё логично.

К>И вариантности там в тему вполне.

Логично это все кажется во время чтения ScalaOverview и ScalaByExample, но когда берешься за ScalaReference... В общем "ниасилил". Тем более, что довольно-таки пространное объявление:
def min[ T < Ordered[T] ]( a: T, b: T ) : T =
  if( a < b ) a else b

все равно не спасает, когда требуется вызвать min для float и double. Как в свое время в C++ произошло, когда вместо С-шных макросов min/max, появились шаблонные функции std::min/std::max. И часть кода (например, когда сравнивались int и long или int и float) элементарно перестала работать.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Как скрестить ужа и ежа или статическую и утиные типизац
От: AndreiF  
Дата: 18.01.07 06:06
Оценка:
Здравствуйте, FR, Вы писали:

FR>Мне показались очень интересными некторые его рассуждения, вскрывающие и некторые недостатки статической типизации.


Тема недостатков статической типизации не раскрыта.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 18.01.07 06:15
Оценка:
eao197,

E>
E>def min[ T < Ordered[T] ]( a: T, b: T ) : T =
E>  if( a < b ) a else b
E>

E>все равно не спасает, когда требуется вызвать min для float и double.

Не понял. А что мешает вызывать min для double? Ordered, насколько мне известно, определён для всех чисел.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 07:02
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, FR, Вы писали:


FR>>Мне показались очень интересными некторые его рассуждения, вскрывающие и некторые недостатки статической типизации.


AF>Тема недостатков статической типизации не раскрыта.


Так вроде все на поверхности, но недостатки не вообще статической типизации а схемы "тип == класс" которая ограничена и менее общая чем схема "тип по сигнатуре", по второй схеме обобщенные функции вводятся легко и естественно. Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 07:04
Оценка:
FR>То есть это шире чем объектные классы окамла. Те же интерфейсы у ван Россума включают не только сигнатуры методов но и тела, что позволяет в интерфейсе прописывать и Design By Contract и вообще более жесткие ограничения.

Товарищи поставившие минус счем не согласны то?
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 07:09
Оценка:
Здравствуйте, eao197, Вы писали:

E>все равно не спасает, когда требуется вызвать min для float и double. Как в свое время в C++ произошло, когда вместо С-шных макросов min/max, появились шаблонные функции std::min/std::max. И часть кода (например, когда сравнивались int и long или int и float) элементарно перестала работать.


Интересно надо посмотреть как в скала это сделано.
По любому при такой типизации надо или заводить как бы вторую иреархию уже не классов а типов, или вводить для каждого типа числовой приоритет который будет учитыватся при разрешении типов.
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.01.07 07:47
Оценка: 27 (4)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

E>>
E>>def min[ T < Ordered[T] ]( a: T, b: T ) : T =
E>>  if( a < b ) a else b
E>>

E>>все равно не спасает, когда требуется вызвать min для float и double.

LCR>Не понял. А что мешает вызывать min для double? Ordered, насколько мне известно, определён для всех чисел.


Коля, тут вообще засада оказалась. Классы scala.Float, scala.Double и пр. не имеют примеси Ordered, поэтому использование их в сочетании с приведенной выше реализацией min нельзя вообще, т.к. не выполняется ограничение для типа [T <: Ordered[T]]. Есть еще классы scala.runtime.RichFloat, scala.runtime.RichDouble, которые имеют примесь Ordered, но -- для RichFloat это примесь Ordered[scala.Float]. Так что ограничение [T<:Ordered[T]] опять не выполняется, поскольку T -- это RichFloat, но он не производен от Ordered[RichFloat]. В общем кому-как, а мне такие заморочки с типами запоминать не хочется.

Но изначально я говорил вот о чем. Допустим, у нас есть тип T, который удовлетворяет условию [T<:Ordered[T]]. И есть тип U, который удовлетворяет условию [U<:Ordered[U]]. И пусть они не связаны друг с другом отношениями наследования. Например, BcdNumer (двоично десятичное число) и SimpleFraction (простая дробь, вида 1/3, 5/7 и т.д.). Сравнить объекты BcdNumber и SimpleFraction с помощью такого min невозможно, ведь мы нуждаемся в объектах одного типа T. Добавление в min двух типов-параметров ситуацию не исправляет, поскольку:
a) сигнатура a.< (которая берется из Ordered) не совпадает с нужной нам, т.к. аргументом a.< будет объект b типа U, а не T;
b) возвращать придется не T и не U, а scala.Any.

Между тем, в динамически типизированных языках без анотаций типов (в том же Ruby к примеру), написать min, который позволяет сравнивать BcdNumer и SimpleFraction не так уж и сложно. Причем возвращаться будет объект подходящего типа:
class BcdNumber
    def initialize( v )
        @value = v
    end

    def to_int
        @value
    end

    def to_f
        @value.to_f
    end

    def to_s
        "bcd:#{@value}"
    end

    def <(other)
        if other.respond_to?( :to_f )
            @value.to_f < other.to_f
        elsif other.respond_to?( :to_int )
            @value < other.to_int
        else
            fail "unable to compare #{self} with #{other}"
        end
    end
end

class SimpleFraction
    def initialize( dividend, divisor )
        @dividend, @divisor = dividend, divisor
    end

    def to_f
        @dividend.to_f / @divisor
    end

    def to_s
        "(#{@dividend}/#{@divisor})"
    end

    def <(other)
        if other.respond_to?( :to_f )
            self.to_f < other.to_f
        else
            fail "unable to compare #{self} with #{other}"
        end
    end
end

def min(a, b)
    if a < b then a else b end
end

b = BcdNumber.new( 5 )
s = SimpleFraction.new( 1, 3 ) # 1/3

puts min( b, 6 )    
puts min( b, 4 )    
puts min( b, 4.99 ) 
puts min( b, 5.01 ) 
puts min( b, s )    
puts min( s, b )    
puts min( s, 0.2 )  
puts min( s, 0.34 )

что дает при запуске:
bcd:5
4
4.99
bcd:5
(1/3)
(1/3)
0.2
(1/3)


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 18.01.07 07:51
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так вроде все на поверхности, но недостатки не вообще статической типизации а схемы "тип == класс" которая ограничена и менее общая чем схема "тип по сигнатуре", по второй схеме обобщенные функции вводятся легко и естественно.


Насколько я помню, такая техника называется interface inference и уже применяется в других языках. Со схемой "тип=класс" она никак не конфликтует, на самом деле, и их можно благополучно применять одновременно.

FR>Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.


Э... не уточнишь, какие именно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.01.07 08:01
Оценка:
Здравствуйте, eao197, Вы писали:

E>Но изначально я говорил вот о чем. Допустим, у нас есть тип T, который удовлетворяет условию [T<:Ordered[T]]. И есть тип U, который удовлетворяет условию [U<:Ordered[U]]. И пусть они не связаны друг с другом отношениями наследования. Например, BcdNumer (двоично десятичное число) и SimpleFraction (простая дробь, вида 1/3, 5/7 и т.д.). Сравнить объекты BcdNumber и SimpleFraction с помощью такого min невозможно, ведь мы нуждаемся в объектах одного типа T. Добавление в min двух типов-параметров ситуацию не исправляет, поскольку:

E>a) сигнатура a.< (которая берется из Ordered) не совпадает с нужной нам, т.к. аргументом a.< будет объект b типа U, а не T;
E>b) возвращать придется не T и не U, а scala.Any.

Ммм, я в Скале не до конца разбираюсь, но разве тут не будут использоваться неявные преобразования? Чтобы получить из T U или наоборот?
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.01.07 08:04
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, eao197, Вы писали:


E>>все равно не спасает, когда требуется вызвать min для float и double. Как в свое время в C++ произошло, когда вместо С-шных макросов min/max, появились шаблонные функции std::min/std::max. И часть кода (например, когда сравнивались int и long или int и float) элементарно перестала работать.


FR>Интересно надо посмотреть как в скала это сделано.

FR>По любому при такой типизации надо или заводить как бы вторую иреархию уже не классов а типов, или вводить для каждого типа числовой приоритет который будет учитыватся при разрешении типов.

Насколько я знаю, там для этого используются view, которые есть что-то типа преобразователей исходного типа в нужный.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.01.07 08:11
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, FR, Вы писали:


FR>>Так вроде все на поверхности, но недостатки не вообще статической типизации а схемы "тип == класс" которая ограничена и менее общая чем схема "тип по сигнатуре", по второй схеме обобщенные функции вводятся легко и естественно.


AF>Насколько я помню, такая техника называется interface inference и уже применяется в других языках. Со схемой "тип=класс" она никак не конфликтует, на самом деле, и их можно благополучно применять одновременно.


А нет чего-нибудь серьёзного под рукой на эту тему?
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 08:29
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, FR, Вы писали:


FR>>Так вроде все на поверхности, но недостатки не вообще статической типизации а схемы "тип == класс" которая ограничена и менее общая чем схема "тип по сигнатуре", по второй схеме обобщенные функции вводятся легко и естественно.


AF>Насколько я помню, такая техника называется interface inference и уже применяется в других языках. Со схемой "тип=класс" она никак не конфликтует, на самом деле, и их можно благополучно применять одновременно.


Конечно не конфликтует потому что в этих языка уже тип != класс.


FR>>Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.


AF>Э... не уточнишь, какие именно?


Да те же самые про которые пишет выше eao197 и которые затронуты у ван Россума, и нерешение которых в окамле привело к уродцам типа '.+'
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.01.07 08:53
Оценка: 1 (1)
Здравствуйте, Курилка, Вы писали:

К>Ммм, я в Скале не до конца разбираюсь,


Я, кстати, то же. Поскольку не выдержал штудирования ScalaReference где-то на половине.
Может быть, будь по Скале какое-нибудь фундаментальное введение в язык, вроде Programming Ruby 2nd Дейва Томаса или хотя бы "Язык программирования C++" Страуструпа, все было бы и не так страшно. Но изучать язык по его спецификации, написанной на сухом математическом языке -- можно застрелиться. Ко- и контра- вариантности я еще как-то понимал. Но когда в дело еще начала вмешиваться линеаризация классов/примесей (причем выполняющаяся справа на лево), да добавились view я просто сдался

К> но разве тут не будут использоваться неявные преобразования? Чтобы получить из T U или наоборот?


Они будут использоваться только, если в прототипе min указать, что какой-то и параметров может быть выведен неявно. Но, если кто-то зафиксировал min в простом варианте, без implicit спецификаций, то ничего уже не сделать. AFAIK.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.01.07 09:02
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Курилка, Вы писали:


К>>Ммм, я в Скале не до конца разбираюсь,


E>Я, кстати, то же. Поскольку не выдержал штудирования ScalaReference где-то на половине.

E>Может быть, будь по Скале какое-нибудь фундаментальное введение в язык, вроде Programming Ruby 2nd Дейва Томаса или хотя бы "Язык программирования C++" Страуструпа, все было бы и не так страшно. Но изучать язык по его спецификации, написанной на сухом математическом языке -- можно застрелиться. Ко- и контра- вариантности я еще как-то понимал. Но когда в дело еще начала вмешиваться линеаризация классов/примесей (причем выполняющаяся справа на лево), да добавились view я просто сдался
Да, есть такой момент, популяризация — вещь очень важная для продвижения технологий/методик и т.п.

К>> но разве тут не будут использоваться неявные преобразования? Чтобы получить из T U или наоборот?


E>Они будут использоваться только, если в прототипе min указать, что какой-то и параметров может быть выведен неявно. Но, если кто-то зафиксировал min в простом варианте, без implicit спецификаций, то ничего уже не сделать. AFAIK.


Да точно, как раз недавно читал про implicit. Но разве не логично сигнатуру библиотечной функции выбирать подумав предварительно, что как и где будет использоваться?
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.01.07 09:41
Оценка: 1 (1)
Здравствуйте, Курилка, Вы писали:

E>>Они будут использоваться только, если в прототипе min указать, что какой-то и параметров может быть выведен неявно. Но, если кто-то зафиксировал min в простом варианте, без implicit спецификаций, то ничего уже не сделать. AFAIK.


К>Да точно, как раз недавно читал про implicit. Но разве не логично сигнатуру библиотечной функции выбирать подумав предварительно, что как и где будет использоваться?


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

И возвращаясь к утиной типизации -- посмотри на мой пример на Ruby -- там ведь вообще не нужно заботится о неявных преобразованиях одного к другому. Утиная типизация в чистом виде -- пока коду хватает методов объекта нет надобности в том, чтобы из SimpleFraction делали BcdNumber или наоборот.

Тем более, что вот еще странность. Ведь в принципе, эти фрагменты 1) и 2) должны быть эквиваленты:
def doSomething[t]( v: t ) { ... }

val b : BcdNumber = ...
val s : SimpleFraction = ...

// 1)
doSomething( min( b, s ) );

// 2)
if( b < s )
  doSomething( b )
else
  doSomething( s )

всего лишь вызов doSomething для объекта с минимальным значением. Но!
Если есть неявное преобразование из SimpleFraction в BcdNumber которое будет использоваться при обращении к min, то doSomething всегда в случае 1) будет вызываться с объектом BcdNumber.
Но, если в BcdNumber есть оператор < для SimpleFaction, то в случае 2) компилятор сгенерирует два обращения к doSomething но с разными типами аргументов!

Вот такие курьезы.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.01.07 09:53
Оценка:
Здравствуйте, eao197, Вы писали:

E>Если есть неявное преобразование из SimpleFraction в BcdNumber которое будет использоваться при обращении к min, то doSomething всегда в случае 1) будет вызываться с объектом BcdNumber.

E>Но, если в BcdNumber есть оператор < для SimpleFaction, то в случае 2) компилятор сгенерирует два обращения к doSomething но с разными типами аргументов!

E>Вот такие курьезы.


Просто тут получается, что 2 разных пути неявных преобразований — один в min, другой в <
Из-за этого и получаем путаницу.
Имхо тут было бы логичней оставить один, а именно который в операторе сравниения.
Хотя как практически это реализовать пока не могу додумать.
Правда путаница какая-то получается
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 18.01.07 10:00
Оценка: +1 -1
Здравствуйте, eao197, Вы писали:


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


Угу. Признак хорошей либы — если она используется так, как не мог предположить разработчик.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: Как скрестить ужа и ежа или статическую и утиные типизац
От: Cadet  
Дата: 18.01.07 15:31
Оценка:
Я прошу прощения за оффтоп... Не первый раз встречаюсь с фразой "утиная типизация". Это что за зверь такой?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[2]: Как скрестить ужа и ежа или статическую и утиные типи
От: Lloyd Россия  
Дата: 18.01.07 15:33
Оценка: 2 (1) +1
Здравствуйте, Cadet, Вы писали:

C>Я прошу прощения за оффтоп... Не первый раз встречаюсь с фразой "утиная типизация". Это что за зверь такой?


Утиная типизация
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 18:19
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну питон традиционно оттуда разные вещи утягивает


Вот только непоследовательно. Надо было начинать с паттерн-матчинга и алгеброических типов.

FR>Ты статью внимательнее почитай, там есть про мотивировку и там нет цели выводить все во время компиляции.


Прочитал. Когда дочитал до конца возник резонный вопрос. Ну, ты знаешь какой. Такое ощущение, что товарищь блуждая по Интернету набрел то ли на Немерле, то ли на Скалу. Синтаксис во многом 1 в 1 содран.

А вообще, товарищь правильным путем свои мысли развивает. Медленно, правда.

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

И еще интересно, что ты после этого скажешь о старой доброй теме статика вс. динамика, если даже создатель твоего любимого языка явно плывет по течению к статической типизации и выводу типов? Отстаешь ты явно от своих кумиров.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 18:19
Оценка: :)
Здравствуйте, AndreiF, Вы писали:

AF>Тема недостатков статической типизации не раскрыта.


Скажу больше. В обоих статьях я заметил исключительно сожаления о том, что Питон не имеет возможности статически типизировать код и идеи о том, как прикрутить статическую типизацию к Питону.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 18:19
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так вроде все на поверхности, но недостатки не вообще статической типизации а схемы "тип == класс" которая ограничена и менее общая чем схема "тип по сигнатуре", по второй схеме обобщенные функции вводятся легко и естественно. Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.


Мне кажется, что ты хочешь видеть то, чего нет в этих статьях и не хочешь то, что там есть.

Ни одного слова про недостатки статической типизации там не сказано. Там просто рассуждается о том, что схема Хаскеля (Хаскель, правда не называется, но это именно его схема) отлично подходит для введения статической типизации в ранее полностью динамический язык вроде Питона.

Про ОКамл ты тоже что-то путаешь. Привди, плиз цитаты.

Про вывод обобщенных типов тоже. Он как раз предлагает задавать сигнатуры обобщенных типов явно. Что 1 в 1 копирует дотнетуно-явовскую схему. И вообще интерфейсы описанные товарищем 1 в 1 явновские/дотнетные. Даже ограничения и те скопированы (вплодь до ключевого слва where). Тоько принцип их применения скорее похож на развитие идей классов типов Хаскеля. В прочем классы типов Хаскеля тоже имеют очень много общего с интерфейсами дотнета/явы. Так что все логично.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 18:19
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Насколько я помню, такая техника называется interface inference и уже применяется в других языках. Со схемой "тип=класс" она никак не конфликтует, на самом деле, и их можно благополучно применять одновременно.


Скажу больше — это вообще терминалогическая эквилибристика.

То что товарищь называет классом в Хаскеле называется воплощением (instatnce) и классом в дотнете/яве. То что он называет интерфейсом называется классом типа в Хаскеле и интерфейсом в дотнете/яве. А то что он называет типом называется "наиболее общий тип" и не имеет аналога в дотнете/яве, так как они не выводят типы. Но подобная фигня есть в Немерле, хотя она опять же имени не имеет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 18:37
Оценка: 1 (1)
Здравствуйте, FR, Вы писали:

FR>Ну у ван Россумма интерфейс понятие более широкое чем в Шарпе, он хочет под интерфейс подвести не только сигнатуру но и контракт.


Я вот прочел статью и понял, что просто у тебя каша. У твоего ван Россумма как раз интерфейс 1 в 1 явовский (шарп ковариантности не пдоупскает, а так бы был и шарповским). Разница только в применении. Это твой ван Россумма предлагает ассоциировать интерфейсы с конкретными объектами динамически (ну, или с конкретными классам статически, но неявно, а по утиному). Собственно в этом есть рациональное зерно, так как в системе типов дотнеа и явы есть дна засада. Нельзя без создания адаптера ассоциировать интерфейс с уже имеющимся (в бинарном виде, например) классом. В Хаскеле и мечтах ван Россумма это возомжно. В этом заключается приемущество. Недостаток же заключается в том, что такая ассоциация во-первых может получиться случаяно (с вытекающей из этого семантической ошибкой), а во-вторых не гибка (надо совпадение сигнатур методов, а этого может не быть). В Хаскеле это сделано более элегантно. Этот язык заставляет объявлять ассоциазции типов и интерфейсов (классов типов в его терминалогии) явно. Это с одно стороны оставляет полный контроль, а с другой дает большую гибкость нежели в явопдобных системах типов. Однако это плохо вяжется с динамикой в стиле Питона. Но тут уж надо быть последовательным. Рассуждения ван Россумма явно говорят о том, что он склоняется к отказу от динамики в пользу вывода типов с частичной их аннотацией (1 в 1 идея раелизованаая в Немерле). Вот только тут все зависит от того насколько он будет последователен в своих размышлениях и действиях. Если будет последователен, то через несклько лет Питон превратится в нечто очень похожее на Немерле . Если нет, будет еще тот езжоужжик который скорее соберет все худшее из двух миров.

VD>>А разница должна заключаться тольк в том, что сопоставление кокретного объекта и этого интерфейса/класса должно производитья неявно.


FR>Так эта разница как раз и дает возможность легко делать обобщенные функции, так что реально это очень большая разница.


Ты ообще не понял что он говорил. Прочти еще раз сказанно им. Там об обощенности вообще ни слова. Обобщенность там как раз планируется задаваться явно (как в шарпе, 1 в 1). Там говорится, что ассоциация интерфейсов с кокретными классами будет производиться неявно. То есть ты не будешь обязан прописывать в классе что он реализует интерфейс ICompoarable[T], как это ты обязан делать в Шарпе. Вместо этого класс будет считаться реализующим интерфейс если у него есть необходимый список методов (совпадающий по сигнатуре). Собственно очень похожая идея уже реализована в новй версии VB.NET. Едея в общем-то красивая, но имеющая пробелмы в плане быстродействия. Хотя в рамках VM их решить можно. Проблема в том, что VM дотента и яывы на это плохо рассчитаны.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 19:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Ну питон традиционно оттуда разные вещи утягивает


VD>Вот только непоследовательно. Надо было начинать с паттерн-матчинга и алгеброических типов.


Ну это он решает.

FR>>Ты статью внимательнее почитай, там есть про мотивировку и там нет цели выводить все во время компиляции.


VD>Прочитал. Когда дочитал до конца возник резонный вопрос. Ну, ты знаешь какой. Такое ощущение, что товарищь блуждая по Интернету набрел то ли на Немерле, то ли на Скалу. Синтаксис во многом 1 в 1 содран.


Ну конечно как же без N

VD>А вообще, товарищь правильным путем свои мысли развивает. Медленно, правда.


VD>Мне вот интересно, что ты вдруг вспомнил о статьях двух-годичной давности?


А у меня глюк приключился месяц декабрь я увидел, а год мимо проскочил, показалась что статьятолько что вышла, тем более набрел я на нее очень окольными путями

VD>И еще интересно, что ты после этого скажешь о старой доброй теме статика вс. динамика, если даже создатель твоего любимого языка явно плывет по течению к статической типизации и выводу типов? Отстаешь ты явно от своих кумиров.


Мне там интересным показалась не само введение статики, а именно расуждения про типы. А по поводу статики для питона необходимости нет, но и мешать тоже не будет.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 19:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Так вроде все на поверхности, но недостатки не вообще статической типизации а схемы "тип == класс" которая ограничена и менее общая чем схема "тип по сигнатуре", по второй схеме обобщенные функции вводятся легко и естественно. Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.


VD>Мне кажется, что ты хочешь видеть то, чего нет в этих статьях и не хочешь то, что там есть.


Мне тоже самое кажется насчет тебя

VD>Ни одного слова про недостатки статической типизации там не сказано. Там просто рассуждается о том, что схема Хаскеля (Хаскель, правда не называется, но это именно его схема) отлично подходит для введения статической типизации в ранее полностью динамический язык вроде Питона.


VD>Про ОКамл ты тоже что-то путаешь. Привди, плиз цитаты.


Не понял какие цитаты?

VD>Про вывод обобщенных типов тоже. Он как раз предлагает задавать сигнатуры обобщенных типов явно. Что 1 в 1 копирует дотнетуно-явовскую схему. И вообще интерфейсы описанные товарищем 1 в 1 явновские/дотнетные. Даже ограничения и те скопированы (вплодь до ключевого слва where). Тоько принцип их применения скорее похож на развитие идей классов типов Хаскеля. В прочем классы типов Хаскеля тоже имеют очень много общего с интерфейсами дотнета/явы. Так что все логично.


Да все логично но не так как это предполагается ввести в питон. Общее конечно есть, но и коренных различий тоже полно.
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 19:05
Оценка:
Здравствуйте, FR, Вы писали:

FR>>То есть это шире чем объектные классы окамла. Те же интерфейсы у ван Россума включают не только сигнатуры методов но и тела, что позволяет в интерфейсе прописывать и Design By Contract и вообще более жесткие ограничения.


FR>Товарищи поставившие минус счем не согласны то?


Я бы обратил внимание на два момента.
1. Переверание слов ван Россума. Про тела он ничего не говорил.
2. Непонимание того как работает система типов Хиндли-Миллера в ОКамле. ОКамл легко решает задачи подобные приведенной тобой. Там есть алгеброические типы которые можно использовать как безопасные юнионы. А так же он сам выводит наиболее общий класс (считай интерфейс). Так что если ты напишешь метод который способен оперировать разными типами, то ОКамл сам распознает это и породит обобщенный метод. А вот как раз этот плано-Питон на подобное похоже не способен. Он требует явного задания информации об общении.

Что до Design By Contract, то ван Россум предложил накладывать ограничения на методы интерфейса, а не позволять делать тела у методов интерфейсов. Это разные вещи. Причем перво — это очень грамотное решение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 18.01.07 19:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Ну у ван Россумма интерфейс понятие более широкое чем в Шарпе, он хочет под интерфейс подвести не только сигнатуру но и контракт.


VD>Я вот прочел статью и понял, что просто у тебя каша. У твоего ван Россумма как раз интерфейс 1 в 1 явовский (шарп ковариантности не пдоупскает, а так бы был и шарповским). Разница только в применении. Это твой ван Россумма предлагает ассоциировать интерфейсы с конкретными объектами динамически (ну, или с конкретными классам статически, но неявно, а по утиному). Собственно в этом есть рациональное зерно, так как в системе типов дотнеа и явы есть дна засада. Нельзя без создания адаптера ассоциировать интерфейс с уже имеющимся (в бинарном виде, например) классом. В Хаскеле и мечтах ван Россумма это возомжно. В этом заключается приемущество. Недостаток же заключается в том, что такая ассоциация во-первых может получиться случаяно (с вытекающей из этого семантической ошибкой), а во-вторых не гибка (надо совпадение сигнатур методов, а этого может не быть).


Нет совпадение сигнатур методов не нужно, нужно чтобы объект содержал все сигнатуры которые есть в интерфейсе, то есть то же "утиное" сопоставление.

VD>В Хаскеле это сделано более элегантно. Этот язык заставляет объявлять ассоциазции типов и интерфейсов (классов типов в его терминалогии) явно. Это с одно стороны оставляет полный контроль, а с другой дает большую гибкость нежели в явопдобных системах типов. Однако это плохо вяжется с динамикой в стиле Питона. Но тут уж надо быть последовательным. Рассуждения ван Россумма явно говорят о том, что он склоняется к отказу от динамики в пользу вывода типов с частичной их аннотацией (1 в 1 идея раелизованаая в Немерле). Вот только тут все зависит от того насколько он будет последователен в своих размышлениях и действиях. Если будет последователен, то через несклько лет Питон превратится в нечто очень похожее на Немерле . Если нет, будет еще тот езжоужжик который скорее соберет все худшее из двух миров.


Ну это уже твои фантазии.


VD>>>А разница должна заключаться тольк в том, что сопоставление кокретного объекта и этого интерфейса/класса должно производитья неявно.


FR>>Так эта разница как раз и дает возможность легко делать обобщенные функции, так что реально это очень большая разница.


VD>Ты ообще не понял что он говорил. Прочти еще раз сказанно им. Там об обощенности вообще ни слова. Обобщенность там как раз планируется задаваться явно (как в шарпе, 1 в 1).


Скорее как в С++
Но это только для параметризировнных типов.

VD>Там говорится, что ассоциация интерфейсов с кокретными классами будет производиться неявно. То есть ты не будешь обязан прописывать в классе что он реализует интерфейс ICompoarable[T], как это ты обязан делать в Шарпе. Вместо этого класс будет считаться реализующим интерфейс если у него есть необходимый список методов (совпадающий по сигнатуре). Собственно очень похожая идея уже реализована в новй версии VB.NET. Едея в общем-то красивая, но имеющая пробелмы в плане быстродействия. Хотя в рамках VM их решить можно. Проблема в том, что VM дотента и яывы на это плохо рассчитаны.


Так это и есть основная фишка.
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 18.01.07 19:29
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Я бы обратил внимание на два момента.

VD>1. Переверание слов ван Россума. Про тела он ничего не говорил.

Посмотри код:
interface I:
    def foo(x: int) -> str:
        "The foo method."
        assert x > 0


Выделенное уже тело метода интерфейса. И описание

Here the metaclass would replace C.foo with a wrapper that (1) checks that exactly one argument is passed, (2) checks that it is an int, (3) executes the body of the method declared in the interface (which in this example checks that x is > 0), (4) calls the method implementation; (5) checks that the return value is a string; and (6) returns the return value.



VD>2. Непонимание того как работает система типов Хиндли-Миллера в ОКамле. ОКамл легко решает задачи подобные приведенной тобой. Там есть алгеброические типы которые можно использовать как безопасные юнионы. А так же он сам выводит наиболее общий класс (считай интерфейс). Так что если ты напишешь метод который способен оперировать разными типами, то ОКамл сам распознает это и породит обобщенный метод. А вот как раз этот плано-Питон на подобное похоже не способен. Он требует явного задания информации об общении.


Окамл насколько я помню через ж... может решать эту проблему.

VD>Что до Design By Contract, то ван Россум предложил накладывать ограничения на методы интерфейса, а не позволять делать тела у методов интерфейсов. Это разные вещи. Причем перво — это очень грамотное решение.


Он предложил и то и другое.
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 20:46
Оценка:
Здравствуйте, FR, Вы писали:

FR>Мне там интересным показалась не само введение статики, а именно расуждения про типы.


Тогда очень советую почитать про классы типов Хаскеля. Там все на довольно высоком научном уровне спроектированно. Плюс это уже работает, т.е. гарантированно корректно и не противоречиво.

FR>А по поводу статики для питона необходимости нет, но и мешать тоже не будет.


Аднако автор Питона с тобой не вполне согласен. И я его всецело поддерживаю.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 20:46
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Мне кажется, что ты хочешь видеть то, чего нет в этих статьях и не хочешь то, что там есть.


FR>Мне тоже самое кажется насчет тебя


Возможно, возможно... что статья не про то как к Питону статическую типизацию приделать, а про проблемы этой самой статической типизации. Значит я не уловил. Тебе виднее.

FR>Не понял какие цитаты?


Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.

Твои слова? Ну, вот и приведи цитаты из этих статей где автор говорил о проблемах ОКамла.

FR>Да все логично но не так как это предполагается ввести в питон. Общее конечно есть, но и коренных различий тоже полно.


Ты почему-то думашь что путь Питона какой-то особенный. Меж тем все украдено до него. Он просто пытается прикурутить статическую типизацнию и вывод типов к Питону. При этом он выбирает из имеющихся альтернатив.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 21:29
Оценка: :))) :))) :)
Здравствуйте, FR, Вы писали:

FR>Нет совпадение сигнатур методов не нужно, нужно чтобы объект содержал все сигнатуры которые есть в интерфейсе, то есть то же "утиное" сопоставление.


Это и есть совпадение сигнатур. Блин, поспорить что ли охота?

FR>Ну это уже твои фантазии.


Ну, ну.

FR>Скорее как в С++

FR>Но это только для параметризировнных типов.

Тебя так и прет поспорить ни о чем. Адреналину что ли нехватает? Какая разница С++ или Шарп? Речь идет о явном задании параметров типов. В отлчии от этого подхода ОКамл и Хаскель подразумевают что все типы бобщены по умолчанию и что переменные типы как бы есть априори. Выражаясь наукобразным языком — все типы стоят под квантором всеобщности.

О С++ же я не упоминал по ричини того, что шаблоны в нем вещь чисто текстуальная. В рантайме их нет. А в Питоне явно говорится о интерфейсах аналогичных донтентым — существующим в рантайме. Ну, да это уже дело десятое. Нет никакого желания втягиваться в дискуссию С++ вс. Шарп.

FR>Так это и есть основная фишка.


Я бы сказал что это хорошая идея. Она цельнотянутая из Хаскеля, но это дело десятое. Главное, что это не основаная его идея. А основную его идею ты похоже просто не хочешь видеть. Основаня идея заключается в том, чтобы внести в Питон статическую типизацию. Она конечно будет не обязательной, но явно автор Питона понимает, что это полезная вещь. Ты же упоно не хочешь признавать этого и видишь в его статье что угодно но не это.

Ты во всю плевался в Boo, а когда автор Питона предложил по сути аналогичные вещи ты вдруг нашел это предложение интересным, но усмотер в нем все что угодно, но не суть.

ЗЫ

На самом деле действительно интересная тема. Она показывает, что правильных идей мало и люди разными путям но все же выходят на них. Питоновцы, Хаскелевцы, Явщики, Дотнетчики, Немерлисы и Скалолазы все по тихоничку движутся в одном в одном направлении, но с разных сторон. И потихоничку они приходят к очень похожим решениям. Каждый со своим колоритом, но все же к очень похожим. Интерфейсы, классы типов, вывод типов, статическая типизация... все это правильные решение и все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку на мешке с баксами. Немеле и Хаскель сверху на научном багаже. Но все движутся в одном направлении.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 21:29
Оценка:
Здравствуйте, FR, Вы писали:

FR>Посмотри код:

FR>
FR>interface I:
FR>    def foo(x: int) -> str:
FR>        "The foo method."
FR>        assert x > 0
FR>


FR>Выделенное уже тело метода интерфейса. И описание


Ты невнимательно читал и не уловил суть. Это всего лишь средство более гибко оформить пре-условия. Там есть такое замечание:

Methods in interfaces should not declare "self" as an explicit argument.

Как ты думаешь чего ты лешаешся не имея возможности обратиться к self? Правльно, ты не можешь использовать члены интерфейса и темболее класса. Все что ты можешь — это проверить значение параметров. А зачем он решил развать это "телом" он тоже объясняет:

Design By Contract, Eiffel's approach to integrating pre- and post-conditions into the type system, was recommended frequently (also in the past) and I would love to do something with this. Thinking aloud, perhaps the body of a method declaration in an interface could be interpreted as code implementing the precondition? I had previously thought that interfaces could use this syntax:

interface I1:
    def fumble(name: str, count: int) -> bool:
        """docstring"""


Now it seems easy enough to extend this by allowing additional code in the body following the docstring, for example:

interface I1:
    def fumble(name: str, count: int) -> bool:
        """docstring"""
        assert count > 0
        assert name in ReferenceTable


(But what to do for the postcondition? Perhaps we could use a nested function with a designated name, e.g. check_return().)


FR>Окамл насколько я помню через ж... может решать эту проблему.


Ты не правильно понимаешь. У ОКамла есть три проблемы:
1. Все идентификаторы должны быть уникальны или полностью квалифицироваться именем модуля. То есть ты не можешь создать два типа или две функции с одинаковыми именами.
2. В следствии п. 1 и карринга невозможна перегрузка функций.
3. Недопустимы неявные приведения типов.
4. Имеется дурацкий запрет на upcast.
5. Арифмитические операторы недопускают пергрузку. Для флоатов используется одтедьный оператор.

В остальном язык более чем полноценнен. Все ограничения вызваны особенностями алгоритма вывода типов для системы тпов Хиндли-Миллера.

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

VD>>Что до Design By Contract, то ван Россум предложил накладывать ограничения на методы интерфейса, а не позволять делать тела у методов интерфейсов. Это разные вещи. Причем перво — это очень грамотное решение.


FR>Он предложил и то и другое.


Ты его не верно понял. См. выше. Это очень ограниченные тела в которых по сути можно только контролирвоать параметры.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: igna Россия  
Дата: 18.01.07 21:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>... все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку на мешке с баксами. Немеле и Хаскель сверху на научном багаже. ...


А C++?
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 18.01.07 22:00
Оценка: -1 :)))
Здравствуйте, igna, Вы писали:

VD>>... все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку на мешке с баксами. Немеле и Хаскель сверху на научном багаже. ...


I>А C++?


C++ — труп. Он никуда не ползёт.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 18.01.07 22:04
Оценка: :))
konsoletyper wrote:
> VD>>... все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку
> на мешке с баксами. Немеле и Хаскель сверху на научном багаже. ...
> I>А C++?
> C++ — труп. Он никуда не ползёт.
Куда же он денется, жив еще курилка (не путать с
http://rsdn.ru/Users/Profile.aspx?uid=1546 !).

Сейчас ползет в сторону hardcore-оптимизаций (типа move constructors,
управления aliasing'ом) и более мощного метапрограммирования.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 23:17
Оценка:
Здравствуйте, igna, Вы писали:

VD>>... все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку на мешке с баксами. Немеле и Хаскель сверху на научном багаже. ...


I>А C++?


Он ползет в известном направлении... в магилу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.01.07 23:18
Оценка:
Здравствуйте, Cyberax, Вы писали:


>> C++ — труп. Он никуда не ползёт.

C>Куда же он денется, жив еще курилка (не путать с
C>http://rsdn.ru/Users/Profile.aspx?uid=1546 !).

Курилка то жив (не путатьс с http://en.wikipedia.org/wiki/C%2B%2B) .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как скрестить ужа и ежа или статическую и утиные типи
От: IT Россия linq2db.com
Дата: 19.01.07 02:16
Оценка: 2 (1)
Здравствуйте, Cadet, Вы писали:

C>Я прошу прощения за оффтоп... Не первый раз встречаюсь с фразой "утиная типизация". Это что за зверь такой?


Как дотнетчик дотнетчику

interface IMyInterface
{
  void Foo();
  void Bar(int i);
}

class MyClass1 // наследования от интерфейса IMyInterface нет
{
  void Foo() {}
  void Bar(int i) {}
}

class MyClass2 // наследования от интерфейса IMyInterface нет
{
  void Foo() {}
  void Bar(int i, int j) {}
}

static class Test
{
  static void Method(IMyInterface mi)
  {
  }
}

void Main()
{
  Test.Method(new MyClass1()); // OK
  Test.Method(new MyClass2()); // Fail, сигнатуры методов не удовлетворяют интерфейс IMyInterface
}
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 04:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Мне там интересным показалась не само введение статики, а именно расуждения про типы.


VD>Тогда очень советую почитать про классы типов Хаскеля. Там все на довольно высоком научном уровне спроектированно. Плюс это уже работает, т.е. гарантированно корректно и не противоречиво.



Посмотрим. Хотя смутно помню что читал по диагонали.


FR>>А по поводу статики для питона необходимости нет, но и мешать тоже не будет.


VD>Аднако автор Питона с тобой не вполне согласен. И я его всецело поддерживаю.


Вполне он со мной согласен, сейчас в планах на питон 3.0 введение опциональной статической типизации стоит с пометкой "может быть"
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 19.01.07 04:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Нет совпадение сигнатур методов не нужно, нужно чтобы объект содержал все сигнатуры которые есть в интерфейсе, то есть то же "утиное" сопоставление.


VD>Это и есть совпадение сигнатур. Блин, поспорить что ли охота?


Нет спорить некогда.


FR>>Скорее как в С++

FR>>Но это только для параметризировнных типов.

VD>Тебя так и прет поспорить ни о чем. Адреналину что ли нехватает? Какая разница С++ или Шарп? Речь идет о явном задании параметров типов. В отлчии от этого подхода ОКамл и Хаскель подразумевают что все типы бобщены по умолчанию и что переменные типы как бы есть априори. Выражаясь наукобразным языком — все типы стоят под квантором всеобщности.


В питоне предполагаются к использованию оба подхода. И явное задание в случае параметрических типов, и утиная типизация в остальных случаях.

VD>О С++ же я не упоминал по ричини того, что шаблоны в нем вещь чисто текстуальная. В рантайме их нет. А в Питоне явно говорится о интерфейсах аналогичных донтентым — существующим в рантайме. Ну, да это уже дело десятое. Нет никакого желания втягиваться в дискуссию С++ вс. Шарп.


FR>>Так это и есть основная фишка.


VD>Я бы сказал что это хорошая идея. Она цельнотянутая из Хаскеля, но это дело десятое. Главное, что это не основаная его идея. А основную его идею ты похоже просто не хочешь видеть. Основаня идея заключается в том, чтобы внести в Питон статическую типизацию. Она конечно будет не обязательной, но явно автор Питона понимает, что это полезная вещь. Ты же упоно не хочешь признавать этого и видишь в его статье что угодно но не это.


Я это не отрицаю, но это не так интересно для меня сейчас.

VD>Ты во всю плевался в Boo, а когда автор Питона предложил по сути аналогичные вещи ты вдруг нашел это предложение интересным, но усмотер в нем все что угодно, но не суть.


Ты тоже вовсю плевался в Boo
Там подход обратный, в языке со статической типизацией есть опциональная утиная динамическая.

VD>ЗЫ


VD>На самом деле действительно интересная тема. Она показывает, что правильных идей мало и люди разными путям но все же выходят на них. Питоновцы, Хаскелевцы, Явщики, Дотнетчики, Немерлисы и Скалолазы все по тихоничку движутся в одном в одном направлении, но с разных сторон. И потихоничку они приходят к очень похожим решениям. Каждый со своим колоритом, но все же к очень похожим. Интерфейсы, классы типов, вывод типов, статическая типизация... все это правильные решение и все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку на мешке с баксами. Немеле и Хаскель сверху на научном багаже. Но все движутся в одном направлении.


С этим в общем согласен.
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 19.01.07 04:52
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Ты невнимательно читал и не уловил суть. Это всего лишь средство более гибко оформить пре-условия. Там есть такое замечание:


Понятно что self в интерфейс передавать малоосмысленно. Но то что тело все таки есть уже сразу подсказывает что его можно использовать не только для контрактного программирования
Кстати все что описанно там можно и сейчас на метаклассах сварганить, кое где конечно будет коряво и не причесано синтаксически.

FR>>Окамл насколько я помню через ж... может решать эту проблему.


VD>Ты не правильно понимаешь. У ОКамла есть три проблемы:

VD>1. Все идентификаторы должны быть уникальны или полностью квалифицироваться именем модуля. То есть ты не можешь создать два типа или две функции с одинаковыми именами.
VD>2. В следствии п. 1 и карринга невозможна перегрузка функций.
VD>3. Недопустимы неявные приведения типов.
VD>4. Имеется дурацкий запрет на upcast.
VD>5. Арифмитические операторы недопускают пергрузку. Для флоатов используется одтедьный оператор.

Вот 3. 4. 5. нормально нужно разрешить, и обсудалось именно это.

VD>В остальном язык более чем полноценнен. Все ограничения вызваны особенностями алгоритма вывода типов для системы тпов Хиндли-Миллера.


Так никто ни спорит что окамл неплохой язык, но не без недостатков.
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 05:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


VD>>>Мне кажется, что ты хочешь видеть то, чего нет в этих статьях и не хочешь то, что там есть.


FR>>Мне тоже самое кажется насчет тебя


VD>Возможно, возможно... что статья не про то как к Питону статическую типизацию приделать, а про проблемы этой самой статической типизации. Значит я не уловил. Тебе виднее.


Конечно

FR>>Не понял какие цитаты?


VD>

Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.

VD>Твои слова? Ну, вот и приведи цитаты из этих статей где автор говорил о проблемах ОКамла.

Это проблемы не только Окамла, просто там они достаточно ярко проявлены. Почитай снова тему все это уже обсудили.

FR>>Да все логично но не так как это предполагается ввести в питон. Общее конечно есть, но и коренных различий тоже полно.


VD>Ты почему-то думашь что путь Питона какой-то особенный. Меж тем все украдено до него. Он просто пытается прикурутить статическую типизацнию и вывод типов к Питону. При этом он выбирает из имеющихся альтернатив.


У каждого языка свои заскоки и фичи, питон в этом не исключение
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 19.01.07 05:15
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А нет чего-нибудь серьёзного под рукой на эту тему?


К сожалению, нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 19.01.07 05:15
Оценка:
Здравствуйте, FR, Вы писали:

FR>Конечно не конфликтует потому что в этих языка уже тип != класс.


Это ты уже сам придумал. На самом деле две эти вещи друг от друга вообще не зависят.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 07:11
Оценка: +3
Здравствуйте, konsoletyper, Вы писали:

K>C++ — труп. Он никуда не ползёт.


Здесь отсутствует очень жирное ИМХО.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: Laughing_Silencer  
Дата: 19.01.07 07:24
Оценка: +1
Здравствуйте, konsoletyper, Вы писали:

K>Здравствуйте, igna, Вы писали:


VD>>>... все ползут в этом направлении. Питон снизу на пузе. Дотнет сбоку на мешке с баксами. Немеле и Хаскель сверху на научном багаже. ...


I>>А C++?


K>C++ — труп. Он никуда не ползёт.


Либо пиши ИМХО, либо обоснуй... Честно говоря я не понимаю критериев по которым можно сказать, что некоторый язык умирает за исключением оттока разработчиков и снижение абсолютной доли рынка. Пока этого не видно.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 10:03
Оценка: +1
Здравствуйте, Laughing_Silencer, Вы писали:

K>>C++ — труп. Он никуда не ползёт.


L_S>Либо пиши ИМХО, либо обоснуй... Честно говоря я не понимаю критериев по которым можно сказать, что некоторый язык умирает за исключением оттока разработчиков и снижение абсолютной доли рынка. Пока этого не видно.


А вот я вижу. Прикладное ПО (за исключением игр) уже давно переходит на Java и .NET. Есть особые ситуации — графические библиотеки, игры, ОС и т.д. Но вот игры со временем будут переходить на managed-среды (и не надо отпираться, когда-то так же звучали "со временем игры будут писать для Windows). ОС, может быть (судя по экспериментам с Singularity). Вообще, думаю, разработчики в будущем осознают преимущество managed-сред и всяческие "числодробильные" куски программ будут всё больше уходить в сторону специфического ассемблера, а высокоуровневые части будут писать на Java/.Net. Причём хорошо, если в этом поспособствую Sun и MS и максимально упростят interop (хотя и сейчас всё очень просто).

C++ не развивается не только в этом смысле. Сейчас есть тенденция сдвига к ФП (вон даже MS начали ворочиться). В С++ если и есть ФП, то на уровне метапрограммирования. Что уж говорить о таких давно освоенных вещах, как, например GC, который так и не добавили в C++? Все добавления, которые в нём есть — это робкие попытки залатать те дырки, которые возникли в нём давно из-за неправильного дизайна, сохранив при этом совместимость. Единственное, что заслуживает внимания — это развитие метапрограммирования, но без всего остального оно того стоит?

Для C++ невозможно сделать хорошей IDE. Для C++ невозмножно написать полноценный парсер. C++ медленно компилируется. Для C++ есть куча костылей, которые так и не заменят чем-нибудь более удачным, например, чтобы решить все проблемы с иерархией include'ов, до сих пор поступают так:

#ifndef _MODULE_NAME
#define _MODULE_NAME

...

#endif


несмотря на всю кривизну такого подхода.

C++ держится за прошлое. Его мог бы спасти отказ от совместимости с C 30-летней давности, но тогда, возможно, это был бы не C++.

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

В общем, если что-то не очевидно сейчас, то это не значит, что не назрели тенденции. Язык C++ сделал когда прорыв в мэйнстриме, многому нас научил, многое сделал. Но теперь он уже отжил своё.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: AndreiF  
Дата: 19.01.07 10:14
Оценка:
Здравствуйте, Laughing_Silencer, Вы писали:

L_S>Либо пиши ИМХО, либо обоснуй... Честно говоря я не понимаю критериев по которым можно сказать, что некоторый язык умирает за исключением оттока разработчиков и снижение абсолютной доли рынка. Пока этого не видно.


Когда программисты и проекты начнут уходить с С++ массово, то это будет уже не смерть. Это будет разложение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 19.01.07 10:29
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Скажу больше. В обоих статьях я заметил исключительно сожаления о том, что Питон не имеет возможности статически типизировать код и идеи о том, как прикрутить статическую типизацию к Питону.


Что интересно, статья ван Россума выглядит намного адекватнее, чем заявления многих любителей Питона и Руби на нашем форуме. Которые привыкли заявлять, что "статическая типизация вообще не нужна, и вообще только мешает".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 19.01.07 10:29
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да те же самые про которые пишет выше eao197 и которые затронуты у ван Россума, и нерешение которых в окамле привело к уродцам типа '.+'


Если ты говоришь о перегрузке операторов, то ее отсутствие вызвано совсем другими причнами, которые к типизации не имеют никакого отношения. Или ты что-то другое имел в виду?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: Laughing_Silencer  
Дата: 19.01.07 10:35
Оценка: -3
Здравствуйте, konsoletyper, Вы писали:

K>Здравствуйте, Laughing_Silencer, Вы писали:


K>>>C++ — труп. Он никуда не ползёт.


L_S>>Либо пиши ИМХО, либо обоснуй... Честно говоря я не понимаю критериев по которым можно сказать, что некоторый язык умирает за исключением оттока разработчиков и снижение абсолютной доли рынка. Пока этого не видно.


K>А вот я вижу. Прикладное ПО (за исключением игр) уже давно переходит на Java и .NET. Есть особые ситуации — графические библиотеки, игры, ОС и т.д. Но вот игры со временем будут переходить на managed-среды (и не надо отпираться, когда-то так же звучали "со временем игры будут писать для Windows). ОС, может быть (судя по экспериментам с Singularity). Вообще, думаю, разработчики в будущем осознают преимущество managed-сред и всяческие "числодробильные" куски программ будут всё больше уходить в сторону специфического ассемблера, а высокоуровневые части будут писать на Java/.Net. Причём хорошо, если в этом поспособствую Sun и MS и максимально упростят interop (хотя и сейчас всё очень просто).


Прикладное ПО для настольных компьютеров — я бы сказал, что сектор расширяется и там есть место для всех, а не то, что уходит. Зато вся та масса встроенных программ в оборудование начинает потихоньку переходить на С и С++ как наиболее удобные средства. Просто для бизнес приложений главное скорость разработки и минимизация ошибок. а при большом объеме кода проще сделать это на управляемых средах. В случае же со встроенным ПО намного проще работать с С и С++. Поэтому все производители уходят туда с других языков. Использование Жабы или Шарпа для встроенного ПО просто нецелесообразно и вряд ли будет целесообразно — они нацелены на другое.

K>C++ не развивается не только в этом смысле. Сейчас есть тенденция сдвига к ФП (вон даже MS начали ворочиться). В С++ если и есть ФП, то на уровне метапрограммирования. Что уж говорить о таких давно освоенных вещах, как, например GC, который так и не добавили в C++? Все добавления, которые в нём есть — это робкие попытки залатать те дырки, которые возникли в нём давно из-за неправильного дизайна, сохранив при этом совместимость. Единственное, что заслуживает внимания — это развитие метапрограммирования, но без всего остального оно того стоит?

Вот все говорят про правильный и неправильный дизайн забывая о том, что задача языка не быть красивым, а быть функциональным. Т.е. идея не в том, что бы писать абсолютно безопасные программы, а что бы писать нужные программы. Вообще я смотрю на разные языки и у всех свои недостатки, просто некоторые языки развиваются и со временем превращаются в фичепомойку, которую затем зачем то называют неправильным дизайном, а другие языки в свою очередь отстаивают определенные позиции и с академической точки зрения имеют мало недостатков, но не применяются ибо для того, что бы их применять на промышленном уровне нужны высококлассные специалисты и до кучи не все на них можно сделать. Примеры приводить не буду ибо начнется холи вар ИМХО всем не угодишь по части фич

K>Для C++ невозможно сделать хорошей IDE. Для C++ невозмножно написать полноценный парсер. C++ медленно компилируется. Для C++ есть куча костылей, которые так и не заменят чем-нибудь более удачным, например, чтобы решить все проблемы с иерархией include'ов, до сих пор поступают так:


K>
K>#ifndef _MODULE_NAME
K>#define _MODULE_NAME

K>...

K>#endif
K>


K>несмотря на всю кривизну такого подхода.

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

K>C++ держится за прошлое. Его мог бы спасти отказ от совместимости с C 30-летней давности, но тогда, возможно, это был бы не C++.


K>Всё будущее, которое очевидно для C++ — уход в узкую нишу написания чего-то низкоуровневого. Причём, возможно, что его и оттуда вытеснит какой-нибудь язык, более специализированный, потому гораздо более удобный для решения конкретного круга задач.

Ладно тебе — какая уж тут узкая ниша. Ну вот например для встроенных систем пока нету тенденций к переходу на другие языки, а это отнюдь не узкая ниша и деньги тут крутятся очень большие. Затем всяческая цифровая обработка, драйвера, коммуникационное ПО, анализаторы сигналов и т.п. Я бы сказал, что .Net займет свою узкую нишу для создания бизнес приложений и автоматизации нежели С++

K>В общем, если что-то не очевидно сейчас, то это не значит, что не назрели тенденции. Язык C++ сделал когда прорыв в мэйнстриме, многому нас научил, многое сделал. Но теперь он уже отжил своё.

Просто ты наверное устал от С++ и тебе хочется чего то нового, но это не значит, что язык свое отжил.
Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 10:44
Оценка: 1 (1) +1
Здравствуйте, konsoletyper, Вы писали:

<...попытки мерять язык с более чем 20-ти летней историей мерками сегодняшнего дня матерно поскипаны...>

K>В общем, если что-то не очевидно сейчас, то это не значит, что не назрели тенденции. Язык C++ сделал когда прорыв в мэйнстриме, многому нас научил, многое сделал. Но теперь он уже отжил своё.


Аналогия: человеческий организм перестает расти к 23-27 годам, после чего начинаются необратимые обратные процессы, затягивающиеся у некоторых индивидов на 50 и более лет. Однако, мало кому приходит в голову обзывать живых людей, находящихся в зрелом возрасте, "трупами" просто на основании того, что их биологическое развитие завершено.

Теперь ближе к теме. Никто, вдумайтесь, никто не в стостоянии вообразить себе степень проникновения C++ в современный IT. Об этом неоднократно говорил Страуструп, а уж кому как не ему интересоваться судьбой языка и выслушивать пожелания от разных групп пользователей. Изъять C++ из современных систем невозможно, переписать все C++ программы на что-то другое -- невозможно. Просто представте себе: н-е-в-о-з-м-о-ж-н-о!

Даже если сейчас интерес к нему снижается и количество стартующих на нем проектов уменьшается, C++ обеспечена еще очень и очень долгая жизнь. Не верите -- посмотрите на COBOL.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 10:48
Оценка: -1 :))
Здравствуйте, Laughing_Silencer, Вы писали:

L_S>Просто ты наверное устал от С++ и тебе хочется чего то нового, но это не значит, что язык свое отжил.


На основании вот этого
Автор: konsoletyper
Дата: 25.12.06
я думаю, что у человека еще просто не было возможности поработать на C++ в достаточной степени, над разными задачами и на разных платформах.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 11:02
Оценка:
Здравствуйте, Laughing_Silencer, Вы писали:

L_S>Вот все говорят про правильный и неправильный дизайн забывая о том, что задача языка не быть красивым, а быть функциональным. Т.е. идея не в том, что бы писать абсолютно безопасные программы, а что бы писать нужные программы. Вообще я смотрю на разные языки и у всех свои недостатки, просто некоторые языки развиваются и со временем превращаются в фичепомойку, которую затем зачем то называют неправильным дизайном, а другие языки в свою очередь отстаивают определенные позиции и с академической точки зрения имеют мало недостатков, но не применяются ибо для того, что бы их применять на промышленном уровне нужны высококлассные специалисты и до кучи не все на них можно сделать. Примеры приводить не буду ибо начнется холи вар ИМХО всем не угодишь по части фич


Действительно, от языка требуется, чтобы он был решал свои задачи. И он их должен решать быстро и просто. А вот подход C++ мне напоминает человека, который, чтобы почесать нос, просовывает руку под ногу и весь изгибается. Вот как раз C++ напоминает фичепомойку. Причём это, как я уже сказал, является следствием того, что C++ даржится за прошлое (а что же ему ещё остаётся делать с таким громадным объёмом legacy-кода). В прошлом люби были наивнее и вносили не самые нужные фичи, или нужные, но не самым нужным образом.

K>>
K>>#ifndef _MODULE_NAME
K>>#define _MODULE_NAME

K>>...

K>>#endif
K>>


K>>несмотря на всю кривизну такого подхода.

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

В том, что это очевидный костыль. Так пишут не от того, что жизнь хорошая, а от того, что никак иначе и сделать-то нельзя. Не говоря уж о тормозах компиляции. Или полной неспособности сделать поддержку такого в IDE. Вообще, подход с разделением на .h- и .cpp-файлы для описания модуля — штука весьма сомнительная. Она чревата дублированием кода (тратой времени) и полным отказом IDE поддерживать такое.

K>>Всё будущее, которое очевидно для C++ — уход в узкую нишу написания чего-то низкоуровневого. Причём, возможно, что его и оттуда вытеснит какой-нибудь язык, более специализированный, потому гораздо более удобный для решения конкретного круга задач.

L_S>Ладно тебе — какая уж тут узкая ниша. Ну вот например для встроенных систем пока нету тенденций к переходу на другие языки, а это отнюдь не узкая ниша и деньги тут крутятся очень большие. Затем всяческая цифровая обработка, драйвера, коммуникационное ПО, анализаторы сигналов и т.п. Я бы сказал, что .Net займет свою узкую нишу для создания бизнес приложений и автоматизации нежели С++

Что-то такое низкоуровневое и производительное, но полностью избавленное от призраков прошлого, красиво и современно сдизайнено, с учётом того, что нужна поддержка IDE. Не знаю, появилось ли что-то такое, или только появится. Люди вот говорят о D, но я в нём пока не копался.

K>>В общем, если что-то не очевидно сейчас, то это не значит, что не назрели тенденции. Язык C++ сделал когда прорыв в мэйнстриме, многому нас научил, многое сделал. Но теперь он уже отжил своё.

L_S>Просто ты наверное устал от С++ и тебе хочется чего то нового, но это не значит, что язык свое отжил.

Просто я поюзал более продвинутые языки, потому мне бросаются в глаза все минусы C++, и их куда больше, чем плюсов. Отбросить же минусы эволюционным путём не получится — они накапливались в течение многих лет. А вот если произвести над C++ революцию, то получим некоторый язык, который в кратчайшие сроки вытеснит C++.

Кстати, по поводу legacy-кода. Если эта проблема существует на десктопах, то это ведь не значит, что всё так плохо со всякими там КПК, телефонами и проч. Если там своеверменно отказаться от C++ в пользу гипотетического нового языка, то мы автоматически избавим будущее отрасли от всех проблем, что нажили десктопы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 11:17
Оценка: -1 :))) :)))
Здравствуйте, eao197, Вы писали:

E>На основании вот этого
Автор: konsoletyper
Дата: 25.12.06
я думаю, что у человека еще просто не было возможности поработать на C++ в достаточной степени, над разными задачами и на разных платформах.


Хм... Мне не кажется, что поработай я над проектом на C++, я бы тут высказался даже более категорично. Тут опыт не имеет большого значения. Главное, трезво смотреть на вещи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 11:17
Оценка:
Здравствуйте, eao197, Вы писали:

E>Аналогия: человеческий организм перестает расти к 23-27 годам, после чего начинаются необратимые обратные процессы, затягивающиеся у некоторых индивидов на 50 и более лет. Однако, мало кому приходит в голову обзывать живых людей, находящихся в зрелом возрасте, "трупами" просто на основании того, что их биологическое развитие завершено.


Судя по всему, C++ уже 90-летний старик. Его можно уважать, считаться с ним. Но ему осталось недолго. Пусть он уступит место молодым.

E>Теперь ближе к теме. Никто, вдумайтесь, никто не в стостоянии вообразить себе степень проникновения C++ в современный IT. Об этом неоднократно говорил Страуструп, а уж кому как не ему интересоваться судьбой языка и выслушивать пожелания от разных групп пользователей. Изъять C++ из современных систем невозможно, переписать все C++ программы на что-то другое -- невозможно. Просто представте себе: н-е-в-о-з-м-о-ж-н-о!


Нет ничего невозможного, бывает только архисложное. Изъять полностью (отнять и поделить, всех убить, одному остаться) никто не требует. Есть куча старого кода, который нужно сопровождать, это правильно. Но зачем стартовать новые проекты на C++ там, где можно обойтись другими средствами?

E>Даже если сейчас интерес к нему снижается и количество стартующих на нем проектов уменьшается, C++ обеспечена еще очень и очень долгая жизнь. Не верите -- посмотрите на COBOL.


COBOL лежит в мавзолее и на него приходят посмотреть местные некрофилы.

Мне кажется, мы просто по разному понимаем слово "умер". Вот я понимаю "ЯП жив" когда:

1. ЯП изменяется, развивается, чтобы быть современным, причём это у него получается без всяких костылей.
2. Количесво проектов, которые на нём целесообразно писать множится и множится.

Если ЯП не удовлетворяет этим требованиям — то "ЯП умер". Кстати, это верно только для мэйнстримовых языков.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.01.07 11:36
Оценка: :)
Здравствуйте, konsoletyper, Вы писали:

K>Здравствуйте, eao197, Вы писали:


E>>Даже если сейчас интерес к нему снижается и количество стартующих на нем проектов уменьшается, C++ обеспечена еще очень и очень долгая жизнь. Не верите -- посмотрите на COBOL.


K>COBOL лежит в мавзолее и на него приходят посмотреть местные некрофилы.


Извини, но Cobol 2002 (стандарт) некрофилы видимо создали?
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 11:38
Оценка: +3
Здравствуйте, konsoletyper, Вы писали:

K>Судя по всему, C++ уже 90-летний старик. Его можно уважать, считаться с ним. Но ему осталось недолго. Пусть он уступит место молодым.


Блин! Где C++ насаждается силой и где он не дает развиваться конкурентам?

K>Но зачем стартовать новые проекты на C++ там, где можно обойтись другими средствами?


Вы вообще-то сейчас о реальной жизни говорите или так, гипотетически?
Можете привести примеры, когда на C++ начинаются новые серьезные проекты и в которых C++ явно прогрывает конкурентам? И все ли факторы, сказывающиеся на таком выборе вы можете оценить?

K>Мне кажется, мы просто по разному понимаем слово "умер". Вот я понимаю "ЯП жив" когда:


Вот уж яркое проявление юношеского максимализма. По мне, так ваше определение, да еще с делением на мейнстримовые языки и все остальные напоминает выражение "чуть-чуть беременна". Такого не бывает -- беременность или есть, или нет. Точно так же и со смертью.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Laughing_Silencer  
Дата: 19.01.07 11:44
Оценка: 1 (1) +2
Здравствуйте, konsoletyper, Вы писали:

поискипал все нафиг ибо смысла обсуждать ИМХИ нет.

Я хочу говорить за фичи якобы не нужные и переписывание ПО
Дабы не разводить флейма я дам ссылку на Спольски с которым абсолютно согласен по части практики переписывания старого кода ибо пару раз наблюдал на практике к чему приводит поддержка старой системы в новых реалиях и к чему приводят попытки ее переписать на новой платформе или новом языке. Результат настолько не в пользу переписывания, что я даже и предположить не мог глядя на начало этого проекта — все было очень радужно в начале и настолько же печально закончилось, унеся с собой в небытие пару тройку милллионов долларов, а старая система опосля "рихтовки напильником" великолепно живет и еще долго проживет.

Статья здесь

Прошу заметить — я не говорю, что язык С++ не имеет недостатков и нужно молится на него. Я хочу сказать во первых, что язык не умер, а во вторых, что дизайн языка промышленного уровня вряд ли может быть иным. Да, можно избежать всех недостатков С++ и повысить продуктивность как конечного приложения, так и разработчиков в определенной области, но обязательно будут другие проблемы ничем не лучше и не хуже. Каждой проблеме — свой язык. Вот только где разработчиков найти на рутинную работу по поддержке
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: igna Россия  
Дата: 19.01.07 11:57
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>... Мне не кажется, что поработай я над проектом на C++, я бы тут высказался даже более категорично.


Это коан.
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 19.01.07 11:59
Оценка: +1
Здравствуйте, Laughing_Silencer, Вы писали:

L_S>Прикладное ПО для настольных компьютеров — я бы сказал, что сектор расширяется и там есть место для всех, а не то, что уходит.

Именно что уходят. Старые системы начинают поддержывать, а новые не пишут (ну разве что оголтелые фанатика но они прогорят).

L_S>Зато вся та масса встроенных программ в оборудование начинает потихоньку переходить на С и С++ как наиболее удобные средства.

С ассемблера или вобще машинных кодов...
L_S>Просто для бизнес приложений главное скорость разработки и минимизация ошибок.
Это главное всегда.
L_S>а при большом объеме кода проще сделать это на управляемых средах.
При любом объеме проще писать в средах где при всем жилании не проехатся по памяти и не ловить потом ошибку...
L_S>В случае же со встроенным ПО намного проще работать с С и С++. Поэтому все производители уходят туда с других языков.
Оно тоже бывает разное.
Есть такое что туда только с ассемблером и можно, а все что позволяет С/С++ уже можно писать и на чемто по умнее.
L_S>Использование Жабы или Шарпа для встроенного ПО просто нецелесообразно и вряд ли будет целесообразно — они нацелены на другое.
Про шарп и жабу согласен. Но виртуальную машину можно спроектировать куда умнее.

L_S>Вот все говорят про правильный и неправильный дизайн забывая о том, что задача языка не быть красивым, а быть функциональным.

Те полным по Тьюрингу? Самому не смешно?
L_S>Т.е. идея не в том, что бы писать абсолютно безопасные программы, а что бы писать нужные программы.
Нет. Идея в том чтобы писать абсолютно безопасные нужные программы.
L_S>Вообще я смотрю на разные языки и у всех свои недостатки, просто некоторые языки развиваются и со временем превращаются в фичепомойку, которую затем зачем то называют неправильным дизайном, а другие языки в свою очередь отстаивают определенные позиции и с академической точки зрения имеют мало недостатков, но не применяются ибо для того, что бы их применять на промышленном уровне нужны высококлассные специалисты и до кучи не все на них можно сделать.
Ты сейчас глупость сказал ибо ни для какого другого языка не нужно знать столько граблей как для С++.

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

Да на С++ ты писал маловато... Что никогда небыло что из-за изменения порядка includ'ов программа работала по разному?

L_S>Ладно тебе — какая уж тут узкая ниша. Ну вот например для встроенных систем пока нету тенденций к переходу на другие языки, а это отнюдь не узкая ниша и деньги тут крутятся очень большие.

Тут многое можно писать и на чемто получше, а остальное на ассемблере.
L_S>Затем всяческая цифровая обработка, драйвера, коммуникационное ПО, анализаторы сигналов и т.п.
А вот это точно можно перенести на управляемые среды. И получится лучше чем на С++.

L_S>Просто ты наверное устал от С++ и тебе хочется чего то нового, но это не значит, что язык свое отжил.

Лично я могу писать вобще на всем что шевелится (за исключением brainfuck'ов и прочих whitespace'ов).
Но мне не нравится я вместо решения задачи решать проблемы языка.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 19.01.07 12:02
Оценка: :)
konsoletyper wrote:
> А вот я вижу. Прикладное ПО (за исключением игр) уже давно переходит на
> Java и .NET. Есть особые ситуации — графические библиотеки, игры, ОС и
> т.д.
А еще:
Прикладные программы
Ресурсоемкие системы
Браузеры
Встроенный софт
и т.п.

На моем компьютере сейчас не работает ни одной managed-программы. Так
что слухи о смерти С++ — сильно преувеличены.

У Java/C# есть свои ниши — но вот на мировое господство они пока даже
близко не претендуют.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ты тоже вовсю плевался в Boo

FR>Там подход обратный, в языке со статической типизацией есть опциональная утиная динамическая.

Это вопрос аналогичный тому является ли стакан на половину пустым или на половину полным. В твоем случае ты видишь разница так как предвзято относишся к самой идее. Кога же ты ее слышишь из уст неприкосаемого для тебя авторитета, то воспринимаешь ее более спокойно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Понятно что self в интерфейс передавать малоосмысленно. Но то что тело все таки есть уже сразу подсказывает что его можно использовать не только для контрактного программирования


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

Кстати, в отличии от этого в Хаскеле можно создавать именно что тела используемые по умолчанию. Если в реальном воплощении интерфейса метод (функция класса типа) не переопределн, то используется реализация по умолчанию. Так для класса типа Eq реализуется оператор "не равно" который инвертирует значение оператора "равно" (который обязан быть задан явно). Но постусловия так уже не сделать. Ведь если в воплощении реализовать метод явно, то реализация по умолчанию попросту не будет учитываться компилятором.

Так что лично у меня нет сомнений, что данная возможность предлагается искоючительно для реализации пред-условий.

FR>Кстати все что описанно там можно и сейчас на метаклассах сварганить, кое где конечно будет коряво и не причесано синтаксически.


Кстати, он по этому поводу тоже говорил. И вывод его был однозначный, что это худшее решение нежели интеграция в комплитор.

FR>Вот 3. 4. 5. нормально нужно разрешить, и обсудалось именно это.


Ни один пункт не имеет отношения к тому о чем говоришь ты. Так что не надо валить напраслины.

FR>Так никто ни спорит что окамл неплохой язык, но не без недостатков.


Не без недостатков. Но они не там где ты ты их хочешь выдеть. С точки зрения вывода типов и стройности системы типов в ОКамл и темболее в Хаскле все ОК.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это проблемы не только Окамла, просто там они достаточно ярко проявлены. Почитай снова тему все это уже обсудили.


Что почитать? Дай ссылки. Пока что я склоняюсь к тому мнению, что ты наговаривашь на ОКамл по причине его плохого знания и по причине пристрастности к динамической типизации.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:09
Оценка:
Здравствуйте, AndreiF, Вы писали:

FR>>Да те же самые про которые пишет выше eao197 и которые затронуты у ван Россума, и нерешение которых в окамле привело к уродцам типа '.+'


AF>Если ты говоришь о перегрузке операторов, то ее отсутствие вызвано совсем другими причнами, которые к типизации не имеют никакого отношения. Или ты что-то другое имел в виду?


Кстати, в Хаскле, благодаря как раз классам типов, нет проблем с переопределением операторов. А ведь система типов там используется очень похожая на ОКамловскую.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:09
Оценка:
Здравствуйте, eao197, Вы писали:

K>>C++ — труп. Он никуда не ползёт.


E>Здесь отсутствует очень жирное ИМХО.


Дык, добавь его.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:09
Оценка:
Здравствуйте, Laughing_Silencer, Вы писали:

L_S>Либо пиши ИМХО, либо обоснуй... Честно говоря я не понимаю критериев по которым можно сказать, что некоторый язык умирает за исключением оттока разработчиков и снижение абсолютной доли рынка. Пока этого не видно.


Лично я не считаю, что язык умерает. Он еще долго будет существовать по разным причинам. Но как раз таки то что наблюдается отток разработчиков и снижение абсолютной доли рынка С++ у меня не вызвает никакого сомнения. Дотент, Ява и скрипты сильно сократили долю С++ на рынке. И тендеция эта продолжается.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 12:11
Оценка: +1
Здравствуйте, AndreiF, Вы писали:

AF>Что интересно, статья ван Россума выглядит намного адекватнее, чем заявления многих любителей Питона и Руби на нашем форуме. Которые привыкли заявлять, что "статическая типизация вообще не нужна, и вообще только мешает".


Ссылки можно на такие заявления?
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 12:11
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Если ты говоришь о перегрузке операторов, то ее отсутствие вызвано совсем другими причнами, которые к типизации не имеют никакого отношения. Или ты что-то другое имел в виду?


Я про это:

def min(a: T, b: T) -> T:
if a < b:
return a
else:
return b

As a (rather unpythonic) strawman, I'm using T and T0, T1, T2, etc. as type variables. You can think of these as the free variables in an equation of types; we're saying that the types of a, b and the (unnamed) return value must all be the same. So min(1, 2) is valid and returns an int; min("a", "b") is valid and returns a string.

What about min(1, 2.5)? That ought to be valid and return a float. I guess this means that there should be some kind of typing hierarchy that explains how the various numeric types are embedded in each other. The VM already knows about these coercion rules, but the trick is to build them into the type system. I think I would like to do this using a mechanism separate from inheritance, since I really don't think that it is a good idea to require that int is a subclass of float and float a subclass of complex. But the mechanism should also be open to user-defined types; there shouldn't be mechanisms in Python that the user cannot extend (not many, anyway).

Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 19.01.07 12:20
Оценка: :)
konsoletyper wrote:
> Что уж говорить о таких давно освоенных вещах,
> как, например GC, который так и не добавили в C++? Все добавления,
> которые в нём есть — это робкие попытки залатать те дырки, которые
> возникли в нём давно из-за неправильного дизайна, сохранив при этом
> совместимость. Единственное, что заслуживает внимания — это развитие
> метапрограммирования, но без всего остального оно того стоит?
GC в С++ не добавляют принципиально — для точного GC нужно менять
семантику кучи конструкций. А консервные GC — пожалуйста, сколько угодно.

Кстати, а почему на таком хорошем и развитом C# еще не переписан Word и
сама .NET VM?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 19.01.07 12:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Ты тоже вовсю плевался в Boo

FR>>Там подход обратный, в языке со статической типизацией есть опциональная утиная динамическая.

VD>Это вопрос аналогичный тому является ли стакан на половину пустым или на половину полным. В твоем случае ты видишь разница так как предвзято относишся к самой идее. Кога же ты ее слышишь из уст неприкосаемого для тебя авторитета, то воспринимаешь ее более спокойно.


Во первых ван Россум не является для меня неприкосаемым авторитетом. Во вторых все что исходит от тебя приходится сильно фильтровать, так как ты слишком увлекаешся и видишь все только в одном цвете. В третьих я нормально отношусь к статической типизации и также нормально отношусь и к динамической и постоянно пишу на языках с разными типизациями.
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 19.01.07 12:22
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, konsoletyper, Вы писали:


E><...попытки мерять язык с более чем 20-ти летней историей мерками сегодняшнего дня матерно поскипаны...>


K>>В общем, если что-то не очевидно сейчас, то это не значит, что не назрели тенденции. Язык C++ сделал когда прорыв в мэйнстриме, многому нас научил, многое сделал. Но теперь он уже отжил своё.


E>Аналогия: человеческий организм перестает расти к 23-27 годам, после чего начинаются необратимые обратные процессы, затягивающиеся у некоторых индивидов на 50 и более лет. Однако, мало кому приходит в голову обзывать живых людей, находящихся в зрелом возрасте, "трупами" просто на основании того, что их биологическое развитие завершено.


Неверная аналогия: ведь C++ развивается.

E>Теперь ближе к теме. Никто, вдумайтесь, никто не в стостоянии вообразить себе степень проникновения C++ в современный IT. Об этом неоднократно говорил Страуструп, а уж кому как не ему интересоваться судьбой языка и выслушивать пожелания от разных групп пользователей. Изъять C++ из современных систем невозможно, переписать все C++ программы на что-то другое -- невозможно. Просто представте себе: н-е-в-о-з-м-о-ж-н-о!


Да, но мне кажется речь шла о другом: является ли использование C++ оправданным в новых проектах. Именно жизнь в этом смысле.

Насчет невозможного — да все возможно. На самом деле программа — это всего лишь некоторая информация, которую можно перевести в другой вид. Это семантически непросто, но в принципе осуществимо. Прогресс не стоит на месте.

E>Даже если сейчас интерес к нему снижается и количество стартующих на нем проектов уменьшается, C++ обеспечена еще очень и очень долгая жизнь. Не верите -- посмотрите на COBOL.


Да. Но кто сейчас хочет писать но Коболе? На нем открывают новые проекты?

Я бы сказал что Кобол — это зомби .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 19.01.07 12:22
Оценка:
Здравствуйте, FR, Вы писали:

FR>Там подход обратный, в языке со статической типизацией есть опциональная утиная динамическая.


Это ИМХО самый лучший подход.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 19.01.07 12:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Понятно что self в интерфейс передавать малоосмысленно. Но то что тело все таки есть уже сразу подсказывает что его можно использовать не только для контрактного программирования


VD>Без self ты не сможешь сделать ничего с объектом. Выражаясь наукообразно ты не сможешь изменить инвариант объекта. Это делает бесполезым такой код для большинства применений. Думаю, что есди до этой реализации дойдет дело, то он еще запретит возврат значений из таких тел, чтобы ты не мог предотвратить выполнение реального тела.


Нет предотвращение как раз может быть нужным, хотя можно и исключениями обойтись.

VD>Так что лично у меня нет сомнений, что данная возможность предлагается искоючительно для реализации пред-условий.


Посмотрим.

FR>>Кстати все что описанно там можно и сейчас на метаклассах сварганить, кое где конечно будет коряво и не причесано синтаксически.


VD>Кстати, он по этому поводу тоже говорил. И вывод его был однозначный, что это худшее решение нежели интеграция в комплитор.


Угу.
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 12:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Это проблемы не только Окамла, просто там они достаточно ярко проявлены. Почитай снова тему все это уже обсудили.


VD>Что почитать? Дай ссылки. Пока что я склоняюсь к тому мнению, что ты наговаривашь на ОКамл по причине его плохого знания и по причине пристрастности к динамической типизации.


http://www.rsdn.ru/Forum/Message.aspx?mid=2306163&amp;only=1
Автор: eao197
Дата: 17.01.07
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 19.01.07 12:38
Оценка: +3 :)
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Да. Но кто сейчас хочет писать но Коболе? На нем открывают новые проекты?

АХ>Я бы сказал что Кобол — это зомби .
Все о нем слышали. Все его боятся но почти никто его не видел... Вот тоже самое ждет С++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 19.01.07 12:38
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>GC в С++ не добавляют принципиально — для точного GC нужно менять семантику кучи конструкций.

И это уже будет не С++.

C>А консервные GC — пожалуйста, сколько угодно.

Вот только кому они нужны? Они же тормоза по определению.

C>Кстати, а почему на таком хорошем и развитом C# еще не переписан Word

Это к манагерам МС.
C>и сама .NET VM?
По тому что 3.14159 пардон архитекторы .НЕТ склонировали и слегка поправили жабу.
А для того чтобы написать ВМ на себебе самой нужно спроектировать ВМ совершенно иначе.

А C# тут совершенно не причем. Елси бы CLR спроектировали по умному то можно было бы и переписать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:45
Оценка: 10 (3)
Здравствуйте, Laughing_Silencer, Вы писали:

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


Кривизна тут в том, что это не модульный подход. Он приводит к тому, что один и тот же код невольно может быть по разных контекстах по разному.

Даже создатель С — Денис Дичи — в конце концов понял ущербность такого подхода и создал язык Limbo который он сделал тпобезопасным, модульным и основанном на сборке мусора.

Кстати, язык предназначен в первую очередь для разработки встраиваемого софта для маленьких девайсов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:45
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Извини, но Cobol 2002 (стандарт) некрофилы видимо создали?


Не зоофилы специализирующиеся на редедких видах животных занесенных в красную книгу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 12:45
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Блин! Где C++ насаждается силой и где он не дает развиваться конкурентам?


А ты зайди в любой книжный магазин специализирующися на книгах по программировиню. Там практически один С++. И в вузах именно его толкают.

Кто-то умный сказал, что генералы всегда готовятся к прошлой войне. Так вот у нас очень похожая ситуация. Программистов готовят не к будущему, а к прошлому.

Это и есть насждение.

E>Можете привести примеры, когда на C++ начинаются новые серьезные проекты и в которых C++ явно прогрывает конкурентам? И все ли факторы, сказывающиеся на таком выборе вы можете оценить?


Э... сейчас... минуточку... вспомню точную цифру... А! Вспомнил! Все!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 12:49
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Блин! Где C++ насаждается силой и где он не дает развиваться конкурентам?


VD>А ты зайди в любой книжный магазин специализирующися на книгах по программировиню. Там практически один С++. И в вузах именно его толкают.


VD>Кто-то умный сказал, что генералы всегда готовятся к прошлой войне. Так вот у нас очень похожая ситуация. Программистов готовят не к будущему, а к прошлому.


VD>Это и есть насждение.


Просто параноидальный психоз какой-то


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.01.07 12:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Курилка, Вы писали:


К>>Извини, но Cobol 2002 (стандарт) некрофилы видимо создали?


VD>Не зоофилы специализирующиеся на редедких видах животных занесенных в красную книгу.


В принципе согласен, как говорит википедия — ни одного компилера под стандарт нету пока
Хотя 5 годков прошло.
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 19.01.07 12:54
Оценка:
WolfHound wrote:
> C>GC в С++ не добавляют принципиально — для точного GC нужно менять
> семантику кучи конструкций.
> И это уже будет не С++.
Ну так я про это и говорю.

> C>А консервные GC — пожалуйста, сколько угодно.

> Вот только кому они нужны? Они же тормоза по определению.
А Влад тут говорит, что Mono — это rulez

> C>Кстати, а почему на таком хорошем и развитом C# еще не переписан Word

> Это к манагерам МС.
Я просто думаю, что потребности в памяти для .NETовых приложений пока
еще слишком велики для системы с многими managed-приложениями. Года
через два — может и можно будет.

> C>и сама .NET VM?

> По тому что 3.14159 пардон архитекторы .НЕТ склонировали и слегка
> поправили жабу.
> А для того чтобы написать ВМ на себебе самой нужно спроектировать ВМ
> совершенно иначе.
Мне вот в последнее время LLVM нравится ИМХО, единственная VM,
которая сделана правильно — там есть поддержка для достаточно
низкоуровневых конструкций, ручной работы с памятью, но есть и поддержка
точно GC.

> А C# тут совершенно не причем. Елси бы CLR спроектировали по умному то

> можно было бы и переписать.
Нереально. Это десятки тысяч человеко-лет нужны даже для одного Word'а,
проще его просто постепенно рефакторить (что MS и делает).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 12:59
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Да. Но кто сейчас хочет писать но Коболе? На нем открывают новые проекты?


АХ>Я бы сказал что Кобол — это зомби .


Вопрос не в том, кто хочет, а в том, платят ли за это?
Года четыре назад в одном проекте нашему заказчику пришлось делать доработки на своей стороне именно на COBOL-е. Потому, что софт крутился у них на Коболе писаный. И заменить его смогли только два года назад, причем переход был очень долгий и, временами, тернистый.

Если лет через двадцать пять, когда C++ будет столько же, сколько COBOL-у сейчас, ситуация с C++ проектами будет такой же, как с COBOL-овскими, то это будет вовсе не так плохо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 19.01.07 12:59
Оценка:
Здравствуйте, WolfHound, Вы писали:

АХ>>Я бы сказал что Кобол — это зомби .

WH>Все его боятся но почти никто его не видел...
Только в России. На Западе его очень даже видели.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:01
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Все о нем слышали. Все его боятся но почти никто его не видел... Вот тоже самое ждет С++.


100%. Только произойдет это не вдруг и не сразу. Но процесс уже во всю идет. Возможно его сможет приостановить 0x, но боюсь, что "х" в 0х больше 10.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:01
Оценка:
Здравствуйте, FR, Вы писали:

FR>Во первых ван Россум не является для меня неприкосаемым авторитетом.


Не заметно. Как ты умудрился углядить разницу между подходом Бу и Питоном 3 я понять не могу.

FR> Во вторых все что исходит от тебя приходится сильно фильтровать, так как ты слишком увлекаешся и видишь все только в одном цвете.


Это само собой. Вокруг один враги.
Не, я конечно увлекаюсь, но это не мешает мне быть объективным.

FR> В третьих я нормально отношусь к статической типизации и также нормально отношусь и к динамической и постоянно пишу на языках с разными типизациями.


По твоим высказываниям на форуме этого сказать нельзя. Возможно это напускное...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:01
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Что почитать? Дай ссылки. Пока что я склоняюсь к тому мнению, что ты наговаривашь на ОКамл по причине его плохого знания и по причине пристрастности к динамической типизации.


FR>http://www.rsdn.ru/Forum/Message.aspx?mid=2306163&amp;only=1
Автор: eao197
Дата: 17.01.07


Автор этого сообщения об ОКамле знает то что язык называется на "О". Что я должен найти по этой ссылке?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как скрестить ужа и ежа или статическую и утиные типи
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:01
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, AndreiF, Вы писали:


AF>>Что интересно, статья ван Россума выглядит намного адекватнее, чем заявления многих любителей Питона и Руби на нашем форуме. Которые привыкли заявлять, что "статическая типизация вообще не нужна, и вообще только мешает".


FR>Ссылки можно на такие заявления?


Да, конечно, я тут как раз нашел одну такую.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 13:02
Оценка:
Здравствуйте, eao197, Вы писали:

E>Можете привести примеры, когда на C++ начинаются новые серьезные проекты и в которых C++ явно прогрывает конкурентам? И все ли факторы, сказывающиеся на таком выборе вы можете оценить?


О да, я маленький и наивный! Я не могу как-либо конструктивно аргументировать мысль (для этого нужно проводить исследование, вообще, иметь опыт работы архитектором и т.д.). Но вот какие-то элеметарные вещи я могу осознать умозрительно и интуитивно. Думаю, эксперт (без религиозного настроя) смог бы подтвердить те же самые идеи более обоснованно.

E>Вот уж яркое проявление юношеского максимализма. По мне, так ваше определение, да еще с делением на мейнстримовые языки и все остальные напоминает выражение "чуть-чуть беременна". Такого не бывает -- беременность или есть, или нет. Точно так же и со смертью.


Насчёт юношеского максимализма. Точно не помню, но вроде как возрастная психология утверждает, что с 20-21 года человек вступает в возраст ранней зрелости. Т.е. при нормальном развитии весь юношеский максимализм должен был исчерпаться. Умственно отсталым я себя не считаю, потому с такими высказываниями согласиться не могу.

Аналогию со смертью/рождением человека я не считаю уместной в данном случае.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 13:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Прикладные программы


ИМХО, всё нижеперечисленное относится к этому обширному множеству.

C>Ресурсоемкие системы


Я уже писал по этому поводу. В ресусоёмких системах не так уж много критического кода. Его можно написать на чём-то другом. Мне и самому приходилось писать ресурсоёмкие вещи на C++ и вызывать их PInvoke'ом из С#. Причём, основная часть кода написана на C#.

C>Браузеры


А кто мешает написать рендерер для браузера на C#/Java? А уж сам браузер, при наличии рендерера, гораздо удобнее писать на C#/Java.

C>Встроенный софт


Это что за софт такой?

C>На моем компьютере сейчас не работает ни одной managed-программы. Так

C>что слухи о смерти С++ — сильно преувеличены.

Просто софт, который сейчас работает на десктопах начал развиваться ещё с до-managed времён. Зачем что-то переписывать с нуля, если это что-то не является принципиально новым?

C>У Java/C# есть свои ниши — но вот на мировое господство они пока даже

C>близко не претендуют.

Никто не претендует на мировое господство. А вот типовые задачи будут всегда, и для них Java/C# — пока наилучшее, что есть, оттуда они и вытесняют C++. Для нетиповых задач (но так же нужных и актуальных) Java/C# не подходят, так же как и C++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 13:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>GC в С++ не добавляют принципиально — для точного GC нужно менять

C>семантику кучи конструкций. А консервные GC — пожалуйста, сколько угодно.

О да, GC в C++! Ужасно удобно!

C>Кстати, а почему на таком хорошем и развитом C# еще не переписан Word и

C>сама .NET VM?

Word? Самое разумное — взять и написать Word на C#. Только что в Office 2007 принципиально нового? Так лучше взять старый код и модифицировать его. Вот если бы нужно было написать что-то принципиально новое, я думаю, MS испоьлзовали бы .NET.

.NET VM? Не смешите. Подавляющая часть библиотек написана на .NET. А как же VM написать на самой VM? Может, напишем процессор на ассемблере?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 19.01.07 13:11
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Андрей Хропов, Вы писали:


АХ>>Да. Но кто сейчас хочет писать но Коболе? На нем открывают новые проекты?


АХ>>Я бы сказал что Кобол — это зомби .


E>Вопрос не в том, кто хочет, а в том, платят ли за это?


Не согласен. Вопрос оплаты вообще лежит в другой плоскости (я бы назвал ее политико-экономической).

E>Года четыре назад в одном проекте нашему заказчику пришлось делать доработки на своей стороне именно на COBOL-е. Потому, что софт крутился у них на Коболе писаный. И заменить его смогли только два года назад, причем переход был очень долгий и, временами, тернистый.


Но заменили же! Значит не видят смысла дальше развивать Кобол-проект.

E>Если лет через двадцать пять, когда C++ будет столько же, сколько COBOL-у сейчас, ситуация с C++ проектами будет такой же, как с COBOL-овскими, то это будет вовсе не так плохо.


Не знаю. Разгребателям авгиевых конюшень обычно платят немало, но удовольствия от такой работы никакого (собственно, поэтому и плятят, т.к. только деньгами и можно привлечь).

В данном случае ты рассуждаешь с чисто денежной/политической позиции, а мне кажется изначально тезис konsoletyperа (не мой!) был в другом:

С++ с точки зрения соотношения достоинства/недостатки самого языка в данный исторический момент выглядит довольно плохо для большинства задач по сравнению с другими языками.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:14
Оценка:
Здравствуйте, eao197, Вы писали:

E>Просто параноидальный психоз какой-то


Дык, лечись.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:14
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А Влад тут говорит, что Mono — это rulez


Можно ссылку? Или ты о каком Владе говоришь?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 13:18
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> C>GC в С++ не добавляют принципиально — для точного GC нужно менять

>> семантику кучи конструкций.
>> И это уже будет не С++.
C>Ну так я про это и говорю.

Вот-вот. И я всё про то же.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 19.01.07 13:18
Оценка:
K>C++ — труп. Он никуда не ползёт.

Вот тут много флейма развели по поводу того, является ли C++ мёртвым. Я тут такую очень близкую аналогию приведу. Латынь — мёртвый язык. Да, есть люди, которые его знают (врачи, лингвисты). Врачи, при этом, зарабатывают неплохо. Но вот того факта, что латынь — мёртвый язык, никто не отменял.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.01.07 13:19
Оценка: 4 (1) +1
Здравствуйте, Cyberax, Вы писали:

C>Мне вот в последнее время LLVM нравится ИМХО, единственная VM,

C>которая сделана правильно — там есть поддержка для достаточно
C>низкоуровневых конструкций, ручной работы с памятью, но есть и поддержка
C>точно GC.

Кстати Эппл выложила код для LLVM/ARM, ходят слухи, типа это для iPhone
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 19.01.07 13:23
Оценка: 5 (1) -2
konsoletyper wrote:
> C>Ресурсоемкие системы
> Я уже писал по этому поводу. В ресусоёмких системах не так уж много
> критического кода. Его можно написать на чём-то другом. Мне и самому
> приходилось писать ресурсоёмкие вещи на C++ и вызывать их PInvoke'ом из
> С#. Причём, основная часть кода написана на C#.
Я уже кучу раз писал, что часто ресурсоемкий код не расположен в одной
функции, а "размазан" по всему проекту. Например, может потребоваться
массив без контроля индексов — что ты с PInvoke'ом будешь делать? Или
хитрая структура с битхаками типа C-шных union'ов?

Кроме того, overhead от CLR по памяти часто слишком большой, а GC очень
часто тихо умирает на кучах в несколько гигабайт.

> C>Браузеры

> А кто мешает написать рендерер для браузера на C#/Java? А уж сам
> браузер, при наличии рендерера, гораздо удобнее писать на C#/Java.
А ты у MS спроси. Что же они не переписали браузер на таком хорошем C#?

> C>Встроенный софт

> Это что за софт такой?
Сейчас вот пишу софт для железки — 4 мегабайта флешки для
bootstrap-кода, Linux BIOS, 16Мб памяти, 125MHz процессор. С С++ и Boost
полет нормальный — все работает. Со стороны managed мне в такие
ограничения едва влезет уродский .NET CF.

> C>На моем компьютере сейчас не работает ни одной managed-программы. Так

> C>что слухи о смерти С++ — сильно преувеличены.
> Просто софт, который сейчас работает на десктопах начал развиваться ещё
> с до-managed времён. Зачем что-то переписывать с нуля, если это что-то
> не является принципиально новым?
Ну так принципиально новое на managed-языках тоже со скрипом пишется. У
той же MS почти все unmanaged. Ту же Vista вот хотели переписать, чтобы
получилось что-то принципиально новое — что из этого получилось все мы
знаем.

> C>У Java/C# есть свои ниши — но вот на мировое господство они пока даже

> C>близко не претендуют.
> Никто не претендует на мировое господство. А вот типовые задачи будут
> всегда, и для них Java/C# — пока наилучшее, что есть, оттуда они и
> вытесняют C++.
Что значит "типовые"? Задачи офисной автоматизации и бизнес-приложения —
может быть (сам сейчас пишу бизнес-приложение на Java). Но называть их
"типовыми" для всех — это слишком уж сильное обобщение.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 13:24
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Word? Самое разумное — взять и написать Word на C#. Только что в Office 2007 принципиально нового? Так лучше взять старый код и модифицировать его. Вот если бы нужно было написать что-то принципиально новое, я думаю, MS испоьлзовали бы .NET.


Похоже будет так. Сначала полностью перенесут на дотнет VC. А затем уже и Офис. Но будет это ой как не скоро. МС очень долго раскачиваетя, а продукты эти ну очень большие.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 19.01.07 13:25
Оценка:
konsoletyper wrote:
> C>GC в С++ не добавляют принципиально — для точного GC нужно менять
> C>семантику кучи конструкций. А консервные GC — пожалуйста, сколько угодно.
> О да, GC в C++! Ужасно удобно!
Консервативный GC вполне себе нормально работает. Я его использовал в
одном своем давнем проекте без каких-либо проблем.

Такой вот код без проблем работал:
while(true)
{
    gc_malloc(1000);
}


> C>Кстати, а почему на таком хорошем и развитом C# еще не переписан Word и

> C>сама .NET VM?
> Word? Самое разумное — взять и написать Word на C#. Только что в Office
> 2007 принципиально нового? Так лучше взять старый код и модифицировать
> его. Вот если бы нужно было написать что-то принципиально новое, я
> думаю, MS испоьлзовали бы .NET.
Vista Aero. Где C#?

> .NET VM? Не смешите. Подавляющая часть библиотек написана на .NET. А как

> же VM написать на самой VM? Может, напишем процессор на ассемблере?
А почему бы и нет? LLVM вот компилируется с помощью LLVM — это
называется правильный дизайн.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 13:33
Оценка: +1
Здравствуйте, Андрей Хропов, Вы писали:

E>>Вопрос не в том, кто хочет, а в том, платят ли за это?


АХ>Не согласен. Вопрос оплаты вообще лежит в другой плоскости (я бы назвал ее политико-экономической).


Я считаю, что в той самой. Пока за программирование на конкретном языке платят, на этом языке пишут. Пока пишут, язык нельзя считать мертвым.

E>>Года четыре назад в одном проекте нашему заказчику пришлось делать доработки на своей стороне именно на COBOL-е. Потому, что софт крутился у них на Коболе писаный. И заменить его смогли только два года назад, причем переход был очень долгий и, временами, тернистый.


АХ>Но заменили же! Значит не видят смысла дальше развивать Кобол-проект.


Рано или поздно это происходит с любым языком. Только оптимисты часто слишком сокращают сроки жизни программных продуктов. И COBOL это наглядно продемонстрировал.

E>>Если лет через двадцать пять, когда C++ будет столько же, сколько COBOL-у сейчас, ситуация с C++ проектами будет такой же, как с COBOL-овскими, то это будет вовсе не так плохо.


АХ>Не знаю. Разгребателям авгиевых конюшень обычно платят немало, но удовольствия от такой работы никакого (собственно, поэтому и плятят, т.к. только деньгами и можно привлечь).


Люди вообще находят удовольствие в странных вещах, в генерации отчетов
Автор: IT
Дата: 19.01.07
, к примеру. А финансовую составляющую при выборе языка программирования для работы отбрасывать ни в коем случае нельзя.

АХ>В данном случае ты рассуждаешь с чисто денежной/политической позиции, а мне кажется изначально тезис konsoletyperа (не мой!) был в другом:


АХ>С++ с точки зрения соотношения достоинства/недостатки самого языка в данный исторический момент выглядит довольно плохо для большинства задач по сравнению с другими языками.


С этим я как раз не спорю. Тем не менее, это не в коем случае не является основанием для называния C++ трупом. Более того, даже для новых проектов могут быть очень веские факторы, которые значительно перевешивают недостатки языка.

И для многих языков, чей возраст выше (возьмем с потолка цифру) десяти лет, можно сказать, что:

с точки зрения соотношения достоинства/недостатки самого языка в данный исторический момент выглядит довольно плохо для большинства задач по сравнению с другими языками.

Для примера можно взять самую мейнстримовую на данный момент Java и ее молодых конкурентов на платформе .NET, столь любимых местными обитателями. Это просто объективные наблюдения
Автор: eao197
Дата: 01.09.06
:

По мере взросления языка программирования, или даже парадигмы программирования, язык часто деградирует в терминах производительности и выразительности по сравнению со современными достижениями. Проектные команды разрастаются и программистам приходится писать больше строк кода для решения тех же самых проблем. Соответственно, оба этих фактора увеличивают риски. И все эти факторы ведут к неизбежному выводу:

По мере приближения к концу доминирования на рынке, риски производительности, связанные с языком, увеличиваются по сравнению с самыми современными достижениями.

Однако, окончание доминирования на рынке вовсе не означает смерти языка.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.01.07 13:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Похоже будет так. Сначала полностью перенесут на дотнет VC. А затем уже и Офис. Но будет это ой как не скоро. МС очень долго раскачиваетя, а продукты эти ну очень большие.


VC == Visual Studio? или что-то другое?
Re[7]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 19.01.07 13:49
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я про это:


Эта проблема прекрасно решена в C++, к примеру. И классы этому ну никак не мешают.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 19.01.07 13:50
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Во первых ван Россум не является для меня неприкосаемым авторитетом.


VD>Не заметно. Как ты умудрился углядить разницу между подходом Бу и Питоном 3 я понять не могу.


Я тоже не могу понять как ты не можешь статику отличить от динамики Наверно все таки конвергенция пошла


FR>> Во вторых все что исходит от тебя приходится сильно фильтровать, так как ты слишком увлекаешся и видишь все только в одном цвете.


VD>Это само собой. Вокруг один враги.

VD>Не, я конечно увлекаюсь, но это не мешает мне быть объективным.



FR>> В третьих я нормально отношусь к статической типизации и также нормально отношусь и к динамической и постоянно пишу на языках с разными типизациями.


VD>По твоим высказываниям на форуме этого сказать нельзя. Возможно это напускное...


Да нет просто так получается что здесь нападают на динамику, я просто защищаюсь.
Вообще тут динамику не любят особенно модераторы, даже форум отдельный зажмотили. Всем бы лучше было-бы сидели бы мы там себе тихо никого ни трогали.
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 19.01.07 13:52
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Автор этого сообщения об ОКамле знает то что язык называется на "О". Что я должен найти по этой ссылке?


Что ты к окамлу привязался, мне до лампочки сейчас окамл, мне интерсна обсуждаемая там вещь которая в большинстве языков (в окамле тоже) нормально не разрешена. Вот в Скале вроде есть потуги, но разбиратся с их талмудом очень тяжело.
Re[6]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 13:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да, конечно, я тут как раз нашел одну такую.


шутник блин
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 19.01.07 13:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

L_S>>Зато вся та масса встроенных программ в оборудование начинает потихоньку переходить на С и С++ как наиболее удобные средства.

WH>С ассемблера или вобще машинных кодов...
+1

L_S>>Просто для бизнес приложений главное скорость разработки и минимизация ошибок.

WH>Это главное всегда.
Не всегда. Мне кажется все-таки главное когда программа решает поставленную задачу.

L_S>>а при большом объеме кода проще сделать это на управляемых средах.

WH>При любом объеме проще писать в средах где при всем жилании не проехатся по памяти и не ловить потом ошибку...
+1

L_S>>В случае же со встроенным ПО намного проще работать с С и С++. Поэтому все производители уходят туда с других языков.

WH>Оно тоже бывает разное.
WH>Есть такое что туда только с ассемблером и можно, а все что позволяет С/С++ уже можно писать и на чемто по умнее.
+1

L_S>>Использование Жабы или Шарпа для встроенного ПО просто нецелесообразно и вряд ли будет целесообразно — они нацелены на другое.

WH>Про шарп и жабу согласен. Но виртуальную машину можно спроектировать куда умнее.
Например?

L_S>>Т.е. идея не в том, что бы писать абсолютно безопасные программы, а что бы писать нужные программы.

WH>Нет. Идея в том чтобы писать абсолютно безопасные нужные программы.
Ну, абсолютная безопасность недостижима. Для этого нужны абсолютно безопасные пользователи, программисты, компиляторы, рантаймы и железо .

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

WH>Ты сейчас глупость сказал ибо ни для какого другого языка не нужно знать столько граблей как для С++.
+10

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

WH>Да на С++ ты писал маловато... Что никогда небыло что из-за изменения порядка includ'ов программа работала по разному?
+100. Отсутствие нормальной модульности — это беда C++! Чтобы в нем что-то работало чаще всего приходится все пересобирать под конкретный компилятор. Я уж не говорю, что использовать шаблоны можно только из исходников.

L_S>>Просто ты наверное устал от С++ и тебе хочется чего то нового, но это не значит, что язык свое отжил.

WH>Лично я могу писать вобще на всем что шевелится (за исключением brainfuck'ов и прочих whitespace'ов).
WH>Но мне не нравится я вместо решения задачи решать проблемы языка.
+100
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Как скрестить ужа и ежа или статическую и утиные типи
От: FR  
Дата: 19.01.07 14:11
Оценка: +1
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, FR, Вы писали:


FR>>Я про это:


AF>Эта проблема прекрасно решена в C++, к примеру. И классы этому ну никак не мешают.


Не решена. Там хардкорно все. А хочется самому задавать эти правила, это и обсуждалось
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 19.01.07 14:19
Оценка: +1
Здравствуйте, Андрей Хропов, Вы писали:

L_S>>>Просто для бизнес приложений главное скорость разработки и минимизация ошибок.

WH>>Это главное всегда.
АХ>Не всегда. Мне кажется все-таки главное когда программа решает поставленную задачу.
"Ну и что что ваша версия программы завершается в 10 раз быстрее. Но она не дает верного результата следовательно не работает."
(С) Старая байка. За точность цытаты не ручаюсь.

L_S>>>Т.е. идея не в том, что бы писать абсолютно безопасные программы, а что бы писать нужные программы.

WH>>Нет. Идея в том чтобы писать абсолютно безопасные нужные программы.
АХ>Ну, абсолютная безопасность недостижима. Для этого нужны абсолютно безопасные пользователи, программисты, компиляторы, рантаймы и железо .
Абсолютная да. Но не стремится к ней это просто верх глупости.
А то что правильные средства разработки могут устранять ошибки целыми классами это факт медецинский.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 14:38
Оценка:
Здравствуйте, Курилка, Вы писали:

К>VC == Visual Studio? или что-то другое?


Да, очепятался. VS имелось в виду.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.07 14:38
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Что ты к окамлу привязался,


Я?

Дохтор! Это ведь ваши картиночки:

Ну и кроме того обозначены и некторые проблемы которые например в том же окамле (а он типизирован по второй схеме) не разрешены.

... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Как скрестить ужа и ежа или статическую и утиные типи
От: AndreiF  
Дата: 19.01.07 14:53
Оценка:
Здравствуйте, FR, Вы писали:

FR>Не решена. Там хардкорно все. А хочется самому задавать эти правила, это и обсуждалось


Иметь такую возмоность — это конечно плюс. Что-то подобное кажется сделано в Хаскелле.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 19.01.07 15:16
Оценка:
Здравствуйте, eao197, Вы писали:

E>Я считаю, что в той самой. Пока за программирование на конкретном языке платят, на этом языке пишут. Пока пишут, язык нельзя считать мертвым.


За кобол тоже платят и на нём тоже пишут.

E>Люди вообще находят удовольствие в странных вещах, в генерации отчетов
Автор: IT
Дата: 19.01.07
, к примеру.


Ты как всегда читаешь только то, что тебя устраивает? Для тех кто в танке разжёвываю. Несколько недель ушло на написание фреймворка для генерации отчётов. CrystalReport знаешь такой продукт? Вот вроде того, только заточенный под конкретную задачу. Сами же отчёты потом — за пол часа пучок. Тут даже индусы не нужны, дольше объяснять придётся.

E>С этим я как раз не спорю. Тем не менее, это не в коем случае не является основанием для называния C++ трупом. Более того, даже для новых проектов могут быть очень веские факторы, которые значительно перевешивают недостатки языка.


Ниша C++, пока ещё, — это системный софт, да и то... С серверов и десктопов корпоративных приложений он уже давно вытеснен и возвращать обратно его никто не собирается.

E>Однако, окончание доминирования на рынке вовсе не означает смерти языка.


Я бы сказал так. Пациент скорее мёртв, чем жив. Лучшие дни плюсов прошли, оставшиеся сочтены. И чем скорее Страуструп с сотоварищами это поймёт, тем лучше. Думаю, лет пять назад было ещё не поздно внести в язык изменения, которые позволили бы ему удерживать лидирующие позиции. А сегодня уже поздно.
Если нам не помогут, то мы тоже никого не пощадим.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.01.07 18:03
Оценка:
Здравствуйте, IT, Вы писали:

E>>Люди вообще находят удовольствие в странных вещах, в генерации отчетов
Автор: IT
Дата: 19.01.07
, к примеру.


IT>Ты как всегда читаешь только то, что тебя устраивает? Для тех кто в танке разжёвываю. Несколько недель ушло на написание фреймворка для генерации отчётов. CrystalReport знаешь такой продукт? Вот вроде того, только заточенный под конкретную задачу. Сами же отчёты потом — за пол часа пучок. Тут даже индусы не нужны, дольше объяснять придётся.


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

Так что ничего личного, просто демонстрация разных взглядов на интересную работу.

E>>С этим я как раз не спорю. Тем не менее, это не в коем случае не является основанием для называния C++ трупом. Более того, даже для новых проектов могут быть очень веские факторы, которые значительно перевешивают недостатки языка.


IT>Ниша C++, пока ещё, — это системный софт, да и то... С серверов и десктопов корпоративных приложений он уже давно вытеснен и возвращать обратно его никто не собирается.


И слава богу. Пускай индусы C# и Java мучают.

А вот, например, для меня актуальная задачка -- сделать soft real-time отображение мониторинговой информации в графическом виде (порядка 100-150 значений, большая часть которых изменяется по несколько раз в секунду). И не только под Windows, но и, как минимум, под Linux. Берешь C++ и FLTK и вперед, никаких гвоздей -- все инструменты под рукой, здесь и сейчас.

Такие задачи мало кого волнуют? Так же как многих мало волнуют сервера и десктопы корпоративных приложений.

E>>Однако, окончание доминирования на рынке вовсе не означает смерти языка.


IT>Я бы сказал так. Пациент скорее мёртв, чем жив. Лучшие дни плюсов прошли, оставшиеся сочтены. И чем скорее Страуструп с сотоварищами это поймёт, тем лучше. Думаю, лет пять назад было ещё не поздно внести в язык изменения, которые позволили бы ему удерживать лидирующие позиции. А сегодня уже поздно.


Тем не менее до состояния трупа C++у еще жить и жить. Даже при том, что с выходом D 1.0 у C++ появился реальный конкурент, играющий на том же самом поле.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 19.01.07 19:04
Оценка:
Здравствуйте, eao197, Вы писали:

E>Это я понял, сам когда-то такими вещами занимался, только удовольствия в этом не было. Вот и странно мне, что кто-то в этом удовольствие находит. Точно так же как тебе странно, что кто-то в подобной работе удовольствия не видит.


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

E>Так что ничего личного, просто демонстрация разных взглядов на интересную работу.


Интересной свою работу мы делаем сами. Об этом я тоже в том же сообщении упомянул.

IT>>Ниша C++, пока ещё, — это системный софт, да и то... С серверов и десктопов корпоративных приложений он уже давно вытеснен и возвращать обратно его никто не собирается.


E>И слава богу. Пускай индусы C# и Java мучают.


Гы-гы. "Индусы" скоро доберуться и до системного софта с джавой и C#. Не сомневайся в этом.

E>А вот, например, для меня актуальная задачка -- сделать soft real-time отображение мониторинговой информации в графическом виде (порядка 100-150 значений, большая часть которых изменяется по несколько раз в секунду). И не только под Windows, но и, как минимум, под Linux. Берешь C++ и FLTK и вперед, никаких гвоздей -- все инструменты под рукой, здесь и сейчас.


Если мне будет нужно, я себе какой хош мониторинг сделаю без всяких плюсов. Эта задача не является проблемной ни для джавы, ни для C#. Причём, простейший реал-тайм мониторинг делается в течении пяти минут на PerformanceCounter'ах. А для многих вещей .NET и так уже предоставляет кучу информации.

E>Такие задачи мало кого волнуют?


Ну почему же? Я этим занимался раньше и занимаюсь сейчас. Как же без этого? Без этого никак, любое более менее уважающее себя приложение должно предоставлять статистику о своей работе. Я знаю не только что делается на моих серверах, но и кто что делает в конкретный момент. Знаю максимальное и минимальное время выполнения любого запроса, статистику по исключениям и использованию кеша. Знаю, абсолютно всё, что мне нужно. И что интересно, на решение этой задачи у меня ушло гораздо меньше времени, чем на генератор отчётов и сделано это всё было на C#.

E>Так же как многих мало волнуют сервера и десктопы корпоративных приложений.


Думаю, этих многих не более 5-10%.

E>Тем не менее до состояния трупа C++у еще жить и жить. Даже при том, что с выходом D 1.0 у C++ появился реальный конкурент, играющий на том же самом поле.


Дело не в конкуренте, дело в самом поле. Поле не то. Ниша у него слишком узкая и всё больше и больше сужается. Задач, где C++/D необходим становится всё меньше и меньше. Ещё 6-7 лет назад умельцы на плюсах даже веб-приложения писали, сегодня любой на это покрутит у виска. Долго и не надёжно, в итоге просто глупо.

Единственное место, где C++ пока может использоваться массово — это софт для домашних компьютеров. Вот если ты пишешь софт для использования на домашнем компьютере, то пожалуй C++ будет нормальным выбором. Но даже на корпоративных десктопах его уже вытесняют джава и .NET.
Если нам не помогут, то мы тоже никого не пощадим.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 19.01.07 19:43
Оценка: 2 (1)
IT wrote:
> Дело не в конкуренте, дело в самом поле. Поле не то. Ниша у него слишком
> узкая и всё больше и больше сужается. Задач, где C++/D необходим
> становится всё меньше и меньше. Ещё 6-7 лет назад умельцы на плюсах даже
> веб-приложения писали, сегодня любой на это покрутит у виска. Долго и не
> надёжно, в итоге просто глупо.
После того, как я увидел
http://jose.med.kuleuven.ac.be/wt/Home.fcg?wtd=8cQ0zBFPXFH8epNd&amp;js=yes&amp;ajax=yes
я уже в этом так не уверен

Кстати, шутки шутками, а с помощью этой штуки я сделал вполне неплохой
веб-интерфейс для своей встроеной железки. Конечно, aspx или jsf/struts
оно не заменит, но в своей нише ей аналогов нет.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: EvilChild Ниоткуда  
Дата: 19.01.07 21:33
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Здравствуйте, FR, Вы писали:


FR>>Там подход обратный, в языке со статической типизацией есть опциональная утиная динамическая.


АХ>Это ИМХО самый лучший подход.


Так последний VB как раз оно.
now playing: Phace — 3002
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 20.01.07 00:49
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Действительно, от языка требуется, чтобы он был решал свои задачи. И он их должен решать быстро и просто. А вот подход C++ мне напоминает человека, который, чтобы почесать нос, просовывает руку под ногу и весь изгибается. Вот как раз C++ напоминает фичепомойку.


Весьма впечатляющий анализ компетентного эксперта
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 04:10
Оценка:
Здравствуйте, eao197, Вы писали:

E>Тем не менее до состояния трупа C++у еще жить и жить. Даже при том, что с выходом D 1.0 у C++ появился реальный конкурент, играющий на том же самом поле.


D пока нигде не играет. Его еще в команду не приняли. То бишь момента у него нет. Да, попал он на /. один раз. Walter не перестает воинствовать на c++.moderated. Однако D сейчас по отношению к C++ это тоже, что и C++ по отношению к C в 1983м году. D пока никто не поддерживает кроме создателя языка.
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 04:40
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>konsoletyper wrote:

>> А вот я вижу. Прикладное ПО (за исключением игр) уже давно переходит на
>> Java и .NET. Есть особые ситуации — графические библиотеки, игры, ОС и
>> т.д.
C>А еще:
C>Прикладные программы
C>Ресурсоемкие системы
C>Браузеры
C>Встроенный софт
C>и т.п.

C>На моем компьютере сейчас не работает ни одной managed-программы. Так

C>что слухи о смерти С++ — сильно преувеличены.

C>У Java/C# есть свои ниши — но вот на мировое господство они пока даже

C>близко не претендуют.

Самое смешное, что мы это уже все обсуждали начиная с года так 2003-го (а может быть и раньше, только без меня). Все тоже самое говорилось про C++. Помрет мол скоро, так и гляди. Им отвечали, что, блин, где ваши программы на C#/Java? Однако, вот уже 4 года прошло и ситуация совсем не поменялась (если не считать того, что тогда я писал на C#, а теперь на C++).
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: AndreiF  
Дата: 20.01.07 05:15
Оценка:
Здравствуйте, Laughing_Silencer, Вы писали:

А и не надо переписывать с нуля. Надо делать рефакторинг.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: AndreiF  
Дата: 20.01.07 05:19
Оценка:
Здравствуйте, Laughing_Silencer, Вы писали:

L_S>Использование Жабы или Шарпа для встроенного ПО просто нецелесообразно и вряд ли будет целесообразно — они нацелены на другое.


Область программ для мобильников сейчас практически полностью оккупирована J2ME. Найдешь причичины этому факту?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: AndreiF  
Дата: 20.01.07 05:29
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>D пока нигде не играет. Его еще в команду не приняли. То бишь момента у него нет. Да, попал он на /. один раз. Walter не перестает воинствовать на c++.moderated. Однако D сейчас по отношению к C++ это тоже, что и C++ по отношению к C в 1983м году. D пока никто не поддерживает кроме создателя языка.


С той только разницей, что программу на С можно было откомпилировать компилятором С++ после минимальной доработки напильником. У D такого преимущества нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 07:32
Оценка:
AndreiF wrote:
> L_S>Использование Жабы или Шарпа для встроенного ПО просто
> нецелесообразно и вряд ли будет целесообразно — они нацелены на другое.
> Область программ для мобильников сейчас практически полностью
> оккупирована J2ME. Найдешь причичины этому факту?
Скорее тут одна причина — нет альтернативы. BREW и прочие нормальные
решения Sun просто своим весом задавила.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: igna Россия  
Дата: 20.01.07 07:39
Оценка:
Здравствуйте, eao197, Вы писали:

E>... Даже при том, что с выходом D 1.0 у C++ появился реальный конкурент, играющий на том же самом поле.


И при том, что на некоторой части того самого поля у C++ издавна имеется два нереальных неконкурента: Delphi и Visual Basic.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: Dr.Gigabit  
Дата: 20.01.07 08:04
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>>C++ — труп. Он никуда не ползёт.


K>Вот тут много флейма развели по поводу того, является ли C++ мёртвым. Я тут такую очень близкую аналогию приведу. Латынь — мёртвый язык. Да, есть люди, которые его знают (врачи, лингвисты). Врачи, при этом, зарабатывают неплохо. Но вот того факта, что латынь — мёртвый язык, никто не отменял.


Это ты у Грэхема прочел? Так он там про LISP писал
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 08:52
Оценка:
Здравствуйте, IT, Вы писали:

K>>Действительно, от языка требуется, чтобы он был решал свои задачи. И он их должен решать быстро и просто. А вот подход C++ мне напоминает человека, который, чтобы почесать нос, просовывает руку под ногу и весь изгибается. Вот как раз C++ напоминает фичепомойку.


IT>Весьма впечатляющий анализ компетентного эксперта


Ну, никто не говорит, что я эксперт. Просто ИМХО ставить забываю . Но всё-таки некоторые факты лежат на поверхности и не надо быть очень уж проницательным, чтобы их заметить.

К тому же, на каких основаниях мы можем о человеке утверждать, что он эксперт в данном вопросе? Типа, есть люди, хорошо разбирающиеся в том, какие фичи нужны языкам, а какие — нет? Ну и что же они говорят, ссылки есть?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 10:06
Оценка: -1
Здравствуйте, konsoletyper, Вы писали:

K>Вообще, подход с разделением на .h- и .cpp-файлы для описания модуля — штука весьма сомнительная. Она чревата дублированием кода (тратой времени) и полным отказом IDE поддерживать такое.


Есть множество причин для разделения интерфейса и реализации. Вот одна из них: расскажи мне, как в .NET ты соберешь три модуля a.dll, b.dll и c.dll со следующими зависимостями (-> — зависит от): a.dll -> b.dll, b.dll -> c.dll, c.dll -> a.dll.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 20.01.07 10:16
Оценка: +1
alexeiz,

K>>Вообще, подход с разделением на .h- и .cpp-файлы для описания модуля — штука весьма сомнительная. Она чревата дублированием кода (тратой времени) и полным отказом IDE поддерживать такое.


A>Есть множество причин для разделения интерфейса и реализации. Вот одна из них: расскажи мне, как в .NET ты соберешь три модуля a.dll, b.dll и c.dll со следующими зависимостями (-> — зависит от): a.dll -> b.dll, b.dll -> c.dll, c.dll -> a.dll.


При сборке модуль будет содержать символические ссылки, а разрешение ссылок будет происходить на этапе загрузки классов в память (т.е. в рантайме). И никаких проблем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 10:22
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>alexeiz,


K>>>Вообще, подход с разделением на .h- и .cpp-файлы для описания модуля — штука весьма сомнительная. Она чревата дублированием кода (тратой времени) и полным отказом IDE поддерживать такое.


A>>Есть множество причин для разделения интерфейса и реализации. Вот одна из них: расскажи мне, как в .NET ты соберешь три модуля a.dll, b.dll и c.dll со следующими зависимостями (-> — зависит от): a.dll -> b.dll, b.dll -> c.dll, c.dll -> a.dll.


LCR>При сборке модуль будет содержать символические ссылки, а разрешение ссылок будет происходить на этапе загрузки классов в память (т.е. в рантайме). И никаких проблем.


Вопрос не про поведение рантайма. Есть код на C# для этих трех модулей. Попробуй собрать его компилятором C#. Проблемы в том, что компилятор берет описание интерфейса из метаданных уже собраного модуля.
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 11:02
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>К тому же, на каких основаниях мы можем о человеке утверждать, что он эксперт в данном вопросе? Типа, есть люди, хорошо разбирающиеся в том, какие фичи нужны языкам, а какие — нет? Ну и что же они говорят, ссылки есть?


Самое забавное, что эксперт не застрахован от ошибок. К тому же он зачастую предвзят. Так что его хотя его помощь может оказаться очень ценной в прикладных ваопросах, в вопросах оценки оно может быть совершенно бесполезным, а то и вредным.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 11:02
Оценка: +2
Здравствуйте, alexeiz, Вы писали:

A>Есть множество причин для разделения интерфейса и реализации. Вот одна из них: расскажи мне, как в .NET ты соберешь три модуля a.dll, b.dll и c.dll со следующими зависимостями (-> — зависит от): a.dll -> b.dll, b.dll -> c.dll, c.dll -> a.dll.


А какой смысл в циклических зависимостях интерфейсов?

Я вот уже более пяти лет использую дотнет и ни разу не встречал проблем по этому поводу.

Если сборка А нуждается в общении со сборокой Б, то она просто описывает протокол этого общения в виде интерфейса, абстрактного класса или делегата, а сборка Б реализует этот протокол.

В общем, не выдумывай ерунды. Модульная система продумана досканально и прикрасно работает. А подход С/С++ (текстовые включения файлов) изжил себя уже очень давно и используется по недоразумению.

Разделение же на заголовки и реализацию тоже не имеет смысла в языка где использование типов не зависит от расположение их в коде.

В общем, С++ в этих вопросах безнадежно устарел и тянет только на пример демонстрирующих плохие архитектурные решения.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 11:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А какой смысл в циклических зависимостях интерфейсов?


Ты понимаешь интерфейсы в прямом смысле. В широком смысле интерфейсом может быть все что угодно. Любое описание типа.

VD>Я вот уже более пяти лет использую дотнет и ни разу не встречал проблем по этому поводу.


Вот тебе простейший пример с потолка: system.dll & system.xml.dll — модули зависят друг от друга.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 11:35
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Есть множество причин для разделения интерфейса и реализации. Вот одна из них: расскажи мне, как в .NET ты соберешь три модуля a.dll, b.dll и c.dll со следующими зависимостями (-> — зависит от): a.dll -> b.dll, b.dll -> c.dll, c.dll -> a.dll.


Да, вот еще что... В С++ тоже нельзя создать циклические зависимости интерфейсов. Нельзя создать клас который опосредовано унаследован сам от сбея. Код типа:
class A : B { };
class B : A { };

это ошибка для любого ООЯ!

А выведение реализаций методов в отдельный cpp-файл дает только возможность обойти дурацкое окграничение С++ на то что нельзя создавать экземпляров еще не определенных типов. Можно только создавать указатели и то для этого тоже требуется предварительная декларациях.
Иными словами вот такой код:
clas A
{
    public B GetB() { return new B(); }
};
clas B
{
    public A GetA() { return new A(); }
};

будет кооректен для C#, VB.NET, Nemerle и т.п., но не корректен для C++.

Вот с этим недоразумение и борится вынос разделение класса в С++.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 11:35
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Скорее тут одна причина — нет альтернативы. BREW и прочие нормальные

C>решения Sun просто своим весом задавила.

О том и речь. С++ хреновая альтернатива управляемым средам.
Хотя конечно AndreiF перегибает палку. Небольшой рынок есть у Сембиан с кастрированным С++. А рынок смартфонов в основном окупируется мобильным фрэймворко от МС. Но последнее тоже управляемая среда. Так что по сути AndreiF прав. Рассказы о том, что встраевыемые решения — это вотчина С++ являются сказками.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 11:35
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>D пока нигде не играет. Его еще в команду не приняли. То бишь момента у него нет. Да, попал он на /. один раз. Walter не перестает воинствовать на c++.moderated. Однако D сейчас по отношению к C++ это тоже, что и C++ по отношению к C в 1983м году. D пока никто не поддерживает кроме создателя языка.


На самом деле у D все еще хуже. В 1983 у С++ практически не было конкурентов. Был Смолток, но он в те времена совсем не выдерживал конкуреции по производительности. И был Лисп, но он болшинством и по сей деень считается изращением.

Сегодя же у ди главные конкуренты — это управляемые среды. D, как язык проигрывает даже C# 2-3, а уж с разными Nemerle ему вообще тягаться невозможно. Так что во всех областях где наличие VM не критично D пролетит со свистом.

Ну, а так как D очень сильно ушел от С++ о приемственности говорить не прихдится. Ведь С++ был фактически надвидом С. D же имеет очень отдаленное отношение к С.

К тому же у D те же проблемы что и у С++. Он не типобезопасный и не компонетный. Хотя конечно архитектурно D лучше чем С++.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 11:35
Оценка:
Здравствуйте, alexeiz, Вы писали:

Не оверквотить, пожалуйста.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 12:05
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Ты понимаешь интерфейсы в прямом смысле. В широком смысле интерфейсом может быть все что угодно. Любое описание типа.


В данном случае я понимал интерфейс в самом широком смысле. Это ничего не меняет.

VD>>Я вот уже более пяти лет использую дотнет и ни разу не встречал проблем по этому поводу.


A>Вот тебе простейший пример с потолка: system.dll & system.xml.dll — модули зависят друг от друга.


И что? Я не утвреждал, что это не возможно. Это утверждал ты. Я сказал, что нет необходимости завязывать интерфейсы циклично. Разницу ощущашь? Создать циклическую зависимость типов невозможно (причем не тольк в донтете, но и вообще в ООП), а скоздать рекурсивно зависимые сборки можно без проблем. В прочем об этом тебе уже сказал Lazy Cjow Rhrr.

Кстати, ак это твое утвреждение соотностися с другим твоим утверждением
Автор: alexeiz
Дата: 20.01.07
.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 12:12
Оценка:
VladD2 wrote:
> О том и речь. С++ хреновая альтернатива управляемым средам.
Почему Windows все еще на C/C++? Потому что управляемость в ряде случаев
просто нафиг не нужна, и даже вредна.

> Хотя конечно AndreiF перегибает палку. Небольшой рынок есть у Сембиан с

> кастрированным С++.
Там уже полный С++ (обычный GCC). Проблемы там были из-за их
самопального механизма возвратов (найти бы урода, который его придумал...).

> А рынок смартфонов в основном окупируется мобильным фрэймворко от МС.

И? Там все существенное unmanaged, так как .NET CF — это нечто страшное.
Тормозное, как и почти все реализации J2ME и возможностей маловато.

> Но последнее тоже управляемая среда.

Да и ни чуть. Вся WinCE — на native.

> Рассказы о том, что встраевыемые решения — это вотчина С++

> являются сказками.
Ну-ну.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 12:25
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>В общем, С++ в этих вопросах безнадежно устарел и тянет только на пример демонстрирующих плохие архитектурные решения.


Именно, что не плохие, а устаревшие. C++ наследует такое поведение от C. А C проектировался в те времена, когда такой подход был необходим для экономии ресурсов. Сейчас, когда экономить нечего, такое решение не подходит.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 12:36
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

>> О том и речь. С++ хреновая альтернатива управляемым средам.

C>Почему Windows все еще на C/C++? Потому что управляемость в ряде случаев
C>просто нафиг не нужна, и даже вредна.

Потому что в Windows Vista кое-что попытались переписать, и поняли, что быстрее дописать старый код, чем делать принципиально новый. Вон и так на сколько лет затянули. А так есть у них в Research'е их Singularity. Будь у Microsoft лишние XXX миллиардов баксов, возможно, они бы переписали Виндовс, сделали бы на ядре Singularity. А так, если пользователи не заинтересованы, зачем переписывать?

Внимательно читаем соседние ветки. Там мысль развивается, что смерть C++ не означает, что старые проекты на C++ должны быть немедленно переписаны. Просто новые проекты, начинающиеся с нуля, выгоднее писать на .NET/Java, чем на C++. Кроме того, появилась тенденция дописывать новый код именно как mangaged-надстройку над существующим (VS, например). Там, глядишь, постепенно будут полностью переписывать под managed-среду.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 12:38
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>VladD2 wrote:

>> О том и речь. С++ хреновая альтернатива управляемым средам.
C>Почему Windows все еще на C/C++? Потому что управляемость в ряде случаев просто нафиг не нужна, и даже вредна.

Виндовс еще на С потому что никто не будет переписывать код нади развлечения и потому что нужна совместимость. Новые куски вроде расширений MMC-консоли уже пишут на управляемом коде. Дальше будет больше.

>> А рынок смартфонов в основном окупируется мобильным фрэймворко от МС.

C>И? Там все существенное unmanaged, так как .NET CF — это нечто страшное.

Интерфейсы клепают уже на CF. Опять же дальше будет больше. Если у людей будет выбор писать на С++ или на управляемо коде, и С++ ничего не даст, то выбор будет все больше и больше делаться в пользу управляемого окда. Причем дело тут не в упрвляемости, а банальной кривизне С++.

C>Тормозное, как и почти все реализации J2ME и возможностей маловато.


Незаметил там ничего тормозного. А маньяки разные и веб-стринчки на С++ будут писать.

>> Но последнее тоже управляемая среда.

C>Да и ни чуть. Вся WinCE — на native.

И что теперь писать из-за этого под нее на С++? Не, ну если бюджет незграничный, то можно конечно. Но смысла нет никагого.

>> Рассказы о том, что встраевыемые решения — это вотчина С++

>> являются сказками.
C>Ну-ну.

Что ну-ну? Встроенных решений на Яве и дотнете прут пруди. И тендеция идет к их увеличению. Это рынок, а он не любит фанатиков. Какое-то время массы еще будут по старинке колбасить код на С++. Но конкуренция сделает свое дело. Дай только время.

И у МС объем управляемого кода будет расти.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 12:41
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Именно, что не плохие, а устаревшие. C++ наследует такое поведение от C. А C проектировался в те времена, когда такой подход был необходим для экономии ресурсов. Сейчас, когда экономить нечего, такое решение не подходит.


Нет. Именно плохого. Еще до появления С были модульные решения. И никакой экономии ресурсаов текстуальные подстановки не дают.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 12:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На самом деле у D все еще хуже. В 1983 у С++ практически не было конкурентов. Был Смолток, но он в те времена совсем не выдерживал конкуреции по производительности. И был Лисп, но он болшинством и по сей деень считается изращением.


Пока да дело с этим плохо. Еще плохо то что библиотек очень мало, конечно сишные можно достаточно легко подключить, а С++ нужны враперы.

VD>Сегодя же у ди главные конкуренты — это управляемые среды. D, как язык проигрывает даже C# 2-3, а уж с разными Nemerle ему вообще тягаться невозможно. Так что во всех областях где наличие VM не критично D пролетит со свистом.


Как язык D по моему шарпу ничем ни проигрывает. Интересно было бы узнать в чем именно ты проигрышь увидел.

VD>Ну, а так как D очень сильно ушел от С++ о приемственности говорить не прихдится. Ведь С++ был фактически надвидом С. D же имеет очень отдаленное отношение к С.


Нет к Си по философии он близок, даже по моему ближе чем к C++.

VD>К тому же у D те же проблемы что и у С++. Он не типобезопасный и не компонетный. Хотя конечно архитектурно D лучше чем С++.


В D практически все проблемы C++ разрешены. На нем можно писать вообще не используя опасные конструкции. Типизация в нем тоже жестче чем в C++.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 13:04
Оценка:
konsoletyper wrote:
> Потому что в Windows Vista кое-что попытались переписать, и поняли, что
> быстрее дописать старый код, чем делать принципиально новый.
Они сначала пытались. В первых пре-альфах Висты, например, был шелл на .NET.

> Вон и так на сколько лет затянули.

Как раз из-за того, что поздно пришли в себя от .NETного угара.

> А так, если пользователи не заинтересованы, зачем переписывать?

Ну как же, есть ведь неоспоримые преимущества управляемых сред (с) Влад.

> Внимательно читаем соседние ветки. Там мысль развивается, что смерть C++

> не означает, что старые проекты на C++ должны быть немедленно
> переписаны. Просто новые проекты, начинающиеся с нуля, выгоднее писать
> на .NET/Java, чем на C++.
Вот KDE4 есть — полный рефакторинг KDE3. Ничего, с С++ и QT полет
нормальный.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 13:07
Оценка:
Здравствуйте, FR, Вы писали:

FR>Еще плохо то что библиотек очень мало, конечно сишные можно достаточно легко подключить, а С++ нужны враперы.


Ну, библиотек то как раз не так мало для нового языка. Хотя коечно тягаться с фрэймворком или Явовскими библиотеками конечно практически невозможно.

FR>Как язык D по моему шарпу ничем ни проигрывает. Интересно было бы узнать в чем именно ты проигрышь увидел.


Проигрывает и еще как. Шарп полностью типобезопасен. Он имеет более внятный синтаксис. Лучшую документацию. Одни анонимыне методы чего стоят? В ди с ними проблем выше крыши. Ни тебе лексической области видимости, ни безопасности.

Ну, да как говорилось в одном анекдоте — я знал что по первому (в данном случае по последнему) вопросу прений не будет. Похоже никто уже не сомневается, что спроектирован Ди хуже чем Немерле.

VD>>Ну, а так как D очень сильно ушел от С++ о приемственности говорить не прихдится. Ведь С++ был фактически надвидом С. D же имеет очень отдаленное отношение к С.


FR>Нет к Си по философии он близок, даже по моему ближе чем к C++.


Я оговорился. К С++ имелось в виду. К С он действительно довольно близок. Но времена когда это было актуально прошли. Сегодня надо быть совместимым с С++. А то и с Явой/дотентом. А тут у Ди проблемы.

FR>В D практически все проблемы C++ разрешены.


Агащазблин. Это мы уже видили в примере возврата указателя из анонимного метода. Таких ды в современных языках допускать нельзя.

FR> На нем можно писать вообще не используя опасные конструкции. Типизация в нем тоже жестче чем в C++.


На С++ тоже в можно писать в безопасном стиле. Оберни все и вся, не пользуйся половиной языка и будет тебе щастье. Только вот ошибки делают не специально. А ошибки типов обычно очень дорого стоят.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: igna Россия  
Дата: 20.01.07 13:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что ну-ну? Встроенных решений на Яве и дотнете прут пруди. И тендеция идет к их увеличению. Это рынок, а он не любит фанатиков. Какое-то время массы еще будут по старинке колбасить код на С++. Но конкуренция сделает свое дело. Дай только время.


Уверен? А что если через N лет C++ еще будет использоваться, а Яву и дотнет заменят к примеру Хаскель и Маскель какие-нибудь, а? Скажи, что этого не будет, я поставлю себе напоминалку в телефоне и через N лет проверю.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 13:16
Оценка:
VladD2 wrote:
> C>Почему Windows все еще на C/C++? Потому что управляемость в ряде
> случаев просто нафиг не нужна, и даже вредна.
> Виндовс еще на С потому что никто не будет переписывать код нади
> развлечения и потому что нужна совместимость. Новые куски вроде
> расширений MMC-консоли уже пишут на управляемом коде. Дальше будет больше.
MMC-консоль теперь будет идолом управляемого кода?

А как же наборы букв типа WPF/WCF/...? Почему MS не использует WPF для
продуктов с переработаным интерфейсом (i.e. Office)?

>> > А рынок смартфонов в основном окупируется мобильным фрэймворко от МС.

> C>И? Там все существенное unmanaged, так как .NET CF — это нечто страшное.
> Интерфейсы клепают уже на CF.
Где? Передо мной смартфон с Windows Mobile 2003 Second Edition — там CF
только для устанавливаемых приложений используется. Все остальное —
нативное.

> Опять же дальше будет больше. Если у людей

> будет выбор писать на С++ или на управляемо коде, и С++ ничего не даст,
> то выбор будет все больше и больше делаться в пользу управляемого окда.
> Причем дело тут не в упрвляемости, а банальной кривизне С++.
Если у людей будет выбор: писать продукт на С/C++ и не писать его
вообще, угадай что они выберут?

Насчет C# vs C++ тоже есть вопросы.

> C>Тормозное, как и почти все реализации J2ME и возможностей маловато.

> Незаметил там ничего тормозного. А маньяки разные и веб-стринчки на С++
> будут писать.
Да, причем оно помещается в 2Мб флешки.

>> > Но последнее тоже управляемая среда.

> C>Да и ни чуть. Вся WinCE — на native.
> И что теперь писать из-за этого под нее на С++? Не, ну если бюджет
> незграничный, то можно конечно. Но смысла нет никагого.
Скорость — мобильные процессоры и так торрррррмооззза.
Экономичность — MP3-плеер на C#, работающий непрерывно, сожрет
намного больше энергии, чем он же на С++. То же касается и игр.

Кстати, угадай на чем пишут игры для самых популярных наладонных игровых
платформ (PSP и Nintendo DS)? Подсказываю, это слово кончается на два плюса.

>> > Рассказы о том, что встраевыемые решения — это вотчина С++

>> > являются сказками.
> C>Ну-ну.
> Что ну-ну? Встроенных решений на Яве и дотнете прут пруди. И тендеция
> идет к их увеличению. Это рынок, а он не любит фанатиков. Какое-то время
> массы еще будут по старинке колбасить код на С++. Но конкуренция сделает
> свое дело. Дай только время.
Встроеные решения на Java — это два варианта. High-end или простенькие
игрушки.

Середины там совсем нет, так как на Java нельзя работать с железом (а
это нужно почти всегда во встраиваемых устройствах).

> И у МС объем управляемого кода будет расти.

Еще бы. Куда же они денутся. Только вот brave managed world еще
откладывается на несколько лет (минимум).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 13:24
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>Как язык D по моему шарпу ничем ни проигрывает. Интересно было бы узнать в чем именно ты проигрышь увидел.


VD>Проигрывает и еще как. Шарп полностью типобезопасен. Он имеет более внятный синтаксис. Лучшую документацию. Одни анонимыне методы чего стоят? В ди с ними проблем выше крыши. Ни тебе лексической области видимости, ни безопасности.


Да про замыкания я забыл. Но анонимные методы есть, плюс есть практически блоки кода (неявная подстановка делегата в параметры), и есть lazy парметры, тут D уже обошел Шарп.

VD>Ну, да как говорилось в одном анекдоте — я знал что по первому (в данном случае по последнему) вопросу прений не будет. Похоже никто уже не сомневается, что спроектирован Ди хуже чем Немерле.


Нет это просто разные не сравнимые вещи. Нельзя сказать что апельсины лучше яблок.


VD>Я оговорился. К С++ имелось в виду. К С он действительно довольно близок. Но времена когда это было актуально прошли. Сегодня надо быть совместимым с С++. А то и с Явой/дотентом. А тут у Ди проблемы.


Это да. Сделали бы хоть автоматическй com врапер как в delphi.

FR>>В D практически все проблемы C++ разрешены.


VD>Агащазблин. Это мы уже видили в примере возврата указателя из анонимного метода. Таких ды в современных языках допускать нельзя.


Да замыкания надо править.

FR>> На нем можно писать вообще не используя опасные конструкции. Типизация в нем тоже жестче чем в C++.


VD>На С++ тоже в можно писать в безопасном стиле. Оберни все и вся, не пользуйся половиной языка и будет тебе щастье. Только вот ошибки делают не специально. А ошибки типов обычно очень дорого стоят.


На D можно не напрягаясь писать безопасно, например массивы контролируются, необходимости пользоватся указателями практически нет, типизация жестче, сложные и ошибкоопасные вещи типа конструкторов копирования отсутствуют. И главное на порядок меньше мест с UB.
В C++ это делается только прикладывая немалые усилия.
Кроме того в D есть способы повысить безопасность кода (те же контракты и юнит тесты)
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 13:30
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>VladD2 wrote:

>> О том и речь. С++ хреновая альтернатива управляемым средам.
C>Почему Windows все еще на C/C++?
По историческим причинам. Потому что переписывать 50 млн. строк работающего (хотя бы отчасти )
кода очень дорого и займет просто немеряное количество времени.

C>Потому что управляемость в ряде случаев

C>просто нафиг не нужна, и даже вредна.
Чем же она вредна? Я бы отметил единственный недостаток — то что потребляет больше ресурсов (особенно пямяти).

В контексте системного программирования я бы говорил не об управляемости, а о верифицируемости. Управляемость нужна в тех случаях когда код не удается статически верифицировать. Статически верифицируемый код можно спокойно компилировать в нативный тем же Бартоком.

Будущее ОС безусловно движется в сторону верифицируемых языков — посмотри на разрабатываемые ОС будь то Singularity со всякими Spec# или Coyotos с BitC.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 13:44
Оценка:
Здравствуйте, VladD2, Вы писали:

еще

VD>Он имеет более внятный синтаксис.


Чем именно внятней? D и Шарп вообще же очень близки по синтаксису.

VD>Лучшую документацию.


У D очень неплохая документация.

VD>Одни анонимыне методы чего стоят? В ди с ними проблем выше крыши.


Угу только пока других крупных проблем и не видно
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 13:46
Оценка: 6 (2) +1
Здравствуйте, VladD2, Вы писали:

VD>Сегодя же у ди главные конкуренты — это управляемые среды.

Нет. Поскольку D нацелен на людей которые любят поближе к железу (в том числе, к встроенному), поменьше зависимости от супер фреймворков, поэтому он будет (и оттягивает) людей с C++. Те кто хотел перейти с C++ на Java/C# уже это сделали.

VD> D, как язык проигрывает даже C# 2-3,

Единственное из того, чем проигрывает, что я знаю — это нет полноценных замыканий. Впрочем это тоже скорей деталь реализации, которую, я думаю, исправят, так как чисто синтаксически это уже сейчас можно (правда, UB). В остальном D сильно впереди C# 3.0 (миксины, юнит-тесты, DbC, slices, шаблоны).

VD> а уж с разными Nemerle ему вообще тягаться невозможно. Так что во всех областях где наличие VM не критично D пролетит со свистом.

Наверное ты прав. Но только по сравнению с Nemerle/Scala.

VD>К тому же у D те же проблемы что и у С++. Он не типобезопасный и не компонетный. Хотя конечно архитектурно D лучше чем С++.

С компонентностью там лучше — есть система модулей и возможно будет что-то для динамической загрузки. COM уже есть.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 13:59
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Он имеет более внятный синтаксис.


FR>Чем именно внятней? D и Шарп вообще же очень близки по синтаксису.

+1

VD>>Лучшую документацию.


FR>У D очень неплохая документация.


Ну это как сказать, судя по собственным впечатлениям/форуму там постоянно находят косяки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 13:59
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Как язык D по моему шарпу ничем ни проигрывает. Интересно было бы узнать в чем именно ты проигрышь увидел.


VD>Проигрывает и еще как. Шарп полностью типобезопасен.

До тех пор пока не пользуемся PInvoke .

VD> Он имеет более внятный синтаксис.

. Они вообще очень близки. В C# 2.0 даже вывода типов нет.

VD> Лучшую документацию.

+1

VD> Одни анонимыне методы чего стоят? В ди с ними проблем выше крыши. Ни тебе лексической области видимости, ни безопасности.

Это наверное поправят, об этом много говорят там в последнее время. Это скорее детали реализации. А вот то что в C# не выводится тип делегата, а в D выводится — вот это уже разница.

VD>Ну, да как говорилось в одном анекдоте — я знал что по первому (в данном случае по последнему) вопросу прений не будет. Похоже никто уже не сомневается, что спроектирован Ди хуже чем Немерле.


Ты про C# вроде говорил.

VD>>>Ну, а так как D очень сильно ушел от С++ о приемственности говорить не прихдится. Ведь С++ был фактически надвидом С. D же имеет очень отдаленное отношение к С.


FR>>Нет к Си по философии он близок, даже по моему ближе чем к C++.


VD>Я оговорился. К С++ имелось в виду. К С он действительно довольно близок. Но времена когда это было актуально прошли. Сегодня надо быть совместимым с С++. А то и с Явой/дотентом. А тут у Ди проблемы.


Полностью совместимым с C++ и Явой/дотнетом не получится, потому что для этого надо быть C++ или Явой/дотнетом.
Для взаимодействия с ними нужен COM/CORBA. COM уже есть, CORBA по-моему пока нет, ну а в свете всяких SOA достаточно вообще просто будет иметь WSDL/SOAP/whatever_buzzword -библиотеку для взаимодействия.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 14:13
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

FR>>У D очень неплохая документация.


АХ>Ну это как сказать, судя по собственным впечатлениям/форуму там постоянно находят косяки.


А что за косяки?
Мне пока попадались только устаревшие сведения, но это простительно при нынешне бурном развитии D.
Вообще документации составлена очень неплохо. Еще понравились исходники фобоса очень легко читаются даже с минмимумом комментариев.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 15:11
Оценка:
Здравствуйте, igna, Вы писали:

VD>>Что ну-ну? Встроенных решений на Яве и дотнете прут пруди. И тендеция идет к их увеличению. Это рынок, а он не любит фанатиков. Какое-то время массы еще будут по старинке колбасить код на С++. Но конкуренция сделает свое дело. Дай только время.


I>Уверен?


Да.

I> А что если через N лет C++ еще будет использоваться,


Будет. Все меньше и меньше, но будет.

I>а Яву и дотнет заменят к примеру Хаскель и Маскель какие-нибудь, а?


Уверен, что нет. Точнее какие-нибудь Максели обязательно появятся, но они будут жить на базе тех же дотнета и ява-рантайма.

I> Скажи, что этого не будет, я поставлю себе напоминалку в телефоне и через N лет проверю.


Ставь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 15:11
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>MMC-консоль теперь будет идолом управляемого кода?


Нет. Но это первый шаг.

C>А как же наборы букв типа WPF/WCF/...? Почему MS не использует WPF для

C>продуктов с переработаным интерфейсом (i.e. Office)?

Птому что их банально неуспели доделать и написать на их базе что-то просто неуспели. Плюс Офис очень большой продукт и переписать его целиком задачо очень сложная (иначе у него давно были бы тысчи конкурентов).

Но опять же все изменится в ближайшем будущем. Сначала появится управляемая студия с теми самыми WPF/WCF в качестве компонентов, а потом и офис переишут.

C>Где? Передо мной смартфон с Windows Mobile 2003 Second Edition — там CF

C>только для устанавливаемых приложений используется. Все остальное —
C>нативное.

Не все арзу. Вот ХБокс тоже в начале дотнетне поддерживал. А теперь там тот самый CF и XNA. Кстати, чем не встраевоемое применение?

>> C>Тормозное, как и почти все реализации J2ME и возможностей маловато.

>> Незаметил там ничего тормозного. А маньяки разные и веб-стринчки на С++
>> будут писать.
C>Да, причем оно помещается в 2Мб флешки.

Ну? О чем я говорю?

C>Скорость — мобильные процессоры и так торрррррмооззза.


Джит код не отличается по скорости от обычного. И ты это знаешь. А 400 МГц — это не мало.

C>Экономичность — MP3-плеер на C#, работающий непрерывно, сожрет

C>намного больше энергии, чем он же на С++. То же касается и игр.

Несусветная глупость. Кстати, тут рядом приводили ссылку на MP3-плеер использующий Моно. Вот уж что тормозом является, но тем не менее это не помешало.

C>Кстати, угадай на чем пишут игры для самых популярных наладонных игровых

C>платформ (PSP и Nintendo DS)? Подсказываю, это слово кончается на два плюса.

Кстати, угодай на чем пишут игры для телефонов и сматрфонов.

C>Встроеные решения на Java — это два варианта. High-end или простенькие

C>игрушки.

Это пустой треп. Доля управляемого кода во встроенных решения неуклоно растет. Это факт. Скоро и для консолей игры будут писать на дотнете.

В общем, это бессмысленный спор. Надо быть очень упертым чтобы не видеть очевидного и не понимать куда все идет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 15:28
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Нет. Именно плохого. Еще до появления С были модульные решения. И никакой экономии ресурсаов текстуальные подстановки не дают.

Они не только не дают экономии но и тратят кучу ресурсов впустую.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 15:46
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Нет. Поскольку D нацелен на людей которые любят поближе к железу (в том числе, к встроенному),


"Любят поближе к железу" — звучит как диагноз. Не находишь?
Надо быть полным критином чтобы без особой нужды "быть поближе к железу".

АХ> поменьше зависимости от супер фреймворков, поэтому он будет (и оттягивает) людей с C++. Те кто хотел перейти с C++ на Java/C# уже это сделали.


Акстись. Кого он оттягивает? У нас даже заявки на форум по Ди не было. А ++-ный всего чуть-чуть проигрывает дотнетному по количеству сообщений. Это даже каплей в море назвать нельзя.

Скорее Дм мог бы оттянуть людей от тех самых Java/C# предложив менее ресурсоемкое решение при прочих равных. Но равных опять же не выходит.

VD>> D, как язык проигрывает даже C# 2-3,

АХ>Единственное из того, чем проигрывает, что я знаю — это нет полноценных замыканий.

Главное в чем оно проигрывает — это в том, что он опасный язык. В прочем, замыкания тоже не мало.

Так же очень важны полноценная поддержка IDE. И тут у Ди пропасть. У него не только рефакторинга нет. У него даже полноценного интелисенса нет. Хотя это конечно исправимо. Нашлись бы люди.

АХ> Впрочем это тоже скорей деталь реализации, которую, я думаю, исправят, так как чисто синтаксически это уже сейчас можно (правда, UB). В остальном D сильно впереди C# 3.0 (миксины, юнит-тесты, DbC, slices, шаблоны).


Нигде он не впереди. Какие к черту юнит тесты? В Студии или Решапере юнет тесты поддерживаются просто изумительно. Никакая поддержка в языке и не нжна при этом. А вот долбить все кучками без комплита. Нет уж. Увольте.

VD>> а уж с разными Nemerle ему вообще тягаться невозможно. Так что во всех областях где наличие VM не критично D пролетит со свистом.

АХ>Наверное ты прав. Но только по сравнению с Nemerle/Scala.

Еще раж повторю. На Ди с Шарпа практически никто не перейдет. Потому как смысла нет. Шыло на мыло менять глупо. C# 3.0 вообще закроет эту дискуссию раз и на всегда. Ну, и Nemerle уже на подходе. Так что если кто-то и будет пеходить с C#-а, то это процентов на 99% буде Nemerle, а не D.

С С++ тже вряд ли кто передет. Не для этого его поклонники занимаются мазахизмом столько лет.

АХ>С компонентностью там лучше — есть система модулей и возможно будет что-то для динамической загрузки. COM уже есть.


Модульности мало. Нужна именно динамическая загрузка. Ее нет. А релиз есть. И он закрпил отсуствие данамики. Так что до следующего релиза ее нет.

В общем, конечно это только мое мнение, но я почему-то полностью уверен, что серьезной миграции на D не последует. Крикуны по причали и пошли заниматься своими делами. А разумным прагматикам коих большинство это просто мало что даст. Овчинка не стоит выдлки.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 15:46
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

VD>>Проигрывает и еще как. Шарп полностью типобезопасен.

АХ>До тех пор пока не пользуемся PInvoke .

Он даже с ним безопаснее. Там проверок куча делается. Да и обычно не нужно этого PInvoke-а много.

VD>> Он имеет более внятный синтаксис.

АХ> . Они вообще очень близки. В C# 2.0 даже вывода типов нет.

Не очень. Многие примеры лично меня ставили в ступор. А я уже привык к экотике.

АХ>Это наверное поправят,


Когда? Релиз уже на дворе. Все язык заморожен. Или это уже спекуляция, а не релиз.

АХ> об этом много говорят там в последнее время.


А чё же в посленее то? Сколько лет то проло?

АХ> Это скорее детали реализации. А вот то что в C# не выводится тип делегата, а в D выводится — вот это уже разница.


Куда он не выводится?

VD>>Ну, да как говорилось в одном анекдоте — я знал что по первому (в данном случае по последнему) вопросу прений не будет. Похоже никто уже не сомневается, что спроектирован Ди хуже чем Немерле.


АХ>Ты про C# вроде говорил.


Читай внимательно.

АХ>Полностью совместимым с C++ и Явой/дотнетом не получится, потому что для этого надо быть C++ или Явой/дотнетом.


Ну, вот у Nemerle получилось же быть на 100% совметимым с дотнетом и даже с C#. Что могло помешать сделать тоже самое в D? Его можно было бы сделать поверх Явы/дотнета или обратно совместимым с С++. Возможно это и вызвало бы проблемы, но вероятность миграции на D это резко увеличило бы.

АХ>Для взаимодействия с ними нужен COM/CORBA.


Кому нужен этот геморой? Для взаимодействия с C# в Nemerle мне унжно сделать ссылу на C#-проект. И все! Далее исползуй любой пубчличный тип. И наоброт тоже проблем особо не возникает. А COM — это геморрой. CORBA вообще из другой песни. И тоже еще тот гимор.

АХ> COM уже есть, CORBA по-моему пока нет, ну а в свете всяких SOA достаточно вообще просто будет иметь WSDL/SOAP/whatever_buzzword -библиотеку для взаимодействия.


Его тоже надо иметь. А это работа. А для нее нужны люди и удобный инструмент. Нужен рефлекшон, макросы и т.п. Или наличие огромной конторы вроде МС. Ни того ни другого у D нет.

В общем, не вижу я у него перспектив.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 15:46
Оценка: +1
Здравствуйте, FR, Вы писали:


FR>Да про замыкания я забыл. Но анонимные методы есть, плюс есть практически блоки кода (неявная подстановка делегата в параметры),


Делегаты через очень небольшое время в C# 3.0 превратятся в лябды и LINQ. D будет отдыхать по полной. Надо было вообще быть слепым чтобы не увидеть синтаксиса лямбд в C# 3.0 и не содрать его.

FR>и есть lazy парметры, тут D уже обошел Шарп.


Вот в Немерле есть и lazy-параметры, и lazy-вырежения. Но вот что-то их никто не использует. Знаешь почему? На фиг не упали. Зато шарповский yield используется во всю и в C# 2.0 и в Немерле. А есть такая фишка в D? Вот и получается, что для реальной жизни в реальных условиях даже C# 2.0 удобнее.

VD>>Ну, да как говорилось в одном анекдоте — я знал что по первому (в данном случае по последнему) вопросу прений не будет. Похоже никто уже не сомневается, что спроектирован Ди хуже чем Немерле.


FR>Нет это просто разные не сравнимые вещи. Нельзя сказать что апельсины лучше яблок.


Какие яблоки? Какие на фиг апельсины? Что не сравнимо? Два ЯП? Смешно. Немерле покроет 90% потребностей современных программистов. А 10% уже ничего не решат.

FR>На D можно не напрягаясь писать безопасно,


Ага. Это я видел на первом же тесте (альфм-блэнде). Там без раздумий был использован указатель.

FR> например массивы контролируются, необходимости пользоватся указателями практически нет,


С масивами и в плюсах особых проблем нет. Оберток выше крыши. Важно, чтобы вместо них шибко "продвинутые" не использовали "более быстрые" решения.

FR> типизация жестче,


Что нет возможности поупражняться ардесной арифметике? Или есть средства гарантировать типобезопасть? А раз нет, то о чем речь?

FR> сложные и ошибкоопасные вещи типа конструкторов копирования отсутствуют. И главное на порядок меньше мест с UB.


Это хорошо. Но в 2007 году разумно было бы иметь полную типобезопасность без компромисов. А уж если так хочется выпендрежей, то решение давно найдено в C# 1.0.

FR>В C++ это делается только прикладывая немалые усилия.

FR>Кроме того в D есть способы повысить безопасность кода (те же контракты и юнит тесты)

Ни один контракт или юнит-тест не заменит типобезопасности. Это маразм то что в Ди сделано. А все потому, что С++ очень плохой багаж для проектирования нового языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 15:58
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Они не только не дают экономии но и тратят кучу ресурсов впустую.


Ага. Вообще не понимаю какая может быть экономия от текстовых включений? Это же как минимум дублирование работы компилятора.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 16:01
Оценка:
VladD2 wrote:
> АХ>Нет. Поскольку D нацелен на людей которые любят поближе к железу (в
> том числе, к встроенному),
> "Любят поближе к железу" — звучит как диагноз. Не находишь?
> Надо быть полным критином чтобы без особой нужды "быть поближе к железу".
Выбрось свой телефон. И компьютер. Телевизор тоже, скорее всего,
придется выбросить — в них сейчас микроконтроллеры стоят.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 16:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> Потому что в Windows Vista кое-что попытались переписать, и поняли, что

>> быстрее дописать старый код, чем делать принципиально новый.
C>Они сначала пытались. В первых пре-альфах Висты, например, был шелл на .NET.

Это когда было. .NET 2.0 появился только в конце 2005 года. До этого точно не знали, когда они выпустят релиз, а ведь даже 2-го дотнета не хватает для того, чтобы покрыть все потребности, не то что 1-го.

>> А так, если пользователи не заинтересованы, зачем переписывать?

C>Ну как же, есть ведь неоспоримые преимущества управляемых сред (с) Влад.

... для программиста. Вот если бы Виндовс писали для удобства программеров, которым нужен более удобный API, тогда переписывание оправдано. Но MS пишут ОС для пользователей. Пользователям по фигу, на чём написана ОС, на ассемблере, Лиспе или брэйнфаке. Вот если сейчас станет очевидным, что ОС можно переписать принципиально по-другому, чтобы она стала намного удобнее для пользователя (это маловероятно), то писать эту ОС стоит во многом с использованием managed-среды.

C>Вот KDE4 есть — полный рефакторинг KDE3. Ничего, с С++ и QT полет

C>нормальный.

Во-первых, рефакторинг и переписывание с нуля — разные вещи. Во-вторых, разработчики KDE (но не QT) пишут софт не для того, чтобы на нём денежки заработать. В-третьих, GNU сейчас много чего на C пишет, чего давно можно было написать на Java (gedit — ярчайший тому пример), так что они для нас не показатель. В-четвёртых, полёт нормльный для кого? Для пользователя, который KDE пользуется? Написанный на Java KDE работал бы не менее быстро. Для программистов? Ничего подобного. Им как раз проще на Java писать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 16:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

С>Да, причем оно помещается в 2Мб флешки.


Зато файлы с управляемым кодом сами меньше занимают, чем native-код. Да, мы тратим немного времени, чтобы JIT обработал managed-код и получил из него гораздо больше native'а, но это будет оперативная память. А с быстродействием JIT-а можно все проблемы решить, разумно настроив кэширование.

C>Экономичность — MP3-плеер на C#, работающий непрерывно, сожрет

C>намного больше энергии, чем он же на С++. То же касается и игр.

А вот это неправда. Для проигрывателя быдут написан MP3-декодер на неуправляемом языке. GUI проигрывателя будет написано на управляемом языке. Большинство ресурсоёмких программ будут писаться именно так (и на десктопах в т.ч.). Надо сказать, что числодробильные штуковины — отнюдь не такой широкий круг задач. Да и писать этот самый неуправляемый код лучше на какой-нибудь альтернативе C++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 16:02
Оценка:
Здравствуйте, FR, Вы писали:

FR>Как язык D по моему шарпу ничем ни проигрывает. Интересно было бы узнать в чем именно ты проигрышь увидел.


Шарпу он, может, и не проигрывает. Зато проигрывает .NET-у в целом. Для дотнета есть Немерле, есть и F#. Пока они находятся в авангардно-экспериментальной стадии, но это вопрос разрешимый.

Думаю, D является конкурентом C++ в той нише, куда он постепенно вытесняется. Что ж, это будет очень даже неплохо. Но для более массовых задач D вряд ли будет наилучшим решением.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 16:04
Оценка:
Андрей Хропов wrote:
> C>Почему Windows все еще на C/C++?
> По историческим причинам. Потому что переписывать 50 млн. строк
> работающего (хотя бы отчасти )
> кода очень дорого и займет просто немеряное количество времени.
Так ведь они пробовали. У них просто не получилось.

> C>Потому что управляемость в ряде случаев

> C>просто нафиг не нужна, и даже вредна.
> Чем же она вредна? Я бы отметил единственный недостаток — то что
> потребляет больше ресурсов (особенно пямяти).
Еще JIT, качество которого пока отстает от обычных компиляторов.

> В контексте системного программирования я бы говорил не об

> управляемости, а о верифицируемости. Управляемость нужна в тех случаях
> когда код не удается статически верифицировать.
Это значит, что почти всегда. Если не прилагать специальных усилий.

> Будущее ОС безусловно движется в сторону верифицируемых языков —

> посмотри на разрабатываемые ОС будь то Singularity со всякими Spec# или
> Coyotos с BitC.
Coyotos с BitC — это НЕ управляемый язык.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 16:28
Оценка:
konsoletyper wrote:
> Это когда было. .NET 2.0 появился только в конце 2005 года. До этого
> точно не знали, когда они выпустят релиз, а ведь даже 2-го дотнета не
> хватает для того, чтобы покрыть все потребности, не то что 1-го.
А .NET 2 что-то существенно поменял в производительности и эффективности?

>> > А так, если пользователи не заинтересованы, зачем переписывать?

> C>Ну как же, есть ведь неоспоримые преимущества управляемых сред (с) Влад.
> ... для программиста. Вот если бы Виндовс писали для удобства
> программеров, которым нужен более удобный API, тогда переписывание
> оправдано.
Прости, но компьютерами пользуются пользователи.

> C>Вот KDE4 есть — полный рефакторинг KDE3. Ничего, с С++ и QT полет

> C>нормальный.
> Во-первых, рефакторинг и переписывание с нуля — разные вещи. Во-вторых,
> разработчики KDE (но не QT) пишут софт не для того, чтобы на нём денежки
> заработать.
Поэтому он и выглядит лучше, чем поделки MS.

> В-третьих, GNU сейчас много чего на C пишет, чего давно

> можно было написать на Java (gedit — ярчайший тому пример), так что они
> для нас не показатель. В-четвёртых, полёт нормльный для кого? Для
> пользователя, который KDE пользуется?
Для пользователей и программистов.

> Написанный на Java KDE работал бы не менее быстро.

Агащаз. У меня бы памяти тогда на KDE не хватило.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 16:31
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>CORBA вообще из другой песни. И тоже еще тот гимор.

Нет корба это не гемор. Это намного хуже.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 16:31
Оценка: +2
Здравствуйте, konsoletyper, Вы писали:

K>Думаю, D является конкурентом C++ в той нише, куда он постепенно вытесняется. Что ж, это будет очень даже неплохо. Но для более массовых задач D вряд ли будет наилучшим решением.

D не является ничьим конкурентом.
У него нет никаких преймуществ перед С++ когда нужно выжимать биты, а если нужно что-то болие высооуровневое то D рядом с темже nemerle даже близко не волялся.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 20.01.07 16:33
Оценка:
C>Кстати, угадай на чем пишут игры для самых популярных наладонных игровых
C>платформ (PSP и Nintendo DS)? Подсказываю, это слово кончается на два плюса.

Вот этого только не надо ...
Обычно это слово состоит из одной буквы (и одново слова из трех — ASM), т.к. сюрпризы не приемлимы на софте который прошивается на ПЗУ-хи.
(или будем патч клепать в виде отдельного картриджа ?)
Да, для этих платформ (и GBA в том числе) есть вполне сносный GCC, но на полную катушку плюсовые возможности не используют (дураков нет).
STL также используются очень ограничено (обычно вообще не используется).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 16:35
Оценка:
konsoletyper wrote:
> С>Да, причем оно помещается в 2Мб флешки.
> Зато файлы с управляемым кодом сами меньше занимают, чем native-код. Да,
> мы тратим немного времени, чтобы JIT обработал managed-код и получил из
> него гораздо больше native'а, но это будет оперативная память. А с
> быстродействием JIT-а можно все проблемы решить, разумно настроив
> кэширование.
В итоге имеем: размер самого managed-кода + размер JIT-ера + размер
кэша. И ты будешь спорить, что оно меньше нативного займет?

> C>*Экономичность* — MP3-плеер на C#, работающий непрерывно, сожрет

> C>намного больше энергии, чем он же на С++. То же касается и игр.
> А вот это неправда. Для проигрывателя быдут написан MP3-декодер на
> неуправляемом языке.
Вот-вот. Все сколь-либо сложное пишется на неуправляемых языках.

> GUI проигрывателя будет написано на управляемом

> языке. Большинство ресурсоёмких программ будут писаться именно так (и на
> десктопах в т.ч.). Надо сказать, что числодробильные штуковины — отнюдь
> не такой широкий круг задач. Да и писать этот самый неуправляемый код
> лучше на какой-нибудь альтернативе C++.
Ну так и остается на долю managed работа с GUIем. Которую тоже без
проблем обычно можно написать на С++ (для всяких плееров).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 16:47
Оценка:
Denis2005 wrote:
> Вот этого только не надо ...
> Обычно это слово состоит из одной буквы (и одново слова из трех — ASM),
> т.к. сюрпризы не приемлимы на софте который прошивается на ПЗУ-хи.
Аллё. Оно уже давно на ASM не пишется. Лет десять уже.

Ты игры для PSP/DS видел?

> Да, для этих платформ (и GBA в том числе) есть вполне сносный GCC, но на

> полную катушку плюсовые возможности не используют (дураков нет).
GBA??? Откуда ты такую древность выкопал.

Посмотри на современный скриншоты игр для PSP:
http://www.gamespot.com/psp/action/brothersinarms/screenindex.html
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 16:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:



FR>>Да про замыкания я забыл. Но анонимные методы есть, плюс есть практически блоки кода (неявная подстановка делегата в параметры),


VD>Делегаты через очень небольшое время в C# 3.0 превратятся в лябды и LINQ. D будет отдыхать по полной. Надо было вообще быть слепым чтобы не увидеть синтаксиса лямбд в C# 3.0 и не содрать его.


Так в D уже есть лямбды, синтаксис конечно более корявый:
writefln((int x) {return x + 123;}(1));
//......
writefln(reduce([1, 2, 3], (int x, int sum) {return sum + x;}));
//......
meter( "Simple do-while", { auto i = 0; do { i++; } while( i < LIMIT ); } );

но вполне терпимый.

FR>>и есть lazy парметры, тут D уже обошел Шарп.


VD>Вот в Немерле есть и lazy-параметры, и lazy-вырежения. Но вот что-то их никто не использует. Знаешь почему?


Знаю, все что ты лично не используешь ты считаешь не нужным.

VD>На фиг не упали. Зато шарповский yield используется во всю и в C# 2.0 и в Немерле. А есть такая фишка в D? Вот и получается, что для реальной жизни в реальных условиях даже C# 2.0 удобнее.


yield'a нет, но лямбды уже похожи на блоки кода, так что замена есть.


VD>Какие яблоки? Какие на фиг апельсины? Что не сравнимо? Два ЯП? Смешно. Немерле покроет 90% потребностей современных программистов. А 10% уже ничего не решат.


Не надо за всех решать что чего покроет

FR>>На D можно не напрягаясь писать безопасно,


VD>Ага. Это я видел на первом же тесте (альфм-блэнде). Там без раздумий был использован указатель.


Это к писателю.
Я бы включил в компилятор ключик запрещающий указатели.

FR>> например массивы контролируются, необходимости пользоватся указателями практически нет,


VD>С масивами и в плюсах особых проблем нет. Оберток выше крыши. Важно, чтобы вместо них шибко "продвинутые" не использовали "более быстрые" решения.


В C++ у опытных программистов проблемы бывают очень редко. Вот не у опытных просто кошмар.

FR>> типизация жестче,


VD>Что нет возможности поупражняться ардесной арифметике? Или есть средства гарантировать типобезопасть? А раз нет, то о чем речь?


Ключик надо как уже писал.
Нет запретов сейчас нет, но возможности языка такие что удобно писать на полностью безопасном подмножестве, в С++ это затруднительно.

FR>> сложные и ошибкоопасные вещи типа конструкторов копирования отсутствуют. И главное на порядок меньше мест с UB.


VD>Это хорошо. Но в 2007 году разумно было бы иметь полную типобезопасность без компромисов. А уж если так хочется выпендрежей, то решение давно найдено в C# 1.0.


Первый шарп вообще намного слабее чем D как язык.

FR>>В C++ это делается только прикладывая немалые усилия.

FR>>Кроме того в D есть способы повысить безопасность кода (те же контракты и юнит тесты)

VD>Ни один контракт или юнит-тест не заменит типобезопасности. Это маразм то что в Ди сделано. А все потому, что С++ очень плохой багаж для проектирования нового языка.


Это только твое мнение.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 16:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Андрей Хропов wrote:

>> C>Почему Windows все еще на C/C++?
>> По историческим причинам. Потому что переписывать 50 млн. строк
>> работающего (хотя бы отчасти )
>> кода очень дорого и займет просто немеряное количество времени.
C>Так ведь они пробовали. У них просто не получилось.

У эпловцев кстати получилось переписать, правда тоже не с нуля.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 16:54
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, konsoletyper, Вы писали:


K>>Думаю, D является конкурентом C++ в той нише, куда он постепенно вытесняется. Что ж, это будет очень даже неплохо. Но для более массовых задач D вряд ли будет наилучшим решением.

WH>D не является ничьим конкурентом.
WH>У него нет никаких преймуществ перед С++ когда нужно выжимать биты, а если нужно что-то болие высооуровневое то D рядом с темже nemerle даже близко не волялся.

Ну в этом отношении немерле тоже исчезающе малая величина, и будет ли он когда нибудь вообще популярным не известно.
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 20.01.07 16:56
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Denis2005 wrote:

>> Вот этого только не надо ...
>> Обычно это слово состоит из одной буквы (и одново слова из трех — ASM),
>> т.к. сюрпризы не приемлимы на софте который прошивается на ПЗУ-хи.
C>Аллё. Оно уже давно на ASM не пишется. Лет десять уже.

Если внимательно прочитать моё сообщение, то становиться понятным, что имелось в виду C/ASM.
ASM по прежнему имеет свою долю (куда-же без него).

C>Ты игры для PSP/DS видел?


Вы знаете... да.

>> Да, для этих платформ (и GBA в том числе) есть вполне сносный GCC, но на

>> полную катушку плюсовые возможности не используют (дураков нет).
C>GBA??? Откуда ты такую древность выкопал.

Это с каких это пор GBA считается древностью? До сих пор лид. тайтлы выходят.
Кстати NDS это почти 3D-расширение GBA (ну кто пишет пож это дело тот поймет).

C>Посмотри на современный скриншоты игр для PSP:

C>http://www.gamespot.com/psp/action/brothersinarms/screenindex.html

И чего? Посмотри на игры PS2 они тоже на C/ASM, а C++ там не любят за его бесчисленные грабли, хотя извращенцы тоже попадаются, но они очень редко завершают проекты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 17:05
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну в этом отношении немерле тоже исчезающе малая величина, и будет ли он когда нибудь вообще популярным не известно.

У немерле причин стать популярным значительно больше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 17:07
Оценка: :)
Denis2005 wrote:
> Если внимательно прочитать моё сообщение, то становиться понятным, что
> имелось в виду C/ASM.
> ASM по прежнему имеет свою долю (куда-же без него).
ASMа тоже очень мало. Только в некоторых интенсивных функциях.

> C>Ты игры для PSP/DS видел?

> Вы знаете... да.
Странно.

> Это с каких это пор GBA считается древностью? До сих пор лид. тайтлы

> выходят.
Ему уже 6 лет. И вышло следующее поколение. Так что уже устарело.

> Кстати NDS это почти 3D-расширение GBA (ну кто пишет пож это дело тот

> поймет).
Угу, два процессора, 3D-движок, WiFi. Совсем расширение GBA.

> C>Посмотри на современный скриншоты игр для PSP:

> C>http://www.gamespot.com/psp/action/brothersinarms/screenindex.html
> И чего? Посмотри на игры PS2 они тоже на C/ASM, а C++ там не любят за
> его бесчисленные грабли, хотя извращенцы тоже попадаются, но они очень
> редко завершают проекты.
На PS2??? Там почти все на С++. Лично разговаривал с разработчиком игр
под эти платформы.

Чистый С вообще гейм-девелоперы не особо любят.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 20.01.07 17:16
Оценка:
>> Это с каких это пор GBA считается древностью? До сих пор лид. тайтлы
>> выходят.
C>Ему уже 6 лет. И вышло следующее поколение. Так что уже устарело.

PS2 тоже уже старенькая консоль, только списывать с счетов не никто не собирается.

>> Кстати NDS это почти 3D-расширение GBA (ну кто пишет пож это дело тот

>> поймет).
C>Угу, два процессора, 3D-движок, WiFi. Совсем расширение GBA.

2D осталось без изменений вплоть до адресов и прерываний, форматов тайл-мэпов и спрайтов.

>> C>Посмотри на современный скриншоты игр для PSP:

>> C>http://www.gamespot.com/psp/action/brothersinarms/screenindex.html
>> И чего? Посмотри на игры PS2 они тоже на C/ASM, а C++ там не любят за
>> его бесчисленные грабли, хотя извращенцы тоже попадаются, но они очень
>> редко завершают проекты.
C>На PS2??? Там почти все на С++. Лично разговаривал с разработчиком игр
C>под эти платформы.

Ты наверное общался с Российскими разработчиками, которые на этот рынок вышли не давно.
Конечно к этому времени GCC более менее стал доведен до приемлемого уровня.
Еще раз повторяю, даже если C++ и используется то в достаточно ограниченном виде.

C>Чистый С вообще гейм-девелоперы не особо любят.


Его не любят на PC-платформе. На остальных предпочтение именно за ним.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 17:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А .NET 2 что-то существенно поменял в производительности и эффективности?


Во-первых, .NET 2 быстрее работает, в нём новый GC. Во-вторых, там появилось несколько новых фич, например, generics. В-третьих, .NET 2 сильно шагнул вперёд в плане библиотек.

C>Прости, но компьютерами пользуются пользователи.


Вот потому и не переписывают.

C>Поэтому он и выглядит лучше, чем поделки MS.


Выглядит он может и лучше, только это не значит, что в нём более удобный API, чем WPF.

C>Для пользователей и программистов.


Вот насчёт второго сомневаюсь. Разве что писать интеропом на Java?

>> Написанный на Java KDE работал бы не менее быстро.

C>Агащаз. У меня бы памяти тогда на KDE не хватило.

А памяти сколько? 128 МБ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 17:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В итоге имеем: размер самого managed-кода + размер JIT-ера + размер

C>кэша. И ты будешь спорить, что оно меньше нативного займет?

Вот именно, что в среднем размер managed-системы будет примерно равен размеру unmanaged-системы.

C>Вот-вот. Все сколь-либо сложное пишется на неуправляемых языках.


А вот это ты фигню сказал. Сколько-нибудь сложное это что? Этот примитивный декодер MP3, состоящий из сдвигов и сложений? Не смеши!

C>Ну так и остается на долю managed работа с GUIем. Которую тоже без

C>проблем обычно можно написать на С++ (для всяких плееров).

Это для всяких плееров на managed-языке нужно писать только GUI. А вот возьмём такую простую штуку как IDE (куда уж её до MP3-декодера). Пусть в ней должны быть autocompletion + подстветка типов + рефакторинг + навигация по коду (это только касательно работы с кодом, а в хорошей IDE должно быть много чего ещё). Для этого нужно иметь как минимум хороший парсер языка с восстановлением. Парсер можно написать на C++ — с таким же успехом я могу написать его на ассемблере. Дальше — больше. Нужно иметь хороший текстовый редактор, чтобы он умел проставлять в тексте маркеры с состояниями и чтобы можно при модификации текста прробежать парсером только по небольшому кусочку. Например, при модификации тела функции распарсить только одну функцию и чуть-чуть подправить AST редактируемго текста. Ну что, слабо написать всё это на C++? Я верю, что можно. А вот выгодно ли?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 17:25
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>Ну в этом отношении немерле тоже исчезающе малая величина, и будет ли он когда нибудь вообще популярным не известно.

WH>У немерле причин стать популярным значительно больше.

Не думаю, скорее всего близко к D, будут в лучшем случае сотни тысяч программистов ими пользоватся, в общем оба похоже для любителей.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 17:37
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Андрей Хропов, Вы писали:


АХ>>Нет. Поскольку D нацелен на людей которые любят поближе к железу (в том числе, к встроенному),


VD>"Любят поближе к железу" — звучит как диагноз. Не находишь?

VD>Надо быть полным критином чтобы без особой нужды "быть поближе к железу".

Я люблю быстрые нересурсоемкие программы. А кто их не любит?

АХ>> поменьше зависимости от супер фреймворков, поэтому он будет (и оттягивает) людей с C++. Те кто хотел перейти с C++ на Java/C# уже это сделали.


VD>Акстись. Кого он оттягивает? У нас даже заявки на форум по Ди не было.



VD> А ++-ный всего чуть-чуть проигрывает дотнетному по количеству сообщений. Это даже каплей в море назвать нельзя.

Что нельзя назвать каплей в море? Кол-во сообщений на .NET и C++ форумах?

VD>Скорее Дм мог бы оттянуть людей от тех самых Java/C# предложив менее ресурсоемкое решение при прочих равных. Но равных опять же не выходит.


Ну есть некоторые проблемы, но в принципе, я за форумами D слежу, там есть люди с Java/C# опытом, которым D импонирует.

VD>>> D, как язык проигрывает даже C# 2-3,

АХ>>Единственное из того, чем проигрывает, что я знаю — это нет полноценных замыканий.

VD>Главное в чем оно проигрывает — это в том, что он опасный язык. В прочем, замыкания тоже не мало.


VD>Так же очень важны полноценная поддержка IDE. И тут у Ди пропасть. У него не только рефакторинга нет. У него даже полноценного интелисенса нет. Хотя это конечно исправимо. Нашлись бы люди.


Это не вопрос языка, а вопрос IDE.

АХ>> Впрочем это тоже скорей деталь реализации, которую, я думаю, исправят, так как чисто синтаксически это уже сейчас можно (правда, UB). В остальном D сильно впереди C# 3.0 (миксины, юнит-тесты, DbC, slices, шаблоны).


VD>Нигде он не впереди. Какие к черту юнит тесты? В Студии или Решапере юнет тесты поддерживаются просто изумительно. Никакая поддержка в языке и не нжна при этом.


Ладно, будет время попробую сравнить + и — таких подходов.

VD> А вот долбить все кучками без комплита. Нет уж. Увольте.


Да, но это вопрос IDE. D тут не причем.

VD>>> а уж с разными Nemerle ему вообще тягаться невозможно. Так что во всех областях где наличие VM не критично D пролетит со свистом.

АХ>>Наверное ты прав. Но только по сравнению с Nemerle/Scala.

VD>Еще раж повторю. На Ди с Шарпа практически никто не перейдет. Потому как смысла нет. Шыло на мыло менять глупо. C# 3.0 вообще закроет эту дискуссию раз и на всегда.


Я могу быть примером человека, которого не интересует C#, но интересует D.

VD> Ну, и Nemerle уже на подходе. Так что если кто-то и будет пеходить с C#-а, то это процентов на 99% буде Nemerle, а не D.


Согласен. Хотя возможно совместное использование того и другого.

VD>С С++ тже вряд ли кто передет. Не для этого его поклонники занимаются мазахизмом столько лет.


Уже переходят. Причем поток нарастает. Тот же г-н Александреску уже на форуме D тусуется.

АХ>>С компонентностью там лучше — есть система модулей и возможно будет что-то для динамической загрузки. COM уже есть.


VD>Модульности мало. Нужна именно динамическая загрузка. Ее нет. А релиз есть. И он закрпил отсуствие данамики. Так что до следующего релиза ее нет.


Именно. Ждем следующего релиза. .NET < 2.0 тоже был не ахти система без отсутствия генериков (до сих пор не понимаю почему у них ума не хватило сделать их в первой версии, теперь мучайся с сотнями legacy классов XXXCollection ).

VD>В общем, конечно это только мое мнение, но я почему-то полностью уверен, что серьезной миграции на D не последует.

VD>Крикуны по причали и пошли заниматься своими делами. А разумным прагматикам коих большинство это просто мало что даст. Овчинка не стоит выдлки.

Не знаю, в последнее время форум D очень активизировался. С Nokia люди заглядывают...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 17:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>D не является ничьим конкурентом.

WH>У него нет никаких преймуществ перед С++ когда нужно выжимать биты,
Ничего себе нет — да хотя бы тот же вывод типов, нормальные модули, юнит-тесты (на C++ нормально юнит-тесты не сделаешь), DbC, делегаты, slices, да тот же мой любимый foreach чего стоят.

Ну и не забудь про скорость компиляции. DMD очень быстр, намного быстрее MSVC/GCC.

WH> а если нужно что-то болие высооуровневое то D рядом с темже nemerle даже близко не волялся.

+1. Да, Nemerle — это сила !
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 17:48
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так в D уже есть лямбды,


Лямбда без лексического замыкания — это нонсенс!

FR>Знаю, все что ты лично не используешь ты считаешь не нужным.


С точностью до наоборот. Я использую то, что мне удобно.

FR>yield'a нет, но лямбды уже похожи на блоки кода, так что замена есть.


Без полноценных то замыканий и с возможностью влететь на ровном месте?

VD>>Какие яблоки? Какие на фиг апельсины? Что не сравнимо? Два ЯП? Смешно. Немерле покроет 90% потребностей современных программистов. А 10% уже ничего не решат.


FR>Не надо за всех решать что чего покроет


Тут и решать не чего. Это факт.

FR>Я бы включил в компилятор ключик запрещающий указатели.


Жаль, что не ты Ди проектируешь.

FR>В C++ у опытных программистов проблемы бывают очень редко.


Я плякаль.

FR>Первый шарп вообще намного слабее чем D как язык.


Давай еще вспомним первую Яву.

VD>>Ни один контракт или юнит-тест не заменит типобезопасности. Это маразм то что в Ди сделано. А все потому, что С++ очень плохой багаж для проектирования нового языка.


FR>Это только твое мнение.


Да, да... конечно. И ты коечно с ним не согласен. От того оно сразу становится менее ценным.
И фигня что с ним согласно большинство мало-мальски стоящих дизайнеров языков. Это все равно тольк мое мнение.
Верь в это.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 17:48
Оценка:
Здравствуйте, FR, Вы писали:

WH>>У него нет никаких преймуществ перед С++ когда нужно выжимать биты, а если нужно что-то болие высооуровневое то D рядом с темже nemerle даже близко не волялся.


FR>Ну в этом отношении немерле тоже исчезающе малая величина,


В чем в этом то? В выжимании битов из байтов? А оно нужно? Хотя возможностей для оптимизации у него в общем-то не мало.

FR>и будет ли он когда нибудь вообще популярным не известно.


Это уж точно от битовыжимания не зависит. Что до популярности. Не сомневайся — будет. Если только МС не встроет его функциональность в Шарп (или Сан в Яву), что тоже не полохо.

Судя по этому сайту Ди интересуются те кому на него по большому счету плевать с колокольни. Реальный код они на нем писать не будут. Поиграются и пойдут дальше использовать свой С++ в перемешку со скриптами чтобы совсем противно не было. А на Немерле уже сейчас пишется реальный код. А выйдет Интеграция и поклонников увеличится.

В общем, я четко вижу почему может стать популярным Немерле, и в упор не вижу почему станет популярным Ди. Ошибки сделанные его автором вообще обсурнды. Ведь такой опыт рядом валяется. Подойди погляди... проанализируй... Не, мы пойдем своим путем. Наш конкурент С++... но совместимость с ним не нужна.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 17:48
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> Надо быть полным критином чтобы без особой нужды "быть поближе к железу".

C>Выбрось свой телефон. И компьютер. Телевизор тоже, скорее всего,
C>придется выбросить — в них сейчас микроконтроллеры стоят.

Извини, но общаться при такой вопиющей неадкватности с твоей стороны, я не могу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 17:48
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>А вот это неправда. Для проигрывателя быдут написан MP3-декодер на неуправляемом языке.


Акстись. Такие вещи сто лет назад в железо зашиты. У меня плеер без какой либо ОС работает. Софт в них нужен исключительно для GUI.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 17:48
Оценка: +1 :)
Здравствуйте, Cyberax, Вы писали:

C>Чистый С вообще гейм-девелоперы не особо любят.


Это ты Кармаку расскажи.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 17:48
Оценка:
FR>У эпловцев кстати получилось переписать, правда тоже не с нуля.

И что они переписали "не с нуля"?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 17:50
Оценка:
konsoletyper wrote:
> C>В итоге имеем: размер самого managed-кода + размер JIT-ера + размер
> C>кэша. И ты будешь спорить, что оно меньше нативного займет?
> Вот именно, что в среднем размер managed-системы будет примерно равен
> размеру unmanaged-системы.
Агащазблин. Один только самый минимальный рантайм для .NET CF
займет 2Мб.

> C>Вот-вот. Все сколь-либо сложное пишется на неуправляемых языках.

> А вот это ты фигню сказал. Сколько-нибудь сложное это что? Этот
> примитивный декодер MP3, состоящий из сдвигов и сложений? Не смеши!
Так почему он не может нормально быть сделан на managed?

> Это для всяких плееров на managed-языке нужно писать только GUI. А вот

> возьмём такую простую штуку как IDE (куда уж её до MP3-декодера).
IDE — это отдельный случай. Оно не ставится на компьютер пользователя, а
девелоперу можно и побольше памяти воткнуть.

Ты представь, что у тебя оффисный пакет.

> в ней должны быть autocompletion + подстветка типов + рефакторинг +

> навигация по коду (это только касательно работы с кодом, а в хорошей IDE
> должно быть много чего ещё). Для этого нужно иметь как минимум хороший
> парсер языка с восстановлением. Парсер можно написать на C++ — с таким
> же успехом я могу написать его на ассемблере. Дальше — больше. Нужно
> иметь хороший текстовый редактор, чтобы он умел проставлять в тексте
> маркеры с состояниями и чтобы можно при модификации текста прробежать
> парсером только по небольшому кусочку.
Ты знаешь, все это умеет делать Emacs + XRefactory. Причем ДЛЯ
С++!
. Автокомплит делает XRef. Причем сам XRef написан на С/C++.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 18:01
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Да и писать этот самый неуправляемый код лучше на какой-нибудь альтернативе C++.

D?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 18:01
Оценка:
Здравствуйте, Denis2005, Вы писали:

D>Если внимательно прочитать моё сообщение, то становиться понятным, что имелось в виду C/ASM.

D>ASM по прежнему имеет свою долю (куда-же без него).

Наверное только чтобы MMX/SSE/AltiVec задействовать подозреваю.
Впрочем тут тоже не разгонишься поскольку геймдевелоперы в последнее время полюбили кроссплатформенность.

D>И чего? Посмотри на игры PS2 они тоже на C/ASM,

Примеры?

D> а C++ там не любят за его бесчисленные грабли, хотя извращенцы тоже попадаются, но они очень редко завершают проекты.


Не видел ни одной вакансии в геймдевеломенте, где бы хотели знание чистого C. А C++ — в каждой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.07 18:10
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Ничего себе нет — да хотя бы тот же вывод типов, нормальные модули, юнит-тесты (на C++ нормально юнит-тесты не сделаешь), DbC, делегаты, slices, да тот же мой любимый foreach чего стоят.


Я вот чего понять не могу. Если все так зашибись, то почему сам компилятор Ди на С++ написан? Почему его интеграция со Студией на Шарпе пишется? И что вообще написано на Ди? На чем проверено, что ди удобнее чем С++ или C#?

Я вот влез в разработку того самого Немерла и могу биться об заклад, что то что Немерле дерет Ди как Тузик грелку главным образом обуславливается двумя факторами. Первых — это несомнено более талантливые авторы языка изучившие больше языков и сделавшие правильные выводы. Но воторое, по счету, а не по значимости — это то, что сам язык разрабатывается на самом себе! Это позволяет резко упростить развите и модификацию компилятора. Это же позволяет подключаться к разработке новым программистам (даже без опыта компиляторостроения). Все мощьне фичи от вывода типов и макросов, до сопоставления с образцом и квази-цитирования, все рабтают на язык. Язык позволяет проще производить эксперементы (делать прототипы), а значит быстро опробывать возникающие идеи. Ди же развивается на С++ и С++ является главным тормозом в развитии Ди. Плюс свтор явно не знаком с передовыми технологиями в областе ФЯП. Вот и получается уродец который конечно лучше чем С++, но что с того толку.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 20.01.07 18:24
Оценка: :)
Здравствуйте, konsoletyper, Вы писали:

K>Парсер можно написать на C++ — с таким же успехом я могу написать его на ассемблере.


Договорились...


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 18:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Лямбда без лексического замыкания — это нонсенс!


Угу. Но все равно вещь вкусная и полезная.

FR>>Знаю, все что ты лично не используешь ты считаешь не нужным.


VD>С точностью до наоборот. Я использую то, что мне удобно.


Не вижу разницы. По любому ключевое слово "тебе".

FR>>yield'a нет, но лямбды уже похожи на блоки кода, так что замена есть.


VD>Без полноценных то замыканий и с возможностью влететь на ровном месте?


Это да плохо надо долбить автора.

FR>>Я бы включил в компилятор ключик запрещающий указатели.


VD>Жаль, что не ты Ди проектируешь.


К сожалению мне компиляторостроительство в данный момент не интересно, тут с чужими творениями некогда рабиратся.


FR>>Первый шарп вообще намного слабее чем D как язык.


VD>Давай еще вспомним первую Яву.


Так ты же начал вспоминать.

VD>>>Ни один контракт или юнит-тест не заменит типобезопасности. Это маразм то что в Ди сделано. А все потому, что С++ очень плохой багаж для проектирования нового языка.


FR>>Это только твое мнение.


VD>Да, да... конечно. И ты коечно с ним не согласен. От того оно сразу становится менее ценным.

VD>И фигня что с ним согласно большинство мало-мальски стоящих дизайнеров языков. Это все равно тольк мое мнение.

Алле где эти дизайнеры? Когда они D успели оценить? Подкинь ссылочки пожалуйста.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 18:29
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Ну в этом отношении немерле тоже исчезающе малая величина,


VD>В чем в этом то? В выжимании битов из байтов? А оно нужно? Хотя возможностей для оптимизации у него в общем-то не мало.


В отношении популярности среди программистов.

FR>>и будет ли он когда нибудь вообще популярным не известно.


VD>Это уж точно от битовыжимания не зависит. Что до популярности. Не сомневайся — будет. Если только МС не встроет его функциональность в Шарп (или Сан в Яву), что тоже не полохо.


Угу лет через десять.

VD>Судя по этому сайту Ди интересуются те кому на него по большому счету плевать с колокольни. Реальный код они на нем писать не будут. Поиграются и пойдут дальше использовать свой С++ в перемешку со скриптами чтобы совсем противно не было. А на Немерле уже сейчас пишется реальный код. А выйдет Интеграция и поклонников увеличится.



Ну конечно а на Немерле уже мегапроекты пишутся.
На D уже написано больше, и думаю будет писатся еще больше.
Я во всяком случае хочу попробовать небольшие вещи в этом году на D делать, кандидатуры уже есть, но до лета вряд-ли будет время.

VD>В общем, я четко вижу почему может стать популярным Немерле, и в упор не вижу почему станет популярным Ди. Ошибки сделанные его автором вообще обсурнды. Ведь такой опыт рядом валяется. Подойди погляди... проанализируй... Не, мы пойдем своим путем. Наш конкурент С++... но совместимость с ним не нужна.


Понимаешь ты живешь в другом мире, и поэтому бесполезно тебе что-то аргументировать.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 18:34
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Я вот чего понять не могу. Если все так зашибись, то почему сам компилятор Ди на С++ написан? Почему его интеграция со Студией на Шарпе пишется? И что вообще написано на Ди? На чем проверено, что ди удобнее чем С++ или C#?


Мы уже говорили. Я подозреваю что у тебя нет codebase хотя бы в 100000 строк который надо подерживать и ты просто не понимаешь что такое переписать даже проект такого размера.

Кстати я ковырялся в исходниках front end'а D для gcc. Там очень специфический С++, я бы сказал в D стиле, вообще становится понятно откуда у D ноги растут.
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 18:34
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>У эпловцев кстати получилось переписать, правда тоже не с нуля.


VD>И что они переписали "не с нуля"?


Свою операционку.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 18:57
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Не думаю, скорее всего близко к D, будут в лучшем случае сотни тысяч программистов ими пользоватся, в общем оба похоже для любителей.

Я так не думаю. У D нет вобще никаких преимуществ перед темже С++. Ну может и есть пара мелочей но это не причина переходить на него с С++.
В то время как немерле рвет C# как тузик грелку...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 19:08
Оценка:
Здравствуйте, FR, Вы писали:

FR>Мы уже говорили. Я подозреваю что у тебя нет codebase хотя бы в 100000 строк который надо подерживать и ты просто не понимаешь что такое переписать даже проект такого размера.

Ну так почему немерле написано на немерле? Ведь если мне не изменяет скалеров он изначально на окамле был?

Ответ прост: D не дает ощутимых преимуществ перед С++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 19:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

FR>>Не думаю, скорее всего близко к D, будут в лучшем случае сотни тысяч программистов ими пользоватся, в общем оба похоже для любителей.

WH>Я так не думаю. У D нет вобще никаких преимуществ перед темже С++. Ну может и есть пара мелочей но это не причина переходить на него с С++.

Если смотреть не предвзято и без так скажем (подражая Маяковскому ) без языкочванства то у D полно преимуществ перед. Притом это во многом те же преимущества что есть у C# перед C++, но плюс в том что и специфичные для C++ (нативность и шаблоны) тоже остаются.

WH>В то время как немерле рвет C# как тузик грелку...


Все равно мало верится что функциональщина пойдет в массы, даже в таком удобно-адаптировном виде как немерле.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 19:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>Мы уже говорили. Я подозреваю что у тебя нет codebase хотя бы в 100000 строк который надо подерживать и ты просто не понимаешь что такое переписать даже проект такого размера.

WH>Ну так почему немерле написано на немерле? Ведь если мне не изменяет скалеров он изначально на окамле был?

Потому что немерлистам не нужно кроме немерле еще подерживать свой компилятор окамла.

WH>Ответ прост: D не дает ощутимых преимуществ перед С++.


Нет еще проще. Автор D давно пишет компиляторы и подозреваю у него очень большой объем codebase. И главное он и сейчас является автором живого C++ компилятора.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 19:25
Оценка: +1 -1
Здравствуйте, FR, Вы писали:

FR>Алле где эти дизайнеры? Когда они D успели оценить? Подкинь ссылочки пожалуйста.

А зачем всякий мусор оценивать? Они просто создают типобезовасные языки и все.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 20.01.07 19:29
Оценка: +1 -1
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Здравствуйте, Denis2005, Вы писали:


D>>Если внимательно прочитать моё сообщение, то становиться понятным, что имелось в виду C/ASM.

D>>ASM по прежнему имеет свою долю (куда-же без него).

АХ>Наверное только чтобы MMX/SSE/AltiVec задействовать подозреваю.

АХ>Впрочем тут тоже не разгонишься поскольку геймдевелоперы в последнее время полюбили кроссплатформенность.

Наверное все-таки речь шла про узкоспециализированные карманные игровые платформы, а не PC.
И причем тут MMX/SSE/AltiVec? Я вижу ваши знания ограничены архитектурой Intel и платформой PC.

D>>И чего? Посмотри на игры PS2 они тоже на C/ASM,

АХ>Примеры?

http://www.ictrecruit.com/vacancy_view.php/94

Платформы: Playstation 2, Xbox, Game Cube, PC. Требуется C/C++.
Вот как раз под PC тебе возможно позволят по полной баловаться C++, для всех остальных в большинстве случаев чистый C или "C with Classes".
Конечно порой допускается кастрированный вариант использования C++, т.е. никакого EH, RTTI, и хардкорного испльзования шаблонов а-ля BOOST.
Вообще мог бы сам погуглить на эту тему.

D>> а C++ там не любят за его бесчисленные грабли, хотя извращенцы тоже попадаются, но они очень редко завершают проекты.


АХ>Не видел ни одной вакансии в геймдевеломенте, где бы хотели знание чистого C. А C++ — в каждой.


Опять 25. Вы говорите про PC.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 19:41
Оценка:
Здравствуйте, FR, Вы писали:

FR>Нет еще проще. Автор D давно пишет компиляторы и подозреваю у него очень большой объем codebase. И главное он и сейчас является автором живого C++ компилятора.

И что у С++ и D очень много общего? Сильно сомневаюсь.
Языки то совсм разные. Что там может быть общего кроме кодогенератора?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 19:53
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> C>Вот-вот. Все сколь-либо сложное пишется на неуправляемых языках.

>> А вот это ты фигню сказал. Сколько-нибудь сложное это что? Этот
>> примитивный декодер MP3, состоящий из сдвигов и сложений? Не смеши!
C>Так почему он не может нормально быть сделан на managed?

Потому, что на managed-языке он будет работать медленнее, чем на unmanaged.

C>Ты представь, что у тебя оффисный пакет.


Вот и прекрасно. Ну и на чём же проще написать офисный пакет? И, кстати, почему это офисный пакет должен занимать много места в памяти. Что там такого. Да и не критерий это, когда на любом нормальном компе сейчас стоит 512..1024 Мб. А для секретарши и 256 МБ хватит, т.к. она кроме одного-двух окошек с вордом ничего не открывает.

C>Ты знаешь, все это умеет делать Emacs + XRefactory. Причем ДЛЯ

C>С++!
. Автокомплит делает XRef. Причем сам XRef написан на С/C++.

Не верится мне во всё это. Хотя бы потому, что C++ нельзя полноценно распарсить. А если и можно, то это будет слишком долго.

Вот, кстати, вопрос на засыпку: почему даже в VS2005 не появились такие же фичи по работе с кодом C++, которые есть для C#?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 19:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Акстись. Такие вещи сто лет назад в железо зашиты. У меня плеер без какой либо ОС работает. Софт в них нужен исключительно для GUI.


Ну так тем более...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 19:53
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

K>>Да и писать этот самый неуправляемый код лучше на какой-нибудь альтернативе C++.

АХ>D?

А вот это вопрос спорный. Может быть, и D, а может, и не D.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 19:53
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Я так не думаю. У D нет вобще никаких преимуществ перед темже С++. Ну может и есть пара мелочей но это не причина переходить на него с С++.


У D есть одно преимущество перед C++ — у D нет дурного наследства и нет тонн кода, написанного на D. Правда, чтобы толково воспользоваться этим преимуществом, осталось не так уж много времени (если вообще осталось), вроде как релиз уже вышел.

WH>В то время как немерле рвет C# как тузик грелку...


Да, пусть не Nemerle в чистом виде, но что-то подобное просто должно войти в мейнстрим и порвать C# как тузик грелку (всё-таки надеюсь, что это будет именно Nemerle).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 19:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Андрей Хропов, Вы писали:


АХ>>Ничего себе нет — да хотя бы тот же вывод типов, нормальные модули, юнит-тесты (на C++ нормально юнит-тесты не сделаешь), DbC, делегаты, slices, да тот же мой любимый foreach чего стоят.


VD>Я вот чего понять не могу. Если все так зашибись, то почему сам компилятор Ди на С++ написан?

А как иначе портировать? GCC есть везде. Единственная альтернатива — иметь байткод, компилятор, компилирующийся в него, и портабельную ВМ (опять же на C/C++). Но D принципиально не хочет привязываться к ВМ. Потому что он создан для системного программирования вплоть до самого низкого уровня.

А стандартная библиотека Phobos — на D.

VD>Почему его интеграция со Студией на Шарпе пишется?

уже обсуждали, да она по-моему вообще не особо пишется, тот проект заглох.

VD> И что вообще написано на Ди?

DMDScript, Empire хотя бы

VD> На чем проверено, что ди удобнее чем С++ или C#?


Чем C# — однозначно (как язык, библиотеки конечно у C# больше). Чем C++ — свои плюсы и минусы.

VD>Я вот влез в разработку того самого Немерла и могу биться об заклад, что то что Немерле дерет Ди как Тузик грелку


По фичам — в основном да. По скорости (компиляции и исполнения) — по-разному.

VD> главным образом обуславливается двумя факторами. Первых — это несомнено более талантливые авторы языка изучившие больше языков и сделавшие правильные выводы. Но воторое, по счету, а не по значимости — это то, что сам язык разрабатывается на самом себе! Это позволяет резко упростить развите и модификацию компилятора. Это же позволяет подключаться к разработке новым программистам (даже без опыта компиляторостроения). Все мощьне фичи от вывода типов и макросов, до сопоставления с образцом и квази-цитирования, все рабтают на язык. Язык позволяет проще производить эксперементы (делать прототипы), а значит быстро опробывать возникающие идеи.


+1

VD> Ди же развивается на С++

Только front-end компилятора.

VD> и С++ является главным тормозом в развитии Ди.


Нет. Я бы сказал главный тормоз — то, что Вальтер пишет компилятор один.

VD>Плюс свтор явно не знаком с передовыми технологиями в областе ФЯП.


+1

VD> Вот и получается уродец который конечно лучше чем С++, но что с того толку.


Ну знаешь нас не каждый день новыми языками (особенно быстрыми) балуют .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 20:00
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>И что у С++ и D очень много общего? Сильно сомневаюсь.


Так родня, тем более у Си и D тоже много общего.

WH>Языки то совсм разные. Что там может быть общего кроме кодогенератора?


Оптимизатор, кодовый генератор, и объектный файловый генератор, опять же линкер тоже используются из DMC.

Открыты:

This is the source code to the front end Digital Mars D compiler.
It covers the lexical analysis, parsing, and semantic analysis
of the D Programming Language defined in the documents at
www.digitalmars.com/d/

Притом это всего 1,5 мб.
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 20.01.07 20:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Оптимизатор, кодовый генератор, и объектный файловый генератор, опять же линкер тоже используются из DMC.

Я все еще не понимаю: почему lexical analysis, parsing, and semantic analysis написаны на плохом С++, а не хорошем D?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 20:13
Оценка: 1 (1)
konsoletyper wrote:
> C>Так почему он не может нормально быть сделан на managed?
> Потому, что на managed-языке он будет работать медленнее, чем на unmanaged.
А теперь представь, что медленный код нельзя локализовать.

> C>Ты представь, что у тебя оффисный пакет.

> Вот и прекрасно. Ну и на чём же проще написать офисный пакет?
"Проще" это сюда не относится. Его может проще на интерпретируемом
Питоне написать, но если результат не будет нравится пользователям —
пакет пошлют "фтопку".

> И, кстати,

> почему это офисный пакет должен занимать много места в памяти. Что там
> такого. Да и не критерий это, когда на любом нормальном компе сейчас
> стоит 512..1024 Мб. А для секретарши и 256 МБ хватит, т.к. она кроме
> одного-двух окошек с вордом ничего не открывает.
А ты представь, что у тебя открыт десяток Word'овых документов, пара
таблиц, презентация PowerPoint и Access'ная база. Вполне обычная ситуация
для оффисной работы.

> C>Ты знаешь, все это умеет делать Emacs + XRefactory. Причем *ДЛЯ **

> C>С++!*. Автокомплит делает XRef. Причем сам XRef написан на С/C++.
> Не верится мне во всё это. Хотя бы потому, что C++ нельзя полноценно
> распарсить. А если и можно, то это будет слишком долго.
Расскажи вот этим ребятам: http://www.edg.com/

> Вот, кстати, вопрос на засыпку: почему даже в VS2005 не появились такие

> же фичи по работе с кодом C++, которые есть для C#?
MS забила на С++?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 20.01.07 20:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>Оптимизатор, кодовый генератор, и объектный файловый генератор, опять же линкер тоже используются из DMC.

WH>Я все еще не понимаю: почему lexical analysis, parsing, and semantic analysis написаны на плохом С++, а не хорошем D?

Потому что (как уже говорил выше Андрей Хропов) они предназначены для интеграции с gcc.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 20.01.07 20:22
Оценка:
VladD2 wrote:
> Я вот влез в разработку того самого Немерла и могу биться об заклад, что
> то что Немерле дерет Ди как Тузик грелку
Покажи, как на Nemerle использовать C-шный API и руками вызвать
прерывание и записать байтик в порт.

Никак? Ну тогда какие вопросы?

Мне вот эти фичи нужны (причем они должны работать БЫСТРО). Поэтому мне
остается C/С++ или D.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 20.01.07 20:38
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

C>"Проще" это сюда не относится. Его может проще на интерпретируемом

C>Питоне написать, но если результат не будет нравится пользователям —
C>пакет пошлют "фтопку".

Вот как раз на питоне офисный пакет писать не стоит. При всём моём уважении к питону, для такой задачи он не предназначен.

Да и все эти проверки типа в рантайме. Потом ошибки вылавливать замучаешься. Вот, мы плавно и перешли к основной теме ветки...

Приведу гипотетическую беседу между апологетами C++ и ассемблера:

ASM>>>Ты представь, что у тебя оффисный пакет.
CPP>>Вот и прекрасно. На C++ офисный пакет написать проще.
ASM>"Проще" это сюда не относится. Его может проще на VB
ASM>написать, но если результат не будет нравится пользователям —
ASM>пакет пошлют "фтопку".


C>А ты представь, что у тебя открыт десяток Word'овых документов, пара

C>таблиц, презентация PowerPoint и Access'ная база. Вполне обычная ситуация
C>для оффисной работы.

Вот это нонсенс. Враньё. Но даже для таких случаев должно хватать 512 Мб. Мне же хватает на 2-3 VS, RSDN@Home, The bat! и Firefox с несколькими закладками.

Надо просто вспомнить, что мы не в 1997 году живём. Да и тогда 16 Мб хватало для работы MS Office 97. Ой, что за мерзавцы, должно быть, работают в MS, что не могли Office 2007 упихнуть в 16 Мб! Наверное, у них сговор с Intel.

>> Вот, кстати, вопрос на засыпку: почему даже в VS2005 не появились такие

>> же фичи по работе с кодом C++, которые есть для C#?
C>MS забила на С++?

Случайно ли?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 20.01.07 22:04
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> C>Ты представь, что у тебя оффисный пакет.

>> Вот и прекрасно. Ну и на чём же проще написать офисный пакет?
C>"Проще" это сюда не относится. Его может проще на интерпретируемом
C>Питоне написать, но если результат не будет нравится пользователям —
C>пакет пошлют "фтопку".
Питон — это еще сравнительно быстро (особенно если Psyco использовать).
Но это уже прошлый век.
Сейчас модно делать офисные пакеты на AJAX (т.е. HTML + JavaScript) :

Google Docs and Spreadsheets
Zimbra
Zoho

>> И, кстати,

>> почему это офисный пакет должен занимать много места в памяти. Что там
>> такого. Да и не критерий это, когда на любом нормальном компе сейчас
>> стоит 512..1024 Мб. А для секретарши и 256 МБ хватит, т.к. она кроме
>> одного-двух окошек с вордом ничего не открывает.
C>А ты представь, что у тебя открыт десяток Word'овых документов, пара
C>таблиц, презентация PowerPoint и Access'ная база. Вполне обычная ситуация
C>для оффисной работы.

+1
У меня на ноуте 768 Мб. Сильно не хватает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 22:05
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Ну есть некоторые проблемы, но в принципе, я за форумами D слежу, там есть люди с Java/C# опытом, которым D импонирует.


АХ>Уже переходят. Причем поток нарастает. Тот же г-н Александреску уже на форуме D тусуется.


АХ>Не знаю, в последнее время форум D очень активизировался. С Nokia люди заглядывают...


Что за форум такой?
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 22:34
Оценка: 2 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>Я вот чего понять не могу. Если все так зашибись, то почему сам компилятор Ди на С++ написан? Почему его интеграция со Студией на Шарпе пишется? И что вообще написано на Ди? На чем проверено, что ди удобнее чем С++ или C#?


Я понимаю, что с твоей стороны это скорее вопрос риторический, но вдруг кому-то действительно интересно.

Компилятор D написан на C++, потому что Walter Bright использует один и тот же backend для своих компиляторов C++ и D, который написан на C++. D не умеет вызывать C++, только C. Поэтому если бы компилятор D был бы написан на D, то для backend'а пришлось бы писать отдельный wrapper на C. Так что причины здесь чисто практического характера.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 20.01.07 23:53
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>На D можно не напрягаясь писать безопасно, например массивы контролируются, необходимости пользоватся указателями практически нет, типизация жестче, сложные и ошибкоопасные вещи типа конструкторов копирования отсутствуют. И главное на порядок меньше мест с UB.

FR>В C++ это делается только прикладывая немалые усилия.

Собственно говоря, Walter неоднократно пытался доказать это на c++.moderated. Безуспешно. Может быть D более consistent чем C++ в некоторых областях (а в некоторых менее), но то, что на нем легче чем на C++ писать, у него показать не получилось.

>И главное на порядок меньше мест с UB.


Я думаю, что когда для C++ был только один компилятор — CFront, в C++ тоже не было никаких UB.
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 21.01.07 00:32
Оценка:
Здравствуйте, alexeiz, Вы писали:

АХ>>Не знаю, в последнее время форум D очень активизировался. С Nokia люди заглядывают...


A>Что за форум такой?


здесь
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Свою операционку.


Ты видимо не в курсе, что за операционку они используют. Она называется "Уних". Это наследник Нэкста который являлся чистейшим клоном BSD Unix (который вроде как клон System V). Там только лишь дописаны куски вроде ГУИ и плаг-н-прэй сервисов. Вся обвязка осталась. Даже баш есть. Ничего они не переписывали.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Алле где эти дизайнеры? Когда они D успели оценить? Подкинь ссылочки пожалуйста.


Диназавры на месте. Они спроектировали тучу языков срди которых такие достойные как клоны МЛ-я (Хаскель, ОКамл), Ява и ее клоны (Шарп), Немерле, твой любимый Питон, любимый еао197 Руби... Да их тысячи!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

VD>>В чем в этом то? В выжимании битов из байтов? А оно нужно? Хотя возможностей для оптимизации у него в общем-то не мало.


FR>В отношении популярности среди программистов.


Тогда это очередная неадекватность с твоей стороны. Напомню что сказал Вольфахунд:

У него нет никаких преймуществ перед С++ когда нужно выжимать биты, а если нужно что-то болие высооуровневое то D рядом с темже nemerle даже близко не волялся.


Где здесь о распространенности хоть слово?

FR>Угу лет через десять.


Тоже не плохо. Пока попользумся Немерлом. Глядишь и потребность в МС уменьшится. Всегда мечтал иметь компилятор в котором можно все что хочешь поправить самому.

FR>Ну конечно а на Немерле уже мегапроекты пишутся.


Он сам мегапроект. Интеграция тоже будет интересным проектом. Самое забавное в ней будет размер. Уверн, что она будет раз в 10 меньше чем РеШарпер при том, что уступать в возможностях она ему будет не так радикально. Еще скоро мы начнем делать на нем сайт. Тоже будет проектик неординарный. Думаю, что Неперле позволит оставить конкурентов далеко позади.

FR>На D уже написано больше, и думаю будет писатся еще больше.


Можно хоть один пример? А то я лишь знаю о библиотеках. Компилятор его на С++. Интеграция со студией на C#. Сытд да и только.

FR>Я во всяком случае хочу попробовать небольшие вещи в этом году на D делать, кандидатуры уже есть, но до лета вряд-ли будет время.


Вот это интересно. Если соберешся, то расскажи про трудности и приемущества.

FR>Понимаешь ты живешь в другом мире, и поэтому бесполезно тебе что-то аргументировать.


Я живу в том же мире. Просто я не понимю зачем над собой издеваться и использовать заведомо менее мощьное средство разработки.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Я так не думаю. У D нет вобще никаких преимуществ перед темже С++. Ну может и есть пара мелочей но это не причина переходить на него с С++.


Приемущества конечно же есть. Это и модульность, и более локоничный синтаксис. Вопрос насколько эти приемущества компенсируют недостатки. А недостатков тоже много.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Если смотреть не предвзято и без так скажем (подражая Маяковскому ) без языкочванства то у D полно преимуществ перед. Притом это во многом те же преимущества что есть у C# перед C++, но плюс в том что и специфичные для C++ (нативность и шаблоны) тоже остаются.


Главные приемущества C# над С++ это:
1. Типобезопасность.
2. Компонентность.
3. Метаданные и рефлексия.

Именно их у Ди нет. У Ди есть модульность и несколько более простой синтаксис. Но у C# синтаксис еще проще, и модульность не хуже. Стало быть единственным реальным приемуществом Ди является его наэтивность. Но это ведь очень спорное приемущество. Сейчас уже вряд ли коко-то остановит установка фрэймворка.

FR>Все равно мало верится что функциональщина пойдет в массы, даже в таком удобно-адаптировном виде как немерле.


"Фунциональщина" не единственное приемущество Немерла. Ну, а то что она пойдет у меня вообще сомнения не вызвает. В C# 3.0 она уже будет довольно широко представлена. Немрле просто дает еще несколько вкусностей которые по началу можно и не использовать. А некоторые вкусности можно использовать не особо понимая как они реализованы. Вот давича в Немерле добавили макрос AbstractFactory
Автор: VladD2
Дата: 20.01.07
. Использование его элементарно. Неализация не очень, но ведь она и не будет колыхать пользвателей. На C# такое тоже можно реализовать, но сделат это будет на порядок сложнее или реализация будет мелденной (на рефлексию). Но в Шарпе хотя бы есть рефлексия и рантайм-генерация мсил-а. А у Ди и этого нет. И на нем красивое решение вообще будет нельзя сделать.

Вот ты говоришь юнит тесты в Ди встроели. Здоров наверно. Но автор убил на них время. А для Немерла юнит-тесты сделал какой-то сторонний разработчик. Напряг компиляторщиков он всего раза два вопросами в конференции. Решение получилось не хуже. И хотя лично я не вижу в нем особого смысла (у меня и с NUnit-ом проблем нет), но главное, что подобные вещи можно делать не завися от авторов языка. Да и сам язык это не расширяет. Все навороты лежат в отдельном пространстве имен и пока я его не использую они меня не трогают.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, VladD2, Вы писали:



VD>>Я вот чего понять не могу. Если все так зашибись, то почему сам компилятор Ди на С++ написан? Почему его интеграция со Студией на Шарпе пишется? И что вообще написано на Ди? На чем проверено, что ди удобнее чем С++ или C#?


FR>Мы уже говорили. Я подозреваю что у тебя нет codebase хотя бы в 100000 строк который надо подерживать и ты просто не понимаешь что такое переписать даже проект такого размера.


Я не понимаю зачем вообще было писать компилятор Ди на С++. Ну, первую — минимальную версию — еще понятно. Нужен ведь бут-страйп? Но дальще то зачем? Чтобы усложнить себе задачу? Это просто как минимум безграмотно! Я еще понял бы если бы это был интерпретатор, но речь ведь идет о более высокоуровневом С++! То и дело видно пенисометрию где Ди всячески выпячивается как довольно шустрый компилятор.

FR>Кстати я ковырялся в исходниках front end'а D для gcc. Там очень специфический С++, я бы сказал в D стиле, вообще становится понятно откуда у D ноги растут.


И все же я не погу поять почему это не Ди.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Открыты:


FR>

FR>This is the source code to the front end Digital Mars D compiler.
FR>It covers the lexical analysis, parsing, and semantic analysis
FR>of the D Programming Language defined in the documents at
FR>www.digitalmars.com/d/

FR>Притом это всего 1,5 мб.

Поглядел... Да уж если это в стиле Ди, то мне его жалого. Я нащитал только 715 вхождений goto. Не говоря о порой ужасном макаронном коде усеянном безспросветными case-ами и другими уходящии в даль конструкциями. Плюс тонный ручной работы с памятью в стиле С. Например, 61 вызов memcpy(). 22 memcmp(). 46 malloc(). 50 free. И так далее.

Ну, а 1.5 мегабайта говорят только о примитивности языка. К примеру размер лексера Немерла 51 КБ, а Ди 61 (55.4 — c + 7.7 — h). Но в Немерловом лексере по сути 3 лексера для разных нужд (один для парсинга строк, другой для парсинга файлов и третий для нужд автодополения). Плюс сами лексеры сильно отличаются по возможностям. Немерловый повзоляет использовать динамически подключаемые ключевые слова, поддерживает юникод, имеет множество расширений (например, в нем можно выделять декды в числах подчеркиваниями) и т.п. С парсером тоже аналогичная ситуация. Немерловый 127 КБ (88 MainParser.n, 20 PreParser.n, 17 MainParser-Extensions.n), а ди 101 (незнаю, может есть еще файлы). Но Немерловый парсер при всем при этом позволяет парсить два вида синтаксиса (с отступами и без), поддерживает синтаксические расширения и макросы. То есть размеры сопоставимы, а результат совершенно разный.

Что же мы имеем в итоге? А в итоге мы имеем практически одинаковый объем исходников — 1.553 МБ у Немерла и 1.489 МБ у Ди, но при этом в первом случае мы код содержит модули генерации IL-а и разные не относящиеся к компилятору вещи. Как минимум файлы:
ncc\generation\ILEmitter.n
ncc\external\LibrariesLoader.n
ncc\misc\PrettyPrint.n
ncc\codedom\NemerleCodeGenerator.n
ncc\parsing\LexerColorizer.n
ncc\completion\CodeCompletionEngine.n
ncc\codedom\NemerleCodeProvider.n

точно к фронт-энду отношения не имеют. А это 253 КБ.

Итого мы имеем компилятор несравнимо более мощьного ЯП (один вывод типов в Немерле занимает 114 КБ — самый большой файл в проекте, сопоставление с образцом, макросы, расширение синтаксиса, полноыенные лямбды с лексическими замыканиями) имеющий меньщий объем чем куда более примитивный. Списать на фрэймворк или библиотеки тут ничего нельзя, так как библиотек в каталоге dmd\src\dmd не содержит библиотек (они лежат отдельно).

Напрашивается вопрос, а не потому ли Ди насколько слабее Немерле, что для его написание исползовался более слабый язык?

И сколько было бы мегабайт занимал бы этот фрэнтэнд если бы он был написан на Ди?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Потому что немерлистам не нужно кроме немерле еще подерживать свой компилятор окамла.


Очередная неадекватность. Какой "свой компилятор окамла" нужно поддерживать Ди?

WH>>Ответ прост: D не дает ощутимых преимуществ перед С++.


FR>Нет еще проще. Автор D давно пишет компиляторы и подозреваю у него очень большой объем codebase. И главное он и сейчас является автором живого C++ компилятора.


Мы рады за него. Только к Ди это отношения не имеет. Никакой код-бэйс не стоит более мощьного языка. В конце концов свой код-бэйс можно было загнать в библиотеки. А вот потеря от создания компилятора на менее мощьном языке будут ощютимыми.

Так что я согласен с Вольфхаудом. Сам автор Ди явно не видит серьезных приемуществ в написании компилятора на Ди в сравнении с С++. Ты ведь сам говоришь, что его С++ похож на Ди. Так какая разница? А вот приемущество Немерле совершенно очевидно. Это резко упрощает сам компилятор и делает его исходники более читабельными. Любая новая фича добавленная в язык упрощает дальнейшее его развитие.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Потому что (как уже говорил выше Андрей Хропов) они предназначены для интеграции с gcc.


Ахринительная логика!

Ди у нас идимально совместим с С и С++, но при этом его нехватает для интеграции с gcc, а такие нафиг не нужные для интеграции вещи как лексер и парсер почему-то пишутся на С++.

За отмазку не канает.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка: :))
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Здравствуйте, VladD2, Вы писали:


VD>>Здравствуйте, Андрей Хропов, Вы писали:


АХ>>>Ничего себе нет — да хотя бы тот же вывод типов, нормальные модули, юнит-тесты (на C++ нормально юнит-тесты не сделаешь), DbC, делегаты, slices, да тот же мой любимый foreach чего стоят.


VD>>Я вот чего понять не могу. Если все так зашибись, то почему сам компилятор Ди на С++ написан?

АХ>А как иначе портировать?

Что портировать то? Ди ведь переносимый. Пиши себе свой фронтэнд на себе же и компилируй собой же на любой платформе. А результат уже отдавай такому же переносимому бэк-энду но написанному на С++.

АХ> GCC есть везде.


И что? Ди есть везде где есть GCC. GCC там только бэкэндом выступает. Не вижу причин по которым нельзя сделать фронтэнд на Ди.

АХ> Единственная альтернатива — иметь байткод, компилятор, компилирующийся в него, и портабельную ВМ (опять же на C/C++). Но D принципиально не хочет привязываться к ВМ.


Ты меня извини, но ты проявляешь полнешее незнание того как делаются переносимые компиляторы. Пойди для начала почитай вот эту статейку:
http://en.wikipedia.org/wiki/Frontend
Еще почитай про Bootstrapping. А потом можно будед продолжить общение на эту тему.

АХ> Потому что он создан для системного программирования вплоть до самого низкого уровня.


Ага. Точно. Создание компиляторов это явно задача не системная. Тут Ди на фиг не упал. Согласен. Тут скорее нужен Немерле. Он тут куда удобнее. А для Ди остаются исконно системные задачи вроде пенесометрии.

АХ>А стандартная библиотека Phobos — на D.


Да, не дороботка. Надо было тоже на С++ ее писать. Как они проглядели?
Кстати! А почему же на Ди? А как же переносимость? Ведь ты буквально абзацем выше обосновывал именно ею то, что Ди не пишется сам на себе. Неувязачка однако!

VD>>Почему его интеграция со Студией на Шарпе пишется?

АХ>уже обсуждали, да она по-моему вообще не особо пишется, тот проект заглох.

Как же! Такой пердовой язык, а интеграцию на нем никто не может осилеть. Более того. Даже не берутся на нем ее делать. Предпочитают Шарп просто потому, что на нем есть кое-какие обертки и недоделанный пример. Выходит библиотеки (даже кривые) намного важнее чем какой-то там язык? Может тогда не валять дурака, а потратить силы на создание библиотек, а на Ди забить вовсе?

VD>> И что вообще написано на Ди?

АХ>DMDScript, Empire хотя бы

И, что, у DMDScript с переносимостью проблем нет?
Кстати, можно поглядеть на его код?

VD>> На чем проверено, что ди удобнее чем С++ или C#?


АХ>Чем C# — однозначно (как язык, библиотеки конечно у C# больше). Чем C++ — свои плюсы и минусы.


Это однозначный треп. А я хотел бы услышать агрументы. Аргументы против Ди простые: не типобезопасен, нет встроенной поддержки компонентности, нет рефлексии, нет полноценных замыканий. Про библиотеки вообще и говорить не приходится.

VD>>Я вот влез в разработку того самого Немерла и могу биться об заклад, что то что Немерле дерет Ди как Тузик грелку


АХ>По фичам — в основном да. По скорости (компиляции и исполнения) — по-разному.


Нет там серьезной разницы по скорости. Да и странное это сравнение языков. Тогда лучший язык — ассемблер. Он всегда первым будет по скорости. Ну, а скорость реальных приложений зависит в основном от используемых алгоритмов и оптимизаций. Язык может серьезно повлиять тут если только он интерпретируется (разнца в 10 раз).

VD>> Ди же развивается на С++

АХ>Только front-end компилятора.

Хм. Бэкэнд и подавно на С++. Немерле тоже по большей части только фронтэнд. Бэкэндом у него дотнет выступает.

Так что это опять аргумент невпопад.

VD>> и С++ является главным тормозом в развитии Ди.


АХ>Нет. Я бы сказал главный тормоз — то, что Вальтер пишет компилятор один.


А это тоже во многом обусловлено тем что компилятор на С++ написан.
Немерловый компилятор в основном пишут два человека, но влезают в процесс многие. И это циликом заслуга того на чем и как написан компилятор.

АХ>Ну знаешь нас не каждый день новыми языками (особенно быстрыми) балуют .


Вот, вот. И хотелось бы, чтобы при этом было по меньше компромисов и откровенных промахов, и по болеше вкусностией и инересностей.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:42
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>VladD2 wrote:

>> Я вот влез в разработку того самого Немерла и могу биться об заклад, что
>> то что Немерле дерет Ди как Тузик грелку
C>Покажи, как на Nemerle использовать C-шный API и руками вызвать
C>прерывание и записать байтик в порт.

В очерденой раз проявляещь неадекватность. С никогда не позволял писать писать в порты и вызвать прерывания. Для этого всегда использовались библиотеки. Их можно использовать из любого языка. Хоть VBScript-а (если библиотека конечно драйвер дергает). Более того защищенные ОС вроде Линукса и Винды вообще не позволяют делать это из пользовательских приложений.

C>Никак? Ну тогда какие вопросы?


Вопросы в основном к твоей адекватности. Тесешь черти что. Серьезно даже разговаривать невозможно.

C>Мне вот эти фичи нужны (причем они должны работать БЫСТРО). Поэтому мне

C>остается C/С++ или D.

Да я что проив что ли? Только ты один хрен будешь пользоваться С++-ом хотя в реальной жизни прервывания нибудь и не вызваешь. А про ди ты языком почешешь и забудешь. От того и аргументы у тебя все как один со странностями.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:56
Оценка: 1 (1)
Здравствуйте, alexeiz, Вы писали:

A>Собственно говоря, Walter неоднократно пытался доказать это на c++.moderated. Безуспешно. Может быть D более consistent чем C++ в некоторых областях (а в некоторых менее), но то, что на нем легче чем на C++ писать, у него показать не получилось.


Это все равно что прийти в клуб станистов и доказывать, что бог — это круче.

A>Я думаю, что когда для C++ был только один компилятор — CFront, в C++ тоже не было никаких UB.


В С++ UB тупо зашиты стандартом. Они там окуратно описаны. И им там нет числа.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 01:56
Оценка: +1 -1
Здравствуйте, alexeiz, Вы писали:

A>Компилятор D написан на C++, потому что Walter Bright использует один и тот же backend для своих компиляторов C++ и D, который написан на C++. D не умеет вызывать C++, только C. Поэтому если бы компилятор D был бы написан на D, то для backend'а пришлось бы писать отдельный wrapper на C. Так что причины здесь чисто практического характера.


Этот бред он пусть рассказывает на С++.модерейтед. А мне лапшу на уши вешать не нужно. Интеграция с С++ Ди нужна как воздух. Иначе плюсовики его не примут. К тому же у gcc бэкэнд имет сишный интерфейс. С ним ведь в конце концов С-фронтэнд взаимодействет. Да и обертка было бы не так уж тяжело написать.

Все это гнелые отмазки.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 21.01.07 02:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Этот бред он пусть рассказывает на С++.модерейтед. А мне лапшу на уши вешать не нужно. Интеграция с С++ Ди нужна как воздух. Иначе плюсовики его не примут. К тому же у gcc бэкэнд имет сишный интерфейс. С ним ведь в конце концов С-фронтэнд взаимодействет. Да и обертка было бы не так уж тяжело написать.


VD>Все это гнелые отмазки.


Вполне возможно. Я тоже не очень поверил, когда это услышал. Но вот только интеграции с C++ у D никакой нет.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 21.01.07 04:15
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Ага. Точно. Создание компиляторов это явно задача не системная. Тут Ди на фиг не упал. Согласен. Тут скорее нужен Немерле. Он тут куда удобнее. А для Ди остаются исконно системные задачи вроде пенесометрии.


Упал под стол
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 08:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Свою операционку.


VD>Ты видимо не в курсе, что за операционку они используют. Она называется "Уних". Это наследник Нэкста который являлся чистейшим клоном BSD Unix (который вроде как клон System V). Там только лишь дописаны куски вроде ГУИ и плаг-н-прэй сервисов. Вся обвязка осталась. Даже баш есть. Ничего они не переписывали.


Это ты просто не в курсе каков объем этих "кусков". И также не в курсе что ядро у них то же ими во многом переписано. Есть и open source версии этого ядра (OpenDarwin).
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 08:38
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Собственно говоря, Walter неоднократно пытался доказать это на c++.moderated. Безуспешно. Может быть D более consistent чем C++ в некоторых областях (а в некоторых менее), но то, что на нем легче чем на C++ писать, у него показать не получилось.


Думаю там бесполезно

>>И главное на порядок меньше мест с UB.


A>Я думаю, что когда для C++ был только один компилятор — CFront, в C++ тоже не было никаких UB.


Скорее всего больше чем в D, просто по природе самого языка.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 08:47
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>В отношении популярности среди программистов.


VD>Тогда это очередная неадекватность с твоей стороны. Напомню что сказал Вольфахунд:

VD>

У него нет никаких преймуществ перед С++ когда нужно выжимать биты, а если нужно что-то болие высооуровневое то D рядом с темже nemerle даже близко не волялся.


Разговор шел в контексте популярности языка, так что не надо вырвывать из него.


FR>>Угу лет через десять.


VD>Тоже не плохо. Пока попользумся Немерлом. Глядишь и потребность в МС уменьшится. Всегда мечтал иметь компилятор в котором можно все что хочешь поправить самому.


Рад за вас
Я тоже буду пользоватся тем что _мне_ удобно.

FR>>Ну конечно а на Немерле уже мегапроекты пишутся.


VD>Он сам мегапроект. Интеграция тоже будет интересным проектом. Самое забавное в ней будет размер. Уверн, что она будет раз в 10 меньше чем РеШарпер при том, что уступать в возможностях она ему будет не так радикально. Еще скоро мы начнем делать на нем сайт. Тоже будет проектик неординарный. Думаю, что Неперле позволит оставить конкурентов далеко позади.


Ну и хорошо.

FR>>На D уже написано больше, и думаю будет писатся еще больше.


VD>Можно хоть один пример? А то я лишь знаю о библиотеках. Компилятор его на С++. Интеграция со студией на C#. Сытд да и только.


Примеры уже много приводили. Даже чуть выше есть. Сто раз повторять безтолку.

FR>>Я во всяком случае хочу попробовать небольшие вещи в этом году на D делать, кандидатуры уже есть, но до лета вряд-ли будет время.


VD>Вот это интересно. Если соберешся, то расскажи про трудности и приемущества.


Хорошо.

FR>>Понимаешь ты живешь в другом мире, и поэтому бесполезно тебе что-то аргументировать.


VD>Я живу в том же мире. Просто я не понимю зачем над собой издеваться и использовать заведомо менее мощьное средство разработки.


Нет у тебя другая система ценностей и взглядов на мир
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 09:01
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD>Главные приемущества C# над С++ это:

VD>1. Типобезопасность.
VD>2. Компонентность.
VD>3. Метаданные и рефлексия.

VD>Именно их у Ди нет. У Ди есть модульность и несколько более простой синтаксис. Но у C# синтаксис еще проще, и модульность не хуже.


Первые два есть, особенно по сравнению с C++.
Чем синтакис шарпа проче чем у D?

VD>Стало быть единственным реальным приемуществом Ди является его наэтивность. Но это ведь очень спорное приемущество. Сейчас уже вряд ли коко-то остановит установка фрэймворка.


Я же говорю ты в другом мире.

FR>>Все равно мало верится что функциональщина пойдет в массы, даже в таком удобно-адаптировном виде как немерле.


VD>"Фунциональщина" не единственное приемущество Немерла. Ну, а то что она пойдет у меня вообще сомнения не вызвает. В C# 3.0 она уже будет довольно широко представлена.


В питоне она уже давно широко представлена, но пользуются ею осознано мало кто ("не понимая" да пользуются). В шарпе думаю будет то же самое.То же самое и в C++ с продвинутыми возможностями шаблонов творилось и творится.

VD> Немрле просто дает еще несколько вкусностей которые по началу можно и не использовать. А некоторые вкусности можно использовать не особо понимая как они реализованы. Вот давича в Немерле добавили макрос AbstractFactory
Автор: VladD2
Дата: 20.01.07
. Использование его элементарно. Неализация не очень, но ведь она и не будет колыхать пользвателей. На C# такое тоже можно реализовать, но сделат это будет на порядок сложнее или реализация будет мелденной (на рефлексию). Но в Шарпе хотя бы есть рефлексия и рантайм-генерация мсил-а. А у Ди и этого нет. И на нем красивое решение вообще будет нельзя сделать.


Очень даже можно, будет шаблоный код в стиле Александреску с стратегиями. Притом писать такой код в D легче чем в C++.

VD>Вот ты говоришь юнит тесты в Ди встроели. Здоров наверно. Но автор убил на них время. А для Немерла юнит-тесты сделал какой-то сторонний разработчик. Напряг компиляторщиков он всего раза два вопросами в конференции. Решение получилось не хуже. И хотя лично я не вижу в нем особого смысла (у меня и с NUnit-ом проблем нет), но главное, что подобные вещи можно делать не завися от авторов языка. Да и сам язык это не расширяет. Все навороты лежат в отдельном пространстве имен и пока я его не использую они меня не трогают.


Не надо меня "агитировать за советскую власть" сам знаю что это хорошо, но необходимости в этом часто нет.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 09:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я не понимаю зачем вообще было писать компилятор Ди на С++. Ну, первую — минимальную версию — еще понятно. Нужен ведь бут-страйп? Но дальще то зачем? Чтобы усложнить себе задачу? Это просто как минимум безграмотно! Я еще понял бы если бы это был интерпретатор, но речь ведь идет о более высокоуровневом С++! То и дело видно пенисометрию где Ди всячески выпячивается как довольно шустрый компилятор.


Все доводы были выше. Но для тебя как об стенку горох.

FR>>Кстати я ковырялся в исходниках front end'а D для gcc. Там очень специфический С++, я бы сказал в D стиле, вообще становится понятно откуда у D ноги растут.


VD>И все же я не погу поять почему это не Ди.


Ты просто не хочешь понять, а может и не можешь.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 21.01.07 09:26
Оценка:
Здравствуйте, FR, Вы писали:

FR>Думаю там бесполезно


Я вижу, ты не частый посититель этой newsgroup'ы. Уровень обсуждений там на порядок выше чем здесь. Волтер просто не мог привести достаточных аргументов.

>>>И главное на порядок меньше мест с UB.


A>>Я думаю, что когда для C++ был только один компилятор — CFront, в C++ тоже не было никаких UB.


FR>Скорее всего больше чем в D, просто по природе самого языка.


Строгой спецификации языка нет. Компилятор только один. Что он выдает, то и считается определением того или иного поведения. О каком UB может вообще идти речь?
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 09:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Поглядел... Да уж если это в стиле Ди, то мне его жалого. Я нащитал только 715 вхождений goto. Не говоря о порой ужасном макаронном коде усеянном безспросветными case-ами и другими уходящии в даль конструкциями. Плюс тонный ручной работы с памятью в стиле С. Например, 61 вызов memcpy(). 22 memcmp(). 46 malloc(). 50 free. И так далее.


Старый сишник, похоже привычки выше его , в том же фобосе (rtl D) написаном на тоже прилично goto, притом как и в исходниках front end это по большей части goto Lerr; самое смешное что в D несолько способов более удобно и без goto делать очистку ресурсов. Макароный код c case это в основном конечные автоматы, не знаю писал ли он их вручную (хотя подобный динозавр мог )

Под стилем D имелось в виду писать как можно проще, то есть философия ближе к си (тот есть следование тому же spirit of C особенно пункту Keep the language small and simple.)


VD>Итого мы имеем компилятор несравнимо более мощьного ЯП (один вывод типов в Немерле занимает 114 КБ — самый большой файл в проекте, сопоставление с образцом, макросы, расширение синтаксиса, полноыенные лямбды с лексическими замыканиями) имеющий меньщий объем чем куда более примитивный. Списать на фрэймворк или библиотеки тут ничего нельзя, так как библиотек в каталоге dmd\src\dmd не содержит библиотек (они лежат отдельно).


Ты как всегда забываешь учесть что написано это практически на си. Перепиши исходники немерле на си и посравниваем.

VD>Напрашивается вопрос, а не потому ли Ди насколько слабее Немерле, что для его написание исползовался более слабый язык?


Конечно D надо было писать на Немерле.

VD>И сколько было бы мегабайт занимал бы этот фрэнтэнд если бы он был написан на Ди?


Думаю раза в два меньше точно.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 21.01.07 09:38
Оценка: -1
VladD2 wrote:
> C>Покажи, как на Nemerle использовать C-шный API и руками вызвать
> C>прерывание и записать байтик в порт.
> В очерденой раз проявляещь неадекватность. С никогда не позволял писать
> писать в порты и вызвать прерывания.
Чистый C в его ISOшном виде — нет. Все реальные диалекты С — да.
void some_func()
{
    asm int 55h
}

И т.п.

> Для этого всегда использовались библиотеки.

Агащаз. Особенно в низкоуровневом программировании.

У меня эта "библиотека" и является самым сложным в проекте. Остальная
часть, использующая ее — абсолютно примитивна, размером в пару килобайт
и может хоть на VB быть написана.

> Их можно использовать из любого языка. Хоть VBScript-а (если

> библиотека конечно драйвер дергает). Более того защищенные ОС вроде
> Линукса и Винды вообще не позволяют делать это из пользовательских
> приложений.
Пусть не разрешают.

> Вопросы в основном к твоей адекватности. Тесешь черти что. Серьезно даже

> разговаривать невозможно.
Для меня вот упоминания макросов и лямбд — черти что. Никто же это не
использует в реальной жизни.

> C>Мне вот эти фичи нужны (причем они должны работать БЫСТРО). Поэтому мне

> C>остается C/С++ или D.
> Да я что проив что ли? Только ты один хрен будешь пользоваться С++-ом
> хотя в реальной жизни прервывания нибудь и не вызваешь.
Опять ошибаешься. Лично я сейчас как раз руковожу проектом, где это все
жизненном важно.

А то что ты этим не занимаешься — это твои проблемы.

> А про ди ты

> языком почешешь и забудешь. От того и аргументы у тебя все как один со
> странностями.
Ага. А сколько идиотских странностей у Немерля — переопределяемый
синтаксис, например. Ну какому идиоту он нужен??
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 10:34
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Здравствуйте, FR, Вы писали:


FR>>Думаю там бесполезно


A>Я вижу, ты не частый посититель этой newsgroup'ы. Уровень обсуждений там на порядок выше чем здесь. Волтер просто не мог привести достаточных аргументов.


Практический никакой посетитель, лазил там (как читатель) немного в году 2003 когда Алекандреску затмил мне мозги и все
Я думаю дела не в уровне и не в аргументах а в предвзятости. Там в основном люди для которых C++ это вид спорта, и никакой D им просто не нужен


FR>>Скорее всего больше чем в D, просто по природе самого языка.


A>Строгой спецификации языка нет. Компилятор только один. Что он выдает, то и считается определением того или иного поведения. О каком UB может вообще идти речь?


Да пожалуйста в D уже есть UB замыкания синтаксически есть, и логически даже работают, но только иногда. Думаю в CFront такого было тоже полно.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 21.01.07 10:45
Оценка:
Здравствуйте, FR, Вы писали:

FR>Практический никакой посетитель, лазил там (как читатель) немного в году 2003 когда Алекандреску затмил мне мозги и все

FR>Я думаю дела не в уровне и не в аргументах а в предвзятости. Там в основном люди для которых C++ это вид спорта, и никакой D им просто не нужен

Зачем гадать, да? У тебя есть возможность составить об этом представление самому, и выяснить чего там больше: аргументов или предвзятости, если ты конечно не прочь читать длинющие баталии сообщений так на 500, которые возникают при упоминании D в том форуме. По-моему, предвзятости там очень мало.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 10:59
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>Зачем гадать, да? У тебя есть возможность составить об этом представление самому, и выяснить чего там больше: аргументов или предвзятости, если ты конечно не прочь читать длинющие баталии сообщений так на 500, которые возникают при упоминании D в том форуме. По-моему, предвзятости там очень мало.


Прямой ссылки нет?
Лучше бы конечно если ты в двух словах суть передал
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 11:48
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Потому что немерлистам не нужно кроме немерле еще подерживать свой компилятор окамла.


VD>Очередная неадекватность. Какой "свой компилятор окамла" нужно поддерживать Ди?


Digital Mars С++

FR>>Нет еще проще. Автор D давно пишет компиляторы и подозреваю у него очень большой объем codebase. И главное он и сейчас является автором живого C++ компилятора.


VD>Мы рады за него. Только к Ди это отношения не имеет. Никакой код-бэйс не стоит более мощьного языка.


Когда его у тебя нет то конечно, когда же есть может и рад бы переписать, да не реально за приемлемое время.

VD>В конце концов свой код-бэйс можно было загнать в библиотеки. А вот потеря от создания компилятора на менее мощьном языке будут ощютимыми.


Угу загнать в библиотеки компилятор, весело.

VD>Так что я согласен с Вольфхаудом. Сам автор Ди явно не видит серьезных приемуществ в написании компилятора на Ди в сравнении с С++. Ты ведь сам говоришь, что его С++ похож на Ди. Так какая разница? А вот приемущество Немерле совершенно очевидно. Это резко упрощает сам компилятор и делает его исходники более читабельными. Любая новая фича добавленная в язык упрощает дальнейшее его развитие.


Если бы D писался с нуля вы были бы правы.
Вообще почитай вот это http://www.joelonsoftware.com/articles/fog0000000069.html
Re[36]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 12:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ахринительная логика!


VD>Ди у нас идимально совместим с С и С++, но при этом его нехватает для интеграции с gcc, а такие нафиг не нужные для интеграции вещи как лексер и парсер почему-то пишутся на С++.


D у нас практически не совместим с C++.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это ты просто не в курсе каков объем этих "кусков". И также не в курсе что ядро у них то же ими во многом переписано. Есть и open source версии этого ядра (OpenDarwin).


Любая ОС со временем меняется. Но переписвание такого объема кода просто невозможно. Это ты не в крурсе "этих" объемов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Главные приемущества C# над С++ это:

VD>>1. Типобезопасность.
VD>>2. Компонентность.
VD>>3. Метаданные и рефлексия.

VD>>Именно их у Ди нет. У Ди есть модульность и несколько более простой синтаксис. Но у C# синтаксис еще проще, и модульность не хуже.


FR>Первые два есть, особенно по сравнению с C++.


Откровенная лож.

FR>Чем синтакис шарпа проче чем у D?


Переусложненностью и порой избыточностью. Особенно если сравнивать с C# 3.0.

VD>>"Фунциональщина" не единственное приемущество Немерла. Ну, а то что она пойдет у меня вообще сомнения не вызвает. В C# 3.0 она уже будет довольно широко представлена.


FR>В питоне она уже давно широко представлена, но пользуются ею осознано мало кто ("не понимая" да пользуются). В шарпе думаю будет то же самое.То же самое и в C++ с продвинутыми возможностями шаблонов творилось и творится.


Эти твои слова только подтверждают мои.

VD>> Вот давича в Немерле добавили макрос AbstractFactory
Автор: VladD2
Дата: 20.01.07
.... А у Ди и этого нет. И на нем красивое решение вообще будет нельзя сделать.


FR>Очень даже можно, будет шаблоный код в стиле Александреску с стратегиями. Притом писать такой код в D легче чем в C++.


Ну, сделай. Что трепаться, то? А мы посмотрим. Сдается мне это пустой треп. Я не вижу возможностей в Ди делать подобные вещи.

VD>>Вот ты говоришь юнит тесты в Ди встроели. Здоров наверно. Но автор убил на них время. А для Немерла юнит-тесты сделал какой-то сторонний разработчик. Напряг компиляторщиков он всего раза два вопросами в конференции. Решение получилось не хуже. И хотя лично я не вижу в нем особого смысла (у меня и с NUnit-ом проблем нет), но главное, что подобные вещи можно делать не завися от авторов языка. Да и сам язык это не расширяет. Все навороты лежат в отдельном пространстве имен и пока я его не использую они меня не трогают.


FR>Не надо меня "агитировать за советскую власть" сам знаю что это хорошо, но необходимости в этом часто нет.


В чем в этом? В том чтобы компиляторостороитель не занимался хренью? Или в том, чтобы те или иные навороты не мешали работать тем кто считает их ненужными?
По обоим пунктам — несогласен.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка:
Здравствуйте, FR, Вы писали:

FR>Старый сишник, похоже привычки выше его , в том же фобосе (rtl D) написаном на тоже прилично goto, притом как и в исходниках front end это по большей части goto Lerr; самое смешное что в D несолько способов более удобно и без goto делать очистку ресурсов. Макароный код c case это в основном конечные автоматы, не знаю писал ли он их вручную (хотя подобный динозавр мог )


Гото там по делу и без дела. Ладно...
Но неужели ты считашь, что такой диназавр может спректировать действительно достойный язык? Я просто уверен, что привычки к готу не единственные диназавовые привычки. Это же менталитет.

FR>Под стилем D имелось в виду писать как можно проще, то есть философия ближе к си (тот есть следование тому же spirit of C особенно пункту Keep the language small and simple.)


Проще? Ну, ты меня извини, но я зная С++ с трудом понимал, что конкретно делается. А незнакомый Немерле таких проблем не не вызвал. Читать код усеянный готу мне лично очень сложно.

FR>Ты как всегда забываешь учесть что написано это практически на си. Перепиши исходники немерле на си и посравниваем.


Я не забываю об этом. Я об этом и веду речь!!!

Это одно из слагаемых неудачи Ди. Автор и средство разработки определяет потенциал проекта. Так вот у ди с обоими составляющими большие проблемы. Автор — диназавр. Язвк разработки — скелет диназавра. Просто какие-то палеонтологические устории .

VD>>Напрашивается вопрос, а не потому ли Ди насколько слабее Немерле, что для его написание исползовался более слабый язык?


FR>Конечно D надо было писать на Немерле.


D надо было писать на D. Не надо передергивать.
Именно это позволило бы автору на своей шкуре прочувствовать, что надо в языке, а что является баловством.

Хотя сейчас (посмотрев на код компилятора), я понимаю, что одно это проект сильно лучше не сделало бы. Все же автор действительно мастодонт.

Читая статью о Питоне 3.0 я, при всем моем не очень хорошем отношении к Питону, все же чувствовал в авторе потенциал. Он явно понимает толк в том, что делает. А Ди делает человек с менталитетом С-программиста. Вот и получается навороченный С.

VD>>И сколько было бы мегабайт занимал бы этот фрэнтэнд если бы он был написан на Ди?


FR>Думаю раза в два меньше точно.


Это вряд ли. Я не вижу в ди средств позволяющих это сделать. ЖЦ немного помог бы. И наврено делегаты. Но автор то С-шник до глубины души. Боюсь, код один фиг был бы С-пордобным. Но меньше конечно должен был быть. Вт и интересно насколько.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Я не понимаю зачем вообще было писать компилятор Ди на С++. ...


FR>Все доводы были выше. Но для тебя как об стенку горох.


Доводов не было. Были необоснованные высказывания. Точнее заблеждения.

VD>>И все же я не погу поять почему это не Ди.


FR>Ты просто не хочешь понять, а может и не можешь.


Да, я не могу и не хочу. С++ пишется на С++. С на С. Паскаль на Паскле. Оберон на Обероне. А Ди пишется на С++. Я этого понять не могу!

Я не могу понять зачем делать язык по мощьности не превосходящий предка? А если он превосходит, то я не могу понять почему он не используется для своей разработки. Ведь это же так просто! Более мощьный язык упрощает реализацию и повзволяет сделать продут более мощьным. Это же как дважды два!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>Чистый C в его ISOшном виде — нет. Все реальные диалекты С — да.

C>
C>void some_func()
C>{
C>    asm int 55h
C>}
C>

C>И т.п.

Неадкватность нарастает. Это ассемблер. Причем конкретного процессора.
Если тебе так уж надо, напиши процедуру на ассемблере и вызвай ее из любого языка. На сегодня с этим проблем небудет никгде.

>> Для этого всегда использовались библиотеки.

C>Агащаз. Особенно в низкоуровневом программировании.

Именно так. Мне как-то кто-то рассказывал, что (если не ошибаюсь) в команде NT били по пальцам за использоание встроенного ассемблера. Ведь код должен быть на С. А ассемблер только в HAL.

C>У меня эта "библиотека" и является самым сложным в проекте. Остальная

C>часть, использующая ее — абсолютно примитивна, размером в пару килобайт
C>и может хоть на VB быть написана.

Ты конечно самый показательный случай. Тебе если позволить ты все раком сделашь и везе будешь производительности добиваться. Причем не алгоритмически, а всовывая ассемблерные вставки и убивая архитектуру проекта всяческими другими спосшбами. Это конечно то к чему надо стремиться.

C>Пусть не разрешают.


Ну, и на фиг нужны возможности которые использовать нельзя?
Что-то C#-пу в Сингулярити никак не мешает тот факт, что в нем нет встроенного ассемблера.

C>Для меня вот упоминания макросов и лямбд — черти что. Никто же это не

C>использует в реальной жизни.

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

>> Да я что проив что ли? Только ты один хрен будешь пользоваться С++-ом

>> хотя в реальной жизни прервывания нибудь и не вызваешь.
C>Опять ошибаешься. Лично я сейчас как раз руковожу проектом, где это все
C>жизненном важно.

Несомненно. Думаю ты такой проект всю жизнь искал. Иначе было бы странно. Интересно, кстати, что за цели у проекта?

C>А то что ты этим не занимаешься — это твои проблемы.


Этим вообще занимаются доли процентов от общего числа программистов. И проецировать битовыжимание в экстремальных условиях на программирование вооще — крайне бессмысленно.

>> А про ди ты

>> языком почешешь и забудешь. От того и аргументы у тебя все как один со
>> странностями.
C>Ага. А сколько идиотских странностей у Немерля — переопределяемый
C>синтаксис, например. Ну какому идиоту он нужен??

Заметь, я пишу на Немерле реальный код. Стало рассуждаю, я о том что сам пробовал и что реально сам оценил. Поклонники же Ди в основном поклонники виртуальные. Вот Ц-смаил его вроде бы реально пробовал. Но что-то его и не видно в этом обсуждении. А жаль. Интересно почему он таки отказался от использования Ди.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>Но вот только интеграции с C++ у D никакой нет.


А это архи глупо если учесть, что язык позиционируется как замена именно С++.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 12:46
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Я вижу, ты не частый посититель этой newsgroup'ы. Уровень обсуждений там на порядок выше чем здесь. Волтер просто не мог привести достаточных аргументов.


Чесно говоря я скорее соглашусь в этом вопросе с FR-ом. Там рьяные приверженцы С++ и объектиности от них достичь практически невозможно.

Я помню как С++-ники нападали на Немерле когда о нем телько начали говорить на этом форуме. Аргументы тоже были "железными". Их и сейчас не прошибешь. Это вера. С ней спорить бессмысленно. Очень не многие способны будучи экспертами в одном деле адекватно и беспритрастно оценивать некую конкурирующую технологию.

Меж тем все очень просто. Есл предположить что Ди по мощьности равен С++, то хотя бы то, что ди более безопасный и имеет моудульную организация уже приемущество.

Но объяснить это тем, что привык к боли в заднице от UB и граблей торчащих из нее, и тем кто вообще не знаком с тем что такое модульность вообще нельзя!

Плюс качество проектирования Ди действительно низкое. Его лямбды мало чем отличаются от Бустовских. Он вообще не имеет убийственных вещей вроде сопоставления с обрзцом. Решения вроде встроенных массивов вообще очень спорны. Ведь их нельзя развивать.

В итоге, результат закономерен.

Кстати! А ты сам являешся участником этой конференции? Если да, то попробуй сделать небольшую провокацию. Дай там ссылку на http://nemerle.org/Main_Page и попроси тамошних завсегдатых высказать свое мнение о нем. Бдет любопытно.

A>Строгой спецификации языка нет. Компилятор только один. Что он выдает, то и считается определением того или иного поведения. О каком UB может вообще идти речь?


Э не скжи. Тот же Шарп специально проектировали чтобы в нем небыло ЮБ. Отсуствие строгой спецификации конечно плохо. Но и без того можно оценвать те или иные архитектурные решения. Например, кнсколько я знаю, прасеру Ди не требуется знание о типах чтобы разрешать неоднозначности. Это уже упрощает создание парсеров, а значит создать для Ди качественную и при том эффективную IDE будет несравнимо проще.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 13:12
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>Первые два есть, особенно по сравнению с C++.


VD>Откровенная лож.


Выделенно

FR>>Чем синтакис шарпа проче чем у D?


VD>Переусложненностью и порой избыточностью. Особенно если сравнивать с C# 3.0.


Можешь показать конкретные примеры?
Даже так просто пример на C# который как ты думаешь будет переусложнен на D/


FR>>В питоне она уже давно широко представлена, но пользуются ею осознано мало кто ("не понимая" да пользуются). В шарпе думаю будет то же самое.То же самое и в C++ с продвинутыми возможностями шаблонов творилось и творится.


VD>Эти твои слова только подтверждают мои.


Угу пользоватся будут (всеръез и понимая) один два процента пишущих на языке.

VD>>> Вот давича в Немерле добавили макрос AbstractFactory
Автор: VladD2
Дата: 20.01.07
.... А у Ди и этого нет. И на нем красивое решение вообще будет нельзя сделать.


В C++ есть, на D будет не сложнее:

///////////////////////////////////////////////////////////////////////////////
// AbstractFactoryTest
///////////////////////////////////////////////////////////////////////////////

class Soldier { public: virtual ~Soldier() {} };
class Monster { public: virtual ~Monster() {} };
class SuperMonster { public: virtual ~SuperMonster() {} };

class SillySoldier : public Soldier {};
class SillyMonster : public Monster {};
class SillySuperMonster : public SuperMonster {};

class BadSoldier : public Soldier {};
class BadMonster : public Monster {};
class BadSuperMonster : public SuperMonster {};

typedef Loki::AbstractFactory<TYPELIST_3(Soldier, Monster, SuperMonster)> AbstractEnemyFactory; 

typedef Loki::ConcreteFactory<AbstractEnemyFactory, Loki::OpNewFactoryUnit,
  TYPELIST_3(SillySoldier, SillyMonster, SillySuperMonster)> EasyLevelEnemyFactory;

typedef Loki::ConcreteFactory<AbstractEnemyFactory, Loki::OpNewFactoryUnit,
  TYPELIST_3(BadSoldier, BadMonster, BadSuperMonster)> HardLevelEnemyFactory;

class AbstractFactoryTest : public Test
{
public:
  AbstractFactoryTest() : Test("AbstractFactory.h") {}

  virtual void execute(TestResult &result)
    {
    printName(result);

    using namespace Loki;

    bool r;

    std::auto_ptr<AbstractEnemyFactory> easyFactory(new EasyLevelEnemyFactory);
    std::auto_ptr<AbstractEnemyFactory> hardFactory(new HardLevelEnemyFactory);

    Soldier *s;

    s = easyFactory->Create<Soldier>();
    
    r= !!(typeid(*s)==typeid(SillySoldier)); //SGB !! eliminates bool-to-int performance warning

    delete s;

#ifndef __BORLANDC__

    s = hardFactory->Create<Soldier>(); //BCB bug!!! - always creates SillySoldier

    r=r && typeid(*s)==typeid(BadSoldier);

    delete s;

#endif

    testAssert("AbstractFactory",r,result);

    std::cout << '\n';
    }
} abstractFactoryTest;

#endif


FR>>Очень даже можно, будет шаблоный код в стиле Александреску с стратегиями. Притом писать такой код в D легче чем в C++.


VD>Ну, сделай. Что трепаться, то? А мы посмотрим. Сдается мне это пустой треп. Я не вижу возможностей в Ди делать подобные вещи.


Неинтересно локи на D переписывать.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 13:39
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Прямой ссылки нет?

FR>Лучше бы конечно если ты в двух словах суть передал

Лучше ссылку. А то
— Слышали мы вашего корузо — дерьмо!
— Где же ты его слышал?
— Да Ванька из соседнего подезда непел.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 21.01.07 13:49
Оценка: 1 (1) +1
VladD2 wrote:
> C>И т.п.
> Неадкватность нарастает. Это ассемблер. Причем конкретного процессора.
Wow! Ты заметил!

> Если тебе так уж надо, напиши процедуру на ассемблере и вызвай ее из

> любого языка. На сегодня с этим проблем небудет никгде.
Вызов ассемблерной функции — слишком дорог (формирование фрейма, call и
т.п.). У меня в коде куча мест, где нужно работать с портами или
аппаратными регистрами. Причем работать БЫСТРО.

Конечно, можно взять более мощный процессор — но это увеличение цены
устройства на несколько долларов. А у нас и так profit margin совсем
небольшой.

Вот С/С++ и D позволяют мне это делать, а управляемые среды — нет
(возможно, исключением будет только LLVM в которой можно встраивать свои
ассемблерные команды).

>> > Для этого всегда использовались библиотеки.

> C>Агащаз. Особенно в низкоуровневом программировании.
> Именно так. Мне как-то кто-то рассказывал, что (если не ошибаюсь) в
> команде NT били по пальцам за использоание встроенного ассемблера. Ведь
> код должен быть на С. А ассемблер только в HAL.
Ядро — это ерунда. Можно посмотреть в Linux — там на ассемблере в самом
ядре не так уж и много всего.

А вот драйверы устройств — это уже совсем другое дело.

> C>У меня эта "библиотека" и является самым сложным в проекте. Остальная

> C>часть, использующая ее — абсолютно примитивна, размером в пару килобайт
> C>и может хоть на VB быть написана.
> Ты конечно самый показательный случай. Тебе если позволить ты все раком
> сделашь и везе будешь производительности добиваться. Причем не
> алгоритмически, а всовывая ассемблерные вставки и убивая архитектуру
> проекта всяческими другими спосшбами. Это конечно то к чему надо
> стремиться.
Вообще, производительность — это то чего я добиваюсь. И это у меня
получается, между прочим. При этом как алгоритмическими путями, так и
хардкорно-железными. Архитектура при этом у меня не страдает.

Кстати, я прекрасно понимаю, что часто лишний процент скорости ценой
трехкратного времени разработки нафиг не нужен. Например, у меня на
сервере используется JBoss (а это Java!) и мне пофиг во сколько раз
медленнее оно работает, чем то же самое на С++. Просто воткнем еще один
сервер в кластер, когда нужно будет. Пара тысяч долларов экономии на
лишнем сервере ничего не решают.

Однако, скорость клиентских приложений и девайсов, которые будут
производится десятками тысяч — это уже другой вопрос. Тут экономия
нескольких долларов может вылится в сотни тысяч баксов общей экономии.

А 100 килобаксов — это годовая зарплата неплохого программиста. Вот и
считай.

> C>Пусть не разрешают.

> Ну, и на фиг нужны возможности которые использовать нельзя?
1) Кто говорит про то, что мой софт работает под Линуксом? (а он
работает на почти голом железе).
2) Кто говорит про то, что мой софт работает не в ядре?

> C>Для меня вот упоминания макросов и лямбд — черти что. Никто же это не

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

> C>Опять ошибаешься. Лично я сейчас как раз руковожу проектом, где это все

> C>жизненном важно.
> Несомненно. Думаю ты такой проект всю жизнь искал. Иначе было бы
> странно. Интересно, кстати, что за цели у проекта?
Как ни странно, мне его предложил заказчик. Проект — создание системы
связных биометрических и RFID-датчиков для отслеживания персонала
(time&attendance tracking) и много чего еще. Детали могу рассказать в
личной почте.

> C>А то что ты этим не занимаешься — это твои проблемы.

> Этим вообще занимаются доли процентов от общего числа программистов. И
> проецировать битовыжимание в экстремальных условиях на программирование
> вооще — крайне бессмысленно.
Большая часть программистов пишут на VB. Почему ты не защищаешь VB и не
пропагандируешь его суперкрутые фичи?

> C>Ага. А сколько идиотских странностей у Немерля — переопределяемый

> C>синтаксис, например. Ну какому идиоту он нужен??
> Заметь, я пишу на Немерле реальный код. Стало рассуждаю, я о том что сам
> пробовал и что реально сам оценил.
Я пишу на С++ реальный код. На D я сейчас пристально смотрю (уже
несколько лет), так как он мне подходит по многим параметрам. В
следующей фазе проекта я его буду пытаться использовать в качестве
эксперимента.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[36]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 14:03
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Проще? Ну, ты меня извини, но я зная С++ с трудом понимал, что конкретно делается. А незнакомый Немерле таких проблем не не вызвал. Читать код усеянный готу мне лично очень сложно.


Мне тоже. Проще имется в виду именно философия D а не то в каком стиле пишет сам автор мне кажется он придерживется spirit of C (http://www.onembedding.com/articles/spirit-of-c/)

FR>>Ты как всегда забываешь учесть что написано это практически на си. Перепиши исходники немерле на си и посравниваем.


VD>Я не забываю об этом. Я об этом и веду речь!!!


Угу совершено при этом не воспринимая доводы.

VD>Это одно из слагаемых неудачи Ди. Автор и средство разработки определяет потенциал проекта. Так вот у ди с обоими составляющими большие проблемы. Автор — диназавр. Язвк разработки — скелет диназавра. Просто какие-то палеонтологические устории .


Автор да, язык вполне нормален, для свой ниши вообще хорош.


VD>D надо было писать на D. Не надо передергивать.

VD>Именно это позволило бы автору на своей шкуре прочувствовать, что надо в языке, а что является баловством.

Ну конечно ты наверно лично не один язык написал.

VD>Хотя сейчас (посмотрев на код компилятора), я понимаю, что одно это проект сильно лучше не сделало бы. Все же автор действительно мастодонт.




VD>Читая статью о Питоне 3.0 я, при всем моем не очень хорошем отношении к Питону, все же чувствовал в авторе потенциал. Он явно понимает толк в том, что делает. А Ди делает человек с менталитетом С-программиста. Вот и получается навороченный С.


Угу так оно и есть.

VD>Это вряд ли. Я не вижу в ди средств позволяющих это сделать. ЖЦ немного помог бы. И наврено делегаты. Но автор то С-шник до глубины души. Боюсь, код один фиг был бы С-пордобным. Но меньше конечно должен был быть. Вт и интересно насколько.


Ну тут гадать только можно, желающих переписать не видно.
Re[37]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 21.01.07 14:54
Оценка: +1
Здравствуйте, FR, Вы писали:

VD>>Это вряд ли. Я не вижу в ди средств позволяющих это сделать. ЖЦ немного помог бы. И наврено делегаты. Но автор то С-шник до глубины души. Боюсь, код один фиг был бы С-пордобным. Но меньше конечно должен был быть. Вт и интересно насколько.

FR>Ну тут гадать только можно, желающих переписать не видно.
Правильно. Дураков нет. Ибо D ничего радикально не упрощает. Следовательно получатся теже яйца только в профиль.
А вот еслибы он был сравним по мощьности с немерле то давно бы переписали. Ибо компилятор на языке с алгебраическими типами и сравнением с образцо писать сильно проще.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 16:27
Оценка:
Здравствуйте, FR, Вы писали:

FR>Можешь показать конкретные примеры?

FR>Даже так просто пример на C# который как ты думаешь будет переусложнен на D/

Любой пример из LINQ. Еще можно посмеяться как ты в дизайнере формочку создашь.
Вот это можешь попробовать повторить
Автор: VladD2
Дата: 11.05.04
.

FR>В C++ есть, на D будет не сложнее:...


А можно в этот примерчик к классам добавить конструкторы разные? И в функции Create<X>() задать эти параметры?
А еще лучше, повторить вот этот пример
Автор: VladD2
Дата: 20.01.07
.
using Nemerle.DesignPatterns;

class X['a] {
  public this (_x : int) { }    
}
class Y { 
  public this (_x : int) { }    
  public this (_x : string) { }    
}

class SX : X[int] {
  public this (x : int) { base (x) }    
}
class SY : Y {
  public this (x : int) { base (x) }    
  public this (x : string) { base (x) }    
}

class W ['a,'b] { }
class Z  { }

[AbstractFactory (X[int],Y, W [_, string], System.Exception)]
class Factory { }

[AbstractFactory (Override (SX, X[int]), Override (SY, Y), Z)]
class SubFactory : Factory { }

mutable f : Factory = Factory ();
def sf = SubFactory ();

System.Console.WriteLine (f.CreateX (1));
System.Console.WriteLine (f.CreateY (1));
System.Console.WriteLine (f.CreateY ("aa"));
System.Console.WriteLine (f.CreateW ());
System.Console.WriteLine (f.CreateException ("aa"));

f = sf;

System.Console.WriteLine (f.CreateX (1));
System.Console.WriteLine (f.CreateY (1));
System.Console.WriteLine (f.CreateY ("aa"));
System.Console.WriteLine (f.CreateW ());

System.Console.WriteLine (sf.CreateZ ());

/*
BEGIN-OUTPUT
X`1[System.Int32]
Y
Y
W`2[System.Object,System.String]
System.Exception: aa
SX
SY
SY
W`2[System.Object,System.String]
Z
END-OUTPUT
*/


FR>Неинтересно локи на D переписывать.


Дык по твоим же словам Локи вроде не нужна на Ди. У него же шаблоны с переменным число параметров. А Локи в основном проблему их отсуствия решает.

Тут, как я вижу, проблема в другом. Я не вижу пути как создать по одельной перегрузки для каждого конструктора. Заметь в примере Немерла CreateY() мало того что принимает параметр (который потом передает конструктору), он еще принимает разные параметры, такие как описаны в классе. Насколько я понимаю, на C++ это сделать невозможно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 16:29
Оценка:
Здравствуйте, WolfHound, Вы писали:


FR>>Ну тут гадать только можно, желающих переписать не видно.

WH>Правильно. Дураков нет. Ибо D ничего радикально не упрощает. Следовательно получатся теже яйца только в профиль.

тебе тоже сюда http://www.joelonsoftware.com/articles/fog0000000069.html

WH>А вот еслибы он был сравним по мощьности с немерле то давно бы переписали. Ибо компилятор на языке с алгебраическими типами и сравнением с образцо писать сильно проще.


Ну конечно что нам стоит переписать проектик в несколько человеко-лет, раз плюнуть.
То что мы писали N лет перпишем за N/2 года, фигня нам же все равно делать нечего.
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 16:36
Оценка:
Здравствуйте, FR, Вы писали:

FR>тебе тоже сюда http://www.joelonsoftware.com/articles/fog0000000069.html


Слушай, если тебе доставляет удовольствие читать этого товарища, то наслаждайся этим в одиночку.

FR>Ну конечно что нам стоит переписать проектик в несколько человеко-лет, раз плюнуть.


Он мог изначально писать все на Ди.
Да и сейчас при наличи исходников компилятора С++ не составит труда написать конвертер.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[36]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 17:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Можешь показать конкретные примеры?

FR>>Даже так просто пример на C# который как ты думаешь будет переусложнен на D/

VD>Любой пример из LINQ. Еще можно посмеяться как ты в дизайнере формочку создашь.


Мы люди темный линкуев у нас нет так же желательно бы ссылочку на примерчик.

VD>Вот это можешь попробовать повторить
Автор: VladD2
Дата: 11.05.04
.


А причем тут синтаксис? Это же чистое использование рефлексии.
Крекер же сообщений сделать можно но скорее всего будет хуже без динамики.

FR>>В C++ есть, на D будет не сложнее:...


VD>А можно в этот примерчик к классам добавить конструкторы разные? И в функции Create<X>() задать эти параметры?


Параметры можно в D в шаблонах намного легче работать с переменным числом параметров чем в C++.

VD>А еще лучше, повторить вот этот пример
Автор: VladD2
Дата: 20.01.07
.


До следующих выходных у меня времени точно не будет, ладно когда буду ковырять D попробую ковырять в направлении твоих примеров

FR>>Неинтересно локи на D переписывать.


VD>Дык по твоим же словам Локи вроде не нужна на Ди. У него же шаблоны с переменным число параметров. А Локи в основном проблему их отсуствия решает.


Нет локи совсем другие проблемы решает. Но локи слишком непрактичен, он хорош только как учебный материал.
На D многие шаблоные вещи сильно упрощается, вот например boost::bind 2181 строка, std.bind из D 1054 (притом густо комментированные в отличии от буста). Кроме того шаблоный код D'шного бинда вполне читабелен.

VD>Тут, как я вижу, проблема в другом. Я не вижу пути как создать по одельной перегрузки для каждого конструктора. Заметь в примере Немерла CreateY() мало того что принимает параметр (который потом передает конструктору), он еще принимает разные параметры, такие как описаны в классе. Насколько я понимаю, на C++ это сделать невозможно.


В C++ можно через ж... делая кучу заранее перегруженных методов, в D извращатся не нужно есть Variadic Templates (http://www.digitalmars.com/d/variadic-function-templates.html)
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 21.01.07 17:20
Оценка:
Здравствуйте, FR, Вы писали:

FR>тебе тоже сюда http://www.joelonsoftware.com/articles/fog0000000069.html

Это я уже читал.
Тут совсем другой вопрос.
Там переписывали с С++ на С++. А тут на болие мощьный язык.

FR>Ну конечно что нам стоит переписать проектик в несколько человеко-лет, раз плюнуть.

FR>То что мы писали N лет перпишем за N/2 года, фигня нам же все равно делать нечего.
В случае с D 2 это слишком оптимистично но в случае с темже немерле там может быть 10, а то и больше.
А все по тому что алгебраические типы и сравнение с образцом дают огромные преимущества при разработки компиляторов.
По сравнению с ними даже компиляторы компиляторов которые должны на таких задачах рулить сливают по полной.
А если впомнить что в AST обычно много похожего кода который можно сгенерить макросами...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 17:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>тебе тоже сюда http://www.joelonsoftware.com/articles/fog0000000069.html


VD>Слушай, если тебе доставляет удовольствие читать этого товарища, то наслаждайся этим в одиночку.


У меня в отношении этого товарища крайне противоречивые чувства. Но тут он правильно и по теме выступил, но вам похоже этого не понять.

FR>>Ну конечно что нам стоит переписать проектик в несколько человеко-лет, раз плюнуть.


VD>Он мог изначально писать все на Ди.


Ты сильно недооцениваешь динозавристость товарища:

/* Copyright (C) 1986-2001 by Digital Mars. */



VD>Да и сейчас при наличи исходников компилятора С++ не составит труда написать конвертер.


Конечно нетрудно, языком.
Но даже это не важно. Главное зачем?
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 17:30
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>тебе тоже сюда http://www.joelonsoftware.com/articles/fog0000000069.html

WH>Это я уже читал.
WH>Тут совсем другой вопрос.
WH>Там переписывали с С++ на С++. А тут на болие мощьный язык.

Вопрос тот же и очень простой: Нахрена?

FR>>Ну конечно что нам стоит переписать проектик в несколько человеко-лет, раз плюнуть.

FR>>То что мы писали N лет перпишем за N/2 года, фигня нам же все равно делать нечего.
WH>В случае с D 2 это слишком оптимистично но в случае с темже немерле там может быть 10, а то и больше.


А почему не в 100?

WH>А все по тому что алгебраические типы и сравнение с образцом дают огромные преимущества при разработки компиляторов.

WH>По сравнению с ними даже компиляторы компиляторов которые должны на таких задачах рулить сливают по полной.
WH>А если впомнить что в AST обычно много похожего кода который можно сгенерить макросами...

А еще если вспомнить что то что выложено походу 1/10 часть кода, и 9/10 не компиляторная часть где ML языки на высоте, а куча низкого уровня то получится что N с треском пролетит.
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 21.01.07 17:35
Оценка:
Здравствуйте, FR, Вы писали:

FR>Вопрос тот же и очень простой: Нахрена?

Чтобы значительно упростить поддержку и развитие.

FR>А еще если вспомнить что то что выложено походу 1/10 часть кода, и 9/10 не компиляторная часть где ML языки на высоте, а куча низкого уровня то получится что N с треском пролетит.

Что такое низкоуровневый код? Уж не кодогенератор ли? Так там тоже немерле рулит по полной.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 17:58
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>Вопрос тот же и очень простой: Нахрена?

WH>Чтобы значительно упростить поддержку и развитие.

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

FR>>А еще если вспомнить что то что выложено походу 1/10 часть кода, и 9/10 не компиляторная часть где ML языки на высоте, а куча низкого уровня то получится что N с треском пролетит.

WH>Что такое низкоуровневый код? Уж не кодогенератор ли? Так там тоже немерле рулит по полной.

RTL хотя бы, который кстати в D на D написан, хотя и сильно использует и сишный RTL.
Re[37]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 18:29
Оценка:
Здравствуйте, FR, Вы писали:

FR>Мы люди темный линкуев у нас нет так же желательно бы ссылочку на примерчик.


http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx

VD>>Вот это можешь попробовать повторить
Автор: VladD2
Дата: 11.05.04
.


FR>А причем тут синтаксис? Это же чистое использование рефлексии.


Атрибуты — это синтаксис. Врочем дело не только в синтаксисе.

FR>Крекер же сообщений сделать можно но скорее всего будет хуже без динамики.


Чтобы его сделать хошо нужны средства рефлексси. Они не обязаны быть динамическими. Статики тут хватило бы. Но как я понимаю, этого все равно нет в Ди.

FR>Параметры можно в D в шаблонах намного легче работать с переменным числом параметров чем в C++.


Ну, то есть ты понял, что на С++ это не повтрить? ОК, если ты утверждаешь, что на Ди это реализуется, то я бы с удовольствием поглядел бы на то как это выглядит.
Лично у меня сильные сомнения, то это возможно. Немерловый макрос получает описание типов, анализирует его конструторы и на основании этой информации добавляет соотвествующие фабричные методы. В шаблонной идеологии анализировать типы нельзя.

VD>>А еще лучше, повторить вот этот пример
Автор: VladD2
Дата: 20.01.07
.


FR>До следующих выходных у меня времени точно не будет, ладно когда буду ковырять D попробую ковырять в направлении твоих примеров


Думаю, что это безсполезно. Но если у тебя что-то получится, то будет очень интересно поглядеть.

FR>Нет локи совсем другие проблемы решает. Но локи слишком непрактичен, он хорош только как учебный материал.


Какую же?

FR>На D многие шаблоные вещи сильно упрощается, вот например boost::bind 2181 строка, std.bind из D 1054 (притом густо комментированные в отличии от буста). Кроме того шаблоный код D'шного бинда вполне читабелен.


Я не понимаю зачем вообще такие вещи библиотеками делать. Это базовый функционал языка.

VD>>Тут, как я вижу, проблема в другом. Я не вижу пути как создать по одельной перегрузки для каждого конструктора. Заметь в примере Немерла CreateY() мало того что принимает параметр (который потом передает конструктору), он еще принимает разные параметры, такие как описаны в классе. Насколько я понимаю, на C++ это сделать невозможно.


FR>В C++ можно через ж... делая кучу заранее перегруженных методов,


Зачем нужны кучи заранее прегруженных методов? У них же будут обобщенные сигнатуры. Конкретные же типы заранее не подставить.

FR>в D извращатся не нужно есть Variadic Templates (http://www.digitalmars.com/d/variadic-function-templates.html)


Это всего лишь переменное число параметров. А в данной задаче нужно сгенерироать Х методов, где Х равно количеству публичных конструкторов. Причем методы должны копировать сигнатуры методов. Обрати внимание, они не должны быть обобщенными. Полноценными макросами которые могут получить описание типа задача решается чисто и красиво. А на шаблонах вряд ли. Я не вижу даже очень извращенных способов. Хотя... извращения как пути господни... не исповедимы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.07 18:29
Оценка:
Здравствуйте, FR, Вы писали:

FR>Но даже это не важно. Главное зачем?


Чтобы сделать язык лучше. Чтобы упростить его развите и поддержку.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 19:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx


Хорошо. Хотя тут больше примеры использования готовых функций, но интересно попробую кое-что на D повторить.


FR>>А причем тут синтаксис? Это же чистое использование рефлексии.


VD>Атрибуты — это синтаксис. Врочем дело не только в синтаксисе.


Не атрибуты без рефлексии не нужны.

FR>>Крекер же сообщений сделать можно но скорее всего будет хуже без динамики.


VD>Чтобы его сделать хошо нужны средства рефлексси. Они не обязаны быть динамическими. Статики тут хватило бы. Но как я понимаю, этого все равно нет в Ди.


Необязательно, можно и на шаблонах попытатся, в общем надо изучить вопрос.

FR>>Параметры можно в D в шаблонах намного легче работать с переменным числом параметров чем в C++.


VD>Ну, то есть ты понял, что на С++ это не повтрить?


Я не смогу, у меня и интузизма нет и без тренировки со страшными шаблонами потерял уровень. Надо спросить здешних C++ монстров.

VD>ОК, если ты утверждаешь, что на Ди это реализуется, то я бы с удовольствием поглядел бы на то как это выглядит.


Попробую, но сейчас работать надо времени вообще нет, придется опять себя от всех форумов забанить.

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


Ну в некторой степени можно.


FR>>Нет локи совсем другие проблемы решает. Но локи слишком непрактичен, он хорош только как учебный материал.


VD>Какую же?


Показать как можно вы...тся на C++

FR>>На D многие шаблоные вещи сильно упрощается, вот например boost::bind 2181 строка, std.bind из D 1054 (притом густо комментированные в отличии от буста). Кроме того шаблоный код D'шного бинда вполне читабелен.


VD>Я не понимаю зачем вообще такие вещи библиотеками делать. Это базовый функционал языка.


Ну в D многое загнали в базу. Но просто посмотри исходни и сравни с бустовскими.

VD>>>Тут, как я вижу, проблема в другом. Я не вижу пути как создать по одельной перегрузки для каждого конструктора. Заметь в примере Немерла CreateY() мало того что принимает параметр (который потом передает конструктору), он еще принимает разные параметры, такие как описаны в классе. Насколько я понимаю, на C++ это сделать невозможно.


Можно решать с другого конца ничего не анализировать просто все тупо перегружать.

FR>>В C++ можно через ж... делая кучу заранее перегруженных методов,


VD>Зачем нужны кучи заранее прегруженных методов? У них же будут обобщенные сигнатуры. Конкретные же типы заранее не подставить.


Там не нужны конкретные типы, нужно просто кучу перегрузок по числу возможно используемых сигнатур (например до 10 аргументов). Конкретные типы выведутся потом по шаблоной функции.

FR>>в D извращатся не нужно есть Variadic Templates (http://www.digitalmars.com/d/variadic-function-templates.html)


VD>Это всего лишь переменное число параметров. А в данной задаче нужно сгенерироать Х методов, где Х равно количеству публичных конструкторов. Причем методы должны копировать сигнатуры методов. Обрати внимание, они не должны быть обобщенными. Полноценными макросами которые могут получить описание типа задача решается чисто и красиво. А на шаблонах вряд ли. Я не вижу даже очень извращенных способов. Хотя... извращения как пути господни... не исповедимы.


Будет не сгенерированно, а перегруженно N методов, результат в общем тот же.
Re[38]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 21.01.07 20:14
Оценка: 4 (1)
VladD2 wrote:
> Чтобы его сделать хошо нужны средства рефлексси. Они не обязаны быть
> динамическими. Статики тут хватило бы. Но как я понимаю, этого все равно
> нет в Ди.
Есть, причем в виде библиотеки:
http://www.digitalmars.com/d/archives/digitalmars/D/8174.html
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[38]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 20:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это всего лишь переменное число параметров. А в данной задаче нужно сгенерироать Х методов, где Х равно количеству публичных конструкторов. Причем методы должны копировать сигнатуры методов. Обрати внимание, они не должны быть обобщенными. Полноценными макросами которые могут получить описание типа задача решается чисто и красиво. А на шаблонах вряд ли. Я не вижу даже очень извращенных способов. Хотя... извращения как пути господни... не исповедимы.


Полноценную фабрику городить долго, я кажется вычленил основную по твоему трудность.
Насколько я понял ты утверждаешь что нельзя создать некий объект который принимает класс и передает в этот класс параметры, при том число и тип параметров у конструкторов принимаемых классов может быть произвольным. На D это оказалось несложно:

import std.stdio;

// тестовые классы с разным числом и типом аргументов в конструкторе

class Test_0
{   
    this()
    {
        writefln("Test0");
    }
}

class Test_int
{   
    this(int x)
    {
        writefln("Test_int ", x);
    }
}

class Test_int_int
{   
    this(int x, int y)
    {
        writefln("Test_int_int ", x, " ", y);
    }
}

class Test_int_str
{   
    this(int x, char [] y)
    {
        writefln("Test_int_str ", x, " ", y);
    }   
}


// конструкция для создания нового класса

struct Fab(T)
{
    T create(A...)(A args)
     {   
     return new T(args);
     }    
}


void main()
{
// создаем экземпляры 
    
auto t0        = Fab!(Test_0).create();    
auto t_int     = Fab!(Test_int).create(1);
auto t_int_int = Fab!(Test_int_int).create(1, 2);
auto t_int_str = Fab!(Test_int_str).create(1, cast(char[])"test");
}
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 21.01.07 21:02
Оценка:
FR>Полноценную фабрику городить долго, я кажется вычленил основную по твоему трудность.
FR>Насколько я понял ты утверждаешь что нельзя создать некий объект который принимает класс и передает в этот класс параметры, при том число и тип параметров у конструкторов принимаемых классов может быть произвольным. На D это оказалось несложно:

Правильнее будет:

Насколько я понял ты утверждаешь что нельзя создать некую конструкцию которая принимает класс (здесь тип класса) и создает этот класс вызывая конструктор с параметрами, при том число и тип параметров у конструкторов принимаемых классов может быть произвольным.
Re[37]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 22.01.07 03:35
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, VladD2, Вы писали:


VD>>Вот это можешь попробовать повторить
Автор: VladD2
Дата: 11.05.04
.


FR>А причем тут синтаксис? Это же чистое использование рефлексии.

FR>Крекер же сообщений сделать можно но скорее всего будет хуже без динамики.

Я видел даже лучше:здесь. sample_dlg_handler::on_move — самодостаточная функция обрабатывающая WM_MOUSEMOVE. Кроме ее описания она нигде в коде не фигурирует. Никаких таблиц сообщений, и т.д. и т.п.
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 22.01.07 04:18
Оценка:
Здравствуйте, FR, Вы писали:

FR>Полноценную фабрику городить долго, я кажется вычленил основную по твоему трудность.

FR>Насколько я понял ты утверждаешь что нельзя создать некий объект который принимает класс и передает в этот класс параметры, при том число и тип параметров у конструкторов принимаемых классов может быть произвольным. На D это оказалось несложно:

FR>struct Fab(T)
FR>{
FR>    T create(A...)(A args)
FR>     {   
FR>     return new T(args);
FR>     }    
FR>}


FR>void main()
FR>{
FR>// создаем экземпляры 
    
FR>auto t0        = Fab!(Test_0).create();    
FR>auto t_int     = Fab!(Test_int).create(1);
FR>auto t_int_int = Fab!(Test_int_int).create(1, 2);
FR>auto t_int_str = Fab!(Test_int_str).create(1, cast(char[])"test");
FR>}
FR>


C++09 будет очень близок к D в этом случае:
template <typename T>
struct Fab
{
    template <typename ...A>
    T * create(A&&... args)
    {
        return new T(args...);
    }
}

int main()
{
    auto t0 = Fab<Test_0>().create();
    auto t1 = Fab<Test_int>().create(1);
    // и т.д.
}


Ну а пока что задача решается перегрузкой create для всевозможного количества аргументов.
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: Klapaucius  
Дата: 22.01.07 08:35
Оценка: +1 -1 :)))
Здравствуйте, FR, Вы писали:

VD>>Лямбда без лексического замыкания — это нонсенс!

FR>Угу. Но все равно вещь вкусная и полезная.

Это без замыкания-то? Ну-ну.
Все равно что сказать, что автомобиль без двигателя вещь достаточно полезная — если на нем не ездить, двигатель не нужен, так что все в порядке — ведь зато можно крутить баранку, бибикать и хранить перчатки в бардачке.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: Laughing_Silencer  
Дата: 22.01.07 09:31
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, Laughing_Silencer, Вы писали:


L_S>>Использование Жабы или Шарпа для встроенного ПО просто нецелесообразно и вряд ли будет целесообразно — они нацелены на другое.


AF>Область программ для мобильников сейчас практически полностью оккупирована J2ME. Найдешь причичины этому факту?


Да ну ??? Если имеются ввиду устанавливаемые пользовательские приложения, то да, а если имеются ввиду приложения самого телефона, то жавы там нет вообще (там 90% С кода, а UI на С++ обычно) ! Последняя попытка написать телефон на основе жавы в Мотороле с треском провалилась — за 2 года не удалось добиться сколь нибудь приемлимого быстродействия даже для обычных приложений хотя переписана жава framework был оптимизирован сильно (я уж про гсм стеки, декодиндг и прочее молчу). Вышел единственный продукт А1000 (если правильно помню), да и тот тормозной.
Написание пользовательских приложений на жаве связанны с тем, что нету для С++ интерфейса взаимодействия, да и безопасность такого телефона будет очень низкой, а жава работает в отдельном процессе и о безопасности особо не нужно заботится т.к. прямого доступа к памяти нету.
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 10:21
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, VladD2, Вы писали:


VD>>Это всего лишь переменное число параметров. А в данной задаче нужно сгенерироать Х методов, где Х равно количеству публичных конструкторов. Причем методы должны копировать сигнатуры методов. Обрати внимание, они не должны быть обобщенными. Полноценными макросами которые могут получить описание типа задача решается чисто и красиво. А на шаблонах вряд ли. Я не вижу даже очень извращенных способов. Хотя... извращения как пути господни... не исповедимы.


FR>Полноценную фабрику городить долго, я кажется вычленил основную по твоему трудность.


Не, как раз фабрику то поглядеть и охота. А то простые примеры много ге можно сварганить.

FR>Насколько я понял ты утверждаешь что нельзя создать некий объект который принимает класс и передает в этот класс параметры, при том число и тип параметров у конструкторов принимаемых классов может быть произвольным. На D это оказалось несложно:...


Согласен, это более гибкий подход чем в С++, но мне кажется ты решил другую задачу. Ты создал обобщенный метод транслирующий вызовы с переменным количеством параметров. Это здорово, но не то что нужно. А нужно сгенерировать набор конкретных методов имеющий вточности такой набор параметров как набор параметров конструкторов. Причем методы должны быть виртуальными. Иначе в уточненной фабрике вызовется конструктор котый не существовал ранее. А это уже не фабрика.

Так что мне по прежнему очень интересно поглядить на полноценную реализацию фабрики класса на Ди. Ну, если кто-то на С++ извернется, то будет вообще супер. Но в это верится еще меньше.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 10:21
Оценка:
Здравствуйте, FR, Вы писали:

FR>Правильнее будет:


FR>Насколько я понял ты утверждаешь что нельзя создать некую конструкцию которая принимает класс (здесь тип класса) и создает этот класс вызывая конструктор с параметрами, при том число и тип параметров у конструкторов принимаемых классов может быть произвольным.


Нет, я утверждаю (точнее предпологаю, оставляя поле для сомнения), что на С++ и Ди невозомжно сгенерировать методы нужной сигнатуры по описанию заданному ссылкой на тип.

Приведенный макрос делает следующее:
1. Разбирает выражения переданные ему в качестве парамтров.
2. Находит типы которым соотвествют эти вражения.
3. Анализирует эти типы находя публичные конструкторы.
4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).

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

Теперь почему я считаю, что на Ди и С++ это невозможно в принципе.
Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.
Еще одной проблемой яывляется то, что они не могут добавлять истинно новые желементы в код. Они могут толь гибко растраивать обобщенные методы и типы. А этого не всегда достаточно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 10:21
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Есть, причем в виде библиотеки:

C>http://www.digitalmars.com/d/archives/digitalmars/D/8174.html

Что же, похвально. Смущает только слово "experimental" и то что похоже это делает не автор языка, а кто-то посторонний.

Появление такой возможности (при условии высокого качества) существенно увеличит мощь языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 10:21
Оценка:
Здравствуйте, alexeiz, Вы писали:


A>C++09 будет очень близок к D в этом случае:

A>
A>template <typename T>
A>struct Fab
A>{
A>    template <typename ...A>
A>    T * create(A&&... args)
A>    {
A>        return new T(args...);
A>    }
A>}

A>int main()
A>{
A>    auto t0 = Fab<Test_0>().create();
A>    auto t1 = Fab<Test_int>().create(1);
A>    // и т.д.
A>}
A>


A>Ну а пока что задача решается перегрузкой create для всевозможного количества аргументов.


Проблема этого кода, в том, что он не решает проблему.
Ведь мы може подсунуть этому шаблону все что угодно и он пропустит это. А нам требуется соблюдать контракт введенный абстрактной фабрикой.
Да и есть еще одна проблема. Сечас я ее постараюсь продемонстрировать:

Это сркриншот снят из реально работающей интеграции со студией. Мы в реальном времени имеем полное описание фабрики и даже автодополнение при вводе.
Такое точно ни Ди ни С++ 0x недоступно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 10:38
Оценка:
VladD2 wrote:
> C>Есть, причем в виде библиотеки:
> C>http://www.digitalmars.com/d/archives/digitalmars/D/8174.html
> Что же, похвально. Смущает только слово "experimental" и то что похоже
> это делает не автор языка, а кто-то посторонний.
Есть более новая библиотека, пробегала недавно в списке рассылки.

> Появление такой возможности (при условии высокого качества) существенно

> увеличит мощь языка.
Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не
сделать в принципе.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 10:55
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не

C>сделать в принципе.

Вместо эмита можно запихнуть компилятор в библиотеку и сделать для него удобный интерфейс. Но для этого нужно решить еще одуну проблему. Нужно реализвоать динамическую загрузку внешних модулей и типов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: alexeiz  
Дата: 22.01.07 11:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Проблема этого кода, в том, что он не решает проблему.

VD>Ведь мы може подсунуть этому шаблону все что угодно и он пропустит это.

В данном конкретном коде контракт гарантируется тем, что параметры напрямую передаются в конструктор.

>А нам требуется соблюдать контракт введенный абстрактной фабрикой.


В каком-то приближении и этого можно добиться, если например задать параметры к конструктору класса в самом классе:
struct Soldier {
    typedef TYPELIST_2(int, tuple<int, double>)
        creation_params;
    Soldier(int);
    Soldier(tuple<int, double>);
};

Шаблон, генерирующий фабрику, посмотрит, какие у классов creation_params и создаст соответствующий интерфейс.

VD>Да и есть еще одна проблема. Сечас я ее постараюсь продемонстрировать:

VD>http://rsdn.ru/File/73/Nemerle/Nemerle-MethodHint-ForAbstractFactory.png
VD>Это сркриншот снят из реально работающей интеграции со студией. Мы в реальном времени имеем полное описание фабрики и даже автодополнение при вводе.
VD>Такое точно ни Ди ни С++ 0x недоступно.

Доступно. На основе информации получаемой после компиляции. Откомпилировал шаблон фабрики один раз, и студии должна быть доступна полная информация об интерфейсе фабрики. То, что VS не делает этого для C++, не значит, что это недоступно в принципе.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 12:01
Оценка:
VladD2 wrote:
> C>Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не
> C>сделать в принципе.
> Вместо эмита можно запихнуть компилятор в библиотеку и сделать для него
> удобный интерфейс. Но для этого нужно решить еще одуну проблему. Нужно
> реализвоать динамическую загрузку внешних модулей и типов.
Динамическая загрузка там тоже есть. Но паковать GCC к каждой программе
— это, ИМХО, слишком. Уж проще .NET FW взять — столько же по объему
получится.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[10]: Как скрестить ужа и ежа или статическую и утиные тип
От: deniok Россия  
Дата: 22.01.07 12:26
Оценка: 41 (4) +2
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, FR, Вы писали:


FR>>Не решена. Там хардкорно все. А хочется самому задавать эти правила, это и обсуждалось


AF>Иметь такую возмоность — это конечно плюс. Что-то подобное кажется сделано в Хаскелле.


В Хаскелле есть типы Int, Integer, Float, Double (ну и пользовательские, конечно), а есть классы типов (штука похожая на интерфейсы). Наследование происходит на уровне классов типов, а сами типы просто воплощают классы типов, перегружая (при необходимости) их методы.

Есть базовый класс типа Num для всех чисел, в котором определены сложение, вычитание, умножение, кое-что ещё и, в том числе, функция fromInteger с такой сигнатурой типа
fromInteger :: Num a => Integer -> a

Здесь Num a => — это контекст, задающий класс типа Num обобщённой переменной a. Функция принимает Integer, а возвращает переменную типа a.

Целочисленные литералы, вроде 1, 2, 3, в Хаскелле трактуются как применение fromInteger к соответствующей величине типа Integer. Таким образом, 1 :: Num a => a, если словами, то 1 имеет произвольный тип a, ограниченный контекстом (классом типа) Num.

Аналогично 2.5 :: Fractional a => a, то есть 2.5 имеет произвольный тип a, ограниченный классом типа Fractional. (Fractional — наследник Num, поддерживающий деление.)

Теперь про min. Его сигнатура типа
min :: Ord a => a -> a -> a

Класс типа Ord задаёт методы сравнения (больше, меньше и т.д.)

Ну а дальше компилятор выводит наиболее общий допустимый тип выражения применения min к двум своим аргументам
min 1 2.5 :: (Ord a, Fractional a) => a


Вычисление вернёт значение 1.0 (которое имеет класс типа Fractional ). Конечно, само вычисление происходит над конкретными типами. Для разрешения возникающей неоднозначности числовых типов в Хаскелле имеется ключевое слово default (умолчание по умолчанию в данном случае задаёт тип Double.)

По теме обсуждения: без наследования здесь, похоже не обойтись, но, пользуясь классами типов, мы можем не выбирать наследует ли Int Float или наоборот (и то, и другое — плохо), а воплотить для каждого из них правильный набор интерфейсов. А вот уж этих интерфейсов довольно много (см. здесь), и наследуют они друг другу, причём в Хаскелле — множественным образом. Только так можно воплотить весь зверинец чисел, придуманных человеком. Например, комплексные числа не должны поддерживать сравнения
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 12:44
Оценка: :)
Здравствуйте, alexeiz, Вы писали:

A>В данном конкретном коде контракт гарантируется тем, что параметры напрямую передаются в конструктор.


Какая же это гарантия?

>>А нам требуется соблюдать контракт введенный абстрактной фабрикой.


A>В каком-то приближении и этого можно добиться, если например задать параметры к конструктору класса в самом классе:

A>
A>struct Soldier {
A>    typedef TYPELIST_2(int, tuple<int, double>)
A>        creation_params;
A>    Soldier(int);
A>    Soldier(tuple<int, double>);
A>};
A>

A>Шаблон, генерирующий фабрику, посмотрит, какие у классов creation_params и создаст соответствующий интерфейс.

Это уже работа ради работы, что есть бред. Весь смысл в автоматическом создании фабрики. А если мне нужно все задавать, то не так уж сложно польностью реализовать абстрактную фабрику в виде класса.

В общем, понято что С++ и Ди что-то могут. Вопрос в гибкости того что они могут. В случае полноценных макросовм мы имеем полный контроль над компилятором и процессом кодогенерации. Мы может выдвать осмысленные ошибки. Вычирать подходящий синтаксис. Использовать библиотеки и внешние источники данных. В общем, мы может почти все!

Подходы же Ди и С++ — это поптыка использовать механизм обобщенного программироания для целей метапрограммирования. Мне кожется это заведомо ущербный подход. Получается запутано, медленно, не функционально и не выразительно.

VD>>Да и есть еще одна проблема. Сечас я ее постараюсь продемонстрировать:

VD>>http://rsdn.ru/File/73/Nemerle/Nemerle-MethodHint-ForAbstractFactory.png
VD>>Это сркриншот снят из реально работающей интеграции со студией. Мы в реальном времени имеем полное описание фабрики и даже автодополнение при вводе.
VD>>Такое точно ни Ди ни С++ 0x недоступно.

A>Доступно. На основе информации получаемой после компиляции. Откомпилировал шаблон фабрики один раз, и студии должна быть доступна полная информация об интерфейсе фабрики. То, что VS не делает этого для C++, не значит, что это недоступно в принципе.


Ты выдаешь желаемое за действительное. В С++ вообще нет возможности скомпилировать шаблоны. В С++ шаблоны не более чем тексовая подстановка (ну, чуть по навороченее, но не суть). Учитывая, что мы вынуждены передавать функции Create тип создаваемого объекта в качестве аргумента типа, то получить что либо компилировнное вообще не представляется возможным. Да и подсунуть мы туда можем что угодно. Компилятор конечно может ругнуться на неверно подсунутый тип в некоторых случаях, но будет это при воплошении этого метада.

Что до интелисенса в С++, то это еще очень долго не будет возможно. Производительность современных процессоров не просто недостаточно. Ее катастрофически нехватает. А оптимизировать там что-то будет очень не прсото. В Ди наверно будет по проще, но и у него будут проблемы с данным примером. А более сложные вещи вообще будут недоступны для этих языков.

В общем, С++ уже 21 год, а для него так и не сделано полноценного автодополенения при вооде. И это при том, что над этим работали самые багатые и креативные фирмы всего мира, плюс многие одаренные одиночки. А для Немерла все это практически есть хотя язык даже не зарелизен. И сделали это не какие-то мега-корпорации, а два программиста с РСДН и два поляка в свободное от работы время. Вот такие пироги с катятами.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 12:58
Оценка:
VladD2 wrote:
> Что до интелисенса в С++, то это еще очень долго не будет возможно.
> Производительность современных процессоров не просто недостаточно. Ее
> катастрофически нехватает. А оптимизировать там что-то будет очень не
> прсото. В Ди наверно будет по проще, но и у него будут проблемы с данным
> примером. А более сложные вещи вообще будут недоступны для этих языков.
Рекомендую посмотреть XRefactory. Автокомплит оно делает почти 100%
надежный, даже с Бустом справляется. Простые рефакторинги там тоже есть.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 13:06
Оценка:
VladD2 wrote:
> C>А Влад тут говорит, что Mono — это rulez
> Можно ссылку? Или ты о каком Владе говоришь?
О тебе, о ком же еще. Кто-то тут же хвалился портабельностью Nemerle.

Вот сделали бы Nemerle для LLVM — было бы круто.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 13:24
Оценка: 49 (3) -1
Здравствуйте, VladD2, Вы писали:


VD>Согласен, это более гибкий подход чем в С++, но мне кажется ты решил другую задачу. Ты создал обобщенный метод транслирующий вызовы с переменным количеством параметров. Это здорово, но не то что нужно. А нужно сгенерировать набор конкретных методов имеющий вточности такой набор параметров как набор параметров конструкторов. Причем методы должны быть виртуальными. Иначе в уточненной фабрике вызовется конструктор котый не существовал ранее. А это уже не фабрика.


VD>Так что мне по прежнему очень интересно поглядить на полноценную реализацию фабрики класса на Ди. Ну, если кто-то на С++ извернется, то будет вообще супер. Но в это верится еще меньше.


Угу тебе хорошо а я сегодня полдня вместо работы в D копался

В общем держи фабрику, конечно все в статике, но просто.
Теперь убежден что программировать шаблоны в D на порядок проще чем в C++.


import std.stdio;
import std.typetuple;

// фабрика
template absract(Base...)
{
template concrete(Concrete...)
 {  
    template create(T)
        {
        T args(A...)(A args)
         {
            const i = IndexOf!(T, Base);
            alias Concrete[i] TR;
            return new TR(args);
         }
        } 
 }  
}


// тестовые классы и интерфейсы

// базовые интерфейсы
interface Soldier { char[] info(); };
interface Monster { char[] info(); };
interface SuperMonster { char[] info(); };


// конкретные классы
class SillySoldier : public Soldier {this(int x) {} char[] info() {return "SillySoldier";}};
class SillyMonster : public Monster {char[] info() {return "SillyMonster";}};
class SillySuperMonster : public SuperMonster {char[] info() {return "SillySuperMonster";}};    

class BadSoldier : public Soldier {this(int x, int z) {} char[] info() {return "BadSoldier";}};
class BadMonster : public Monster {char[] info() {return "BadMonster";}};
class BadSuperMonster : public SuperMonster {char[] info() {return "BadSuperMonster";}};    

// вспомогательная печать
void info(T)(T t)
{
 writefln(typeid(typeof(t)));
 writefln(t.info());
 writefln();    
}

void main()
{
    // абстрактная фабрика
    alias absract!(Soldier, Monster) abstract_enemy;
    
    // конкретизации
    alias abstract_enemy.concrete!(SillySoldier, SillyMonster) silly_enemy;
    alias abstract_enemy.concrete!(BadSoldier, BadMonster) bad_enemy;
    
    // создание конкретных объектов с помощью фабрики
    
    auto x = silly_enemy.create!(Monster).args();
    info(x);
    
    auto y = silly_enemy.create!(Soldier).args(1);
    info(y);   
    
    
    auto z = bad_enemy.create!(Soldier).args(1, 2);
    info(z);    
}
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 13:33
Оценка:
VD>А выведение реализаций методов в отдельный cpp-файл дает только возможность обойти дурацкое окграничение С++ на то что нельзя создавать экземпляров еще не определенных типов. Можно только создавать указатели и то для этого тоже требуется предварительная декларациях.

VD>Вот с этим недоразумение и борится вынос разделение класса в С++.


Ну, не только с этим. Вообще-то вынос реализации в отдельные файлы — это наследие C, и изначально сделан скорее для обыкновенного ускорения компиляции — я запросто могу написать всю программу любой сложности в одном файле (либо реализовать всё исключительно через h-файлы c одним-единственным c/cpp), но при минимальных изменениях перекомпилироваться будет всё. А вот реально средством (хоть и примитивным) для создания модульных программ это разбиение стало с появлением ключевого слова static (которое позволяло скрыть внутренние переменные от линкера) — а оно появилось в C ЕМНИП далеко не сразу.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 22.01.07 13:35
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не

C>сделать в принципе.

btw, Совсем недавно любители Singularity, мне тут доказывали, что ни emit ни динамическая загрузка кода никому нафиг не нужны и даже вредны.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 13:42
Оценка:
>> Хотя конечно AndreiF перегибает палку. Небольшой рынок есть у Сембиан с
>> кастрированным С++.
C>Там уже полный С++ (обычный GCC). Проблемы там были из-за их
C>самопального механизма возвратов (найти бы урода, который его придумал...).

Да? Насчёт полного очень интересно — что там поменялось? А то когда я последний раз на него смотрел (на версию 7.0), там не было ни исключений, ни STL, ни RTTI (хотя как раз без последнего прожить-то можно...). И с глобальными переменными были серьёзные проблемы.

А того урода который придумал механизм возвратов... Согласен на 100% что с ним нужно что-то сделать — но не могу придумать достойного наказания. Я даже не могу вспомнить ни одного настолько же неудачного проектного решения.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 13:52
Оценка:
C>>Вот-вот. Все сколь-либо сложное пишется на неуправляемых языках.
K>А вот это ты фигню сказал. Сколько-нибудь сложное это что? Этот примитивный декодер MP3, состоящий из сдвигов и сложений? Не смеши!

Если лично тебе декодер mp3 кажется примитивным — напиши в порядке развлечения свой. Их всего-то два штуки — фраунгоффер и лама. Потому что написать ещё один — надо иметь очень много знаний, времени и денег.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 13:55
Оценка:
>>> C>Ты представь, что у тебя оффисный пакет.
>>> Вот и прекрасно. Ну и на чём же проще написать офисный пакет?
C>>"Проще" это сюда не относится. Его может проще на интерпретируемом
C>>Питоне написать, но если результат не будет нравится пользователям —
C>>пакет пошлют "фтопку".
АХ>Питон — это еще сравнительно быстро (особенно если Psyco использовать).
АХ>Но это уже прошлый век.
АХ>Сейчас модно делать офисные пакеты на AJAX (т.е. HTML + JavaScript) :

Мне кажется что принципиальной разницы между Python и JavaScript нет. То есть, оба языка из одной ниши — интерпретируемые языки с duck-typing и т.п.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[40]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 14:03
Оценка:
Здравствуйте, alexeiz, Вы писали:


A>C++09 будет очень близок к D в этом случае:


Угу автор D взял именно эту идею, я впервые о не читал в книге Вандевурда, в разделе "Мечты"
А так все это идет от Александреску и от его списков типов.

Вообще уже вот эти туплы и static if очень здорово упрощают программирование шаблонов.

A>Ну а пока что задача решается перегрузкой create для всевозможного количества аргументов.


Угу тут http://www.digitalmars.com/d/variadic-function-templates.html все описано откуда и что.
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 14:04
Оценка:
K>>А вот это неправда. Для проигрывателя быдут написан MP3-декодер на неуправляемом языке.

VD>Акстись. Такие вещи сто лет назад в железо зашиты. У меня плеер без какой либо ОС работает. Софт в них нужен исключительно для GUI.


Что-то меня грызут сомнения насчёт полностью аппаратного декодинга MP3. Откуда такое чудо?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 14:53
Оценка:
Left2 wrote:
> Да? Насчёт полного очень интересно — что там поменялось? А то когда я
> последний раз на него смотрел (на версию 7.0), там не было ни
> исключений, ни STL, ни RTTI (хотя как раз без последнего прожить-то
> можно...). И с глобальными переменными были серьёзные проблемы.
Там все было плохо из-за механизма возвратов. Они, фактически,
дублировали механизм исключений:
CMyCompoundClass* self=new (ELeave) CMyCompoundClass;
CleanupStack::PushL(self); //Повбывав бы
self->ConstructL();
...


Вроде бы в восьмерке это поменяли — стали использовать настоящий EH. С
глобальными переменными, вроде бы, все осталось как и было.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 15:07
Оценка:
C>Там все было плохо из-за механизма возвратов. Они, фактически,
C>дублировали механизм исключений:
Это я знаю, сенкс. Жуткая гадость.

C>Вроде бы в восьмерке это поменяли — стали использовать настоящий EH. С

C>глобальными переменными, вроде бы, все осталось как и было.
Восьмёрка вроде бы толком и не жила — насколько я понял, на 8-ке был всего один телефон. Совеременный Симбиан это вроде как 9-ка. Они там вроде бы много чего поменяли в плане бинарной совместимости, секьюрити и т.п. — но я не нашёл ничего насчёт кардинального изменения API. Ну и опять же — не нашёл никаких упоминаний о том что "STL (Boost, ACE) is now available on new Symbian platform".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 22.01.07 15:10
Оценка:
Здравствуйте, Left2, Вы писали:

L>Если лично тебе декодер mp3 кажется примитивным — напиши в порядке развлечения свой. Их всего-то два штуки — фраунгоффер и лама. Потому что написать ещё один — надо иметь очень много знаний, времени и денег.


Это каких таких знаний нужно иметь? Математику знать нужно? Ну, это тогда к математикам вопрос. На самом деле, там кроме математике очень много эвристики, с эти надо долго возиться и экспериментировать. С точки зрения программирования (а под словом "программирование" не понимается битовыжимание с обсчётом тактов процессора) там ничего такого нет. Вот сложно — это написать тот же Ворд. В Ворде (и офисе вообще) математики никакой нет, но его нужно спроектировать и хорошо реализовать.

Кстати, я так понимаю, речь идёт о MP3-енкодере? А мы тут говорим об MP3-декодере, который штука действительно примитивная. И MP3 декодеров куча понаписана.

PS: по поводу математики. Что сложнее написать: yacc или MP3-енкодер? Вот насчёт MP3-енкодера точно сказать не могу, а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#. Зачем же писать современный yacc на asm'е, раз это не такая критичная штуковина.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 15:10
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Здравствуйте, FR, Вы писали:


VD>>>Лямбда без лексического замыкания — это нонсенс!

FR>>Угу. Но все равно вещь вкусная и полезная.

K>Это без замыкания-то? Ну-ну.


Так я тоже двумя ногами за нормальные замыкания.
Но ты не прав с своими хиханьками и хаханьками, даже без замыканяия лямбда полезна и вкусна, особенно если пользуешся как в D как блоками кода.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.01.07 15:28
Оценка: +2
Здравствуйте, konsoletyper, Вы писали:

K>а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#.


У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?
Или это такая же гипербола, как здесь
Автор: konsoletyper
Дата: 20.01.07
про одинаковый успех написаня парсера языка программирования на C++ и на ассемблере?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 15:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>VladD2 wrote:

>> Что до интелисенса в С++, то это еще очень долго не будет возможно.
>> Производительность современных процессоров не просто недостаточно. Ее
>> катастрофически нехватает. А оптимизировать там что-то будет очень не
>> прсото. В Ди наверно будет по проще, но и у него будут проблемы с данным
>> примером. А более сложные вещи вообще будут недоступны для этих языков.
C>Рекомендую посмотреть XRefactory. Автокомплит оно делает почти 100%

Ага. "Почти" это замечательное русское слово которое можно применять всегда когда что-то не сделано, но хочется считать, что сделано.

В общем, прмер я привел. Повторяешь его на С++ и показываешь мне скриншот с чем-то похожим на то что привел я в этом письме
Автор: VladD2
Дата: 22.01.07
. Тогда продолжаем разговор. А перемывать в сотый раз кости дохлого енота нет никакого желания.

C>надежный, даже с Бустом справляется. Простые рефакторинги там тоже есть.


Ну, да Солтоковцы тоже хвастаются рефакторингом. Только там гарантии близкие к замене по контексту.

А потом в рефакторинге важна скорость. Если переименование переменной идет пол минуты, то это уже для работ не принодно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 15:51
Оценка:
Здравствуйте, FR, Вы писали:

FR>Угу тебе хорошо а я сегодня полдня вместо работы в D копался


А сколько народа ты еще при этом отвлекаешь от работы...

FR>В общем держи фабрику, конечно все в статике, но просто.

FR>Теперь убежден что программировать шаблоны в D на порядок проще чем в C++.

Под "все в статике" я правильно понимаю, что реално использовать ее как именно фабрику не удастся?

Ну, то есть, можн ли создать перменную которая сначала будет содержать ссылку на одну фабрику, а потом на другую. Так чтобы при ее изменении один и тот же вызов приводил к созданию другого типа объектов?

То есть, как повторить вот этот код:
mutable f : Factory = Factory ();
def sf = SubFactory ();

System.Console.WriteLine (f.CreateX (1));
System.Console.WriteLine (f.CreateY (1));
System.Console.WriteLine (f.CreateY ("aa"));
System.Console.WriteLine (f.CreateW ());
System.Console.WriteLine (f.CreateException ("aa"));

f = sf;

System.Console.WriteLine (f.CreateX (1));
System.Console.WriteLine (f.CreateY (1));
System.Console.WriteLine (f.CreateY ("aa"));
System.Console.WriteLine (f.CreateW ());

Главное выделено жирным.

А то я, что-то не заметил в твоем коде ключевого слова virtual. А без него как-то я не понимаю, как такое будет возможно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 15:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>О тебе, о ком же еще. Кто-то тут же хвалился портабельностью Nemerle.


Портабилность портабильностью, а про Моно я ничего такоего не говорил. Не надо мне приписывать то что я не говорил.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 15:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Нет, я утверждаю (точнее предпологаю, оставляя поле для сомнения), что на С++ и Ди невозомжно сгенерировать методы нужной сигнатуры по описанию заданному ссылкой на тип.


На D похоже можно, надо будет покопать.

VD>Приведенный макрос делает следующее:

VD>1. Разбирает выражения переданные ему в качестве парамтров.
VD>2. Находит типы которым соотвествют эти вражения.
VD>3. Анализирует эти типы находя публичные конструкторы.
VD>4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).

Ну тут невыполнимо только четвертое. Имя функции изменить не получится, но можно использовать одно имя и перегрузку. Генерировать же классы можно и в C++, это у Александреску хорошо описано.

VD>Причем в процессе анализа алгоритм может прийти к выводу, что переданная информация не верна, и выдать осмысленные сообщения об ошибках.


Что меня приятно удивило сейчас в D очень осмысленные сообщения об ошибках, притом для шаблонов тоже.

VD>Теперь почему я считаю, что на Ди и С++ это невозможно в принципе.

VD>Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.

У C++ да проблема, D в этом отношении гораздо лучше.

VD>Еще одной проблемой яывляется то, что они не могут добавлять истинно новые желементы в код. Они могут толь гибко растраивать обобщенные методы и типы. А этого не всегда достаточно.


Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 16:02
Оценка:
Здравствуйте, Left2, Вы писали:

L>Что-то меня грызут сомнения насчёт полностью аппаратного декодинга MP3. Откуда такое чудо?


"аппаратное декодирование MP3"
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 16:15
Оценка: +1
VD>"аппаратное декодирование MP3"

Ну и? Куда смотреть? Я там вижу только ссылки на high-end звуковые карты начала века которые заявляют что реализуют "аппаратное декодирование MP3". На самом деле практически уверен что "аппаратным" оно является только с точки зрения центрального процессора. На карточке оно всё равно реализовано программно (правда, программка крутится на процессоре, который специально заточен на декодирование аудиоформатов — и может запросто вместо mp3 декодировать wma, ogg и т.п.). Ну а в исходном твоём сообщении вообще говорилось о полностью аппаратном декодировании mp3 в плейере. Вот и стало мне интересно — откуда такая железная уверенность?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 22.01.07 16:16
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>PS: по поводу математики. Что сложнее написать: yacc или MP3-енкодер? Вот насчёт MP3-енкодера точно сказать не могу, а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#. Зачем же писать современный yacc на asm'е, раз это не такая критичная штуковина.

Ну если есть немерле то yacc не нужен. Вобще. Только под ногами будет путаться.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 22.01.07 16:16
Оценка:
Здравствуйте, eao197, Вы писали:

K>>а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#.

E>У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?
Ну если на немерле писать компилятор то там один pattern-matching даст больше... а в немерле есть еще и макросы которыми можно потроха AST'а сгенерить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 16:16
Оценка: 1 (1) :)
Здравствуйте, deniok, Вы писали:

Да, в хаскеле работа с типами сделана нииболее грамотно из того что я видел. Если бы при этом сам язык не был бы маньякально функциональным и догматичным...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 16:16
Оценка:
Здравствуйте, FR, Вы писали:

FR>На D похоже можно, надо будет покопать.


Пока что я не вижу как это можно сделать. Ты и те кто пытается извернуться на С++ пытаетесь обойтись обощениями, а это не совсем тоже самое что генерация кода.

VD>>Приведенный макрос делает следующее:

VD>>1. Разбирает выражения переданные ему в качестве парамтров.
VD>>2. Находит типы которым соотвествют эти вражения.
VD>>3. Анализирует эти типы находя публичные конструкторы.
VD>>4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).

FR>Ну тут невыполнимо только четвертое.


А треье ты как сделаешь?

FR> Имя функции изменить не получится, но можно использовать одно имя и перегрузку. Генерировать же классы можно и в C++, это у Александреску хорошо описано.


И как ты перегрузкой сделаешь для разных классов фмбрики? Они же могут пересечья. Опять прийдется обобщение адавать не при создании фабрики, а при вызове метода, что как бы уже убивают саму суть фабрики.

FR>Что меня приятно удивило сейчас в D очень осмысленные сообщения об ошибках, притом для шаблонов тоже.


Поглядел я на них (кстати, минут двадцать не мог заставить нормально работать компилятор, в итоге слил все библиотеки и инклюды в тот же тактало, что не есть гуд). Да, это лучше чем С++, но все равно до заданных вручную им далеко:

test.d(14): Error: index -1 overflow for static array
test.d(15): Error: no constructor for SillyMonster
test.d(15): Error: cannot implicitly convert expression (new TR((_param_0),(_param_1))) of type test.SillyMonster
to test.XXX
test.d(72): template instance test.absract!(Soldier,Monster).concrete!(XXX,SillyMonster).create!(XXX).args!(int,i
nt) error instantiating
--- errorlevel 1


VD>>Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.


FR>У C++ да проблема, D в этом отношении гораздо лучше.


Тогда объясни и покажи как это сделать. Лично я вижу улучшенный С++. Да некоторые его технические проблемы решены. Если бы я видел только шаблонное метапрограммирование я бы сказал, что это лучше чем на С++. Но принципиальной проблемы не решено. Полноценного метапрограммирования нет. Причем нет концптуально. Оно снова эмулируется побочными эффектами. Результат получается соотвествующий. Плюс еще голову раком нужно поставить, чтобы понять как сделать хоть что-то. А это уже болезнь аналогичная С++-ной.

FR>Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".


А не проще ли его добавить напрямую, а не через зад?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 16:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А сколько народа ты еще при этом отвлекаешь от работы...




FR>>В общем держи фабрику, конечно все в статике, но просто.

FR>>Теперь убежден что программировать шаблоны в D на порядок проще чем в C++.

VD>Под "все в статике" я правильно понимаю, что реално использовать ее как именно фабрику не удастся?


Почему не удастся удастся, в C++ статическая фабрика вполне нормальная идеома, я например пользуюсь, конечно нужно перекомпиляция, но для некторых вещей вполне удобно. (Ну или некрасиво сделать функцию с switch)

VD>Ну, то есть, можн ли создать перменную которая сначала будет содержать ссылку на одну фабрику, а потом на другую. Так чтобы при ее изменении один и тот же вызов приводил к созданию другого типа объектов?


VD>То есть, как повторить вот этот код:


Нет то что у меня только в статике.
Но такое вполне реально сделать, в C++ есть реализации, от того же Александреску например. Там реально собирается базовый класс:

std::auto_ptr<AbstractEnemyFactory> easyFactory(new EasyLevelEnemyFactory);
std::auto_ptr<AbstractEnemyFactory> hardFactory(new HardLevelEnemyFactory);


На D можно вполне повторить.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 16:25
Оценка:
Здравствуйте, Left2, Вы писали:

L>Ну и? Куда смотреть? Я там вижу только ссылки на high-end звуковые карты начала века которые заявляют что реализуют "аппаратное декодирование MP3".


Так hardware MP3 decoder лучше?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 16:33
Оценка:
VladD2 wrote:
> C>О тебе, о ком же еще. Кто-то тут же хвалился портабельностью Nemerle.
> Портабилность портабильностью, а про Моно я ничего такоего не говорил.
> Не надо мне приписывать то что я не говорил.
Понимаешь, портабельность .NET приложений сейчас примерно равна
портабельности Mono (DotGNU не считаем, OK?). Так что, делаем выводы.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[45]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 16:36
Оценка:
VladD2 wrote:
> C>Рекомендую посмотреть XRefactory. Автокомплит оно делает почти 100%
> Ага. "Почти" это замечательное русское слово которое можно применять
> всегда когда что-то не сделано, но хочется считать, что сделано.
> В общем, прмер я привел. Повторяешь его на С++ и показываешь мне
> скриншот с чем-то похожим на то что привел я в этом письме
> <http://rsdn.ru/Forum/Message.aspx?mid=2312500&amp;only=1&gt;
Автор: VladD2
Дата: 22.01.07
. Тогда продолжаем

> разговор. А перемывать в сотый раз кости дохлого енота нет никакого желания.
http://www.xref-tech.com/xrefactory/emacs.html — вот тут много скриншотов.

Сейчас мне абсолютно не хочется ставить обратно Emacs и самому повторять
это все.

> C>надежный, даже с Бустом справляется. Простые рефакторинги там тоже есть.

> Ну, да Солтоковцы тоже хвастаются рефакторингом. Только там гарантии
> близкие к замене по контексту.
> А потом в рефакторинге важна скорость. Если переименование переменной
> идет пол минуты, то это уже для работ не принодно.
Переименование там работает секунды. Ну может секунд 10 максимум на
больших проектах.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 16:44
Оценка:
Здравствуйте, FR, Вы писали:

FR>На D можно вполне повторить.


Ну, так повтори. Интересно глянуть.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 16:45
Оценка: 1 (1)
VladD2 wrote:
> Да, в хаскеле работа с типами сделана нииболее грамотно из того что я
> видел. Если бы при этом сам язык не был бы маньякально функциональным и
> догматичным...
Знаешь, у меня примерно такие же мысли о Немерле.

"Вот если бы он не был так гвоздями пришит к CLR..."
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 16:47
Оценка: 2 (2)
L>>Ну и? Куда смотреть? Я там вижу только ссылки на high-end звуковые карты начала века которые заявляют что реализуют "аппаратное декодирование MP3".

VD>Так hardware MP3 decoder лучше?


Вот, из первой же ссылки:
http://www.mp3-tech.org/programmer/docs/fpga_report.pdf

Abstract—In recent years, several commercial system-on-chip
solutions for MP3 decoding have been developed. They are
usually built around a specialised RISC processor with an
instruction set suitable for MPEG audio decoding. The purpose
of this project is to evaluate and implement the different parts
of the MP3 decoding without using a processor core.
Проект насколько я понял экспериментальный, выполнен на FPGA.

Следующая ссылка:
http://www.ladyada.net/make/minty/hardware.html
Mp3-decoder, выполненный на PIC


Далее:
http://edelaunay.chez-alice.fr/mp3Sch2.pdf
Опять же — на PIC-контроллере

Ну и так далее...

Изготовлять промышленно чисто аппаратный mp3-декодер — вряд ли разумно. Экономия по сравнению с "specialised RISC processor with an instruction set suitable for MPEG audio decoding" вряд ли будет cущественной, а вот возможности "проапгрейтить" такое устройство (пофиксить баги, добавить поддержку новых форматов) не будет никакой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 22.01.07 17:02
Оценка:
Здравствуйте, eao197, Вы писали:

K>>а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#.


E>У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?


Кстати, да. Правда, с 10 раз — это гипербола, а вот в 3-4 раза — вполне реально, но это только относительно объёма. Относительно удобства могу выразить субъективную оценку "в 10 раз", несмотря на то, что C#-версия насписана в VS, со всеми её достоинствами, а вот Nemerle-версия пока пишется в SciTE. Интересно, во сколько раз возрасло бы удобство, будь интеграция дописанной?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 22.01.07 17:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ну если есть немерле то yacc не нужен. Вобще. Только под ногами будет путаться.


ИМХО, это гипербола. Всё-таки лучше для Nemerle написать макрос (встроенный yacc) и юзать его, чем вручную на Nemerle писать лексический и синтаксический анализаторы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 17:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>На D похоже можно, надо будет покопать.


VD>Пока что я не вижу как это можно сделать. Ты и те кто пытается извернуться на С++ пытаетесь обойтись обощениями, а это не совсем тоже самое что генерация кода.


В общем это:

Нет, я утверждаю (точнее предпологаю, оставляя поле для сомнения), что на С++ и Ди невозомжно сгенерировать методы нужной сигнатуры по описанию заданному ссылкой на тип.


вроде получается:

import std.stdio;
import std.traits;
import std.typetuple;

void func(A...)(A args)
{
    writefln(A.length);
    foreach(v; A)
    {
        writefln(typeid(v));
    }
}

template gen(F)
{
    alias ParameterTypeTuple!(F) par;
    alias func!(par) fn;
}

void tst(int x, int y, float z)
{
}

void main()
{    
alias gen!(typeof(tst)).fn f;
f(1, 2, 3);    
}


f это фукция сгенерированная по ссылке на тип функции tst

VD>>>Приведенный макрос делает следующее:

VD>>>1. Разбирает выражения переданные ему в качестве парамтров.
VD>>>2. Находит типы которым соотвествют эти вражения.
VD>>>3. Анализирует эти типы находя публичные конструкторы.
VD>>>4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).

FR>>Ну тут невыполнимо только четвертое.


VD>А треье ты как сделаешь?


Пока вроде никак, но если развить тотже tupleof вполне реально, он сейчас только поля выдает, а надо чтобы и методы. Хотя надо еще ковырять.
Ну а в частных случаях вроде фабрики это разрешимо по другому.

FR>> Имя функции изменить не получится, но можно использовать одно имя и перегрузку. Генерировать же классы можно и в C++, это у Александреску хорошо описано.


VD>И как ты перегрузкой сделаешь для разных классов фмбрики? Они же могут пересечья. Опять прийдется обобщение адавать не при создании фабрики, а при вызове метода, что как бы уже убивают саму суть фабрики.


Надо ковырять.

FR>>Что меня приятно удивило сейчас в D очень осмысленные сообщения об ошибках, притом для шаблонов тоже.


VD>Поглядел я на них (кстати, минут двадцать не мог заставить нормально работать компилятор, в итоге слил все библиотеки и инклюды в тот же тактало, что не есть гуд).


Просто надо еще C++ ихний ставить чтобы линкер и т. п. были доступны.

VD>Да, это лучше чем С++, но все равно до заданных вручную им далеко:


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

VD>>>Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.


FR>>У C++ да проблема, D в этом отношении гораздо лучше.


VD>Тогда объясни и покажи как это сделать. Лично я вижу улучшенный С++. Да некоторые его технические проблемы решены. Если бы я видел только шаблонное метапрограммирование я бы сказал, что это лучше чем на С++. Но принципиальной проблемы не решено. Полноценного метапрограммирования нет. Причем нет концптуально. Оно снова эмулируется побочными эффектами. Результат получается соотвествующий. Плюс еще голову раком нужно поставить, чтобы понять как сделать хоть что-то. А это уже болезнь аналогичная С++-ной.


В D многие вещи которые в C++ делаются через ж... встроенны в язык, в общем D идет вполне нормальном направлении.

FR>>Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".


VD>А не проще ли его добавить напрямую, а не через зад?


Так оно и добавлено напрямую это ключевое слово языка.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 22.01.07 17:22
Оценка:
Здравствуйте, konsoletyper, Вы писали:

WH>>Ну если есть немерле то yacc не нужен. Вобще. Только под ногами будет путаться.

K>ИМХО, это гипербола. Всё-таки лучше для Nemerle написать макрос (встроенный yacc) и юзать его, чем вручную на Nemerle писать лексический и синтаксический анализаторы.
Ручками проще. Я пробовал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 17:26
Оценка: 4 (1)
Left2 wrote:
> C>Вроде бы в восьмерке это поменяли — стали использовать настоящий EH. С
> C>глобальными переменными, вроде бы, все осталось как и было.
> Восьмёрка вроде бы толком и не жила — насколько я понял, на 8-ке был
> всего один телефон. Совеременный Симбиан это вроде как 9-ка. Они там
> вроде бы много чего поменяли в плане бинарной совместимости, секьюрити и
> т.п. — но я не нашёл ничего насчёт кардинального изменения API.
Я после одного проекта на семерке теперь при упоминании слов Symbian OS
стараюсь убежать как можно дальше Так что как там теперь — не знаю.

Товарищи по несчастью говорили, что механизм leave'ов теперь у них
дублируется исключениями.

> Ну и опять же — не нашёл никаких упоминаний о том что "STL (Boost, ACE) is

> now available on new Symbian platform".
http://www.newlc.com/article.php3?id_article=742

A real good news is the move to the new ARM ABI. This may sound like a
joke without a little bit more explanation as this is one of the two
reasons (with the security framework) that are responsible for the
binary compatibility break.

Here are the good news:
— standard C++ RTTI support
— standard C++ exception support
— static data will be allowed in DLLs (not recommended however)

This will definitely ease the porting of existing C++ application on
Symbian OS (take care that you won’t be able to mix exception and the
current Leaves/Trap).

Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 17:28
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

C>http://www.xref-tech.com/xrefactory/emacs.html — вот тут много скриншотов.


Зачем мне скриншоты "вообще"?

C>Сейчас мне абсолютно не хочется ставить обратно Emacs и самому повторять

C>это все.

Особенно если учесть, что резульат можно предсказать заранее.

C>Переименование там работает секунды. Ну может секунд 10 максимум на

C>больших проектах.

10 это уже никода не годно. Да и не верю, я что на больших проектах это будет 10 сек. 5 минут более реальная цифра. Или это будет не точный поиск. Правда сморя конечно что называть большим проектом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 17:28
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Понимаешь, портабельность .NET приложений сейчас примерно равна

C>портабельности Mono (DotGNU не считаем, OK?). Так что, делаем выводы.

О чем делаем выводы?
В очередной раз фигею с тебя.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 17:29
Оценка: :)
Andrei N.Sobchuck wrote:
> C>Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не
> C>сделать в принципе.
> btw, Совсем недавно любители Singularity, мне тут доказывали, что ни
> emit ни динамическая загрузка кода никому нафиг не нужны и даже вредны.
Как же мы об этом забыли

Ну ничего, добавят их в Singularity 2 и они снова станут замечательными
и абсолютно необходимыми фичами.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 22.01.07 17:40
Оценка:
C>Я после одного проекта на семерке теперь при упоминании слов Symbian OS
C>стараюсь убежать как можно дальше Так что как там теперь — не знаю.
Поддерживаю целиком и полностью.

За ссылку — спасибо. Вот только вот эта строчка

This will definitely ease the porting of existing C++ application on Symbian OS (take care that you won’t be able to mix exception and the current Leaves/Trap).

Означает что толком C++ я смогу использовать только в отдельном потоке или процессе — который не взаимодействует с ОС вообще. Так что грош цена такому улучшению .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[47]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 17:52
Оценка:
VladD2 wrote:
> C>http://www.xref-tech.com/xrefactory/emacs.html — вот тут много скриншотов.
> Зачем мне скриншоты "вообще"?
Там видно какие есть фичи.

> C>Сейчас мне абсолютно не хочется ставить обратно Emacs и самому повторять

> C>это все.
> Особенно если учесть, что резульат можно предсказать заранее.
Естественно, оно будет работать.

> C>Переименование там работает секунды. Ну может секунд 10 максимум на

> C>больших проектах.
> 10 это уже никода не годно. Да и не верю, я что на больших проектах это
> будет 10 сек. 5 минут более реальная цифра. Или это будет не точный
> поиск. Правда сморя конечно что называть большим проектом.
Ты когда-нибудь слышал про кросс-индексы исходников? Так вот, XRef их
строит, поэтому там есть вкладка "usages", которая обновляется когда ты
двигаешься по коду.

Переимнование я лично проверял на достаточно большом проекте — работало
быстро.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 17:53
Оценка:
Left2 wrote:
> This will definitely ease the porting of existing C++ application on
> Symbian OS (take care that you won’t be able to mix exception and the
> current Leaves/Trap).
Может они имеют в виду, что в пользовательском коде нельзя их смешивать?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 18:03
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>На D можно вполне повторить.


VD>Ну, так повтори. Интересно глянуть.


Ну завал у меня по работе
Как буду дальше D ковырять попробую.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 22.01.07 18:33
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Здравствуйте, Cyberax, Вы писали:


C>>Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не

C>>сделать в принципе.

ANS>btw, Совсем недавно любители Singularity, мне тут доказывали, что ни emit ни динамическая загрузка кода никому нафиг не нужны и даже вредны.


Смотря куда. В ядро и драйверы — не стоит! А в прикладные проги — естественно стоит и даже практически необходимо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 22.01.07 18:44
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>VladD2 wrote:

>> C>А Влад тут говорит, что Mono — это rulez
>> Можно ссылку? Или ты о каком Владе говоришь?
C>О тебе, о ком же еще. Кто-то тут же хвалился портабельностью Nemerle.

C>Вот сделали бы Nemerle для LLVM — было бы круто.


А чем LLVM лучше Mono?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 22.01.07 19:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

K>>ИМХО, это гипербола. Всё-таки лучше для Nemerle написать макрос (встроенный yacc) и юзать его, чем вручную на Nemerle писать лексический и синтаксический анализаторы.

WH>Ручками проще. Я пробовал.

LL(1) парсер методом синтаксического спуска? Или недо-LR с приоритетом операций? Всё это тяжело пишется и медленно работает. Генератор даёт гораздо более совершенный парсер, без множества граблей (хотя некоторые остаются). Да и проще описать грамматику и получить готовый парсер, чем писать грамматику (всё равно придётся) и по ней ручками долбить парсер.

Проблема yacc в том, что он yacc, а не в том, что он compiler-compiler. Можно те же вещи сделать удобнее.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 19:44
Оценка: 20 (4) +1
Андрей Хропов wrote:
>> > C>А Влад тут говорит, что Mono — это rulez
>> > Можно ссылку? Или ты о каком Владе говоришь?
> C>О тебе, о ком же еще. Кто-то тут же хвалился портабельностью Nemerle.
> C>Вот сделали бы Nemerle для LLVM — было бы круто.
> А чем LLVM лучше Mono?
Очень многим. Во-первых, LLVM это Low-Level Virtual Machine, то
есть оно достаточно низкоуровневое (там есть даже поддержка вставки
ассемблерных инструкций), но при этом может быть использовано и в
верифицируемом режиме. Во-вторых, LLVM поддерживает обычную статическую
компиляцию. В-третьих, LLVM поддерживает и режим работы с JIT/HotSpot.
В-четвертых, LLVM скоро синтегрируется с GCC и будет работать на всем,
что только существует в природе.

В-пятых, это единственная распространенная VM без идиотской поддержки
ООП в наборе инструкций. И это мне больше всего нравится.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 19:45
Оценка:
VladD2 wrote:
> C>Понимаешь, портабельность .NET приложений сейчас примерно равна
> C>портабельности Mono (DotGNU не считаем, OK?). Так что, делаем выводы.
> О чем делаем выводы?
> В очередной раз фигею с тебя.
Ну как бы... Если ты хвалишь портабельность Nemerle, то это
автоматически означает, что ты хвалишь Mono.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 22.01.07 20:04
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>LL(1) парсер методом синтаксического спуска? Или недо-LR с приоритетом операций? Всё это тяжело пишется и медленно работает.

Если это делать на С++ то да.
А так немерле написан на немерле. И никаких компиляторов компиляторов там не используется.

K>Генератор даёт гораздо более совершенный парсер, без множества граблей (хотя некоторые остаются).

Заставить такой парсер (особенно LR) выдавать человекочитаемые сообщения об ошибках задача не тривиальная.

K>Да и проще описать грамматику и получить готовый парсер, чем писать грамматику (всё равно придётся) и по ней ручками долбить парсер.

А зачем?
Болие того грамматика всех языков программирования где есть требование предварительного объявления переменных является как минимум контекстно зависимой. А для КЗ грамматик не существует эффективных парсеров.
Так что в любом случае описывается не грамматика языка, а грамматика надмножества языка. И далие неформальными правилами (которые почемуто называют семантикой ) отсекаются невалидные строки.

K>Проблема yacc в том, что он yacc, а не в том, что он compiler-compiler. Можно те же вещи сделать удобнее.

Я пробовал разнае КК. На немерле ручками всеравно проще писать.
А когда дело доходит до генерации однотипных методов в АСТ то все эти КК вобще в пролете. Ибо в принципе не умеют.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 20:07
Оценка: +1
WolfHound wrote:
> Я пробовал разнае КК. На немерле ручками всеравно проще писать.
> А когда дело доходит до генерации однотипных методов в АСТ то все эти КК
> вобще в пролете. Ибо в принципе не умеют.
А ANTLR пробовал? Мне действительно интересно, скоро парсер для нехилого
языка придется писать.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 22.01.07 20:58
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>На D можно вполне повторить.


VD>Ну, так повтори. Интересно глянуть.


Пока держи что попроще, взял с твоей ссылки на linq вот этот пример

public void Linq1() {
    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

    var lowNums =
        from n in numbers
        where n < 5
        select n;

    Console.WriteLine("Numbers < 5:");
    foreach (var x in lowNums) {
        Console.WriteLine(x);
    }
}


вот что получилось

import std.stdio;

class from(alias V, alias TA)
{   
    alias typeof(TA[0]) T;
    alias T[] A;
    
    A seq;
    bool delegate() cond;
    
    this()
    {
        this.seq = TA;
    }
    
    from where(bool delegate() cond)
    {
        this.cond = cond;
        return this;
    }
    
    A select(T delegate() exec)
    {
        A result;
        foreach(v; seq)
        {
            V = v;
            if(cond()) 
            {
                result ~= [exec()];
            }    
        }
        return result;
    }
         
}


void main()
{
    auto numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
    
    int x;   
    auto r = (new from!(x, numbers))
                .where({return x < 5;})
                .select({return x;});
    
    writefln(r);
}


конечно корявей и плохо то, что используется внешняя переменная, но вполне терпимо (да и улучшить тут многое можно).
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 22.01.07 21:08
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, konsoletyper, Вы писали:


K>>LL(1) парсер методом синтаксического спуска? Или недо-LR с приоритетом операций? Всё это тяжело пишется и медленно работает.

WH>Если это делать на С++ то да.
WH>А так немерле написан на немерле. И никаких компиляторов компиляторов там не используется.

А пофигу, C++, Nemerle — всё равно писать. Да, на Немерле мы в 3 раза быстрее напишем. А вот с помощью КК пожно в inf раз быстрее сделать.

K>>Генератор даёт гораздо более совершенный парсер, без множества граблей (хотя некоторые остаются).

WH>Заставить такой парсер (особенно LR) выдавать человекочитаемые сообщения об ошибках задача не тривиальная.

На самом деле, диагностика ошибок — задача во всём компиляторостроении нетривиальная (на самом деле, огромная заслуга Москаля в том, что он сумел вывод типов совместить с нормальными сообщениями об ошибках). Делать её ручками на намного проще. Да и проблему я вижу не в КК вообще, а именно в кривизне yacc.

K>>Да и проще описать грамматику и получить готовый парсер, чем писать грамматику (всё равно придётся) и по ней ручками долбить парсер.

WH>А зачем?
WH>Болие того грамматика всех языков программирования где есть требование предварительного объявления переменных является как минимум контекстно зависимой. А для КЗ грамматик не существует эффективных парсеров.
WH>Так что в любом случае описывается не грамматика языка, а грамматика надмножества языка. И далие неформальными правилами (которые почемуто называют семантикой ) отсекаются невалидные строки.

Согласен. Но только гораздо проще, если это надмножество парсится автоматически сгенерированным парсером, а затем по некоторым продукциям (их будет очень немного на самом деле) мы выполнем семантическое действие. Ну и дальше обход AST — без этого никак.

WH>Я пробовал разнае КК. На немерле ручками всеравно проще писать.


Какие, интересно знать? Вот мне тоже ни один не подошёл — так я свой написал на C# (не поделюсь). Теперь на Nemerle делаю ещё круче (поделюсь, когда сделаю).

WH>А когда дело доходит до генерации однотипных методов в АСТ то все эти КК вобще в пролете. Ибо в принципе не умеют.


А вот у меня в ближайших планах сделать КК, который генерит парсеры, автоматически (в большинстве случаев) создающие AST. Плюс ещё нужно ручками несколько функций написать, чтобы некоторые нетривиальные узлы построить. Работа идёт потихоньку, теоретическая база есть, осталось дело за реализацией.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка:
Здравствуйте, FR, Вы писали:

FR>В общем это:

FR>

FR>Нет, я утверждаю (точнее предпологаю, оставляя поле для сомнения), что на С++ и Ди невозомжно сгенерировать методы нужной сигнатуры по описанию заданному ссылкой на тип.


FR>вроде получается:


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

FR>f это фукция сгенерированная по ссылке на тип функции tst


Но генератор ведь не виртуальный.

FR>Ну а в частных случаях вроде фабрики это разрешимо по другому.


Пока что чистого решения я не увидил. Шаблон с переменным числом параметров — это конечно круто, но не совсем то что хотелось бы.

Аналогом такого шаблона является простейший макрос с перменным числом параметров (последний параметр помеченный как params). Вот только это не совсем то что хотелось бы.

FR>Просто надо еще C++ ихний ставить чтобы линкер и т. п. были доступны.


Странная политика. Если они хотят людей привлечь, то нужно был сделать удобный инсталлятор. Уж если не с IDE, то хотя бы с простой поддержкой компиляции из командной строки. Как, например, в VS... запускаешь батричек и получаешь все что ужно в командной строке.

VD>>Да, это лучше чем С++, но все равно до заданных вручную им далеко:


FR>Гораздо лучше. И самый прикол что в D тоже можно вручную задавать. В том моем примере это легко добавить, плюс нужно добавить проверки на то что соответствующий класс является наследником соответствующего интерфейса, и выдачу сообщения об ошибке.


Интересно было бы поглядеть, но что-то мне подсказывает, что это опять будет плясками с бубном, а не прямым и красивым решением. А вот эти пляски мне больше всего не нравятся. По мне так лучше или наличие прямого решения, или полное его отсуствие.

FR>В D многие вещи которые в C++ делаются через ж... встроенны в язык, в общем D идет вполне нормальном направлении.


А мне кажется, что как раз направление не верное. Это путь С++. А он кривой. Причем идеологически.

FR>>>Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".


VD>>А не проще ли его добавить напрямую, а не через зад?


FR>Так оно и добавлено напрямую это ключевое слово языка.


Я про "статический "генератор классов"".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[48]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> C>Сейчас мне абсолютно не хочется ставить обратно Emacs и самому повторять

>> C>это все.
>> Особенно если учесть, что резульат можно предсказать заранее.
C>Естественно, оно будет работать.

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

C>Ты когда-нибудь слышал про кросс-индексы исходников? Так вот, XRef их

C>строит, поэтому там есть вкладка "usages", которая обновляется когда ты
C>двигаешься по коду.

Я не просто что-то слышал. Я на практике занимаюсь похожими вещами. И знаю что такое С++. Исходя из этого я точно знаю чем это все закончится. Будут или жудчашие тормоза, или глюки. Все IDE которые я видел до этого выбирали глюки.

Все индесы и т.п. прийдется перестраивать при малейших изменениях. Учитывая навороты метапрограммирвоания сделать все это инкрементально для С++ практически нереально.

C>Переимнование я лично проверял на достаточно большом проекте — работало

C>быстро.

Быстро — это сколко? Когда в бэтах VS 2005 переименование занимало всего каких-то 4-5 секунд — это было нестерпимо, и я зачастую выбирал замену по контексту. А 10+ это уже совсем не быстро. Тут уже в стиле F2, поправил имя, нажал ввод уже не прокатит. Три изменения — минута. А когда одно изменение может привести к генерации совсем другого кода, то это вообще смертельные танцы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[45]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка:
Здравствуйте, FR, Вы писали:

FR>Пока держи что попроще, взял с твоей ссылки на linq вот этот пример


FR>
FR>public void Linq1() {
FR>    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

FR>    var lowNums =
FR>        from n in numbers
FR>        where n < 5
FR>        select n;

FR>    Console.WriteLine("Numbers < 5:");
FR>    foreach (var x in lowNums) {
FR>        Console.WriteLine(x);
FR>    }
FR>}
FR>


...

FR>конечно корявей и плохо то,


+1

FR>что используется внешняя переменная, но вполне терпимо (да и улучшить тут многое можно).




Nemerle рулит
def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
WriteLine(numbers.Filter(_ < 5));

или так
def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
WriteLine($[x | x in numbers, x < 5]);


В общем, я все конечно понимаю, но до чистаты линий Ди еще прау версий нехватает. А может он так и останется на всю жизнь С++*1.5
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Ну как бы... Если ты хвалишь портабельность Nemerle, то это

C>автоматически означает, что ты хвалишь Mono.

Странная логика.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Кстати, да. Правда, с 10 раз — это гипербола, а вот в 3-4 раза — вполне реально, но это только относительно объёма. Относительно удобства могу выразить субъективную оценку "в 10 раз", несмотря на то, что C#-версия насписана в VS, со всеми её достоинствами, а вот Nemerle-версия пока пишется в SciTE. Интересно, во сколько раз возрасло бы удобство, будь интеграция дописанной?


Ну, я уже пишу примерчики в интеграции. Оно конечно пока до качества шарпоской не отягивет, но уже в сто раз удобнее чем в Сцинтиле. Основной кайф в том, что ошибки замечаешь почти сразу. Часто запуск происходит с первого раза (без правок после первой компиляции). Ну, и конечно комлит с хинтами рулит неимоверно. Откровенно говоря привыкнуть к их отсуствию я так и не смог. Я конечно могу писть без них, но эффективность в разы мниже.

Что до оценок, то я скажу так. По объему кода почти на любой задаче Немерле будет в 2 раза кратче чем Шарп и в 2.5 — 3 чем С++. В некоторых случаях разница действительно может составить в 10 раз. Особенно если мерять в строках, а не килобайтах. Особо выигрышные задачи где нужно обрабатывать структуры данных (особенно иерархии), в общем там где можно применить варианты и паттерн-матчинг. Так же рулят задачи хоршо решаемые с помощю декомпозиции фукнций.

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

Опять же чтение бдует проще только если есть поддержка IDE. Иначе прийдется лазить по файлам в поисках информации о типах, а это убьет весь кайф от краткости и понятности анализируемого куска.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ручками проще. Я пробовал.


Зависит от того что за макрос будет. В общем, то я бы предпочел хороший макрос. Так чтобы был чистый EBNF. И чтобы семантические действия были отделены и не заграмождали грамматику.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А ANTLR пробовал? Мне действительно интересно, скоро парсер для нехилого

C>языка придется писать.

АНТЛР — 2.х я бы оценил на 3 и действительно предпочел бы немерле в чистом виде. А вот 3.х уже будет по круче. Но он пока бэта. Думаю глчюит не хило.

По скорости так однозначно лучше ручками. По объему работ лучше АНТЛР. Особенно учитывая наличие IDE для 3.х. Я ее смотрел очень давно, и уже тогда это было нечто. А сейчас, думаю, там вообще отпад должен быть.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:32
Оценка: 1 (1)
Здравствуйте, konsoletyper, Вы писали:

K>На самом деле, диагностика ошибок — задача во всём компиляторостроении нетривиальная


Тут есть одно "но". Леворекурсивные парсеры принципиально выдают более разумные сообщения об ошибках. Причина тут в том, что они разбирают код так же как это делает человек. А LR-парсеры делают это совсем иначе. Они сначала накапливают грамматику и только когда ее не удаетя свернуть как надо выдают ошибку. В итоге контекст часто бывает потерян, и LR-ы просто не знаю, что они разбирали.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[49]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 22:44
Оценка:
VladD2 wrote:
> C>Ты когда-нибудь слышал про кросс-индексы исходников? Так вот, XRef их
> C>строит, поэтому там есть вкладка "usages", которая обновляется когда ты
> C>двигаешься по коду.
> Я не просто что-то слышал. Я на практике занимаюсь похожими вещами. И
> знаю что такое С++. Исходя из этого я точно знаю чем это все закончится.
> Будут или жудчашие тормоза, или глюки. Все IDE которые я видел до этого
> выбирали глюки.
Так вот, XRef — это особенный случай. Он справляется с разбором
Буста!


Я действительно был удивлен, когда XRef распарсил все мои исходники. Так
что я даже похвалил его в теме "XEmacs — помойка".

> Все индесы и т.п. прийдется перестраивать при малейших изменениях.

> Учитывая навороты метапрограммирвоания сделать все это инкрементально
> для С++ практически нереально.
Ну почему нереально, просто ОЧЕНЬ ОЧЕНЬ трудоемко. Но вполне возможно,
никакой магии тут нет.

> C>Переимнование я лично проверял на достаточно большом проекте — работало

> C>быстро.
> Быстро — это сколко? Когда в бэтах VS 2005 переименование занимало всего
> каких-то 4-5 секунд — это было нестерпимо, и я зачастую выбирал замену
> по контексту.
Внутри файла — почти мгновенно. Я когда пытался использовать Emacs —
постоянно использовал рефакторинг "extract method" и делал find usages.
Работало все мгновенно.

Тормозил он (то есть работал 5-10 секунд) только на глобальных
рефакторингах (типа изменения шаблона с кучей воплощений).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[50]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.07 22:53
Оценка:
Здравствуйте, Cyberax, Вы писали:

А почему ты его снес и не испоьзуещь постоянно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[51]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 22.01.07 23:28
Оценка:
VladD2 wrote:
> А почему ты его снес и не испоьзуещь постоянно?
По одной большой причине — Emacs. Не срастаюсь я с ним.

Я пытался прикрутить его к ViMу, но сам ViM тоже не нравится. Так что
работаю в Студии с включеным Томатом. Периодически хочется заняться
прикручиванием XRef'а к Студии, но ломает дописывать идеологически
неправильный продукт.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 04:42
Оценка: :)
Здравствуйте, konsoletyper, Вы писали:

K>Кстати, я так понимаю, речь идёт о MP3-енкодере? А мы тут говорим об MP3-декодере, который штука действительно примитивная. И MP3 декодеров куча понаписана.


Всегда приятно послушать мнение эксперта в MP3 кодерах.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 04:52
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А ANTLR пробовал? Мне действительно интересно, скоро парсер для нехилого языка придется писать.


Я в этой вашей потасовке не участвую, но по секрету скажу. На плюсах было удобно писать конечные автоматы в основном за счёт локальных статических массивов и макросов. Далее один свич для обработки события и один для перехода в следущее состояние. В C# эта задача так компактно не решается.

В Немерле она решается ещё компактнее чем в плюсах, так что даже не думай. Особенно в N здорово решаются вопросы связянные с обработкой специальных случаев. При правильном дизайне вариантов так компактно, как паттерн матчинг обрабоку таких условий не сделает ни кто.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 04:57
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>А пофигу, C++, Nemerle — всё равно писать. Да, на Немерле мы в 3 раза быстрее напишем. А вот с помощью КК пожно в inf раз быстрее сделать.


Есть одна проблема. Пишем мы один раз, а читаем несчётное количество. Вручную написанный код сэкономит потом гораздо больше чем inf раз.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: AndreiF  
Дата: 23.01.07 05:05
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Может они имеют в виду, что в пользовательском коде нельзя их смешивать?


Вопрос в том — переделали ли они всё АПИ оси, чтобы использовать нормальные исключения? Подозреваю, что нет. Если нет, то пользы от поддержки исключений практически ноль.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[41]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 05:08
Оценка:
Здравствуйте, FR, Вы писали:

FR>В общем держи фабрику, конечно все в статике, но просто.


Ты уверен, что ты праильно понимаешь суть паттерна?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 07:00
Оценка:
Здравствуйте, konsoletyper, Вы писали:

E>>У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?


K>Кстати, да. Правда, с 10 раз — это гипербола, а вот в 3-4 раза — вполне реально, но это только относительно объёма.


Т.е., если в наличии есть оба варианта реализации, не могли бы вы озвучить количественные оценки -- объем кода в C# и в Nemerle?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: Turtle.BAZON.Group  
Дата: 23.01.07 08:07
Оценка:
Здравствуйте, konsoletyper, Вы писали:

E>>У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?

K>Кстати, да. Правда, с 10 раз — это гипербола, а вот в 3-4 раза — вполне реально, но это только относительно объёма. Относительно удобства могу выразить субъективную оценку "в 10 раз", несмотря на то, что C#-версия насписана в VS, со всеми её достоинствами, а вот Nemerle-версия

Ну если уж субъективную, тогда сразу "в сто крат!" или "в тыщу раз!".
... << RSDN@Home 1.2.0 alpha rev. 669>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 23.01.07 08:41
Оценка:
C>>Может они имеют в виду, что в пользовательском коде нельзя их смешивать?

AF>Вопрос в том — переделали ли они всё АПИ оси, чтобы использовать нормальные исключения? Подозреваю, что нет. Если нет, то пользы от поддержки исключений практически ноль.


Насколько я понял — API осталось прежним, поскольку для портирования под девятку старые приложения достаточно перекомпилировать. Так что согласен насчёт того что пользы практически ноль.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 23.01.07 09:08
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>конечно корявей и плохо то,


VD>+1


Основная корявость с лябдами оказывается вызвана тем что я еще не очень уверенно в D ореинтируюсь, в общем она легко убирается.

import std.stdio;

class from(alias V, alias TA)
{   
    alias typeof(TA[0]) T;
    alias T[] A;
    
    A seq;
    bool delegate() cond;
    
    this()
    {
        this.seq = TA;
    }
    
    from where(bool delegate()[] conds ...)
    {
        this.cond = conds[0];
        return this;
    }
    
    A select(T delegate()[] execs ...)
    {
        A result;
        foreach(v; seq)
        {
            V = v;
            if(cond()) 
            {
                result ~= [execs[0]()];
            }    
        }
        return result;
    }
         
}


void main()
{
    auto numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
    
    int x;   
    auto r = (new from!(x, numbers))
                .where(x < 5)
                .select(x);
    
    writefln(r);
}



VD>Nemerle рулит


Тут много что рулит Но и D похоже неплох.

VD>В общем, я все конечно понимаю, но до чистаты линий Ди еще прау версий нехватает. А может он так и останется на всю жизнь С++*1.5


Он уже в общем то лучше чем будет новый стандарт C++.
А так да согласен есть шероховатости. Но кажется что движется вполне правильным путем.
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 23.01.07 09:49
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:
C>>>Так для обычной рефлексии много особо ничего и не надо. Вот Emit на D не
C>>>сделать в принципе.

ANS>>btw, Совсем недавно любители Singularity, мне тут доказывали, что ни emit ни динамическая загрузка кода никому нафиг не нужны и даже вредны.


АХ>Смотря куда. В ядро и драйверы — не стоит!


emit — скорее всего да ("да" — в смысле "нет, не нужно" А вот без возможности динамической подгрузки модулей (драйверов), такая ОС давным давно никому не нужна.

АХ> А в прикладные проги — естественно стоит и даже практически необходимо.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[12]: Как скрестить ужа и ежа или статическую и утиные тип
От: deniok Россия  
Дата: 23.01.07 10:31
Оценка:
дравствуйте, VladD2, Вы писали:

VD>Здравствуйте, deniok, Вы писали:


VD>Да, в хаскеле работа с типами сделана нииболее грамотно из того что я видел. Если бы при этом сам язык не был бы маньякально функциональным и догматичным...


то грамотность и продуманность архитектуры и библиотек была бы принесена в жертву "удобству для неискушённого пользователя", "релиз на носу, а вы тут возитесь", etc

Кстати о догматичности: в версии Хаскеля до 98 (1.4) comprehension был не только для List, но и для произвольной монады (monad comprehension). Но в стандарт 98 его не включили, чтобы не переусложнять язык. Комитет учёл интересы пользователей, а ты обзываешься нехорошими словами
Re[45]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 23.01.07 10:35
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Еще раз. Это не герерация методов. Это создание гибких обобщений. А это разные вещи, хотя и позволяющие решать ряд общих задач.


Ну так я про этоже. Это уже вполне хороший инструмент.

FR>>Ну а в частных случаях вроде фабрики это разрешимо по другому.


VD>Пока что чистого решения я не увидил. Шаблон с переменным числом параметров — это конечно круто, но не совсем то что хотелось бы.


Задача вполне разрешимая, попробую сделать может в выходные. В общем уже понятно как сделать просто надо разобратся в некторых тонкостях языка.

VD>Аналогом такого шаблона является простейший макрос с перменным числом параметров (последний параметр помеченный как params). Вот только это не совсем то что хотелось бы.


Нет такой макрос это совсем другое.

FR>>Просто надо еще C++ ихний ставить чтобы линкер и т. п. были доступны.


VD>Странная политика. Если они хотят людей привлечь, то нужно был сделать удобный инсталлятор. Уж если не с IDE, то хотя бы с простой поддержкой компиляции из командной строки. Как, например, в VS... запускаешь батричек и получаешь все что ужно в командной строке.


Надо конечно. Но учти сейчас D интересуются в основном опытные сишники и C++'систы, для них это все на проблема. я вообще не помню чтобы у меня например были какие то проблемы при установке.


FR>>Гораздо лучше. И самый прикол что в D тоже можно вручную задавать. В том моем примере это легко добавить, плюс нужно добавить проверки на то что соответствующий класс является наследником соответствующего интерфейса, и выдачу сообщения об ошибке.


VD>Интересно было бы поглядеть, но что-то мне подсказывает, что это опять будет плясками с бубном, а не прямым и красивым решением. А вот эти пляски мне больше всего не нравятся. По мне так лучше или наличие прямого решения, или полное его отсуствие.


Да нормально, вот для пример обработка ошибки что при создании объекта указан не базовый тип:
// фабрика
template _abstract(Base...)
{
template concrete(Concrete...)
 {  
    template create(T)
        {
        T args(A...)(A args)
         {
            const i = IndexOf!(T, Base);

            static if( i < 0 || i >= Base.length)
            {
                pragma(msg, "error: type <" ~ T.mangleof ~ "> not base type");
                static assert(0);
            }
            
            alias Concrete[i] TR;
            return new TR(args);
         }
        } 
 }  
}


Вот ошибочная строка:
auto y = silly_enemy.create!(SillySuperMonster).args(1);


и сообщение об ошибке

error: type <C17absract_factory0217SillySuperMonster> not base type
absract_factory02.d(18): error static assert (0) is false


также можно и другие ошибки обработать

FR>>В D многие вещи которые в C++ делаются через ж... встроенны в язык, в общем D идет вполне нормальном направлении.


VD>А мне кажется, что как раз направление не верное. Это путь С++. А он кривой. Причем идеологически.


Нет, он с него уже свернул


FR>>Так оно и добавлено напрямую это ключевое слово языка.


VD>Я про "статический "генератор классов"".


И я тоже, хотел бы чтобы его добавили.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 23.01.07 10:56
Оценка:
AndreiF wrote:
> C>Может они имеют в виду, что в пользовательском коде нельзя их смешивать?
> Вопрос в том — переделали ли они всё АПИ оси, чтобы использовать
> нормальные исключения? Подозреваю, что нет. Если нет, то пользы от
> поддержки исключений практически ноль.
Похоже, что нет. Поэтому производители Оперы просто написали обертки,
бросающие исключения, для всех используемых API.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 23.01.07 10:59
Оценка:
Здравствуйте, IT, Вы писали:

FR>>В общем держи фабрику, конечно все в статике, но просто.


IT>Ты уверен, что ты праильно понимаешь суть паттерна?


Конечно, и в этой сути ничего ни говорится о том что нельзя делать статическую (времени комиляции) фабрику, которую я и сделал на D.
Нормальную динамическую попробую позже сделать.
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 11:05
Оценка: +1 -4
Здравствуйте, FR, Вы писали:

VD>>Я про "статический "генератор классов"".


FR>И я тоже, хотел бы чтобы его добавили.


Мне кажется -- все это от лукавого. Здесь тебя втравили в игру на чужом поле, поскольку Nemerle изначально создавался как язык для написания себя самого на себе самом же (посредством макросистемы). Поэтому создание таких AbstractFactory делается в Nemerle его же макросами и в compile time.

D совсем другого поля ягода. И туже самую AbstractFactory для него можно без проблем получить путем precompile time генерации из какого-нибудь DSL (а описание AbstractFactory в анотации есть не что иное как DSL). При этом, по моему мнению, такой подход очень универсален, т.к. позволяет легко масштабироваться от простых DSL (вроде вот таких делараций фабрик) до гораздо более сложных, с собственным синтаксисом и заточенных под специальные задачи (вроде Ragel или, как у меня, для описания сериализации).

Как обычно, "единственно правильного решения" задачи не существует. Просто аппологеты Nemerle ведут себя так, будто бы они одно такое "единственно правильное" знают, а все остальное для них так -- ошибка эволюции и ее тупиковая ветвь.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[52]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 11:25
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>По одной большой причине — Emacs. Не срастаюсь я с ним.


Ну, ради таких то наворотов в рефакторинге можно был пережить. Темболее, что можно испльзовать его было и как вторую утилиту.

Странно это слушать про круть неимоверную, и при этом инструмент не используется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 11:25
Оценка:
Здравствуйте, IT, Вы писали:

IT>В Немерле она решается ещё компактнее чем в плюсах, так что даже не думай. Особенно в N здорово решаются вопросы связянные с обработкой специальных случаев. При правильном дизайне вариантов так компактно, как паттерн матчинг обрабоку таких условий не сделает ни кто.


Ну, на МЛ-клонах это будет точно так же. Да и генераторы парсеров коенчно могут многое. Все же это метапрограммы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[47]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 23.01.07 11:31
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, FR, Вы писали:


VD>>>Я про "статический "генератор классов"".


FR>>И я тоже, хотел бы чтобы его добавили.


E>Мне кажется -- все это от лукавого. Здесь тебя втравили в игру на чужом поле, поскольку Nemerle изначально создавался как язык для написания себя самого на себе самом же (посредством макросистемы). Поэтому создание таких AbstractFactory делается в Nemerle его же макросами и в compile time.


Это да, но я сейчас просто изучаю язык, так что мне только на пользу любые попытки, хоть успешные хоть нет


E>D совсем другого поля ягода. И туже самую AbstractFactory для него можно без проблем получить путем precompile time генерации из какого-нибудь DSL (а описание AbstractFactory в анотации есть не что иное как DSL). При этом, по моему мнению, такой подход очень универсален, т.к. позволяет легко масштабироваться от простых DSL (вроде вот таких делараций фабрик) до гораздо более сложных, с собственным синтаксисом и заточенных под специальные задачи (вроде Ragel или, как у меня, для описания сериализации).


Ну шаблоны тоже позволяют многое сделать. К тому же на D многоесвязвнное с шаблонами на порядок проще делать чем в C++.

E>Как обычно, "единственно правильного решения" задачи не существует. Просто аппологеты Nemerle ведут себя так, будто бы они одно такое "единственно правильное" знают, а все остальное для них так -- ошибка эволюции и ее тупиковая ветвь.


Re[53]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 23.01.07 11:47
Оценка:
VladD2 wrote:
> C>По одной большой причине — Emacs. Не срастаюсь я с ним.
> Ну, ради таких то наворотов в рефакторинге можно был пережить. Темболее,
> что можно испльзовать его было и как вторую утилиту.
Пытался — все равно не получается. Под Емаксом даже нормального
отладчика нет!!!

> Странно это слушать про круть неимоверную, и при этом инструмент не

> используется.
У меня вечные планы по его встраиванию. Руки не доходят все время —
сейчас я не так уж много на С++ пишу, хватает VisualAssist'а, который
постепенно приближается по качеству к XRef.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 23.01.07 12:18
Оценка:
>> C>Может они имеют в виду, что в пользовательском коде нельзя их смешивать?
>> Вопрос в том — переделали ли они всё АПИ оси, чтобы использовать
>> нормальные исключения? Подозреваю, что нет. Если нет, то пользы от
>> поддержки исключений практически ноль.
C>Похоже, что нет. Поэтому производители Оперы просто написали обертки,
C>бросающие исключения, для всех используемых API.

Очень интересно. Откуда дровишки — ссылкой не поделишься? спасибо заранее.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 23.01.07 12:18
Оценка: +2 :))
VD>Я помню как С++-ники нападали на Немерле когда о нем телько начали говорить на этом форуме. Аргументы тоже были "железными". Их и сейчас не прошибешь. Это вера. С ней спорить бессмысленно. Очень не многие способны будучи экспертами в одном деле адекватно и беспритрастно оценивать некую конкурирующую технологию.

Влад, если ты завтра увлечёшься языком Brainfuck — через месяц на него тоже будут нападать на здешних форумах Ты просто любой язык который тебе нравится пытаешься идеализировать и защищать с такой же беспощадностью как газета Правда советских времён защищала коммунизм от нападок империализма. Не стоит это такой бури эмоций, а то ведь эффект получается абсолютно противоположным — примерно как у Губанова с Обероном.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: Kisloid Мухосранск  
Дата: 23.01.07 12:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Тут есть одно "но". Леворекурсивные парсеры принципиально выдают более разумные сообщения об ошибках. Причина тут в том, что они разбирают код так же как это делает человек. А LR-парсеры делают это совсем иначе. Они сначала накапливают грамматику и только когда ее не удаетя свернуть как надо выдают ошибку. В итоге контекст часто бывает потерян, и LR-ы просто не знаю, что они разбирали.


Хочу лишь добавить, что зато LL(k) парсеры распознают более узкий класс КС грамматик, в то время как LR(1) распознает весь класс КС грамматик. Таким образом выразительная мощность LR(1) выше, чем у LL(k).
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 23.01.07 12:47
Оценка: 6 (1)
Left2 wrote:
> C>Похоже, что нет. Поэтому производители Оперы просто написали обертки,
> C>бросающие исключения, для всех используемых API.
> Очень интересно. Откуда дровишки — ссылкой не поделишься? спасибо заранее.
Из обзора статьи "Porting Opera to EPOC". Саму статью найти не могу — 404.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[47]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 13:00
Оценка:
Здравствуйте, eao197, Вы писали:

E>Мне кажется -- все это от лукавого. Здесь тебя втравили в игру на чужом поле, поскольку Nemerle изначально создавался как язык для написания себя самого на себе самом же (посредством макросистемы). Поэтому создание таких AbstractFactory делается в Nemerle его же макросами и в compile time.


+1 Так и есть. Метапрограммирование — это поле Немерла и Лиспа, но не Ди или С++.

E>D совсем другого поля ягода. И туже самую AbstractFactory для него можно без проблем получить путем precompile time генерации из какого-нибудь DSL (а описание AbstractFactory в анотации есть не что иное как DSL). При этом, по моему мнению, такой подход очень универсален,


Какую фигню только не придумешь чтобы защитить явного аутсайдера.
Создание внешиних ДСЛ-ей задача на порядок более сложная и не применимая в тех случаях когда этому ДСЛ-ю требуется информация о типах. Именно таков данный случй. Чтобы описание фабрики было кратким и декларативным ему нужно читать описание классов для которых создается фабрика. А именно это внешний ДСЛ и не может.

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

Как это называется? Однозначно — двойные стандарты и притягивание за уши.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 13:00
Оценка:
Здравствуйте, deniok, Вы писали:

D>то грамотность и продуманность архитектуры и библиотек была бы принесена в жертву "удобству для неискушённого пользователя", "релиз на носу, а вы тут возитесь", etc


Это ничем не обоснованное мнение.

D>Кстати о догматичности: в версии Хаскеля до 98 (1.4) comprehension был не только для List, но и для произвольной монады (monad comprehension). Но в стандарт 98 его не включили, чтобы не переусложнять язык. Комитет учёл интересы пользователей, а ты обзываешься нехорошими словами


Они бы учли интересы и убрали сами модады введя вместо этого строгое (не линивое) выполнение. Сделать это можно было пометкой участков кода неким блоком.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: Klapaucius  
Дата: 23.01.07 13:01
Оценка: +4 :))
Здравствуйте, FR, Вы писали:

K>>Это без замыкания-то? Ну-ну.

FR>Так я тоже двумя ногами за нормальные замыкания.
FR>Но ты не прав с своими хиханьками и хаханьками, даже без замыканяия лямбда полезна и вкусна, особенно если пользуешся как в D как блоками кода.

Прав я или нет — это вопрос как минимум дискуссионный. Про вкусно — я не спорю, все-таки de gustibus et coloribus non est disputandum. Понятно, что с такой квазилямбдой можно написать простенький фильтр, отображение или еще что-то в этом роде и получить свои десять секунд фана. Но когда дело дойдет до, извините за каламбур, дела — пользователь квазилямбды просто ударится лбом о притолоку.
Я действительно считаю что квазилямбда, в отличие от лямбды, вредна — как раз потому, что это неполноценная лямбда и того, кто знает (или думает что знает), что нужно ожидать от лямбды ждет неприятный сюрприз — это, правда, только мое мнение. Правда, это не страшно, потому что D, как я понял, не нацелен на пользователей лямбд, а нацелен на пользователей LP-горшков из буста. Эти самые пользователи и получают то же самое, только после пластической хирургии — что уже плюс.
Г-н Хропов где-то поблизости отметил, причем совершенно справедливо, что вывод типов для делегатов это очень хорошо. Я с ним согласен. Лямбда в C# 2.0 выглядит страшнее атомной войны. Но есть нюанс. Она работает. А в D она выглядит лучше. Почти как живая. Но она не живая на самом деле. Такие дела.
Вобщем, я опять лезу со своими хиханьками и хаханьками — не смотря на то, что понимаю, что когда смеешься над тем, что кому-то нравится — у этого кого-то может возникнуть желание сказать насмешнику пару неласковых слов или даже пнуть его ногой в живот. Но что поделать — мне просто сдержаться очень сложно.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: Left2 Украина  
Дата: 23.01.07 13:04
Оценка: +1
>> C>Похоже, что нет. Поэтому производители Оперы просто написали обертки,
>> C>бросающие исключения, для всех используемых API.
>> Очень интересно. Откуда дровишки — ссылкой не поделишься? спасибо заранее.
C>Из обзора статьи "Porting Opera to EPOC". Саму статью найти не могу — 404.

Спасибо!
Саму статью пока не нашёл, но вот из её аннотации:

It would have been a huge effort to restructure the code and adapt it for EPOC, so it was decided the best approach would be to ?emulate? the Windows API and environment, leaving the Opera base code untouched.

Эх, кабы они поделились этими обёртками... Вот было бы счастье
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 13:57
Оценка:
Здравствуйте, Kisloid, Вы писали:

K>Хочу лишь добавить, что зато LL(k) парсеры распознают более узкий класс КС грамматик, в то время как LR(1) распознает весь класс КС грамматик. Таким образом выразительная мощность LR(1) выше, чем у LL(k).


Это не так. С заглядываниями вперед LL(k)-парсеры могут распознавать такие же грамматки если не больше. Да и для большинства компьютерных языков хватает LL(1)-парсеров с нехитрым механизмом заглядывания. LL(*)-парсеры ввообще накрывают прктически любой ЯП. Если вести речь естественных языках то там все сложнее. Там и чистый LR(k) не пригоден. Там надо использовать построители для GLR или Эрли парсеров. Но эффективность у них ниже. И для "почти LL(1)" языков их примененение наверно будет избыточным.

Кстати, интересной идеей является реализация парсера со сменными алгоритмами. Представляете? Задаешь тип алгоритма и смотришь что получилось. Красота!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 13:57
Оценка:
Здравствуйте, Left2, Вы писали:

L>Влад, если ты завтра увлечёшься языком Brainfuck — через месяц на него тоже будут нападать на здешних форумах Ты просто любой язык который тебе нравится пытаешься идеализировать и защищать с такой же беспощадностью как газета Правда советских времён защищала коммунизм от нападок империализма. Не стоит это такой бури эмоций, а то ведь эффект получается абсолютно противоположным — примерно как у Губанова с Обероном.


Brainfuck мне точно не понрависят. А защищаю что что-то только когда на это что-то некорректно нападают. Против адекватного сравнения я ничего не имею. Только это видимо область где адекватности ждать не приходится.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 14:20
Оценка:
Здравствуйте, VladD2, Вы писали:

IT>>В Немерле она решается ещё компактнее чем в плюсах, так что даже не думай. Особенно в N здорово решаются вопросы связянные с обработкой специальных случаев. При правильном дизайне вариантов так компактно, как паттерн матчинг обрабоку таких условий не сделает ни кто.


VD>Ну, на МЛ-клонах это будет точно так же.


За МЛ ничего не скажу.

VD>Да и генераторы парсеров коенчно могут многое. Все же это метапрограммы.


Я говорю как бы о компактности ручного написания.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[47]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 14:31
Оценка:
Здравствуйте, eao197, Вы писали:

E>D совсем другого поля ягода. И туже самую AbstractFactory для него можно без проблем получить путем precompile time генерации из какого-нибудь DSL (а описание AbstractFactory в анотации есть не что иное как DSL).


А комбинацию AbstractFactory и, например, синглетона?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 14:37
Оценка:
Здравствуйте, FR, Вы писали:

FR>>>В общем держи фабрику, конечно все в статике, но просто.


IT>>Ты уверен, что ты праильно понимаешь суть паттерна?


FR>Конечно, и в этой сути ничего ни говорится о том что нельзя делать статическую (времени комиляции) фабрику, которую я и сделал на D.

FR>Нормальную динамическую попробую позже сделать.

А какой смысл от такой фабрики? Кроме пенисометрии, конечно.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 23.01.07 15:03
Оценка:
IT wrote:
> C>А ANTLR пробовал? Мне действительно интересно, скоро парсер для
> нехилого языка придется писать.
> Я в этой вашей потасовке не участвую, но по секрету скажу. На плюсах
> было удобно писать конечные автоматы в основном за счёт локальных
> статических массивов и макросов. Далее один свич для обработки события и
> один для перехода в следущее состояние. В C# эта задача так компактно не
> решается.
Если для парсинга придется руками писать автоматы, то я заранее уже не
хочу это использовать

> В Немерле она решается ещё компактнее чем в плюсах, так что даже не

> думай. Особенно в N здорово решаются вопросы связянные с обработкой
> специальных случаев. При правильном дизайне вариантов так компактно, как
> паттерн матчинг обрабоку таких условий не сделает ни кто.
Это я знаю. С другой стороны, если можно будет обойтись вообще вместо
ручного написания парсера — то мне будет примерно пофиг что там у него
внутри за неонка будет.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
От: WolfHound  
Дата: 23.01.07 15:04
Оценка: +2
Здравствуйте, Andrei N.Sobchuck, Вы писали:

АХ>>Смотря куда. В ядро и драйверы — не стоит!

ANS>emit — скорее всего да ("да" — в смысле "нет, не нужно" А вот без возможности динамической подгрузки модулей (драйверов), такая ОС давным давно никому не нужна.
Еще раз прочитай про сингулярити. Там нельзя загрузить код в уже запущенный процесс. Но никто не мешает во время работы ОС загрузить новые модули, собрать новый образ процесса и запустить этот процесс даже если этот процесс драйвер.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 15:21
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Если для парсинга придется руками писать автоматы, то я заранее уже не хочу это использовать


Там делов то

C>Это я знаю. С другой стороны, если можно будет обойтись вообще вместо ручного написания парсера — то мне будет примерно пофиг что там у него внутри за неонка будет.


Парсинг — это не самое страшное.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 23.01.07 15:32
Оценка: :)
Здравствуйте, IT, Вы писали:


FR>>Конечно, и в этой сути ничего ни говорится о том что нельзя делать статическую (времени комиляции) фабрику, которую я и сделал на D.

FR>>Нормальную динамическую попробую позже сделать.

IT>А какой смысл от такой фабрики? Кроме пенисометрии, конечно.


Для меня смысл простой изучение D
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: Kisloid Мухосранск  
Дата: 23.01.07 15:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это не так. С заглядываниями вперед LL(k)-парсеры могут распознавать такие же грамматки если не больше.


При k стремящемся к бесконечности, да. А вот при конечном k выразительная мощность всегда будет ниже, чем у LR(1). Причем у LR(k), при увеличении k, мощность не увеличивается.

VD>Кстати, интересной идеей является реализация парсера со сменными алгоритмами. Представляете? Задаешь тип алгоритма и смотришь что получилось. Красота!


Что то вроде JFLAP?
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re[48]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 17:33
Оценка: :)
Здравствуйте, IT, Вы писали:

E>>D совсем другого поля ягода. И туже самую AbstractFactory для него можно без проблем получить путем precompile time генерации из какого-нибудь DSL (а описание AbstractFactory в анотации есть не что иное как DSL).


IT>А комбинацию AbstractFactory и, например, синглетона?


А какой в этом смысл? Зачем фабрике создавать то, что должно быть в единственном экземпляре?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 23.01.07 17:53
Оценка:
Здравствуйте, IT, Вы писали:

IT>Есть одна проблема. Пишем мы один раз, а читаем несчётное количество. Вручную написанный код сэкономит потом гораздо больше чем inf раз.


А зачем разбираться в сгенерированном коде? Разве что, нужно разбираться в спецификации, править её и заново прогонять через генератор.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 23.01.07 17:53
Оценка: +1
Здравствуйте, Kisloid, Вы писали:

K>Хочу лишь добавить, что зато LL(k) парсеры распознают более узкий класс КС грамматик, в то время как LR(1) распознает весь класс КС грамматик. Таким образом выразительная мощность LR(1) выше, чем у LL(k).


LR(1)-парсеры не распознают не то что весь класс КС-грамматик, они распознают даже далеко не весь класс однозначных КС-грамматик. Кстати, LR(1) — это роскошь, т.к. очень долго генерятся. На парктике используются LALR(1)-парсеры. Теоретически они распознают более узкий класс, чем LR(1), но на практике они справляются с теми же грамматиками, при этом выдавая болеее запутанные сообщения об ошибках.

Ну и конечно, LL(1)-парсеры распознают более узкий класс, чем LR(1). Как уже отметил Влад, у LL(1) меньше граблей с ошибками. Однако, не каждый LL(1) можно написать рекурсивным спуском. Иногда проблема решается преобразованием грамматики (кстати, генераторы LL(*)-парсеров это делают автоматически), что долго и нудно. Потому опять же проще сгенерить LL(*)-парсер, чем писать его же ручками.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 23.01.07 17:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Зависит от того что за макрос будет. В общем, то я бы предпочел хороший макрос. Так чтобы был чистый EBNF. И чтобы семантические действия были отделены и не заграмождали грамматику.


Ну, в чистом виде это не получается. Я вот частично сематические действия описывают при помощи тэгов (иденетификаторов в фигурных скобках рядом с названиями символов). Так грамматика немного загромождается, однако это позволяет почти автоматически генерить AST. Собственно семантические действия (которые в большинстве случаев будут создаваться автоматически) выносятся в отдельный класс или функцию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[29]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 23.01.07 17:53
Оценка:
Здравствуйте, eao197, Вы писали:

E>Т.е., если в наличии есть оба варианта реализации, не могли бы вы озвучить количественные оценки -- объем кода в C# и в Nemerle?


Пока не могу, т.к. проект на Немерле далеко от завершения. Насчёт многих вещей я заранее могу сказать, какими они будут на Nemerle.

Сейчас готов парсер для языка, на котором опиывается грамматика, семантический анализатор, некоторые вспомогательные структуры данных и кое-что из работы с грамматикой. Кстати, язык описания грамматики в Nemerle-версии генератора на порядок сложнее, чем в случае с C#-версией, так что сравнение будет неуместно. Но несмотря на этот факт, объём кода проекта на Nemerle даже меньше объёма кода аналогичного проекта C# (52.9К vs 74.9К соотвественно). Но по парсеру судить, опять же, неуместно, так что посмотрим, когда я напишу ещё что-то, во сколько раз получится экономия.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Как скрестить ужа и ежа или статическую и утиные тип
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 23.01.07 18:01
Оценка:
Здравствуйте, eao197, Вы писали:

IT>>А комбинацию AbstractFactory и, например, синглетона?


E>А какой в этом смысл? Зачем фабрике создавать то, что должно быть в единственном экземпляре?


Наоборот, единственный экземпляр фабрики.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[48]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 18:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>+1 Так и есть. Метапрограммирование — это поле Немерла и Лиспа, но не Ди или С++.


Тогда какой смысл выяснять как делается на языке то, что на нем в принципе не должно делаться?

E>>D совсем другого поля ягода. И туже самую AbstractFactory для него можно без проблем получить путем precompile time генерации из какого-нибудь DSL (а описание AbstractFactory в анотации есть не что иное как DSL). При этом, по моему мнению, такой подход очень универсален,


VD>Какую фигню только не придумешь чтобы защитить явного аутсайдера.


Разговоры об аутсайдерах предлагаю отложить лет на пять.

VD>Создание внешиних ДСЛ-ей задача на порядок более сложная и не применимая в тех случаях когда этому ДСЛ-ю требуется информация о типах. Именно таков данный случй. Чтобы описание фабрики было кратким и декларативным ему нужно читать описание классов для которых создается фабрика. А именно это внешний ДСЛ и не может.


О сложности создания внешних DSL -- это ты кому-нибудь другому расскажи. Если голова на месте, а в руках подходящий инструмент, DSL-и пишутся за часок-другой без каких-либо усилий. А остальные могут подождать манны небесной от M$ с полной интеграцией в VS.

А вот информация о типах... Обрати внимание что в вашей фабрике ее и так не мало приходится передавать в анотациях. Если во внешний DSL вручную передать еще и описания доступных для фабрики конструкторов, то объем сильно не увеличится и лишняя работа будет не большой. Зато можно скрывать от фабрики часть конструкторов. И иметь готовый код фабрики, доступный для любых анализаторов исходников, документаторов и прочих инструментов.

Не говоря уже о том, что внешние DSL могут делать гораздо больше, чем генерировать один класс. Например, генерировать код для нескольких языков. Или управлять составом проекта при компиляции в зависимости от описанных в нем условий.

VD>Еще забавно, что такую крамолу несет челевек который совсем недавно с пулом защищал метапрограмирование в Руби. В этом языке почему-то метапрограммирвоание и создание красивых встроенных ДСЛ-е не является проблемой, и даже напротив является приемуществом.


Сечас речь не о Ruby.
Кроме того, там все DSL-и это не что и иное, как вызовы обычных методов -- т.е. не более, чем API. Так что Ruby-новое метапрограммирование имеет мало общего с Nemerle.

VD>Как это называется? Однозначно — двойные стандарты и притягивание за уши.


Двойные стандарты?
А если посмотреть на то, что я здесь по поводу внешних DSL для C++ говорил:
Re: Использование метаданных в программах на языке C++
Автор: eao197
Дата: 08.09.05
,
[Ruby,C++] RuCodeGen -- простой фреймворк для кодогенерации
Автор: eao197
Дата: 16.11.05
,
Mxx_ru и Ruby как DSL
Автор: eao197
Дата: 02.08.06
,
то окажется, что нет никаких двойных стандартов -- я говорю о том, что сам использую.

А двойной стандарт, имхо, в том, что на повешенную мной бомбочку
Автор: konsoletyper
Дата: 19.01.07
о выделении спора вокруг C++ и D из данной темы, упорно никто не реагирует. Хотя обсуждение уже очень давно ушло совсем в другую сторону.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[50]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 18:07
Оценка:
Здравствуйте, konsoletyper, Вы писали:

E>>А какой в этом смысл? Зачем фабрике создавать то, что должно быть в единственном экземпляре?


K>Наоборот, единственный экземпляр фабрики.


Теперь понял.
Так же, как и в случае Nemerl-овского макроса -- написать еще один DSL.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[51]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 18:31
Оценка:
Здравствуйте, eao197, Вы писали:

E>Так же, как и в случае Nemerl-овского макроса -- написать еще один DSL.


И что он тебе сгенертрует? Ещё один файл или догенертрует существующий?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 18:37
Оценка:
Здравствуйте, IT, Вы писали:

VD>>Да и генераторы парсеров коенчно могут многое. Все же это метапрограммы.


IT>Я говорю как бы о компактности ручного написания.


Ну, вот konsoletyper обещает в ближайшем будущем сделать встроенный генератор для Немерла. Глядишь с его помощью будет вообще круть.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[52]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 18:53
Оценка:
Здравствуйте, IT, Вы писали:

E>>Так же, как и в случае Nemerl-овского макроса -- написать еще один DSL.


IT>И что он тебе сгенертрует? Ещё один файл или догенертрует существующий?


Это от постановки задачи зависит.
А как ту же задачу с помощью упомнавшегося здесь Nemerl-овского макроса сделать?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[53]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 19:17
Оценка: 2 (1) :)
Здравствуйте, eao197, Вы писали:

IT>>И что он тебе сгенертрует? Ещё один файл или догенертрует существующий?


E>Это от постановки задачи зависит.


Постановка такая — класс, реализующий абстрактную фабрику должен быть синглтоном.

E>А как ту же задачу с помощью упомнавшегося здесь Nemerl-овского макроса сделать?


[Singleton, AbstractFactory(X[int])]
class Factory { }
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[36]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 20:08
Оценка:
Здравствуйте, Kisloid, Вы писали:

K>При k стремящемся к бесконечности, да. А вот при конечном k выразительная мощность всегда будет ниже, чем у LR(1). Причем у LR(k), при увеличении k, мощность не увеличивается.


Назови мне хотя бы дин язык программирования для которого нельзя было бы построить LL(k)-парсер.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[49]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 20:08
Оценка:
Здравствуйте, eao197, Вы писали:

E>Тогда какой смысл выяснять как делается на языке то, что на нем в принципе не должно делаться?


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

Заметь, я сразу сказал, что лучше или иметь чистое решение, или вообще его не иметь. А мне начала доказывать, что и этого достаточно. Ну, может и правда достаточно?

E>Разговоры об аутсайдерах предлагаю отложить лет на пять.


Не вижу на то оснований. Но мне то что? Хоть на 10.

E>О сложности создания внешних DSL -- это ты кому-нибудь другому расскажи. Если голова на месте, а в руках подходящий инструмент, DSL-и пишутся за часок-другой без каких-либо усилий. А остальные могут подождать манны небесной от M$ с полной интеграцией в VS.


ОК. Расскажу другим. Тем кто не будет спорить с очевидным и трепаться по чем зря.
Ты же можешь просто попробовть написать внешний ДСЛ для создания абстрактных фабрик. Будет очень весело на это поглядеть.

E>А вот информация о типах... Обрати внимание что в вашей фабрике ее и так не мало приходится передавать в анотациях.


Не вижу в упор. Там передается только имя типа. Причем относительное (с учетом открытых пространств имен). А вся информация получается от компилятора.

E> Если во внешний DSL вручную передать еще и описания доступных для фабрики конструкторов, то объем сильно не увеличится и лишняя работа будет не большой.


Абсурдность того что ты говоришь вызвает смешанное чувство офигения, смеха и возмущения от откровенной лжи.

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

E> Зато можно скрывать от фабрики часть конструкторов. И иметь готовый код фабрики, доступный для любых анализаторов исходников, документаторов и прочих инструментов.


Исходник можно сгенерировать и по макросу. Только смысла в это нет вовсе. Декларативная природа макроса убирает в этом необходимость. Анализ сгенерированного кода нужен только в отладочных целях. Иначе это нонсенс.

E>Не говоря уже о том, что внешние DSL могут делать гораздо больше, чем генерировать один класс.


А болше для данного случая просто не надо. И меньше не надо. И сложнее не надо. Надо то что есть. Ни болше, ни меньше. Так что кончай притягивать за уши все что попало и будедь хоть чуточку конструктивен и объективен. А то это твои выступления уже давно перешли грань разумности.

E> Например, генерировать код для нескольких языков. Или управлять составом проекта при компиляции в зависимости от описанных в нем условий.


Да, да, про состав проекта это ты здорово заметил. Как сейчас помню как ты рассказвал как здорво на Руби создавать встроенные ДСЛ-и для этих целей. Так что сейчас ты тщетно пытаешся опровергнуть свои же утверждения.

Забавно, кстати, получается. Пытаясь принизить возможности Немерле ты не только стал полностью противоречить своим же свловам, но и принизил Руби, Питон, Лисп а так же все остальные языки обладающие продвинутыми встроенными средствами метапрограммировния.

Браво! Очередной пример к чему приводит демагогия и двойные стандарты.

E>Сечас речь не о Ruby.


Во как? Отличная демонстрация двойных стандартов. Как только ты почувствовал, что защищаемый тобой Ди сливает в этой области (надо признать правильно почувствовал), так сразу же начал искать недостатке в самом создании внутренних ДСЛ-ей. А как только тебе указали на то, что ты пиаря Руби сам описывал удобство и гибкость такого подхода, так сразу прозвучали слова, что сейчас речь не о том... Браво!

E>Кроме того, там все DSL-и это не что и иное, как вызовы обычных методов -- т.е. не более, чем API. Так что Ruby-новое метапрограммирование имеет мало общего с Nemerle.


Очердная лож! Метапрограмирование есть метапрограммирование. От того как оно работает и когда оно выполняется ничего не меняется. Руби меняет код в рантайме с помощью одного АПИ, Немеле в компайлтайме с помощью другого. Суть одна и та же. В результате получаются адаптированные синтаксические конструкции для решения конкретных прикладных задач.

E>Двойные стандарты?


Ага! Они самые.

E>А если посмотреть на то, что я здесь по поводу внешних DSL для C++ говорил:

Не, лучше посмотреть на то что ты говорил о встроенных ДСЛ-ях и Руби.
встроенный DSL


E>А двойной стандарт, имхо, в том, что на повешенную мной бомбочку
Автор: konsoletyper
Дата: 19.01.07
о выделении спора вокруг C++ и D из данной темы, упорно никто не реагирует. Хотя обсуждение уже очень давно ушло совсем в другую сторону.


А кто ты такой чтобы по одной твоей бомбочке что-то делать? Тут половина тем уходит в некуда. Если бомбочек много, то модератор это обычно замечает. А так моло ли кто что хочет?

Хочешь чтобы кто-то среагировал? Напиши на модуратор(эт)рсдн.ру.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[54]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 21:25
Оценка: -1 :)
Здравствуйте, IT, Вы писали:

IT>Постановка такая — класс, реализующий абстрактную фабрику должен быть синглтоном.

generate_class :Factory,
  :design_patterns => [ singleton, abstract_factory[ :X, :int ] ]


Полностью корректный Ruby-код. Реализаций можно написать вагон и маленькую тележку.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[50]: Как скрестить ужа и ежа или статическую и утиные тип
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 21:28
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD>А кто ты такой...


Задай себе как-нибудь этот вопрос.
И заодно такой: "Не превращается ли rsdn.ru в помойку?" Твоими же стараниями.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[55]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 23.01.07 21:40
Оценка:
Здравствуйте, eao197, Вы писали:

E>Полностью корректный Ruby-код. Реализаций можно написать вагон и маленькую тележку.


При чём тут руби?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[51]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.07 22:45
Оценка: -2
Здравствуйте, eao197, Вы писали:

E>Задай себе как-нибудь этот вопрос.


Я как-то не привык считать что по моему замечанию все должны начать дергаться.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Как скрестить ужа и ежа или статическую и утиные тип
От: Kisloid Мухосранск  
Дата: 24.01.07 09:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Назови мне хотя бы дин язык программирования для которого нельзя было бы построить LL(k)-парсер.


Дык, я ничего не имею против LL(k) парсеров.
Мой пост был лишь ответной реакцией на это твое высказывание. Т.к. я считаю его некорректным.

Это не так. С заглядываниями вперед LL(k)-парсеры могут распознавать такие же грамматки если не больше.

LL(k) парсеры в принципе не могут иметь большую выразительную мощность чем LR(1) для детерминированных КС грамматик. По той простой причине, что LR(1) покрывает все множество детерменированных КС языков. Вот. А если пойти дальше и посмотреть на недетерминированные, то насколько мне известно кроме CYK еще ничего круче не придумано, хотя может мои знания уже устарели. Проблема в CYK, то что ее алгоритимческая сложность O(N^3) то есть для практики не применима.
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: runtime2  
Дата: 24.01.07 11:34
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Это для всяких плееров на managed-языке нужно писать только GUI. А вот возьмём такую простую штуку как IDE (куда уж её до MP3-декодера). Пусть в ней должны быть autocompletion + подстветка типов + рефакторинг + навигация по коду (это только касательно работы с кодом, а в хорошей IDE должно быть много чего ещё). Для этого нужно иметь как минимум хороший парсер языка с восстановлением. Парсер можно написать на C++ — с таким же успехом я могу написать его на ассемблере. Дальше — больше. Нужно иметь хороший текстовый редактор, чтобы он умел проставлять в тексте маркеры с состояниями и чтобы можно при модификации текста прробежать парсером только по небольшому кусочку. Например, при модификации тела функции распарсить только одну функцию и чуть-чуть подправить AST редактируемго текста. Ну что, слабо написать всё это на C++? Я верю, что можно. А вот выгодно ли?


Интересно, а парсер IDE C# на чем написан?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: Kisloid Мухосранск  
Дата: 24.01.07 12:05
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>LR(1)-парсеры не распознают не то что весь класс КС-грамматик, они распознают даже далеко не весь класс однозначных КС-грамматик.


LR-grammars generate exactly the DCFLs
The family of LR(1)-languages is exactly the family of deterministic languages.
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.07 14:21
Оценка: :))) :)
Здравствуйте, runtime2, Вы писали:

R>Интересно, а парсер IDE C# на чем написан?


Сейчас IDE уже не применяют. Сейчас рулит SATA.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: IT Россия linq2db.com
Дата: 24.01.07 14:36
Оценка:
Здравствуйте, runtime2, Вы писали:

R>Интересно, а парсер IDE C# на чем написан?


На плюсах, как и сам компилятор C#.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[44]: динамическая абстрактная фабрика на D
От: FR  
Дата: 24.01.07 15:45
Оценка: 15 (1)
Здравствуйте, VladD2, Вы писали:


VD>Ну, так повтори. Интересно глянуть.


Пока повторить так чтобы можно было передавать параметры в конструкторы не получилось, но повторить тот вариант что у Александреску оказалось на D не сложно (без стратегий для создания, их добавить не сложно, да и для D они и не нужны в общем), в общем на D писать шаблонный код на самом деле намного проще чем в C++:

import std.stdio;
import std.typetuple;

// фабрика

class _abstract(AT...)
{
    T create(T)()
    {
        const i = IndexOf!(T, AT);
        static assert(i >= 0 && i < AT.length);
        return cast(T)do_create(i);
    }

    Object do_create(int i)
    {
        return null;
    }
}

template fab(AT...)
{   
    class concrete_class(CT...) : _abstract!(AT)
    {
        override Object do_create(int i)
        {   
            foreach(ii, T; CT)
            {
                if(ii == i) return cast(Object)(new T);
            }            
        }

    }
    
    _abstract!(AT) concrete(CT...)()
    {
        return new concrete_class!(CT);
    }
}


// тестовые классы и интерфейсы

// базовые интерфейсы
interface Soldier { char[] info(); };
interface Monster { char[] info(); };
interface SuperMonster { char[] info(); };


// конкретные классы
class SillySoldier : public Soldier {char[] info() {return "SillySoldier";}};
class SillyMonster : public Monster {char[] info() {return "SillyMonster";}};
class SillySuperMonster : public SuperMonster {char[] info() {return "SillySuperMonster";}};    

class BadSoldier : public Soldier {char[] info() {return "BadSoldier";}};
class BadMonster : public Monster {char[] info() {return "BadMonster";}};
class BadSuperMonster : public SuperMonster {char[] info() {return "BadSuperMonster";}};    


void print(_abstract!(Soldier, Monster, SuperMonster) f1)
{
writefln(f1);
    
auto sl = f1.create!(Soldier);
auto mn = f1.create!(Monster);
auto sp = f1.create!(SuperMonster);    
writefln(sl.info());
writefln(mn.info());
writefln(sp.info());
    
writefln();    
}

void main()
{
auto f1 =  fab!(Soldier, Monster, SuperMonster)
            .concrete!(SillySoldier, SillyMonster, SillySuperMonster);
print(f1);
    
f1 = fab!(Soldier, Monster, SuperMonster)
            .concrete!(BadSoldier, BadMonster, BadSuperMonster);
print(f1);
}


С автоматическим выводом параметров конструктора пока не получается (буду ковырять еще), но можно легко добавить стратегии где вручную можно будет указать типы аргументов для конструкторов.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 24.01.07 17:47
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, runtime2, Вы писали:


R>>Интересно, а парсер IDE C# на чем написан?


IT>На плюсах, как и сам компилятор C#.


Ну это смотря какой компилятор, Monoвский компилятор написан сам на С#: здесь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 24.01.07 18:27
Оценка: :)
VladD2 wrote:
> R>Интересно, а парсер IDE C# на чем написан?
> Сейчас IDE уже не применяют. Сейчас рулит SATA.
Это непосредственная работа с железом, и его используют только идиоты.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[45]: динамическая абстрактная фабрика на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.07 21:39
Оценка:
Здравствуйте, FR, Вы писали:

FR>С автоматическим выводом параметров конструктора пока не получается (буду ковырять еще), но можно легко добавить стратегии где вручную можно будет указать типы аргументов для конструкторов.


Это не так интересно.

Кстати, я по прежнему не вижу virtual или его аналогов. Фабрика по прежнему статическая?
И вообще, нельзя ли снабжать код комментариями, чтобы было понятно, что и зачем делается.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[46]: динамическая абстрактная фабрика на D
От: FR  
Дата: 25.01.07 06:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>С автоматическим выводом параметров конструктора пока не получается (буду ковырять еще), но можно легко добавить стратегии где вручную можно будет указать типы аргументов для конструкторов.


VD>Это не так интересно.


Кому как, по по сравнению с C++ на порядок проще сделать.

VD>Кстати, я по прежнему не вижу virtual или его аналогов.


В D все не статические и не шаблоные функции виртуальные, к тому же там есть override.

VD>Фабрика по прежнему статическая?


Ну надо же чуть внимательнее смотреть же там разные конкретные фабрики присваиваются одной и той же переменной. Ты же мне в своем примере это болдом выделял

VD>И вообще, нельзя ли снабжать код комментариями, чтобы было понятно, что и зачем делается.


Так вроде тут вообще нечего комментировать, элементарный же код . А так все просто есть базовый шаблонный класс _abstract, и шаблон fab который генерирует его наследника concrete_class. Функция Object do_create(int i) виртуальная. Суть же работы простая при вызове специализированной одним из базовых классов функции create вызывается виртуальная функция do_create с индексом данного базового класса в списке типов базовых классов(AT). В concrete_class do_create переоределен так что возвращает экземпляр по индексу из списка конкретных классов.
Re[47]: динамическая абстрактная фабрика на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.01.07 08:48
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так вроде тут вообще нечего комментировать, элементарный же код .


Сомет для того кто уже более-менее знаком с Ди коментировать и не чего. А лично для меня очень даже есть чего. Так что было бы неплохо дать подоробные коментарии.

Не думаю, что это сложнее чем написать все это.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
От: Tonal- Россия www.promsoft.ru
Дата: 25.01.07 08:52
Оценка:
Здравствуйте, VladD2, Вы писали:
FR>>
FR>>public void Linq1() {
FR>>    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

FR>>    var lowNums =
FR>>        from n in numbers
FR>>        where n < 5
FR>>        select n;

FR>>    Console.WriteLine("Numbers < 5:");
FR>>    foreach (var x in lowNums) {
FR>>        Console.WriteLine(x);
FR>>    }
FR>>}
FR>>

Я правильно понял, что на Python-е это будет так:
numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0]
print "Numbers < 5:"
for x in (n for n in numbers if n < 5):
  print x


VD>Nemerle рулит

VD>
VD>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>WriteLine(numbers.Filter(_ < 5));
VD>

VD>или так
VD>
VD>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>WriteLine($[x | x in numbers, x < 5]);
VD>

Круто!
А WriteLine при передаче в него списка что выводит? Каждый элемент в своей строчке?
И вывод строки "Numbers < 5:" как от не виден в вашем коде.
Если на это забить, то код на Python сокращается тоже до 2х строчек почти полностью идентичных вашем:
numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0]
print filter(lambda x: x < 5, numbers)

или
numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0]
print list(x for x in  numbers if n < 5)

В чём "рулёж" немла?
Re[14]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 25.01.07 11:33
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Они бы учли интересы и убрали сами модады введя вместо этого строгое (не линивое) выполнение. Сделать это можно было пометкой участков кода неким блоком.


Строгое исполнение в Хаскеле есть. Монады для IO (ты ведь об этом?) введены не из-за ленивости (точнее, не только из-за нее), а из-за невозможности определить порядок исполнения, здесь сыграла роль чистота языка. Кстати, были предложения сделать IO с помощью потоков или CPS. Монады оказались более симпатичным и эффективным решением.
Re[47]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.01.07 12:50
Оценка: +1
Здравствуйте, Tonal-, Вы писали:

T>Если на это забить, то код на Python сокращается тоже до 2х строчек почти полностью идентичных вашем:

T>
T>numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0]
T>print filter(lambda x: x < 5, numbers)
T>

T>В чём "рулёж" немла?

Дык не кто не спорит, что иногда на Питоне можно писать так же кратко и выразительно как на Немерле.
Так что если на нем всегда можно будет писать так же кратко и при этом еще и получать столь же быстрый и надежный код, то будет предмет для разговора.
А пока что ты радушся тому, что сравнивашь компилируемый статически типизируемый язык со скриптом и находишь, что они в простейших случаях практичкски идентичны по выразительности.

Предвижу вопрос "Когда питон не так же краток?". Сразу отвечаю. В питоне нет сопоставления с образцом и алгераических типов, так что в тех случаях когда эти возможности позволяют решать задачи проще Питон будет проигрывать.
За-то в Питоне есть встроенные регекспы и сплайсы для списков и массиво. Иногда это может дать более краткий код. В прочем, в случае необходимости к Немерлу прикручивается почти все что угодно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.01.07 14:24
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Строгое исполнение в Хаскеле есть. Монады для IO (ты ведь об этом?) введены не из-за ленивости (точнее, не только из-за нее), а из-за невозможности определить порядок исполнения, здесь сыграла роль чистота языка.


Не чистота, а именно ленивость. Именно из-за этого нельзя гарантировать последовательнось исполнения.

L> Кстати, были предложения сделать IO с помощью потоков или CPS. Монады оказались более симпатичным и эффективным решением.


Не надо делать из языка икону для молебен. Язык — это прежде всего инструмент для работы. И Хаскель при всех его изысках инструмент для реальной жизни не пригодный.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 25.01.07 14:53
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

L>>Строгое исполнение в Хаскеле есть. Монады для IO (ты ведь об этом?) введены не из-за ленивости (точнее, не только из-за нее), а из-за невозможности определить порядок исполнения, здесь сыграла роль чистота языка.


VD>Не чистота, а именно ленивость. Именно из-за этого нельзя гарантировать последовательнось исполнения.


Нет.
Представь, что нам надо прочитать пару символов из потока ввода.
Представь, что язык неленив.

[getchar, getchar]

Т.к. язык чистый, то скорее всего второго вызова getchar не будет, т.к. он вернёт (должен! если исходить из чистоты языка) тот же самый результат, что и первый. И при чём тут лень?

Хорошо! Допустим, что такой оптимизации нет. Какой getchar будет выполнен первым? Для чистого языка нет разницы в какой последовательности выполнять параметры функции. В Хаскеле вообще нет такого понятия как последовательность вычислений, там всё декларативно, а последовательность реализуется библиотечными средствами. Это следствие чистоты, а не лени.

L>> Кстати, были предложения сделать IO с помощью потоков или CPS. Монады оказались более симпатичным и эффективным решением.


VD>Не надо делать из языка икону для молебен. Язык — это прежде всего инструмент для работы. И Хаскель при всех его изысках инструмент для реальной жизни не пригодный.


Ты с кем разговариваешь?
Re[48]: Как скрестить ужа и ежа или статическую и утиные тип
От: Tonal- Россия www.promsoft.ru
Дата: 25.01.07 14:59
Оценка:
Здравствуйте, VladD2, Вы писали:

T>>Если на это забить, то код на Python сокращается тоже до 2х строчек почти полностью идентичных вашем:

T>>
T>>numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0]
T>>print filter(lambda x: x < 5, numbers)
T>>

T>>В чём "рулёж" немла?

VD>Дык не кто не спорит, что иногда на Питоне можно писать так же кратко и выразительно как на Немерле.

VD>А пока что ты радушся тому, что сравнивашь компилируемый статически типизируемый язык со скриптом и находишь, что они в простейших случаях практичкски идентичны по выразительности.
Если я правильно помню, то и python и немерл этот синтаксис заимствовал из Haskell.
Так что радоваться надо именно за него.
А насчёт скрипта — можешь определение дать какой язык является скриптом, а какой нет?

VD>Предвижу вопрос "Когда питон не так же краток?". Сразу отвечаю. В питоне нет сопоставления с образцом и алгераических типов, так что в тех случаях когда эти возможности позволяют решать задачи проще Питон будет проигрывать.

Так же как Немерл в будет проигрывать там где статическая типизация ограничивает.
VD>За-то в Питоне есть встроенные регекспы и сплайсы для списков и массиво. Иногда это может дать более краткий код. В прочем, в случае необходимости к Немерлу прикручивается почти все что угодно.
К Python тоже прикручивается что угодно.
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
От: Tonal- Россия www.promsoft.ru
Дата: 25.01.07 15:07
Оценка: :)
Здравствуйте, VladD2, Вы писали:
VD>Nemerle рулит
VD>
VD>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>WriteLine(numbers.Filter(_ < 5));
VD>

VD>или так
VD>
VD>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>WriteLine($[x | x in numbers, x < 5]);
VD>

Кстати, для C++ с использованием лямбды это тоже в 2 строки пишеться:
const int numbers[] = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0};
for_each(numbers, numbers + sizeof(numbers)/sizeof(int), _1 < 5 && cout<<_1<<endl);

Лямбда сейчас есть в Boost-е и готовиться в стандарт.
Re[38]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 25.01.07 15:26
Оценка: 1 (1) -1
Здравствуйте, WolfHound, Вы писали:

WH>А вот еслибы он был сравним по мощьности с немерле то давно бы переписали. Ибо компилятор на языке с алгебраическими типами и сравнением с образцо писать сильно проще.


Кстати! Неоднократно замечаю, что на рсдн паттерн матчингу какую то мистическую роль ужасного упрощателя кода отводят. На самом деле на столь низком уровне пишут редко. Самым полезным оказываются ФВП. В частности при имеющейся библиотеке комбинаторов для парсинга при написании лексера и синтаксического анализатора паттерн матчинг не нужен вообще. Для задач парсинга, разумеется.

Потом, не все наружу суют потроха своих типов, а без этого паттерн матчинг не работает. (Помнится, Влад предлагал решить эту задачу введением интерфейсов, которые будут матчиться.) Некоторые работу с типом ограничивают набором методов, и клиент работает уже с этими методами. Несмотря на то, что паттерн матчинг здесь невозможен (оговорюсь, по самому типу), тем не менее у этого подхода есть свои положительные стороны.
Re[47]: динамическая абстрактная фабрика на D
От: WolfHound  
Дата: 25.01.07 15:38
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну надо же чуть внимательнее смотреть же там разные конкретные фабрики присваиваются одной и той же переменной. Ты же мне в своем примере это болдом выделял

А параметры в конструкторы как передать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[39]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 25.01.07 16:59
Оценка: 1 (1)
Здравствуйте, lomeo, Вы писали:

L>Кстати! Неоднократно замечаю, что на рсдн паттерн матчингу какую то мистическую роль ужасного упрощателя кода отводят. На самом деле на столь низком уровне пишут редко. Самым полезным оказываются ФВП. В частности при имеющейся библиотеке комбинаторов для парсинга при написании лексера и синтаксического анализатора паттерн матчинг не нужен вообще. Для задач парсинга, разумеется.


Можно еще добавить, что комбинаторы парсеров прекрасно пишуться как для функциональных, так и для ООП языков.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[49]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.01.07 19:02
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Если я правильно помню, то и python и немерл этот синтаксис заимствовал из Haskell.


Не правильно помнишь. Питон чут ли не старше Хаскеля, да и язык императивный.
Немерле заимствовал синтаксис из O'Caml-а и C#.

T>А насчёт скрипта — можешь определение дать какой язык является скриптом, а какой нет?


Снова дать ссылку на Википедию?

T>Так же как Немерл в будет проигрывать там где статическая типизация ограничивает.


Бесспорно. Там где нужно раздолбаство и грязь Немерлу не место.

T>К Python тоже прикручивается что угодно.


Не совсем. Синтаксис в нем менять нельзя, в отличии "от". Ну, и опять же все это за счет рантайма, что с одной стороны не дает эффективно компилировать код, а с другой увеличивает количество ошибок которые надо ловить в рантайме.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.01.07 19:02
Оценка: +1 -2
Здравствуйте, lomeo, Вы писали:

L>Нет.

L>Представь, что нам надо прочитать пару символов из потока ввода.
L>Представь, что язык неленив.

L>[getchar, getchar]


L>Т.к. язык чистый, то скорее всего второго вызова getchar не будет,


Если не ленив, то и думать "нужно не нужно" не прийдется.

L>т.к. он вернёт (должен! если исходить из чистоты языка) тот же самый результат, что и первый. И при чём тут лень?


При том. Но суть моих слов в общем-то не в том. Я хотел сказать, что все эти идеологические навороты никому не нужны кроме писающих кипятком эстетов теоретиков.
А вот мозгогрёбство которое учиняют авторы Хаскеля портят жизнь всем кто пытается изучить этот язык.

Так что все эти монады, как и полная "чистота" языка — это натуральное вредительство если предположить, что язык создавался для практического использования, а не для кунскамеры.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[50]: Как скрестить ужа и ежа или статическую и утиные тип
От: Tonal- Россия www.promsoft.ru
Дата: 26.01.07 08:01
Оценка:
Здравствуйте, VladD2, Вы писали:
T>>Если я правильно помню, то и python и немерл этот синтаксис заимствовал из Haskell.
VD>Не правильно помнишь. Питон чут ли не старше Хаскеля, да и язык императивный.
VD>Немерле заимствовал синтаксис из O'Caml-а и C#.
Я говорил про конкретный списковый синтаксис.
В Python-е он появился во 2ой версии и заимствован из Haskell.
По твоим словам, выходит что Немерле заимствовал его из O'Caml-а.
Где он появился раньше, в Haskell-е или O'Caml-а я не в курсе.

T>>А насчёт скрипта — можешь определение дать какой язык является скриптом, а какой нет?

VD>Снова дать ссылку на Википедию?
Если взять определение из Википедии, то скриптовый язык, это язык разработанный и использующийся для автоматизации рутинных действий.
В таком случае, Python не является скриптовым, потому что разрабатывался не для скриптования.
В такой же позиции окажется и Немерл если использовать его для этой самой автоматизации. (а что мешает)

T>>Так же как Немерл в будет проигрывать там где статическая типизация ограничивает.

VD>Бесспорно. Там где нужно раздолбаство и грязь Немерлу не место.
Думаю, если подобные аргументы нужны, то либо язык никуда не годиться, либо тот кот приводит подобные аргументы.

T>>К Python тоже прикручивается что угодно.

VD>Не совсем. Синтаксис в нем менять нельзя, в отличии "от".
Синтаксическое дерево ты получить можешь, а так же байт-код.
Есть несколько проектов, которые это используют.
Кроме того есть перегрузка операторов, декораторы и метаклассы — соответственно, даже штатными средствами можно получить очень большую вариабельность.

VD>Ну, и опять же все это за счет рантайма, что с одной стороны не дает эффективно компилировать код, а с другой увеличивает количество ошибок которые надо ловить в рантайме.

Собственно тред и начался с планов ввода статики.
Причём, большое колмчество ошибок вполне можно найти до рантайме, используя утилиты проверки.
Re[48]: динамическая абстрактная фабрика на D
От: FR  
Дата: 26.01.07 09:04
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>Ну надо же чуть внимательнее смотреть же там разные конкретные фабрики присваиваются одной и той же переменной. Ты же мне в своем примере это болдом выделял

WH>А параметры в конструкторы как передать?

Ты все-таки читай тему
Пока никак.
Можно легко прикрутить стратегии для создания в которых ручками описывать нужные типы парметров.
Совместить динамическую фабрику с передачей вызовов пока у меня не получилось буду ковырять. Хотя можно на форум D послать, там говорят Александреску крутится, это по его части пусть работает
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.01.07 09:40
Оценка: 21 (2) +1
Здравствуйте, VladD2, Вы писали:

L>>Нет.

L>>Представь, что нам надо прочитать пару символов из потока ввода.
L>>Представь, что язык неленив.

L>>[getchar, getchar]


L>>Т.к. язык чистый, то скорее всего второго вызова getchar не будет,


VD>Если не ленив, то и думать "нужно не нужно" не прийдется.


Поясни, что ты имеешь в виду. Покажи как просто делается в чистом неленивом языке ввод-вывод.

L>>т.к. он вернёт (должен! если исходить из чистоты языка) тот же самый результат, что и первый. И при чём тут лень?


VD>При том.


При чём при том? Я тебе показал неленивый вариант.
Вот явно энергичное исполнение:

> let foo = trace "here" 5
> foo `seq` foo
"here"
5


seq заставляет выполниться первый аргумент, затем выполняет второй. Лени здесь и в помине нет, тем не менее из-за чистоты языка второй раз foo не выполняется.

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

VD>Но суть моих слов в общем-то не в том. Я хотел сказать, что все эти идеологические навороты никому не нужны кроме писающих кипятком эстетов теоретиков.

VD>А вот мозгогрёбство которое учиняют авторы Хаскеля портят жизнь всем кто пытается изучить этот язык.

VD>Так что все эти монады, как и полная "чистота" языка — это натуральное вредительство если предположить, что язык создавался для практического использования, а не для кунскамеры.


Все фразы, кроме, возможно, первой — ложь. Ты проецируешь свой вкус, отношение и проблемы на всех: "портят жизнь всем", "не нужны никому кроме", "мозгогрёбство", "натуральное вредительство".

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

"Я хотел сказать, что все эти решения сделаны весьма изящно для теоретических исследований. Хотя тем, кто изучает язык, они не сразу дадутся, тем не менее чистота языка и монады — замечательная помощь для практического использования языка."

Насчёт цели создания языка: авторы пишут о том, что цели были определены как создание языка, предоставляющий быстрое сообщение новых идей, имеющий стабильное основание для разработки реальных приложений, являющийся "распространителем" ФП (потворствующий использованию ФЯ). Цели стать мейнстримом у них не было ;) К практическому же использованию язык готов, что видно из того, что его практически используют.
Re[51]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 11:15
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Я говорил про конкретный списковый синтаксис.

T>В Python-е он появился во 2ой версии и заимствован из Haskell.

Ты меня извини, но без ссылок такие заявления ничего не стоят.
Haskell является наследником ML и во многом заимствовал синтаксис у него.
Немерле тоже, но через O'Caml. А Питон уж точно вряд ли мог что-то там заимствовать у Хаскеля.
В общем, ссылки в студию...

T>По твоим словам, выходит что Немерле заимствовал его из O'Caml-а.

T>Где он появился раньше, в Haskell-е или O'Caml-а я не в курсе.

T>Если взять определение из Википедии, то скриптовый язык, это язык разработанный и использующийся для автоматизации рутинных действий.


Плохо читал.

T>В таком случае, Python не является скриптовым, потому что разрабатывался не для скриптования.


Нет в руском языке слова "скриптования". Не надо его применять.
И Питон конечно же вряд ли создавался как язык общего назначения.

T>В такой же позиции окажется и Немерл если использовать его для этой самой автоматизации. (а что мешает)


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

T>>>Так же как Немерл в будет проигрывать там где статическая типизация ограничивает.

VD>>Бесспорно. Там где нужно раздолбаство и грязь Немерлу не место.
T>Думаю, если подобные аргументы нужны, то либо язык никуда не годиться, либо тот кот приводит подобные аргументы.

Тебе, естествнно, виднее.

T>>>К Python тоже прикручивается что угодно.

VD>>Не совсем. Синтаксис в нем менять нельзя, в отличии "от".
T>Синтаксическое дерево ты получить можешь, а так же байт-код.

Дерево — это круто. Можно будет дрова сделать. А путно что-то вряд ли. По крайней мере затрахашся со стамеской париться.

T>Есть несколько проектов, которые это используют.

T>Кроме того есть перегрузка операторов, декораторы и метаклассы — соответственно, даже штатными средствами можно получить очень большую вариабельность.

Все это детский лепет. Изучи макросы Немерла тогда поговрим. Пока что ты просто не понимаешь о чем говоришь. Это разный уровень. Все равно что эмуляция ООП на ассемблере.

T>Собственно тред и начался с планов ввода статики.


Ага. Вот только на сегодня Неперле — это где она введена и на 100%. Причем введена грамотно, на высоком научном уровне. А Питон только собирается попробовать это сделать.
Собсвтенно с автором Питона я всецело согласен. Он человек весьма адекватный. Просто базы не имеет. Я не согласен с фанатами питона. Бессмысленными и беспощадными (с).

T>Причём, большое колмчество ошибок вполне можно найти до рантайме, используя утилиты проверки.


Все можно найти. Вопрос только в цене. Искать ошибки в рантайме сложнее чем читать лог компилятора. Так что не размуно оправдывать тем что ошибку можно найти потом то что ее вообще надо допускать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[49]: динамическая абстрактная фабрика на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 11:15
Оценка:
Здравствуйте, FR, Вы писали:

FR>Пока никак.

FR>Можно легко прикрутить стратегии для создания в которых ручками описывать нужные типы парметров.
FR>Совместить динамическую фабрику с передачей вызовов пока у меня не получилось буду ковырять. Хотя можно на форум D послать, там говорят Александреску крутится, это по его части пусть работает

Хорошая идея (это я про Александреску). Но тем не менее даже если он расколит этот орешик проблема все же останется. Ведь простой программист не сог решить эту проблему. Меж тем на макросах ты бы ее решил точно.

Так что на лицо ограниченность. Именно о такой ограниченности говорил Камил Скальски (один из авторов Немерла) в статье о метапрограммирвонии в Немерле когда говорил о конкурирующих технолохия вроде МетаХаскеле. Нужные вщеи сделать откровенно сложно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 11:33
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Поясни, что ты имеешь в виду. Покажи как просто делается в чистом неленивом языке ввод-вывод.


Если язык не линив, то все что в нем выполняется выполняется строго последотвательно. Так что специальных действий не надо предпринимать.

Таким образом можно просто говорить, что скажем блок кода или функция строгая (или как хочешь ее назови) и все что в ней вызвается должно будет вызваться послдовательно.

L>Если ты не веришь мне — почитай для решения каких проблем были созданы монады. Пейтон-Джонс, Худак, Вадлер, Хьюз — создатели языка, говорят, о чистоте языка.


Я вижу что модады были созданы исключительно для траханья мозга окружающим. Хаскель исполняется на обычном компьютере и для перестройки очередности выполенения, и для ленивости нужно предпринимать усилия. Достаточно просто их не придпренять и все само собой будет как надо.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: deniok Россия  
Дата: 26.01.07 11:52
Оценка: 8 (1) +2
Здравствуйте, VladD2, Вы писали:


VD>Я вижу что модады были созданы исключительно для траханья мозга окружающим. Хаскель исполняется на обычном компьютере и для перестройки очередности выполенения, и для ленивости нужно предпринимать усилия. Достаточно просто их не придпренять и все само собой будет как надо.


И SQL исполняется на обычном компьютере, но порядок выполнения JOIN в

SELECT ...
 FROM a JOIN b ON ...
    JOIN c ... ON ...


не определяется тем, в какой последовательности они записаны пользователем. Не заданный жёстко порядок вычислений — вообще довольно характерная черта декларативного программирования.
Re[50]: динамическая абстрактная фабрика на D
От: FR  
Дата: 26.01.07 12:01
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Совместить динамическую фабрику с передачей вызовов пока у меня не получилось буду ковырять. Хотя можно на форум D послать, там говорят Александреску крутится, это по его части пусть работает


VD>Хорошая идея (это я про Александреску). Но тем не менее даже если он расколит этот орешик проблема все же останется. Ведь простой программист не сог решить эту проблему. Меж тем на макросах ты бы ее решил точно.


Ну как с помощью одного хака решить я уже понял, но хочется без

VD>Так что на лицо ограниченность. Именно о такой ограниченности говорил Камил Скальски (один из авторов Немерла) в статье о метапрограммирвонии в Немерле когда говорил о конкурирующих технолохия вроде МетаХаскеле. Нужные вщеи сделать откровенно сложно.


Он прав насчет ограниченности. Но другой вопрос можно ли преодолеть эту ограниченность. По моему да, но нужно добавить некторые возможности, такие как генерацию классов.

Да интересно вы с Tonal- ругаетесь прямо дежавью какое-то Правда помню ты так же упорно отстаивал что менее выразительный C# не хуже питона
Кстати ван Россум тайный почитатель хаскеля и я тоже слышал что списки он оттуда содрал.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.01.07 12:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если язык не линив, то все что в нем выполняется выполняется строго последотвательно. Так что специальных действий не надо предпринимать.


Ты ошибаешься.

VD>Таким образом можно просто говорить, что скажем блок кода или функция строгая (или как хочешь ее назови) и все что в ней вызвается должно будет вызваться послдовательно.


В чистом языке (как в Haskell) может не быть понятия последовательности. Функция — это функция в математическом смысле. Запись f(a,b) не определяет в каком порядке будут вычисляться аргументы.

VD>Я вижу что модады были созданы исключительно для траханья мозга окружающим.


Нет, цели были другими.

VD>Хаскель исполняется на обычном компьютере и для перестройки очередности выполенения, и для ленивости нужно предпринимать усилия. Достаточно просто их не придпренять и все само собой будет как надо.


Ну, я же не сам эти усилия предпринимаю. За меня это делает компилятор. А я получаю следующие из этих свойств бонусы.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.01.07 12:18
Оценка: :)
Здравствуйте, deniok, Вы писали:

D>И SQL исполняется на обычном компьютере, но порядок выполнения JOIN в


К сожалению, в РСДН нет оценки "Кстати, да!". +1 — не совсем то.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 12:22
Оценка:
Здравствуйте, deniok, Вы писали:

D>И SQL исполняется на обычном компьютере, но порядок выполнения JOIN в

D>не определяется тем, в какой последовательности они записаны пользователем.

SQL — это декларативный язык запросов, а не универсальный ЯП. Написать программу на нем нельзя. От того люди иделают расширения вроде T-SQL или PL-SQL.

Языку же общего назначения жизненно необходимо позволять описывать последовательность действий. Или это уже не ЯП, а язык запросов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.01.07 12:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>SQL — это декларативный язык запросов, а не универсальный ЯП.


Это неважно, речь шла о чистом неленивом языке.

VD>Языку же общего назначения жизненно необходимо позволять описывать последовательность действий.


Согласен.
Re[51]: динамическая абстрактная фабрика на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 12:58
Оценка:
Здравствуйте, FR, Вы писали:

FR>Он прав насчет ограниченности. Но другой вопрос можно ли преодолеть эту ограниченность. По моему да, но нужно добавить некторые возможности, такие как генерацию классов.


Ограниченность в возрастании сложности. Даже если один человек сможет "это", все равно — "это" будет нереально для большинства. В общем, это поять будут упражнения для мозгов, а не работа.

FR>Да интересно вы с Tonal- ругаетесь прямо дежавью какое-то Правда помню ты так же упорно отстаивал что менее выразительный C# не хуже питона


Да в том то и хохма, что Немерле оказывается в центре кучи молы. Он влез на поле слишком многих языков и технологий. И все кто привык к своему пытаются найти в нем фатальный недостаток.

FR>Кстати ван Россум тайный почитатель хаскеля и я тоже слышал что списки он оттуда содрал.


Расстрой его. Списки в Хаскеле синтаксически заимствованы из ML-подобных языков (коим и является Хаскель). А появились они в том самом легендарном дедушке Лиспе.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 12:58
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Ты ошибаешься.

Или ты.

L>В чистом языке (как в Haskell) может не быть понятия последовательности. Функция — это функция в математическом смысле. Запись f(a,b) не определяет в каком порядке будут вычисляться аргументы.


Это никому не нужные абстракции. Ведь то что порядок не важен никак не запрещает считать, что вычисления идут слева на право и перед все аргументы вычисляются перед вызовом. Так? А раз так, то достаточно пометить участок кода каким-то образом и считать, что в нем эти соглашения обязаны соблюдаться. Все! Больше не нужно трахать мозги окружающих монадами и прочим высокохудожесвенным бредом.

VD>>Я вижу что модады были созданы исключительно для траханья мозга окружающим.

L>Нет, цели были другими.

Они явно скрывали истенные цели.

L>Ну, я же не сам эти усилия предпринимаю. За меня это делает компилятор. А я получаю следующие из этих свойств бонусы.


Бунусы останутся на месте если просто помечать код. Но при этом на месте останется крыша тех кто пользуется языком и появится скорость полноценных компилируемых языков.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[52]: динамическая абстрактная фабрика на D
От: FR  
Дата: 26.01.07 13:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Он прав насчет ограниченности. Но другой вопрос можно ли преодолеть эту ограниченность. По моему да, но нужно добавить некторые возможности, такие как генерацию классов.


VD>Ограниченность в возрастании сложности. Даже если один человек сможет "это", все равно — "это" будет нереально для большинства. В общем, это поять будут упражнения для мозгов, а не работа.


Нет уже в D шаблоный код вполне читабелен. Но D скажем так далеко не раскрыл все возможности шаблонов. Многое упущенно. Главное генерация, другое полноценная compili-time рефлексия.

FR>>Да интересно вы с Tonal- ругаетесь прямо дежавью какое-то Правда помню ты так же упорно отстаивал что менее выразительный C# не хуже питона


VD>Да в том то и хохма, что Немерле оказывается в центре кучи молы. Он влез на поле слишком многих языков и технологий. И все кто привык к своему пытаются найти в нем фатальный недостаток.


А при чем тут немерле, мы когда впервые ругались ты о нем еще и не слышал

FR>>Кстати ван Россум тайный почитатель хаскеля и я тоже слышал что списки он оттуда содрал.


VD>Расстрой его. Списки в Хаскеле синтаксически заимствованы из ML-подобных языков (коим и является Хаскель). А появились они в том самом легендарном дедушке Лиспе.


Как я понял речь идет не вообще о списках, которые были в питоне с момента рождения, а о списковых расширениях (list comprehensions) которые и появились первыми именно в хаскеле.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: deniok Россия  
Дата: 26.01.07 13:28
Оценка: 1 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>Это никому не нужные абстракции. Ведь то что порядок не важен никак не запрещает считать, что вычисления идут слева на право и перед все аргументы вычисляются перед вызовом. Так? А раз так, то достаточно пометить участок кода каким-то образом и считать, что в нем эти соглашения обязаны соблюдаться. Все!


Всё. Прощай возможность автоматически распараллелить код, бесконечные структуры данных (то есть, если шире, заботится о терменировании рекурсии мы должны там же, где эту рекурсию объявляем) и т.д.

В Хаскелле для этих целей есть seq, который, однако, большинство рассматривает как что-то подобное goto в императивном мире.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.01.07 14:03
Оценка: 12 (1) +1
Здравствуйте, VladD2, Вы писали:

L>>Ты ошибаешься.

VD>Или ты.

Неа, ты, т.к. тезис о выводимости последовательного исполнения из неленивости языка не подтвердился, мало того, был опровергнут.

L>>В чистом языке (как в Haskell) может не быть понятия последовательности. Функция — это функция в математическом смысле. Запись f(a,b) не определяет в каком порядке будут вычисляться аргументы.

VD>Это никому не нужные абстракции.

Что значит никому не нужные абстракции? Это выводится из отсутствия сайд-эффектов.

VD>Ведь то что порядок не важен никак не запрещает считать, что вычисления идут слева на право и перед все аргументы вычисляются перед вызовом. Так?

VD>А раз так, то достаточно пометить участок кода каким-то образом и считать, что в нем эти соглашения обязаны соблюдаться. Все! Больше не нужно трахать мозги окружающих монадами и прочим высокохудожесвенным бредом.

Как и то, что вычисления идут справа налево. Считать можно что угодно, для чистого языка разницы быть не должно. Иначе язык нечистый. Точка.
Хоть обпомечайся код каким угодно образом, от того, в какой последовательности ты выполнишь два независимых участка, результат поменяться не должен.

VD>>>Я вижу что модады были созданы исключительно для траханья мозга окружающим.

L>>Нет, цели были другими.
VD>Они явно скрывали истенные цели. :))

:-)

L>>Ну, я же не сам эти усилия предпринимаю. За меня это делает компилятор. А я получаю следующие из этих свойств бонусы.


VD>Бунусы останутся на месте если просто помечать код. Но при этом на месте останется крыша тех кто пользуется языком и появится скорость полноценных компилируемых языков.


Тут дело вот в чем. Во-первых, давай признаем, что проблема в чистоте, а не лени. Иначе нам не от чего отталкиваться. В этом случае, конечно, есть вариант пометить код нечистым и получить то, что ты хочешь. В принципе, это сделано и сейчас — код помечается типом IO a и выглядит как императивный (явно задана последовательность), с этим нет проблем. Т.е. ваши два решения — твоё и комитета аналогичны, только они ещё и оставили чистоту языка нетронутой (1). Монады для этого учить специально не надо, разве что ты захочешь разобраться как это работает внутри. Но так ведь и во всех остальных языках!

(1) ещё одна разница — это то, что ты считаешь, что твой вариант более быстрый. Положим это так (хотя мне кажется, что это проблемы компилятора, а не программиста). Но тут стоит делать выбор, который и сделали создатели Хаскеля. Они люди неглупые и много думали над решением. Конечно, они могли ошибиться, но после них пришли те, кто язык используют — у них тоже нет проблем с монадическим вводом выводом.

И вот тут мы подходим к философии :-) что такое "верный выбор"? по моему, это решение, благодаря которому мы становимся ближе к цели, чем при "менее правильных" или уж совсем "неверном" выборе. Цель достаточно простая и о ней сказано в описании того, почему авторы выбрали монады. Эта цель — сохранить язык чистым (исходя из цели распространения ФП, обкатки идей и т.д., но это IMHO). И вот исходя из этой цели — твой выбор неверный. Если же исходить из твоих целей (озвучь их пожалуйста), тогда всё может быть как раз наоборот.
Re[53]: динамическая абстрактная фабрика на D
От: deniok Россия  
Дата: 26.01.07 14:27
Оценка: :))
Здравствуйте, FR, Вы писали:


FR>Как я понял речь идет не вообще о списках, которые были в питоне с момента рождения, а о списковых расширениях (list comprehensions) которые и появились первыми именно в хаскеле.


Википедия, list comprehensions:

The earliest reference to the list comprehension notation is in Rod Burstall and John Darlington's description of their programming language, NPL from 1977, but SETL already had a similar construct.


Нам чужого не надо
Re[52]: Как скрестить ужа и ежа или статическую и утиные тип
От: Tonal- Россия www.promsoft.ru
Дата: 26.01.07 15:49
Оценка:
Здравствуйте, VladD2, Вы писали:
T>>Я говорил про конкретный списковый синтаксис.
T>>В Python-е он появился во 2ой версии и заимствован из Haskell.
VD>Ты меня извини, но без ссылок такие заявления ничего не стоят.
VD>Haskell является наследником ML и во многом заимствовал синтаксис у него.
VD>Немерле тоже, но через O'Caml. А Питон уж точно вряд ли мог что-то там заимствовать у Хаскеля.
VD>В общем, ссылки в студию...
http://wiki.python.org/moin/PythonVsHaskell

T>>Если взять определение из Википедии, то скриптовый язык, это язык разработанный и использующийся для автоматизации рутинных действий.

VD>Плохо читал.
Хотелось бы твою интерпретацию.
VD>Нет в руском языке слова "скриптования". Не надо его применять.
Автоматизация рутинных действий подходит больше?
VD>И Питон конечно же вряд ли создавался как язык общего назначения.
Именно как язык общего назначения. См. Википедию.

T>>В такой же позиции окажется и Немерл если использовать его для этой самой автоматизации. (а что мешает)

VD>Ни что не мешает. Но в отличии от Питона на нем еще можно писать критичные к времени исполнения вещи.
Немерл предоставляет real-time гаранти по времени выполнения?
А если ты о NetJit-е, так у python есть psyco.
Ну и действительно критичные ко времени выполнения вещи таки пишуться на C++ и ещё долго будут на нём писаться.

VD>Да и выглядит код на Немерле, по-моему, по риличнее. ООП и ФП в нем поддерживаются явно чище.

VD>В прочем я в принципе не люблю интерфпретируемые языки с прототипной разновидностью ООП.
Я не люблю .Net из за его воинственно-назойливой рекламы и закрытости.
Хотя идея в общем здравая.

T>>>>К Python тоже прикручивается что угодно.

VD>>>Не совсем. Синтаксис в нем менять нельзя, в отличии "от".
T>>Синтаксическое дерево ты получить можешь, а так же байт-код.
T>>Есть несколько проектов, которые это используют.
T>>Кроме того есть перегрузка операторов, декораторы и метаклассы — соответственно, даже штатными средствами можно получить очень большую вариабельность.
VD>Все это детский лепет. Изучи макросы Немерла тогда поговрим. Пока что ты просто не понимаешь о чем говоришь. Это разный уровень. Все равно что эмуляция ООП на ассемблере.
Ок. Посмотрю.

T>>Собственно тред и начался с планов ввода статики.

VD>Ага. Вот только на сегодня Неперле — это где она введена и на 100%. Причем введена грамотно, на высоком научном уровне. А Питон только собирается попробовать это сделать.
VD>Собсвтенно с автором Питона я всецело согласен. Он человек весьма адекватный.
Статика на 100% в python-е не нужна — это получиться другой язык (см. например Boo)
Но если получится адекватно ввести возможность указывать ограничения на тиры, то некоторых классов ошибок можно будет избежать, да и скорость скомпилированного кода можно изрядно поднять.

T>>Причём, большое колмчество ошибок вполне можно найти до рантайме, используя утилиты проверки.

VD>Все можно найти. Вопрос только в цене. Искать ошибки в рантайме сложнее чем читать лог компилятора. Так что не размуно оправдывать тем что ошибку можно найти потом то что ее вообще надо допускать.
До выполнения.
Используя утилиты типа lint — PyLint и PyChecker.
Они пытаються выполнить как раз статический анализ кода. Правда сейчас им часто не хватает данных.
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 18:02
Оценка:
Здравствуйте, deniok, Вы писали:

D>Всё. Прощай возможность автоматически распараллелить код,


А что ей кто-то говорил "зрасте"? Ее в Хаскеле нет и не появится в обозримом будущем. Ему бы пока что до С++ дотянуть по скорости. А то ведь и распараллеливание может не помочь.

Меж тем эксперементы по распараллеливанию ведутся и в императивных языках. И не без успеха. Так что это не аргумент.

D> бесконечные структуры данных и т.д.


Никуда они не денутся. Как были так и останутся. Только их нельзя будет объявлять в тех блоках программы что поечены как "строгие".

D>В Хаскелле для этих целей есть seq, который, однако, большинство рассматривает как что-то подобное goto в императивном мире.


В Хаскеле вообще просматривается изрядная доля, как бы это сказать по мягче...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 26.01.07 21:16
Оценка:
VladD2 wrote:
> А что ей кто-то говорил "зрасте"? Ее в Хаскеле нет и не появится в
> обозримом будущем. Ему бы пока что до С++ дотянуть по скорости. А то
> ведь и распараллеливание может не помочь.
Parallel Haskell? Хотя сознаюсь, я его не смотрел.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[23]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 21:32
Оценка: -1
Здравствуйте, lomeo, Вы писали:

L>Неа, ты, т.к. тезис о выводимости последовательного исполнения из неленивости языка не подтвердился, мало того, был опровергнут.


Тебе показалось.

L>Что значит никому не нужные абстракции? Это выводится из отсутствия сайд-эффектов.


Вот выводимость и остальной булшит, тоже никому крмое самих любителей булшита тоже не нужны.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[53]: динамическая абстрактная фабрика на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 21:32
Оценка:
Здравствуйте, FR, Вы писали:

FR>А при чем тут немерле, мы когда впервые ругались ты о нем еще и не слышал


Прально! (с) Я тогда просто чувствовал, что можно все далеть не так через ухо. И тогда я был в поиске... R#... и т.п. А теперь я таки нашел!

FR>>>Кстати ван Россум тайный почитатель хаскеля и я тоже слышал что списки он оттуда содрал.


VD>>Расстрой его. Списки в Хаскеле синтаксически заимствованы из ML-подобных языков (коим и является Хаскель). А появились они в том самом легендарном дедушке Лиспе.


FR>Как я понял речь идет не вообще о списках,


Ты сказал "синтаксис списков". Так вот он был в МЛ почти 1 в 1.

FR> которые были в питоне с момента рождения, а о списковых расширениях (list comprehensions) которые и появились первыми именно в хаскеле.


По поводу list comprehensions тебе уже сказали. Я же добавлю, только что откровенно говоря list comprehensions в Хаскле и его калька в Немерле мне не очень наравится. Точнее совсем не нарвится. Причина тому — не интуитивность. Может те кто всю жизнь с мат.нотациями возятся и встретят его как родного, но большинство мэйнстрим-программистов от его вида будут сильно удивлены. Так что я бы предпочел композицию функций.

Вот сейчас подумалось... Может создать некий foreach comprehension? Ну, а ля list comprehensions, но с синтаксисом Немерлевого foreach-а. Чтобы выглядело как-то так:
def z = 0;
each(x is SomeType when x.y > z in someSequence)

или в общем виде:
each(<сопоставление с образцом> in <последовательнсоть>) => <другая последовательность>

Причем, чтобы это дело порождало фукнцию которую можно передать куда хочется (в отличии от foreach-а).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: raskin Россия  
Дата: 26.01.07 21:48
Оценка: +3
VladD2 wrote:
> L>Неа, ты, т.к. тезис о выводимости последовательного исполнения из
> неленивости языка не подтвердился, мало того, был опровергнут.
> Тебе показалось.
Был же формально предъявлен пример с SQL? Формально язык не ленивый.

> L>Что значит никому не нужные абстракции? Это выводится из отсутствия

> сайд-эффектов.
>
> Вот выводимость и остальной булшит, тоже никому крмое самих любителей
> булшита тоже не нужны.
Это не bullshit, это исследование в computer science... Если оно придёт
к чему-то полезному, полезное выдерут из идеальной среды, отрежут, что
не влезет, и вставят в какой-нибудь язык, пригодный для прикладного
программирования в более широкой области, чем некоторые чистые
вычисления (во всех смыслах) со сложной логикой вычислений и без
требований к производительности.
Posted via RSDN NNTP Server 2.1 beta
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 27.01.07 02:32
Оценка:
Здравствуйте, VladD2, Вы писали:

L>>Неа, ты, т.к. тезис о выводимости последовательного исполнения из неленивости языка не подтвердился, мало того, был опровергнут.


VD>Тебе показалось.


Что именно показалось? Так и будешь отделываться общими фразами?
Я тебе показал пример неленивого кода, при котором отсутствует последовательное исполнение.
Следовательно, не ленивость является причиной этого.
Покажи, где в моих рассуждениях ошибка?

L>>Что значит никому не нужные абстракции? Это выводится из отсутствия сайд-эффектов.


VD>Вот выводимость и остальной булшит, тоже никому крмое самих любителей булшита тоже не нужны.


Опять одни эмоции. "булшит", "никому кроме". Сказать то что хотел?
Re[54]: динамическая абстрактная фабрика на D
От: Tonal- Россия www.promsoft.ru
Дата: 27.01.07 07:27
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Вот сейчас подумалось... Может создать некий foreach comprehension? Ну, а ля list comprehensions, но с синтаксисом Немерлевого foreach-а. Чтобы выглядело как-то так:
VD>
VD>def z = 0;
VD>each(x is SomeType when x.y > z in someSequence)
VD>

VD>или в общем виде:
VD>
VD>each(<сопоставление с образцом> in <последовательнсоть>) => <другая последовательность>
VD>

VD>Причем, чтобы это дело порождало фукнцию которую можно передать куда хочется (в отличии от foreach-а).

Практически как в Python-е.
Вот из реального проекта (возврат генератора):
def getEnabledUser(self):
  return (obj.oid for obj in self._allObjs if obj.enabled)

Причём, это генератор — т.е. реальные вычисления проводятся тогда, когда понадобиться соответствующий элементик.
Если поставить квадратные скобки — последовательность сразу вычислиться вся.
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 27.01.07 09:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Nemerle рулит

VD>
VD>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>WriteLine(numbers.Filter(_ < 5));
VD>

VD>или так
VD>
VD>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>WriteLine($[x | x in numbers, x < 5]);
VD>


Хочу заметить, что на C# 2.0 выглядит не менее локанично:

List<int> li = new List<int>(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 });
li.ForEach(delegate(int i) { if(i < 5) Console.WriteLine(i); } );
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[55]: динамическая абстрактная фабрика на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 10:35
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Практически как в Python-е.


Питон отдыхает до той версии в которой в него введут сопастовление с образцом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 10:35
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Опять одни эмоции.


Ну, так не нервничай.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[47]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 10:56
Оценка:
Здравствуйте, Denis2005, Вы писали:

VD>>
VD>>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>>WriteLine(numbers.Filter(_ < 5));
VD>>


D>Хочу заметить, что на C# 2.0 выглядит не менее локанично:


D>
D>List<int> li = new List<int>(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 });
D>li.ForEach(delegate(int i) { if(i < 5) Console.WriteLine(i); } );
D>


1. Это не аналогичный код. Мой код возращает список которы в дальнейшем можно продолжить обрабатывать. Например, вот так можно получить список квадратов:
numbers.Filter(_ < 5).Map(x => x * x)
а так еще и сумировать их:
numbers.Filter(_ < 5).Map(x => x * x).FoldLeft(0, _ + _)


2. Это выглядит довольно коряво.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 27.01.07 13:12
Оценка: +2 :))
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, lomeo, Вы писали:


L>>Опять одни эмоции.


VD>Ну, так не нервничай. ;)


Ну, сливать ты мастер. Факт известный.
Re[48]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 27.01.07 14:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Denis2005, Вы писали:


VD>>>
VD>>>def numbers = array[5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
VD>>>WriteLine(numbers.Filter(_ < 5));
VD>>>


D>>Хочу заметить, что на C# 2.0 выглядит не менее локанично:


D>>
D>>List<int> li = new List<int>(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 });
D>>li.ForEach(delegate(int i) { if(i < 5) Console.WriteLine(i); } );
D>>


VD>1. Это не аналогичный код. Мой код возращает список которы в дальнейшем можно продолжить обрабатывать. Например, вот так можно получить список квадратов:
VD>numbers.Filter(_ < 5).Map(x => x * x)
VD>


Можно даже проще (и эффективней):

$[ x*x | x in numbers, x < 5 ]


VD>а так еще и сумировать их:

VD>
VD>numbers.Filter(_ < 5).Map(x => x * x).FoldLeft(0, _ + _)
VD>


$[ x*x | x in numbers, x < 5 ].FoldLeft(0, _ + _)


соответственно.

VD>2. Это выглядит довольно коряво.

+1. Да еще и неэффективно, т.к. сначала создается массив а потом он же копируется в List<int>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[54]: динамическая абстрактная фабрика на D
От: Андрей Хропов Россия  
Дата: 27.01.07 16:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>По поводу list comprehensions тебе уже сказали. Я же добавлю, только что откровенно говоря list comprehensions в Хаскле и его калька в Немерле мне не очень наравится. Точнее совсем не нарвится. Причина тому — не интуитивность.

Это субъективная вещь.

VD> Может те кто всю жизнь с мат.нотациями возятся и встретят его как родного, но большинство мэйнстрим-программистов от его вида будут сильно удивлены.

Немерле в любом случае для тех кто хочет чего-то большего чем C#. Для большинства мэйнстрим-программистов и pattern-matching и Iter/Map/Fold/лямбды тоже не слишком привычны.

VD> Так что я бы предпочел композицию функций.


VD>Вот сейчас подумалось... Может создать некий foreach comprehension? Ну, а ля list comprehensions, но с синтаксисом Немерлевого foreach-а. Чтобы выглядело как-то так:

VD>
VD>def z = 0;
VD>each(x is SomeType when x.y > z in someSequence)
VD>

Дак те же list comprehensions практически 1-в-1 (только нет букв each — от этого что ли зависит интуитивная понятность ?):

def z = 0;
$[ x | x in someSequence, x is SomeType, x.y > z ]


, только многословнее и на мой взгляд менее понятно, ну и конечно менее гибко (нельзя произвольные функции от переменных из правой части пихать в левую).

VD>или в общем виде:

VD>
VD>each(<сопоставление с образцом> in <последовательнсоть>) => <другая последовательность>
VD>

VD>Причем, чтобы это дело порождало фукнцию которую можно передать куда хочется (в отличии от foreach-а).
Типа так

macro forpattern(pattern,collection,body)
syntax("forpattern","(",pattern,"in",collection,")",body)
{
    <[ 
         foreach(_ in $collection)
         {
                | $pattern => $body
                | _ => ()
         }
    ]>
}


только чтобы можно было сохранять pattern?

Для этого нужен некий механизм, который позволял бы из паттерна делать T->bool.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[48]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 28.01.07 08:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. Это не аналогичный код. Мой код возращает список которы в дальнейшем можно продолжить обрабатывать. Например, вот так можно получить список квадратов:[c#]

VD>numbers.Filter(_ < 5).Map(x => x * x)

Ок, вот аналогичный код:
li.FindAll(delegate(int i) { return i < 5; }).ConvertAll<int>(delegate(int i) { return i * i; });

VD>2. Это выглядит довольно коряво.


Это вопрос о том, как плохо в наше время живется без лямбды (хотя-бы такой как в BOOST).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 28.01.07 08:43
Оценка: :)
АХ>+1. Да еще и неэффективно, т.к. сначала создается массив а потом он же копируется в List<int>

Конечно можно обойтись и без лишних "танцев":

int[] a0 = Array.FindAll(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }, delegate(int i) { return i < 5; });
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 10:30
Оценка:
Здравствуйте, Denis2005, Вы писали:

VD>>numbers.Filter(_ < 5).Map(x => x * x)


D>Ок, вот аналогичный код:

D>li.FindAll(delegate(int i) { return i < 5; }).ConvertAll<int>(delegate(int i) { return i * i; });

Сомнения в том что Немерле рулит еще остались?
Тогда попробуй написать аналогичный код для массива.

VD>>2. Это выглядит довольно коряво.


D>Это вопрос о том, как плохо в наше время живется без лямбды (хотя-бы такой как в BOOST).


Такой как Бусте лучше не надо. Это сильно кастрированный вариант.
Кроме того еще хотелось быиметь функциональный тип вместо делегатов (или в дополнении к ним) и вывод типов, чтобы не приходилось указывать параметры типов.
Ну, и само собой нужны метды расширения.

Кое что будет в C# 3.0, но к сожалению не все.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[50]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 28.01.07 11:27
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Denis2005, Вы писали:


VD>>>numbers.Filter(_ < 5).Map(x => x * x)


D>>Ок, вот аналогичный код:

D>>li.FindAll(delegate(int i) { return i < 5; }).ConvertAll<int>(delegate(int i) { return i * i; });

VD>Сомнения в том что Немерле рулит еще остались?


У меня под рукой N нет (и в ближайшее время не предвитится),
поэтому если не трудно запости "бенчарки" этих примеров.
По результатам можно будет определить на сколько он рулит.

VD>Тогда попробуй написать аналогичный код для массива.


int[] arr = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int[] a0 = Array.ConvertAll<int, int>(Array.FindAll(arr, delegate(int i) { return i < 5; }), 
                                                                            delegate(int i) { return i * i; });


Ничего ужасного тут не вижу. В любом случае можно сделать тонкую обертку над Array:

    struct Array<T>
    {
        private T[] _array;

        public Array(T[] array)
        {
            _array = array;
        }

        public Array<T> FindAll(Predicate<T> match)
        {
            return new Array<T>( Array.FindAll(_array, match) );
        }

        public Array<T> ConvertAll(Converter<T, T> converter)
        {
            return new Array<T>(Array.ConvertAll<T, T>(_array, converter));
        }
    }


Array<int> ai = new Array<int>(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 });
ai = ai.FindAll(delegate(int i) { return i < 5; }).ConvertAll(delegate(int i) { return i * i; });
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[51]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 28.01.07 11:39
Оценка:
Здравствуйте, Denis2005, Вы писали:

Кстати говоря "бенчмарк":

int[] arr = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

for (int j = 0; j < 10000000; j++)
{
    int[] a0 = Array.ConvertAll<int, int>(
                    Array.FindAll(arr, delegate(int i) { return i < 5; }),
                    delegate(int i) { return i * i; });
}


~5.9 сек.

Array<int> ai = new Array<int>(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 });
for (int j = 0; j < 10000000; j++)
{
    Array<int> a0 = ai.FindAll(delegate(int i) { return i < 5; }).ConvertAll(delegate(int i) { return i * i; });
}


~6.18 сек.


P.S. Athlon3000+/512Mb(PC2-5300)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[51]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 11:49
Оценка: :)
Здравствуйте, Denis2005, Вы писали:

D>У меня под рукой N нет (и в ближайшее время не предвитится),

D>поэтому если не трудно запости "бенчарки" этих примеров.
D>По результатам можно будет определить на сколько он рулит.

У меня есть один "бенчик" — компилятор самого Немерла. Он как раз написан с огромным объемом использования подобного рода кода.
Вызов фунционалного объекта по скорости равен сорости вызова виртуального метода. Что быстрее интерфейсов и делегатов. Последние вообще довольно тормозны.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[52]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 28.01.07 12:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Denis2005, Вы писали:


VD>У меня есть один "бенчик" — компилятор самого Немерла. Он как раз написан с огромным объемом использования подобного рода кода.


Влад, я не думаю, что сделать "бенчмарк", о котором выше шла речь займет у тебе больше минуты.
Поэтому запости результаты, а то дискуссия на тему крутизны Nemerle заходит в тупик.

VD>Вызов фунционалного объекта по скорости равен сорости вызова виртуального метода. Что быстрее интерфейсов и делегатов. Последние вообще довольно тормозны.


Насчет делегатов ты конечно прав, а вот насчет интерфейсов погорячился.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[53]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 15:20
Оценка: +1
Здравствуйте, Denis2005, Вы писали:

D>Влад, я не думаю, что сделать "бенчмарк", о котором выше шла речь займет у тебе больше минуты.

D>Поэтому запости результаты, а то дискуссия на тему крутизны Nemerle заходит в тупик.

Твой тест будет измерять скорость работы GC. На фоне выделения помяти какие-то там вызовы делегатов просто не будут заметны.

D>Насчет делегатов ты конечно прав, а вот насчет интерфейсов погорячился.


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

Пожалу самым правильным тестом было бы реализовать функцию сортировки в в разных вариантах которой использовать для сравненеия делегаты, компаратор на базе интерфейса и функциональный объект.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[54]: Как скрестить ужа и ежа или статическую и утиные тип
От: Denis2005 Россия  
Дата: 28.01.07 16:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Твой тест будет измерять скорость работы GC. На фоне выделения помяти какие-то там вызовы делегатов просто не будут заметны.


Хорошо, давай сварганим тест без выделения памяти.

class MyCompare : IComparer<int>
{
    public int Compare(int a, int b)
    {
        return a.CompareTo(b);
    }
}

int[] ar = new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int[] tst = new int[ar.Length];
MyCompare cmp = new MyCompare();

for(int i = 0; i < 10000000; i++)
{
    ar.CopyTo(tst, 0);  // {1}
    // Array.Sort(tst, cmp); {2}
    // Array.Sort(tst, delegate(int a, int b) { return a.CompareTo(b); }); {3}
}


Копирование ({1}) ~1.4 сек.
Копирование + сортировка ({1}+{2}) ~10.6
Копирование + сортировка ({1}+{3}) ~11.8

Я думаю не надо быть гением, чтобы сделать соответствующие выводы.

D>>Насчет делегатов ты конечно прав, а вот насчет интерфейсов погорячился.


VD>Извини, но я изучил впорос о котором говорю, а вот ты высказываешь свои предположения. Вызов метода интерфейса где-то 2-3 раза медленее нежели виртуального метода. Вот только подобными бэнчмарками это не выявишь. Тут и комплитор может соптимизировать, и предсказание ветвления в процессоре срабатывать начинает.


Мои предположения основанны, на собственном опыте и проведенных тестах. Никаких чудес JIT над косвенными вызовами не делает.
Во всяком случае виртуальный вызов не может быть сооптимизирован до прямого и до кучи заинлайнен.
Предсказание ветвлений это уже ближе к теме, но для этого и делают несколько подряд тестов и собирают усредненные результаты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[55]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 28.01.07 16:34
Оценка: +1
Здравствуйте, Denis2005, Вы писали:

D>Во всяком случае виртуальный вызов не может быть сооптимизирован до прямого и до кучи заинлайнен.


Кстати, именно это и делает HotSpot. Правда к .Net это не имеет отношения...
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[55]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 23:02
Оценка: 8 (3)
Здравствуйте, Denis2005, Вы писали:

D>Хорошо, давай сварганим тест без выделения памяти.

D>Копирование ({1}) ~1.4 сек.
D>Копирование + сортировка ({1}+{2}) ~10.6
D>Копирование + сортировка ({1}+{3}) ~11.8

D>Я думаю не надо быть гением, чтобы сделать соответствующие выводы.


И каковы же твои выводы?

Ладно, достал. Убил хрен знает сколько времени чтобы сделать приличный тест.
Результат:
Framework version: 2.0.50727.308
--------------------------------------------------
Test               Sort Fun took: 00:00:02.0639765     Test OK.
Test          Sort Delegate took: 00:00:02.5174177     Test OK.
Test         Sort Interface took: 00:00:02.2520124     Test OK.
Test               Sort Int took: 00:00:01.3553026     Test OK.
Test             Array.Sort took: 00:00:01.2027735     Test OK.
Test  Array.Sort + Delegate took: 00:00:03.2673144     Test OK.
--------------------------------------------------
Test               Sort Fun took: 00:00:02.0579892     Test OK.
Test          Sort Delegate took: 00:00:02.4767103     Test OK.
Test         Sort Interface took: 00:00:02.2513230     Test OK.
Test               Sort Int took: 00:00:01.3561866     Test OK.
Test             Array.Sort took: 00:00:01.2009146     Test OK.
Test  Array.Sort + Delegate took: 00:00:03.2260957     Test OK.


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

Исходник:
using System;
using System.Console;
using Nemerle.Utility;
using System.Diagnostics;

module Program
{
  Main() : void
  {
    WriteLine("Framework version: " + Environment.Version.ToString());

    def run(test, msg) : void
    {
      def calcCheckSum(ary) { ary.Fold(0 : long, _ + _) }
        def ary = array(10_000_000) : array[int];
        def r = Random(123);
        
      for (mutable i = 0; i < ary.Length; i++)
            ary[i] = r.Next(0, 1000000);

          def etalon = calcCheckSum(ary);
          def timer = Stopwatch.StartNew();
          
      test(ary);

      Write("Test {1,22} took: {0}", timer.Elapsed, msg);

          Trace.Assert(etalon == calcCheckSum(ary));
          _ = ary.Fold(0, fun(x, acc) { Trace.Assert(x >= acc); x });
      WriteLine("     Test OK.");
    }

    def runAll()
    {
      WriteLine("--------------------------------------------------");

      run(ary => ary.Sort(_ > _),                   "Sort Fun");
      run(ary => ary.SortDelegate(_ > _),           "Sort Delegate");
      run(ary => ary.SortInterface(Utils.CmpInt()), "Sort Interface");
      run(ary => ary.SortInt(),                     "Sort Int");
      run(ary => Array.Sort(ary),                   "Array.Sort");
      run(ary => Array.Sort(ary, _ - _),            "Array.Sort + Delegate");
    }

    runAll();
    runAll();
  }
}

public module Utils
{
  public Sort[T](this ary : array[T]) : void
    where T : IComparable[T]
  {
    Sort(ary, 0, ary.Length - 1, (x, y) => x.CompareTo(y) > 0);
  }
  
  public Sort[T](this ary : array[T], left : int, right : int) : void    
    where T : IComparable[T]
  {
    Sort(ary, left, right, (x, y) => x.CompareTo(y) > 0);
  }

  public Sort[T](this ary : array[T], isGreat : T * T -> bool) : void
  {
      Sort(ary, 0, ary.Length - 1, isGreat);
  }

  public Sort[T](
      this ary : array[T],
          left : int,
         right : int,
       isGreat : T * T -> bool
  )
    : void    
  {
    mutable i = left;
    mutable j = right;
    def center = ary[(left + right) / 2];

    while (i <= j)
    {
        while (isGreat(center, ary[i]))
            i++;
        while (isGreat(ary[j], center))
            j--;

        when (i <= j)
        {
          ary[i] <-> ary[j];
          i++;
          j--;
        }
    }

    when (left < j)
        Sort(ary, left, j, isGreat);
    when (right > i)
        Sort(ary, i, right, isGreat);
  }

  public delegate Cmp[T](x : T, y : T) : bool;
  
  public SortDelegate[T](this ary : array[T], isGreat : Cmp[T]) : void
  {
      SortDelegate(ary, 0, ary.Length - 1, isGreat);
  }

  public SortDelegate[T](
      this ary : array[T],
          left : int,
         right : int,
       isGreat : Cmp[T]
  )
    : void    
  {
    mutable i = left;
      mutable j = right;
      def center = ary[(left + right) / 2];

      while (i <= j)
      {
          while (isGreat(center, ary[i]))
              i++;
          while (isGreat(ary[j], center))
              j--;

          when (i <= j)
          {
            ary[i] <-> ary[j];
              i++;
              j--;
          }
      }

      when (left < j)
          SortDelegate(ary, left, j, isGreat);
      when (right > i)
          SortDelegate(ary, i, right, isGreat);
  }

  public interface ICmp[T] { Cmp(x : T, y : T) : bool; }
  public class CmpInt : ICmp[int] { public Cmp(x : int, y : int) : bool { x > y } }

  public SortInterface[T](this ary : array[T], isGreat : ICmp[T]) : void
  {
      SortInterface(ary, 0, ary.Length - 1, isGreat);
  }

  public SortInterface[T](
      this ary : array[T],
          left : int,
         right : int,
       isGreat : ICmp[T]
  )
    : void    
  {
    mutable i = left;
      mutable j = right;
      def center = ary[(left + right) / 2];

      while (i <= j)
      {
          while (isGreat.Cmp(center, ary[i]))
              i++;
          while (isGreat.Cmp(ary[j], center))
              j--;

          when (i <= j)
          {
            ary[i] <-> ary[j];
              i++;
              j--;
          }
      }

      when (left < j)
          SortInterface(ary, left, j, isGreat);
      when (right > i)
          SortInterface(ary, i, right, isGreat);
  }

  public SortInt(this ary : array[int]) : void
  {
    SortInt(ary, 0, ary.Length - 1);
  }

  public SortInt(
      this ary : array[int],
          left : int,
         right : int
  )
    : void    
  {
    mutable i = left;
    mutable j = right;
    def center = ary[(left + right) / 2];

    while (i <= j)
    {
        while (center > ary[i])
            i++;
        while (ary[j] > center)
            j--;

        when (i <= j)
        {
          ary[i] <-> ary[j];
          i++;
          j--;
        }
    }

    when (left < j)
        SortInt(ary, left, j);
    when (right > i)
        SortInt(ary, i, right);
  }
}
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[56]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.01.07 23:02
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Кстати, именно это и делает HotSpot. Правда к .Net это не имеет отношения...


Если метод действительно виртуальный, то ХотСпот ничего поделать не сможет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[50]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 28.01.07 23:03
Оценка:
Здравствуйте, Denis2005, Вы писали:

АХ>>+1. Да еще и неэффективно, т.к. сначала создается массив а потом он же копируется в List<int>


D>Конечно можно обойтись и без лишних "танцев":


D>
D>int[] a0 = Array.FindAll(new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }, delegate(int i) { return i < 5; });
D>


Конечно:
def a0 = [5,4,1,3,9,8,6,7,2,0].Filter(_<5);


... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[57]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 29.01.07 02:37
Оценка:
VladD2 wrote:
> ANS>Кстати, именно это и делает HotSpot. Правда к .Net это не имеет
> отношения...
> Если метод действительно виртуальный, то ХотСпот ничего поделать не сможет.
Только вот это бывает достаточно редко на практике — большинство вызовов
мономорфны. HotSpot в седьмой JDK будет получать информацию от
escape-анализатора, которая поможет ему выделять места, где просто не
может быть виртуальных вызовов.

Заодно, escape-анализатор еще позволяет располагать переменные на стеке
и убирать ненужную синхронизацию.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[58]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 09:40
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Только вот это бывает достаточно редко на практике — большинство вызовов

C>мономорфны.

Это не наш случай. Это всего лишь уравнивает шансы Явы и дотнета.

C> HotSpot в седьмой JDK будет получать информацию от

C>escape-анализатора, которая поможет ему выделять места, где просто не
C>может быть виртуальных вызовов.

Не факт что это поможет подавлять виртуальность. И, кстати, почему в 7-й? Вроде бы в прошлый раз они обещали что escape-анализ войдет в слудующую версию, а тогда текущей была 1.5.
Ну, да, в любом случае это дико интересно. Если Сан это сделает и это даст соотвествующий эффект, то — это будет прорыв!

C>Заодно, escape-анализатор еще позволяет располагать переменные на стеке

C>и убирать ненужную синхронизацию.

Это не "заодно", это как раз его основ его предназначение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[59]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 29.01.07 12:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это не наш случай. Это всего лишь уравнивает шансы Явы и дотнета.


Интересно, с каких это пор ручная оптимизация лучше автоматической?
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[60]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 13:52
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

VD>>Это не наш случай. Это всего лишь уравнивает шансы Явы и дотнета.


ANS>Интересно, с каких это пор ручная оптимизация лучше автоматической?


К чему эта фраза?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[61]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 29.01.07 14:35
Оценка:
VD>>>Это не наш случай. Это всего лишь уравнивает шансы Явы и дотнета.

ANS>>Интересно, с каких это пор ручная оптимизация лучше автоматической?


VD>К чему эта фраза?


всегда virtual vs. расставлять virtual руками. Или ты не об этом говорил, когда писал о шансах?
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[62]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>всегда virtual vs. расставлять virtual руками. Или ты не об этом говорил, когда писал о шансах?


Поставить virtual где надо — это значит определить дизайн системы. Где надо метод будет виртуальным, не не надо прямым. Это нисколько не напрягает.

А вот в Яве пока что получается, что многие расставляют где не попадя final, что намного хуже, так как это как раз портит дизайн.

В прочем, это очередной уход от темы. Главное, что замечаение Киберакса не подходит к данному случаю. Функциональный объект принципиально обязан быть истенно виртуальным, так как функции получают ссылку на абстрактный класс (считай интерфейс) и деспетчиризация проходит принципиально динамически.

ЗЫ

Мысли вслух...

Тут если и оптимизировать что-то, то надо избавляться от самого вызова перенося код лямбд в код функций высшего порядка (ФВП), согдавая их специализированные версии. Что очень не просто и может приводить к распуханию кода.

Возможно такой перенос надо совмещать с инлайнингом ФВП. Тогда проблема распухания будет менее важна и упростится перенос кода. Ведь код лямбд просто будет работать в исходном собвстенном контексте.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[59]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 30.01.07 00:14
Оценка:
Здравствуйте, VladD2, Вы писали:

C>> HotSpot в седьмой JDK будет получать информацию от

C>>escape-анализатора, которая поможет ему выделять места, где просто не
C>>может быть виртуальных вызовов.
VD>Не факт что это поможет подавлять виртуальность. И, кстати, почему в 7-й? Вроде бы в прошлый раз они обещали что escape-анализ войдет в слудующую версию, а тогда текущей была 1.5.
На днях 1.6 уже вышла — так что следующая будет как раз семерка.

VD>Ну, да, в любом случае это дико интересно. Если Сан это сделает и это даст соотвествующий эффект, то — это будет прорыв!

Java на глазах улучшается — http://rsdn.ru/Forum/?mid=2267562
Автор: Cyberax
Дата: 17.12.06


Пока лень было в код JVM лезть, но как только время будет — полажу по исходникам.
Sapienti sat!
Re[63]: Как скрестить ужа и ежа или статическую и утиные тип
От: Cyberax Марс  
Дата: 30.01.07 00:16
Оценка: +1
VladD2 wrote:
> В прочем, это очередной уход от темы. Главное, что замечаение Киберакса
> не подходит к данному случаю. Функциональный объект принципиально обязан
> быть истенно виртуальным, так как функции получают ссылку на абстрактный
> класс (считай интерфейс) и деспетчиризация проходит принципиально
> динамически.
Однако, оптимизатор в первый проход может за-inline'ить код
функционального объекта, а потом обнаружить, что в этом коде на самом
деле нет полиморфных вызовов.

Точнее говоря, оптимизатору вообще на важно, что код находится в
функциональном объекте — он работает с деревьями SSA и ищет "закрытые
участки". То есть, например, Array.sort будет помечен именно как такой
участок — а значит его можно инлайнить и убирать виртуальность.

> Тут если и оптимизировать что-то, то надо избавляться от самого вызова

> перенося код лямбд в код функций высшего порядка (ФВП), согдавая их
> специализированные версии. Что очень не просто и может приводить к
> распуханию кода.
Вот как раз тут HotSpot и рулит, он позволит оптимизировать только самые
узкие места. А их обычно не так много, так что распуханием кода можно
пренебречь.

> Возможно такой перенос надо совмещать с инлайнингом ФВП. Тогда проблема

> распухания будет менее важна и упростится перенос кода. Ведь код лямбд
> просто будет работать в исходном собвстенном контексте.
Угу Я это прочел уже после того, как ответ написал.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[36]: Как скрестить ужа и ежа или статическую и утиные тип
От: _DAle_ Беларусь  
Дата: 30.01.07 00:17
Оценка: 7 (2) +1
Здравствуйте, Kisloid, Вы писали:

K>Здравствуйте, konsoletyper, Вы писали:


K>>LR(1)-парсеры не распознают не то что весь класс КС-грамматик, они распознают даже далеко не весь класс однозначных КС-грамматик.


K>LR-grammars generate exactly the DCFLs

K>The family of LR(1)-languages is exactly the family of deterministic languages.

Нет, тут надо разобраться Цитата с твоей первой ссылки

- deterministic CFLs (accepted by deterministic PDAs)
syntax of many programming languages
LR-grammars generate exactly the DCFLs


Так вот, deterministic PDAs, то есть детерминированные магазинные (стековые) автоматы, действительно эквивалентны LR-грамматикам. Но дело в том, что языки, распознаваемые deterministic PDA, представляют собой лишь подмножество КС-языков. Все КС-языки распознаются с помощью non-deterministic PDA. Более того, как говорилось выше, deterministic PDAs не распознают даже все языки, порожденные однозначными КС-грамматиками.
Язык, порожденный вот такой вот однозначной грамматикой S -> 0S0 | 1S1 | eps, не разпознается детерминированным PDA.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[63]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 30.01.07 09:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Поставить virtual где надо — это значит определить дизайн системы. Где надо метод будет виртуальным, не не надо прямым. Это нисколько не напрягает.


Того, кто их расставляет — не напрягает, того кто этим "дизайном" пользуется — очень и очень.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[37]: Как скрестить ужа и ежа или статическую и утиные тип
От: Kisloid Мухосранск  
Дата: 30.01.07 12:43
Оценка:
Здравствуйте, _DAle_, Вы писали:

_DA>Так вот, deterministic PDAs, то есть детерминированные магазинные (стековые) автоматы, действительно эквивалентны LR-грамматикам. Но дело в том, что языки, распознаваемые deterministic PDA, представляют собой лишь подмножество КС-языков. Все КС-языки распознаются с помощью non-deterministic PDA. Более того, как говорилось выше, deterministic PDAs не распознают даже все языки, порожденные однозначными КС-грамматиками.

_DA>Язык, порожденный вот такой вот однозначной грамматикой S -> 0S0 | 1S1 | eps, не разпознается детерминированным PDA.

Точно, че то меня заклинило
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re[64]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.01.07 22:04
Оценка: -2
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Того, кто их расставляет — не напрягает, того кто этим "дизайном" пользуется — очень и очень.


То есть этому второму куда приятнее когда везде понатыканы finaly-и или по забычивости виртуальными являются методы на это не рассчитанные?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[65]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 01.02.07 01:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Andrei N.Sobchuck, Вы писали:


ANS>>Того, кто их расставляет — не напрягает, того кто этим "дизайном" пользуется — очень и очень.


VD>То есть этому второму куда приятнее когда везде понатыканы finaly-и или по забычивости виртуальными являются методы на это не рассчитанные?


Честно говоря, у меня практически не разу не было методов не рассчитанных быть виртуальными. Были просто методы которые я не переопределял, либо которые запрещал переопределять. А чтобы переопределять, но не виртуально — по-моему грабли еще те (да, в C++ это легко ). Так что с точки зрения логики мне кажется Java, Scala и D правы, считая все методы по умолчанию виртуальными. Правда, конечно, это решение сложнее оптимизировать.

Да, а причем здесь finally?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[66]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.02.07 02:43
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

...

-1

АХ>Да, а причем здесь finally?


final lang:java
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[67]: Как скрестить ужа и ежа или статическую и утиные тип
От: Андрей Хропов Россия  
Дата: 01.02.07 13:42
Оценка:
Здравствуйте, VladD2, Вы писали:

АХ>>Да, а причем здесь finally?


Ну так это (final) совсем другое, чем finally (который в try/catch). Так это совершенно логичная конструкция, аналог sealed в .NET (которой опять же нет в C++, за что ему -).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[68]: Как скрестить ужа и ежа или статическую и утиные тип
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 01.02.07 14:00
Оценка: +1
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Ну так это (final) совсем другое, чем finally (который в try/catch). Так это совершенно логичная конструкция, аналог sealed в .NET (которой опять же нет в C++, за что ему -).


Пальци бы повыдёргивать тому, кто final/sealed наставил во фреймворках.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[68]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.02.07 23:05
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Ну так это (final) совсем другое, чем finally (который в try/catch).


Очепятался по привычке.

АХ> Так это совершенно логичная конструкция, аналог sealed в .NET (которой опять же нет в C++, за что ему -).


Оооочень логичная! Особенно если поглядеть сколько раз она используется иногда и для чего ее используют.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[69]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.02.07 23:05
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Пальци бы повыдёргивать тому, кто final/sealed наставил во фреймворках.


Скажем так, иногда это неразумно. Но иногда очень верный выход. Вот только неразумного использования запретов куда больше чем неразумных разрешений. Потому я придерживаюсь взглядов тех кто предлагает писать vitrual чтобы показать, что метод подлежит расширению в наследниках.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Как скрестить ужа и ежа или статическую и утиные тип
От: ambel-vlad Беларусь  
Дата: 04.02.07 21:03
Оценка:
Hi Андрей Хропов

E>>Даже если сейчас интерес к нему снижается и количество стартующих на нем проектов уменьшается, C++ обеспечена еще очень и очень долгая жизнь. Не верите -- посмотрите на COBOL.


АХ>Да. Но кто сейчас хочет писать но Коболе? На нем открывают новые проекты?


АХ>Я бы сказал что Кобол — это зомби .


Не сказал бы я что полностью так. Приятель на работе столкнулся в проектом часть которого на COBOL. Проект начинался в конце 2001 года. GUI и работа с GIS на С++, а большая часть расчетной части писали на COBOL. Правда не эти же ребята, а немцы. Чтобы не было неверных предположений скажу, что писал на COBOL не старик, который больше ничего не знает, а 32-летний немец (в 2001 году). Да, проектов на COBOL уже очень мало, но они есть. Причем даже новые писать начинают, а не только старые поддерживать.

--
С Уважением
Posted via RSDN NNTP Server 2.0
Re[17]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.07 22:36
Оценка:
Здравствуйте, ambel-vlad, Вы писали:

AV>Не сказал бы я что полностью так. Приятель на работе столкнулся в проектом часть которого на COBOL. Проект начинался в конце 2001 года. GUI и работа с GIS на С++, а большая часть расчетной части писали на COBOL. Правда не эти же ребята, а немцы. Чтобы не было неверных предположений скажу, что писал на COBOL не старик, который больше ничего не знает, а 32-летний немец (в 2001 году). Да, проектов на COBOL уже очень мало, но они есть. Причем даже новые писать начинают, а не только старые поддерживать.


Расчетные задачи на Cobol? Это или сказка, или товарщи были любителями извращений.

Кстати, если не сикрет... На каком компиляторе кобола они работали? И на каких системах код запускался?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Как скрестить ужа и ежа или статическую и утиные тип
От: ambel-vlad Беларусь  
Дата: 05.02.07 12:41
Оценка:
Hi VladD2

AV>>Не сказал бы я что полностью так. Приятель на работе столкнулся в проектом часть которого на COBOL. Проект начинался в конце 2001 года. GUI и работа с GIS на С++, а большая часть расчетной части писали на COBOL. Правда не эти же ребята, а немцы. Чтобы не было неверных предположений скажу, что писал на COBOL не старик, который больше ничего не знает, а 32-летний немец (в 2001 году). Да, проектов на COBOL уже очень мало, но они есть. Причем даже новые писать начинают, а не только старые поддерживать.


V>Расчетные задачи на Cobol? Это или сказка, или товарщи были любителями извращений.


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

Если ты считаешь, что COBOL для этого не подходит, то на чем ты предлагаешь это делать?

V>Кстати, если не сикрет... На каком компиляторе кобола они работали? И на каких системах код запускался?


Всех подробностей не знаю. Система работала на Win.

--
С Уважением
Posted via RSDN NNTP Server 2.0
Re[19]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.02.07 14:52
Оценка:
Здравствуйте, ambel-vlad, Вы писали:

AV>Суть задачи была следующая. Рассчитать оптимальный маршрут развозки некой продукции с учетом кучи факторов (например, реальные пробки, прогнозируемые пробки, состояние материальной базы, желаемое и оптимальное время прибытия в пункты разгрузки и кучи других факторов).


AV>Если ты считаешь, что COBOL для этого не подходит, то на чем ты предлагаешь это делать?


Кобол это ужасное награмождение конструкций для финансового учета и печати на симольных (лепестковых) принтерах. Все его приемущества — это задание размеров полей.
Использование его для программирования более менее сложных вычислительных задач является мазохизмом.

V>>Кстати, если не сикрет... На каком компиляторе кобола они работали? И на каких системах код запускался?


AV>Всех подробностей не знаю. Система работала на Win.


Я просто к тому, что не видел ни одного компилятора Кобола для Виндовс.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Как скрестить ужа и ежа или статическую и утиные тип
От: ambel-vlad Беларусь  
Дата: 05.02.07 15:44
Оценка:
Hi VladD2

AV>>Суть задачи была следующая. Рассчитать оптимальный маршрут развозки некой продукции с учетом кучи факторов (например, реальные пробки, прогнозируемые пробки, состояние материальной базы, желаемое и оптимальное время прибытия в пункты разгрузки и кучи других факторов).


AV>>Если ты считаешь, что COBOL для этого не подходит, то на чем ты предлагаешь это делать?


V>Кобол это ужасное награмождение конструкций для финансового учета и печати на симольных (лепестковых) принтерах. Все его приемущества — это задание размеров полей.

V>Использование его для программирования более менее сложных вычислительных задач является мазохизмом.

V>>Кстати, если не сикрет... На каком компиляторе кобола они работали? И на каких системах код запускался?


AV>>Всех подробностей не знаю. Система работала на Win.


V>Я просто к тому, что не видел ни одного компилятора Кобола для Виндовс.


Тогда даже не знаю как этот немец там извращался. Но то что эта часть делалась на COBOL — факт. Я сам удивлялся почему так было решено делать. Ибо впервые услышал, что на нем еще делалось что-то (Я считал, что только поддерживаются проекты на COBOL, а тут начали еще и писать).

--
С Уважением
Posted via RSDN NNTP Server 2.0
Re[21]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.02.07 21:37
Оценка:
Здравствуйте, ambel-vlad, Вы писали:

AV>Тогда даже не знаю как этот немец там извращался. Но то что эта часть делалась на COBOL — факт. Я сам удивлялся почему так было решено делать. Ибо впервые услышал, что на нем еще делалось что-то (Я считал, что только поддерживаются проекты на COBOL, а тут начали еще и писать).


На нем обычно развивают и поддерживают старые финасовые программы (еще 60-ых годов). И происходит обычно это на мэйнфрэймах которые многие из нас и в глаза не видели.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
От: ambel-vlad Беларусь  
Дата: 06.02.07 01:58
Оценка:
Hi VladD2

AV>>Тогда даже не знаю как этот немец там извращался. Но то что эта часть делалась на COBOL — факт. Я сам удивлялся почему так было решено делать. Ибо впервые услышал, что на нем еще делалось что-то (Я считал, что только поддерживаются проекты на COBOL, а тут начали еще и писать).


V>На нем обычно развивают и поддерживают старые финасовые программы (еще 60-ых годов). И происходит обычно это на мэйнфрэймах которые многие из нас и в глаза не видели.


Я тоже так всю жизнь думал. А тут оказалось, что есть и такие, что готовы начинать проект с нуля на COBOL.

Но в целом с тобой согласен. Но полным трупом назвать COBOL не получается. Только совсем дряхлым.

--
С Уважением
Posted via RSDN NNTP Server 2.0
Re[30]: Как скрестить ужа и ежа или статическую и утиные тип
От: naryl  
Дата: 29.11.07 03:34
Оценка: 4 (1)
Здравствуйте, VladD2, Вы писали:

АХ>> Потому что он создан для системного программирования вплоть до самого низкого уровня.


VD>Ага. Точно. Создание компиляторов это явно задача не системная. Тут Ди на фиг не упал. Согласен. Тут скорее нужен Немерле. Он тут куда удобнее. А для Ди остаются исконно системные задачи вроде пенесометрии.


Если интересно, на D для D пишется Frontend — dil
кроме того, один чел взялся написать полный компилятор для D. Но пока никому не дает...
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 12:21
Оценка:
Здравствуйте, naryl, Вы писали:

N>Если интересно, на D для D пишется Frontend — dil

N>кроме того, один чел взялся написать полный компилятор для D. Но пока никому не дает...

Ну, напишут, тогда и поглядим. Лично я почти уверен, что ничего путного не выйдет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 29.11.07 14:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, naryl, Вы писали:


N>>Если интересно, на D для D пишется Frontend — dil

N>>кроме того, один чел взялся написать полный компилятор для D. Но пока никому не дает...

VD>Ну, напишут, тогда и поглядим. Лично я почти уверен, что ничего путного не выйдет.


Почему?
Re[31]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 29.11.07 15:39
Оценка:
Здравствуйте, naryl, Вы писали:

N>Если интересно, на D для D пишется Frontend — dil


Посмотрел сильно похоже на тупой дословный перевод, с DMD front end, и поэтому не интересно.

N>кроме того, один чел взялся написать полный компилятор для D. Но пока никому не дает...


Интересно, cсылок нет?
Re[33]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 16:26
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Ну, напишут, тогда и поглядим. Лично я почти уверен, что ничего путного не выйдет.


FR>Почему?


1. Язык так часто изменяется, что разумные люди рано или поздно плюнут.
2. Объем работы слишком велик.
3. Ломающие изменения будут отбивать охоту писать код на этом же языке.
4. Это большой труд отниающий много времени. Если под это не будет финансирования, то работа затянется на многие годы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Как скрестить ужа и ежа или статическую и утиные тип
От: FR  
Дата: 29.11.07 16:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


VD>>>Ну, напишут, тогда и поглядим. Лично я почти уверен, что ничего путного не выйдет.


FR>>Почему?


VD>1. Язык так часто изменяется, что разумные люди рано или поздно плюнут.


Разумные люди даже не начнут пока язык не устаканется , конечно если этот человек не сам автор D.

VD>2. Объем работы слишком велик.

VD>3. Ломающие изменения будут отбивать охоту писать код на этом же языке.
VD>4. Это большой труд отниающий много времени. Если под это не будет финансирования, то работа затянется на многие годы.

Ну не так уж велик, автор с нуля один писал правда долго, портировать будет гораздо проще.

В общем принципиальных не организационных возражений нет?

Судя по тому же pil'у проблем почти дословно перевести с C++ на D нету, кроме конечно приличного объема довольно тупой и муторной работы.
Re[35]: Как скрестить ужа и ежа или статическую и утиные тип
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.07 13:22
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Судя по тому же pil'у проблем почти дословно перевести с C++ на D нету, кроме конечно приличного объема довольно тупой и муторной работы.


И что делать после первого изменения Ди? По новой "дословно перевести с C++ на D"? Или гнаться за втором врунчную?

Откровенно говоря конкуренция в опен-серсных компиляторах для меня выглядит не разумной. Так что если сам автор не перепишет Ди на Ди, то никто это не сделает. А если и сделает, то его творчеством никто пользоваться не будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.