LINUX.ORG.RU

Язык D


0

2

Заинтересовал сабжевый язык

Стоит ли его изучать?

Может ли он стать достойной заменой плюсам?

Какие у него области применения?

Говорят, сейчас он сырой, а что именно сыро?

Deleted
Ответ на: комментарий от AIv

Но с одной стороны кресты позволяют писать высокоуровневый и лаконичный код

Не позволяют — даже замыканий нормальных нет.

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

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

Со всем вышеупомянутым лучше справится любой Лисп, особенно с оптимизациями по декларациям типов.

В общем, так мы и не услышали начальника транспортного цеха.

y-combinator
()
Ответ на: комментарий от y-combinator

Какой, мля, лисп? Ты что курил? Его семантика в принципе не может привести к высокой производительности. Я уже не говорю о прямой работе с системой под ногами. Хватит сказки рассказывать, я наслушался уже вас. Теперь знаю scheme, common lisp и clojure. И они такое же говно, как и другия языки.

Так что С++ в плане производительности пока наше все :( Rust может быть потом. Но они уже отказались от настраеваемой работы с памятью. Сейчас там RC с поиском циклов, планируется полноценный GC. Семантически поддерживаются регионы, но профита от этого нет(в плане кастомизации работы с памятью, понятно, что они обеспечивают безопасность и предотвращают висячие ссылки). А хочется, чтоб я мог выбирать и стратегию управления памятью(GC, RC, руками(с выводом регионов и проверкой корректности кода), etc.) и мог еще выбирать и писать свои аллокаторы(как в С++, это часто помогало увеличить производительность). В С++ мне не хватает концептов и модулей, по большому счету. Ну и лишнего много.

По поводу замыканий. Что вам не нравится? Есть возможность выбирать, как захватывать объекты - по ссылке или значению. По-моему это полезно и как раз жаль, что это никто, кроме С++, этого не умеет.

anonymous
()
Ответ на: комментарий от y-combinator

Не позволяют — даже замыканий нормальных нет.

А нафига они там? На замыканиях свет клином не сошелся.

Со всем вышеупомянутым лучше справится любой Лисп, особенно с оптимизациями по декларациям типов.

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

По поводу применения Лиспа к описанным мною задачам на ЛОРе все обсасывалось со всех сторон, в т.ч. весьма квалифицированными людьми (типа mv) и даже такими «мегамосгами» как лавсачег. Общее заключению было - Лисп рудит для кодогенерации (на С), настройке плисок, и не более того.

ЗЫ это Вы что ли новый логин себе завели, заместо metadeus?

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Его семантика в принципе не может привести к высокой производительности.

Назовите конкретное противоречие семантики Лиспа и высокой производительности.

А хочется, чтоб я мог выбирать и стратегию управления памятью

Ну так в сабже топика это есть в отличие от плюсов, например.

По поводу замыканий. Что вам не нравится?

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

y-combinator
()
Ответ на: комментарий от anonymous

По поводу замыканий. Что вам не нравится?

Мне вот по поводу замыканий не нравится, что target для std::function / boost::function может возвращать nullptr (после capturing и bind). То есть замыкания вроде как и не функции вовсе.

quasimoto ★★★★
()
Ответ на: комментарий от AIv

А нафига они там? На замыканиях свет клином не сошелся.

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

ЗЫ это Вы что ли новый логин себе завели, заместо metadeus?

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

y-combinator
()
Ответ на: комментарий от y-combinator

без полноценных замыканий это трудно себе представить.

Возможно у Вас проблемы с воображением?;-)

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

В забавном мире Вы живете... Хочу отметить, что бан пошел Вам на пользу, Вы стали куда вежливей:

– Не извольте беспокоиться, мессир, – отозвался Азазелло и обратился к Варенухе: – Хамить не надо по телефону. Лгать не надо по телефону. Понятно? Не будете больше этим заниматься?

AIv ★★★★★
()
Ответ на: комментарий от AIv

Возможно у Вас проблемы с воображением?;-)

Вам хватает низкоуровневых средств языка, а у меня плохо с воображением? Оригинально, как всегда.

В забавном мире Вы живете... Хочу отметить, что бан пошел Вам на пользу, Вы стали куда вежливей:

Ага, если бы я за форму бан получил) За форму я предупреждение получил, а бан за обоснованное несогласие с линией партии.

y-combinator
()
Ответ на: комментарий от y-combinator

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

