Здравствуйте, VladD2, Вы писали:
VD>Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам. D — ошибка эволюции. Но и у него есть перспектива судя по отличному состоянию С++ (но перспектива есть сейчас и она стримительно исчезает).
VladD2,
я Вам искренне завидую... обладай я хоть камплей Ваших способностей, я бы уже давно забросил бы к черту весь этот комьютерный хлам... и ушел бы торговать на бирже... а через несколько лет мирно жил бы на пенсии и просто наслаждался жизнью
Здравствуйте, FR, Вы писали:
AF>>Ничего. Транслятор скрипта и компилятор языка с выводом типов, паттерн матчингом и синтаксическими расширениями — сложность этих задач отличается на порядок, если не на два.
FR>И что? Конечно компилятор сложнее, но это абсолютно не доказывает "жизнеспособность языка". Эта вещь доказывается только практикой.
+1
Более того, разные версии Modula и Oberon, если не ошибаюсь, изначально сами себя компилировали. Насколько им это помогло?
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, AndreiF, Вы писали:
AF>Здравствуйте, FR, Вы писали:
FR>>И что? Конечно компилятор сложнее, но это абсолютно не доказывает "жизнеспособность языка". Эта вещь доказывается только практикой.
AF>Точно, только практикой. Каков примерно объем всего кода на D, о котором тебе известно?
Мало, можешь сам вот тут подсчитать http://dsource.org/projects/
Но на D уже есть выпущенные коммерческме продукты. (например тот же DMDScript) http://www.digitalmars.com/dscript/buy.html.
Вообще ты зря затеваешь это меряние пипи, и D и N пока представляют собой исчезающе малые величины.
Здравствуйте, FR, Вы писали:
FR>Реально у D до последних релизов были слабые места по сравнению с C++. Сейчас уже нет.
Вот мой список:
1. Слабые места по сравнению с C++:
отсутствие полноценной поддержки const по-сравнению с C++ (const методы, const указатели)[/*]
отсутствие возможности перегружать оператор присваивания или аналогичный механизм, который бы позволил реализовать подсчет ссылок[/*]
отсутствие возможности возвращать ссылки из функций
(поэтому my_class["name"] += 1 не получится)[/*]
отсутствие возможности перегружать оператор присваивания не позволяет нормально реализовать механизм expression templates, что очень плохо для вычислительных программ[/*]
2. Другие слабые места:
медленный консервативный GC (для точного нужно по всей вероятности корректировать дизайн)[/*]
отсутствие полноценных замыканий, но при этом возвращать делегаты из функций не запрещено, что приводит к UB![/*]
неполноценная поддержка рефлексии[/*]
отсутствие генераторов (как сейчас реализуется foreach несколько менее удобно и я подозреваю сложнее оптимизировать)[/*]
семантика использования миксинов до конца не проработана (я их не очень изучал но судя по форуму там много вопросов)[/*]
Все ИМХО.
FR> Но пока не выйдет стабильный релиз перспектив у него на самом деле не будет.
Мне компилятор кажется достаточно стабильным, если не пользоваться новыми навороченными фичами вроде variadic templates.
Здравствуйте, VladD2, Вы писали:
VD>Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам.
Хе хе.. Опытный форумный боец сразу чувствуется по заранее подготовленным маршрутам отступления
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Cyberax, Вы писали:
C>>Нет, это Немерль — жалкое подобие D. Поделка студентов. Даже без .NET C>>Framework/Mono работать не умеет. Фигня, короче.
VD>И что забавно я даже спорить с тобой не буду.
Здравствуйте, prVovik, Вы писали:
V>Хе хе.. Опытный форумный боец сразу чувствуется по заранее подготовленным маршрутам отступления
Нет никаких отсуплений. Я реалист. И говорю о том, что четко могу предсказать путем банальной интерполяции известных мне фактов. Ну, а то что для многих мои выводы не очевидны — это их проблемы, а не мои. Я много раз наблюдал как такие умники отказывались от своих слов по прошествию времени. Поверь мне, что в 1993-1994 году слова про то что Новел окажется в заднице и его рынок уйдет МС вызвали такой же скепсис как эти сейчас. Ну, и где эти скептики?
Ежу понятно, что я могу ошибаться. Любой предсказание не может быть на 100% точным. Ну, да поживем увидим.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FR, Вы писали:
FR>Реально у D до последних релизов были слабые места по сравнению с C++. Сейчас уже нет. Но пока не выйдет стабильный релиз перспектив у него на самом деле не будет.
Ага. Когда выйдет рилиз придумаешь что-нить другое.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, prVovik, Вы писали:
V>А можно подробнее про "интерполяцию фактов" применительно к тому, что именно заставит Microsoft заменить свой теперешний флагман C# на немерле.
Этой теме? Здесь народ по злословить собрался и посмеяться друг над другом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
FR>>Why aren't all Digital Mars programs translated to D?
FR>>There is little benefit to translating a complex, debugged, working application from one language to another. But new Digital Mars apps are implemented in D.
AF>Замечательные слова! Вот это — очень хорошее объяснение, почему D и дальше не будет никем использоваться.
Долго думал согласиться с этими словами или нет. Но понял, что в общем-то согласен. И знаешь почему? Во все не потому, что считаю что переписывание имещихся пириложений на Ди является обязательным ритуалом доказательства его работоспособности. Дело в другом. Дело в том, что успех языка в не малой степени зависит от того насколько его легко развивать. Уж простят меня боги за очердное упоминание Немерле в суе, но во многом качество Неперле определяется тем, что он был переписан на самом себе и развивается на самом себе. Это дает комулятивный эффект. Любое увеличение мощьности языка и урошение его использования приводит к упрощенияю дальнейшего развития языка. Язык сам себя раскручивает.
Таким образом можно сказать, что ответ является лживым. Ответ как бы ставит нас перед фактом, что есть готовое приложение (компилятор Ди) и его не разумно переписывать на другом (пусть даже более мощьном) языка. Если бы дела обстаяли так, то я был бы полностью согласен с автором ответа. Но компилятор Ди не является законченным приложением. И решение развивать его на С++ говорит об одном из двух фактов. Или все же Ди не дает существенной разницы по сравнению с С++, или его авторы мягко говоря не дальновидны. Оба факта не в пользу Ди.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndreiF, Вы писали:
AF>Ничего. Транслятор скрипта и компилятор языка с выводом типов, паттерн матчингом и синтаксическими расширениями — сложность этих задач отличается на порядок, если не на два.
Ты в этом пыташся убедить поклонника Питона?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, eao197, Вы писали:
E>Например, библиотека Mango -- это почти 2Mb d-кода (больше 63K строк). E>В стандартной библиотеке D phobos уже 60K строк.
И это — за добрых семь-восемь лет с тех пор, как появился D.
Здравствуйте, AndreiF, Вы писали:
E>>Например, библиотека Mango -- это почти 2Mb d-кода (больше 63K строк). E>>В стандартной библиотеке D phobos уже 60K строк.
AF>И это — за добрых семь-восемь лет с тех пор, как появился D.
Во-первых, за 4-ре года с момента выхода первой доступной версии (28 сентября 2002).
Во-вторых, это только два проекта из тех, что были у меня под рукой. Но на dsource.org есть еще штук надцать только OpenSource-проектов.
В-третьих, D очень сильно изменялся за эти годы, поэтому он был для части разработчиков (в том числе и для меня) не самой подходящей площадкой для работы (именно для работы, а не для программирования ради исскуства). Не было никакого желания делать что-то серьезное, зная что через полгода половину из написанного нужно будет переписывать. Но сейчас, в связи с грядущей стабилизацией ситуация сильно меняется в лучшую сторону.
В-четвертых, DMD официально поддерживает только Windows и Linux, но для некоторых проектов этого мало. Поэтому еще один всплеск интереса к D произойдет после выхода версии 1.0, когда ее начнет поддерживать порт GDC на других Unix-ах.
Так что, если не заниматься расставлением минусов и попытками обгадить собеседника замечаниями о "ранимой душе", а взглянуть на ситуацию непредвзято, то окажется, что для не вышедшего из стадии beta языка на D написано не так уж и мало.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
WH>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.
Мне кажется, что данная реализация makeDistrib не позволяет языку выполнить рескрутку хвостовой рекурсии -- здесь обычная рекурсия за счет того, что r нужно сохранять в стеке до возврата из следующих makeDistrib.
Для того, чтобы раскрутка хвостовой рекурсии действительно выполнялась, необходимо текущий список передавать аргументом. Вот как-то так (Scala):
object BufferizatorDistrib5
{
def makeDist( trxCount: int, quantums: int ) : List[ int ] = {
def distrib( trxCount: int, quantums: int, result: List[ int ] ) : List[ int ] = {
if( quantums >= 1 )
{
val r = Math.round(trxCount.toFloat / quantums)
distrib( trxCount - r, quantums - 1, r :: result )
}
else
result
}
distrib( trxCount, quantums, Nil ).reverse
}
def main( args: Array[ String ] ) =
{
System.out.print( makeDist( 2000, 60000 ) )
}
}
Похоже, что я прав, поскольку при quantums == 60000 программа на Nemerle ломается. Но вот в таком виде работает:
using System;
using System.Console;
using System.Math;
def makeDistrib(trxCount : int, quantums : int)
{
def distrib( trxCount: int, quantums: int, result ) {
| (_, 0, _) => result
| (remainingTrx, remainingQuantums, result) =>
def r = (remainingTrx :> double) / remainingQuantums;
def r = Round(r, MidpointRounding.AwayFromZero) :> int;
distrib(remainingTrx - r, remainingQuantums - 1, r :: result );
}
distrib( trxCount, quantums, [] )
}
def r = makeDistrib(2000, 60000);
WriteLine($"$r");
SObjectizer: <микро>Агентно-ориентированное программирование на C++.