AIv ★★★★★
()
Ответ на: комментарий от AIv

зачем Вам так нужны замыкания

Замыкания отличный способ ограничения сложности и реализации модульности через ограничение видимости. В JavaScript на этом весь ООП построен, который на порядок мощнее c++'ного. Функциональщина, опять же, нормальная без замыканий не получится (boost::bind и проч. это костыли).

кроме замыканий Вы других высокоуровневых средств не представляете

Это опять вы мне свои суждения приписываете. Помимо замыканий ещё не плохо было бы нормальный ООП иметь, шаблоны, которые от использования по назначению не приводят к компиляции по полчаса, модулей, макросов структурных, рефлексии полной, сборщика мусора отключаемого, поддержки юниттестов, поддержки параллелизации и синхронизации в коде (вот что главное для числодробилок), развитой системы типов (АТД для начала) с выводом (кое как дождались этого убогого auto), иммутабельность и чистые функции, контракты и аспектное программирование, да много ещё чего. Только если они все это будут добавлять в том же виде, в каком сейчас добавляют новые возможности, то скоро код на си++ уже совсем приблизится к #@(%@#)$)$^<#)@>>#$^@(%@*#&$^)

Судя по всему замыкания в C++11 запилили достаточно мощные, но они полностью в духе C++ и содержат просто воз новых граблей, на которые теперь тоже стало можно наступать. Вот например создал разработчик внутри метода класса замыкание [&] использующее внутри явно или неявно this, вернул его наружу и теперь исполнение этого замыкания напрямую зависит от области видимости объекта класса, который может быть даже shared_ptr, а толку 0, т.к. эта ссылка не отслеживается, теперь ему надо будет писать что-то типа: shared_ptr<decltype(this)> this_ptr(this); [=]{ decltype(*this)& this_ref = *this_ptr; this_ref.some_method(); }

Ну или как-то так.

y-combinator
()
Ответ на: комментарий от y-combinator

Помимо замыканий ещё не плохо было бы нормальный ООП иметь, шаблоны, которые от использования по назначению не приводят к компиляции по полчаса, модулей, макросов структурных, рефлексии полной, сборщика мусора отключаемого, поддержки юниттестов, поддержки параллелизации и синхронизации в коде (вот что главное для числодробилок), развитой системы типов (АТД для начала) с выводом (кое как дождались этого убогого auto), иммутабельность и чистые функции, контракты и аспектное программирование,

Такое впечатление, что кто-то излагает свой эротический сон.

tailgunner ★★★★★
()
Ответ на: комментарий от y-combinator

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

Все таки ИМНО это один из способов, и не более того. Я как то не чуйствую его прямо такой вот выдающейсти, что токо вот так и никак иначе.

Функциональщина, опять же, нормальная без замыканий не получится

Я ФП юзаю тока в питоне, и обхожусь в ней как то без замыканий. Редко-редко когда чего то закложурю... может я какие то не те замыкания имею ввиду?;-)

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

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

развитой системы типов (АТД для начала) с выводом (кое как дождались этого убогого auto)

Полностью согласен.

поддержки параллелизации и синхронизации в коде (вот что главное для числодробилок)

Смотря для каких числодробилок. К сожалению, традиционные методы параллелизации и синхронизации (которые и будут включать если что, скажем тот же openMP) крайне неэффективны. Это хорошо работает в очень ограниченном числе случаев. Ну а нетрадиционные методы (всякие рекурсивные, тот же LRnLA) вряд ли дождемся... это специфическая вещь, она неуниверсальна (не имеет применения за пределами узкого класса числодробилок) и никто не будет в это вкладываться. Ну а любое универсальное решение сольет по эффективности в чистую, что с-но и наблюдается.

Вы все правильно говорите. Так никто и не утверждает, что С++ это идеальный ЯП (который Вы описываете). Напротив, все от него плюются. Но главный тезис - ЯП кошмарный, но лучше ДЛЯ ОПРЕДЕЛЕННОГО КЛАССА ЗАДАЧ увы нету. И пока не видно на горизонте...

Если говорить за те же числодробилки (к-ми мы занимаемся) - с программисткой т.з. это примитивные коды, где 99% описанных Вами вещей нафик ненужны. Но есть нюанс, они должны очень быстро молотить очень большие объемы данных. И дальше, все танцы с бубном связанны именно с тем, что стандартные решения неэффективны, а эффективыне решения не стандартны и требуют извращений. Но опять таки, эти извращения должны давать на выходе эффективный код (что бы накладки на извращения были минимальны) и все описанное Вами тоже ненужно. Замыкания там ну не представляю как присобачить... ;-)

AIv ★★★★★
()
Ответ на: комментарий от tailgunner

Такое впечатление, что кто-то излагает свой эротический сон.

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

y-combinator
()
Ответ на: комментарий от y-combinator

Какая глубокая мысль

А то. В реальности приходится выбирать из реальных инструментов, а не из тех, которые существуют в эротических снах. Языка с фишками, которые ты описал, в природе не существует. И, полагаю, существовать не будет (разве что в виде C# 9.0).

и как я вообще мог этих милых людей за дураков принять?

Каких «людей»? Я двоюсь у тебя в глазах?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Блин, я тоже хочу так же лаконично как ты излагать свои мысли... устал что ли под конец года, или просто язык чешется?;-(

Каких «людей»? Я двоюсь у тебя в глазах?

Это он про меня наверное;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Все таки ИМНО это один из способов

Один из, да. Это ничего не отменяет, особенно с учетом того, что в си++ с инкапсуляцией местами очень плохо.

Я ФП юзаю тока в питоне, и обхожусь в ней как то без замыканий.

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

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

А тут дело не в компиляторах — правила разворачивания шаблонов едины для всех. В C++11 специально для борьбы с этим extern-шаблоны придумали.

но лучше ДЛЯ ОПРЕДЕЛЕННОГО КЛАССА ЗАДАЧ увы нету

Ну я как раз и говорил о том, что нет такого класса, где нету. Я знаю только пару ниш, где C++ на коне — реалтайм 3Д и легаси (в том числе и «новые легаси» типа LLVM и игровых движков), ну и, возможно некоторые численные задачи, да, надо смотреть конкретные условия. Другой вопрос, что даже в этих нишах можно использовать сабж топика, который бьёт C++ по всем параметрам (как язык, не как плафторма + библиотеки).

Если говорить за те же числодробилки (к-ми мы занимаемся) - с программисткой т.з. это примитивные коды, где 99% описанных Вами вещей нафик ненужны.

Посмотрите презенташку все таки с http://bddbddb.sourceforge.net/ Там ребята тоже сначала долго пытались оптимизировать в малом, затратили человекогод времени и получили результат, а затем решили сделать DSL под свою задачу с оптимизациями в этом DSL'е, на основе структуры данных и паттернов работы с данными, затратили тот же человекогод, но в результате получили более быструю работу на той же задаче, специализированный оптимизированный отлаженный инструмент работы с такого рода задачами и реализовали на нем ещё других задач на 5 человеколет. Микрооптимизации это путь в никуда — дороже выйдет, дешевле купить ещё пару стоек блейд серверов, чем месяцами тратить время разработчиков на локальные оптимизации под процессоры архитектура которых уже слишком сложна даже для профессионального разработчика, который не специализируется именно на этих кристаллах, с непредсказуемым результатом и высокой вероятностью внесения ошибок.

y-combinator
()
Ответ на: комментарий от tailgunner

Языка с фишками, которые ты описал, в природе не существует.

Существует, да только если за пределы алголоподобного болота не вылазить, то сложно что-то кроме говна увидеть.

y-combinator
()
Ответ на: комментарий от y-combinator

Языка с фишками, которые ты описал, в природе не существует.

Существует

Дай догадаюсь... это Common Lisp? Если нет, то назови этот прекрасный язык.

алголоподобного болота

Где-то я это уже слышал.

tailgunner ★★★★★
()
Ответ на: комментарий от y-combinator

А тут дело не в компиляторах — правила разворачивания шаблонов едины для всех.

Дело в реализации этих правил;-)

даже в этих нишах можно использовать сабж топика, который бьёт C++ по всем параметрам (как язык, не как плафторма + библиотеки).

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

Микрооптимизации это путь в никуда

Так мы ими и не занимаемся. Чем хорош получаемый с LRnLA вариант на крестах - он масштабируется и переносится без проблем. Без потери эффективности;-)

AIv ★★★★★
()
Ответ на: комментарий от tailgunner

Да это же свежезабаненный metadeus.

Почитай его прежние псто, он упорот капитально.

anonymous
()
Ответ на: комментарий от y-combinator

Нутака о том и речь. Но нет такого языка. Потому С++.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.