LINUX.ORG.RU

Язык D


0

2

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

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

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

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

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

Deleted

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

Смоллтолковская среда состоит из объектов, это одна из немногих реализаций полной ОО-среды

Так а объект-то — это что такое?

Не тот инструмент. Сходи, посмотри)

Что значит «не тот»? Классы показывает? Показывает. Для создания классов и объектов есть REPL.

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

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

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

пример?

Пример, очевидно, найдешь в багзилле когда выберешь дату создания заявки 2006 год, а дату закрытия не раньше середины 10 года.

регрессии, ломающие код — так это как раз обратная сторона активности

Спасибо поржал, а я думал это от отсутствия тестов.

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

Открываем стандартную библиотеку за 10 год и высчитываем в процентах использование @safe, pure, @trusted и проч.

частично это должен пофиксить пакетный менеджер вроде Orbit. Кстати, для Gtk2/3 есть более новая библиотека, использует новомодный UFCS синтаксис (когда window.open(a,b,c) = open(window,a,b,c) ) . см. на гитхабе, анонс в ньюсгруппе.

Опять поржал — пакетный менеджер фиксит некомпилирующиеся исходники.

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

Конечно не проблема — для бородатого аутиста.

сейчас нет такого — Tango окаменевшее говно мамонта, которое для D2 не актуально (да и пару лет назад, разработка Tango велась по минимуму, типа теперь код собирается новым релизом dmd, и всё). Разработка phobos куда активнее. Все основные разработчики представлены на гитхабе, Волтер реагирует на пуллреквесты. Компиляторы GDC, LDC там же, разработчики общаются друг с другом.

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

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

не согласен. чего именно не хватило «воплотить в жизнь в разумные сроки?»

Стабильной полнофункциональной среды, очевидно же.

metadeus
()
Ответ на: комментарий от iMushroom

Смоллтолковская среда состоит из объектов, это одна из немногих реализаций полной ОО-среды

Внезапно, CLная среда тоже полностью состоит из объектов.

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

для наркоманов-диабетчиков, есть Vala с сахарком :))

Да, да — смотрел! Чуть было не попробовал, но потом отпустило слава богам.

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

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

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

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

чистая математика: для идеальной плановой экономики нужен идеальный план. а это сложно, потому что для его составления нужно решение СЛАУ, и порядок действий, который влияет на сложность решения такой числодробительной задачке как бь говорит нам: не в этой жизне.

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

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

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

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

вот функциональщина и есть попытка выскочить в такой абсолютный оптимум. а ооп-щина — всего лишь локальная оптимизация.

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

есть, конечно, мнение, что это однофигственно.

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

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

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

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

а когда и для чего нам становится нужна ещё одна парадигма в этом мульти?

Когда её придумают и покажут, что с её применением решать определенный класс задач проще в 5 раз.

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

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

Не решают потому что автор написал свою опердень на сиплюсплюсе? Может оно и не нужно никому кроме. Да и будут/небудут это не важно, могут/немогут вот что важно.

metadeus
()
Ответ на: комментарий от Legioner

почему исходники забросил? :))

выложил бы на гитхаб, там допилить их до D2 совсем немного, по прикидкам.

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

anonymous
()

лучше boost осиль. толку больше будет. инфа 100%

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

И чего же в них нового?

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

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

а что надо от среды?

вот к примеру:

go install go package go test go profile ...

это оно — за среду сойдёт?

или maven XXX/ или orbit fetch/compile/install ?

обозначь, что ты понимаешь под «полнофункциональной» средой.

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

Интересный, конечно, поток сознания, но вот:

вот функциональщина и есть попытка выскочить в такой абсолютный оптимум. а ооп-щина — всего лишь локальная оптимизация.

Насколько я понимаю нет абсолютного оптимума (см. Чейтин и теорема Гёделя). А тогда и функциональщина это не абсолютный оптимум, а лишь один ИЗ, что как бы убивает большую часть смысла в ней.

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

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

Лол же, красивый синтаксис для старого говна это «новый ООП»?

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

что ты понимаешь под «полнофункциональной» средой.

1. Существование грамотного полного стандарта, без косяков. 2. Существование продакшн риди компилятора, который работает в точности по стандарту. 3. Существование достаточного размера продакшн-риди стандартной библиотеки использующей всю мощь языка.

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

это более другое говно. вот разложил ты старое говно по ящикам - объектам. а в говне верёвка. выдернул верёвку — получил зигохистоморфный катоморфизм.

а потом зопилил газонокосилкой ящики и получил мелко нарубленные ad hoc интерфейсы, или чертежы CTFE ящиков, куличиков и шариков.

нарезать ведь можно по всякому. вот такой у нас analytic knife.

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

1. Существование грамотного полного стандарта, без косяков.

что значит «косяков»?

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

dmd — референсная имплементация. Ближе всего к стандарту. Что значит «продакшен готов» и почему dmd ещё не? на мой взгляд, вполне готов.

3. Существование достаточного размера продакшн-риди стандартной библиотеки

размера чего? в байтах, метрах, мегабайтах, функциональных точках, 1/непонятках ?

использующей всю мощь языка.

std.algorithm, std.ranges (map reduce на лябмдах) вполне не?

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

Объекты представляют компоненты системы Смолток. Например, объекты представляют:

Ага, значит всё что не смолток - уже не тру обекты, а значит не тру ООП. Теперь всё понятно.

DarkEld3r ★★★★★
()
Ответ на: (окончание) от anonymous

«изменяющих сознание» примерах (в том смысле, что если уже знаешь плюсы, становится совсем грустно и печально за плюсы, и наоборот, компактность и выразительность языка D — радует).

Можно несколько примеров (ссылка устроит)? Только не надо к книге отсылать.

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

что значит «косяков»?

Косяк в стандарте это когда у тебя одни его части противоречат другим или не стыкуются между собой соответствующим образом. Например: макросы и весь остальной код в си++.

dmd — референсная имплементация. Ближе всего к стандарту. Что значит «продакшен готов» и почему dmd ещё не? на мой взгляд, вполне готов.

Когда я пытался использовать D2, то стандарт и dmd вели себя зачастую по-разному.

размера чего? в байтах, метрах, мегабайтах, функциональных точках, 1/непонятках ?

Размера библиотеки же. В количестве базовых задач, которые она покрывает. Ты прикидываешься или правда?

std.algorithm, std.ranges (map reduce на лябмдах) вполне не?

Ranges не так уж давно появились, до этого были итераторы и другие сущности с чистыми функциями не объявленными pure, с почти чистыми функциями, к кривыми юниттестами в стандартной библиотеке, которые не проходили, с не @safe функциями не использующими низкоуровневые возможности, с непроставленными inout'ами, с корявыми invarinat'ами и const'ами и т.п. маразмами на ровном месте. Если теперь в стандартной библиотеке не цирк с конями, как было раньше, то я рад, но судя по чейнджлогу последней версии с кучей deprecation'ов и десятками вырвиглазных багов — ничего не изменилось.

metadeus
()
Ответ на: комментарий от x4DA

realtime 3D-графика, разработка бэкендов для LLVM

Да, трудно спорить, тут Си++ ещё выглядит победителем. Пожалуй, только вычеркнем LLVM, т.к. иначе это похоже на то, что си++ нужен чтобы писать расширения для своей стандартной библиотеки. Угораздило их такую хорошую штуку на си++ написать...

metadeus
()
Ответ на: комментарий от DarkEld3r

PEG парсер времени компиляции (как CTFE функция)

результатом времени компиляции является сгенерированный метапрограммированием парсер

https://github.com/PhilippeSigaud/Pegged/wiki https://github.com/PhilippeSigaud/Pegged/tree/master/pegged/examples https://github.com/lycus/libpegged/tree/master/pegged/examples

http://www.sioux.eu/nl/component/docman/doc_download/3-walter-bright-d-progra...

: стр. 32,33 : ranges

стр. 45 «Patterns Of Human Error» http://www.slideshare.net/dcacm/patterns-of-human-error

стр. 78,81: пример из исходников zlib, когда C исходник, переписанный на D сократился вполовину. За счёт использования scope(failure)

QtD : пример реализации сигналов/слотов на «чистом D»

https://github.com/jalgelind/dsyn : пример применения метапрограммирования

Deadlock http://h3.gd/code/deadlock/ by h3r3t1c https://bitbucket.org/h3r3tic : сорцы https://bitbucket.org/h3r3tic/boxen интересные примеры здесь https://bitbucket.org/h3r3tic/boxen/src/76f3fab1b8897afb00fff48ed749b8b95fd46...

через парсер (Enki) во время компиляции, CTFE функциями читаются конфиги, создаётся описание сцены, настраивается сцена в игрушке.

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

Например: макросы и весь остальной код в си++.

это почему «не стыкуется»? в стандарте описано, что вот такая реализация. Как SFINAE — в стандарте описано, что вот такое поведение; поведение позволяет делать финты ушами вроде рефлексии через шаблоны из-за SFINAE, но ни разу не очевидно.

макросы в D стыкуются лучше: foo!(bar,baz)(a,b,c,d) как-то понятнее foo<bar,baz>(a,b,c,d)

Косяк в стандарте это когда у тебя одни его части противоречат другим или не стыкуются между собой соответствующим образом.

так что надо как-то почётче определить. Но на взгляд, таких мест немного. Есть неочевидное, что строки иммутабельны, то есть immutable(char)[], то есть, нужно делать .dup если хотим изменить. А массивы и слайсы, наоборот, мутабельны.

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

И необходимость конвертации между всякими dchar/wchar/char тоже.

о, ещё: ЕМНИП, если строки ASCII то они могут быть char, если с \ux123, то wchar, \ux1234 — то dchar, но это надо отдельно проверять, могу ошибаться.

на мой взгляд, вполне понятное поведение, если оно описано в стандарте/в мануале по реализации.

UFCS вроде object.method(a,b,c) <=> method(object,a,b,c) — тоже очевидно.

Когда я пытался использовать D2, то стандарт и dmd вели себя зачастую по-разному

пример? что будет если этот пример сейчас запустить? что будет в gdc, ldc?

Размера библиотеки же. В количестве базовых задач, которые она покрывает.

это какой линейкой ты собираешься мерять базовые задачи и функциональные точки?

Если теперь в стандартной библиотеке не цирк с конями, как было раньше, то я рад, но судя по чейнджлогу последней версии с кучей deprecation'ов и десятками вырвиглазных багов — ничего не изменилось.

ну цирк с конями и для Tango/tangobos/D2 tango тоже проявился в полной красе. как необходимость такого переписывания кода. Переписали же.

deprecationы — это нормальная ситуация.

вообще то что ты описываешь это состояние «phobos посредине D1/D2», сейчас вроде как с этим получше.

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

http://dlang.org/phobos/std_typecons.html http://dlang.org/phobos/std_typetuple.html http://dlang.org/phobos/std_functional.html http://dlang.org/phobos/std_range.html

http://habrahabr.ru/post/135720/ : opEquals, opAssign

http://thedeemon.livejournal.com/tag/d , например http://thedeemon.livejournal.com/53900.html#cutid1

: особая CTFE магия, функциональщина для императивщиков

http://bartoszmilewski.com/category/d-programming-language/ : любопытно, про функциональщину на примерах шаблонов C++ / D

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

Когда я пытался использовать D2, то стандарт и dmd вели себя зачастую по-разному.

А можно для слоупоков ссылочку на стандарт? Когда это D стандартизировали (и как это произошло до заморозки изменений в dmd и D2)?

Ranges не так уж давно появились ...

Да уж никак не меньше трех лет им: точно помню, что в статье The Case for D Александреску что-то про них писал.

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

Косяк в стандарте это когда у тебя одни его части противоречат другим или не стыкуются между собой соответствующим образом. Например: макросы и весь остальной код в си++.

иными словами: чем невнятнее описан стандарт, чем больше в нём текста, который ниасиливают, чем больше исключений и частных случаев — тем косячнее стандарт.

поэтому, смотрим на количество страниц в стандарте **ЯЗЫКА** / на_какой-то_коэффициент_для_метрики_функциональности.

Потому что например в стандарте общелиспа CLtL2 может быть многа буков, но собственно про язык, а не библиотеку / рантайм гораздо меньше. С другой стороны, если в стандарте оберона, например описано: должно быть GC, должна быть загрузка/выгрузка модулей, иначе не канонiчно — то рантайм тоже входит в описание языка.

с третьей стороны, если в стандарте ISO ISLISP буков гораздо меньше чем в CLtL, и куда ближе к RxRS, то это значит что это общелисп толстый ССЗБ, а «язык лисп вообще» — куда более ясный и прозрачный.

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

ну или отдельные стд. на язык, среду, библиотеки, и поотдельности их сравнивать.

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

в разрезе std.typetuples, есть какое-то единообразие:

func!(type1,type2)(var1,var2,var3) чем " >", угловые скобки

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

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

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

ок, возьмём к примеру кутю. в Qt мы пишем не на плюсах, а на кутеплюсах — потому что сигналы и слоты, и moc препроцессором. это не то же самое, что эмфецеплюсы, потому что на #define-ах атлплюсы и мфцплюсы изобразить можно, а кутеплюсы — нет.

или, бустоплюсы. шаблоноидные бустоплюсы — это совсем не просто плюсы.

anonymous
()
Ответ на: (продолжение) от anonymous

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

а) Язык как система, как метод должен облегчать все эти этапы

В c++11 есть новые синтаксические плюшки и никуда не делись старые - т.е. можно постепенно обновлять код.

б) язык «три в одном»: плоский си, классы, шаблоны. [...] вместо того, чтобы заниматься смыслом программы (семантикой), он борется с синтаксисом

Я с C++ начал изучать программирование - первый код написал на паскале, но посмотрел на плюсы в visual studio 2005 и бросил паскаль. Код работал не хуже, чем до этого на паскале, с синтаксическими граблями не встречался т.к. не брал сложных задач, почитывал статьи на разных cyberforum и Страуструпа. Но если человек писал на php/C#/C и вдруг срочно надо написать проект на C++, и заказчик давит - можно огрести, я не спорю. Что касается борьбы с синтаксисом - её уже нет, потому что есть clang. А ещё есть XCode, в котором clang используется как движок и любую ошибку тут же показывает подчёркиванием (иногда дописывая исправление серым шрифтом, которое можно применить в 1 клик). XCode работает абсолютно точно - анализатор вызывается с теми же флагами, что и собирающий проект компилятор. Другие среды и редакторы пока не используют clang по-нормальному, но я пишу патчи для ветки wip/clang в QtCreator и к весне, думаю, выйдет что-то юзабельное.

Clang хорош в диагноситке ошибок и в этом спотыкается только на boost, но может быть улучшен.

в) отсутствует модульность

планируется в стандарте 2017 года и есть в clang в порядке эксперимента.

г) язык слишком низкоуровневый.

неправда, у него библиотечный дизайн и разделение «низкоуровневый/высокоуровневый» для него не очень верно.

д) велика фрагментация.

И всё же лучше, чем наличие нескольких языков. В конце концов, код на ObjectiveC и код, использующий последние фичи c++11, одинаково хорошо идут на последнем XCode, а вот на другие платформы реальный код на ObjectiveC не перенести из-за отсутствия рантайма. GNUstep не идёт в ногу с изменениями языка ObjectiveC.

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)

Как по мне — или уже плюсы учи (последний стандарт) или уже за Java берись. D скорее всего не «выстрелит».

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

что ж мне никак не придёт книжка по коммон лиспу... заказывал чёрт знает когда.

ещё раз что ли заказать

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

Косяк в стандарте это когда у тебя одни его части противоречат другим или не стыкуются между собой соответствующим образом. Например: макросы и весь остальной код в си++.

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

// pen - красная кисть для рисования примитивов
QPen pen(QPen(Qt::red));

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

А вот лично я встречал только два противоречивых места в C++: оператор побитового сдвига >> и шаблоны

Ты путаешь грамматику и язык.

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

Не решают потому что автор написал свою опердень на сиплюсплюсе?

Автор на чем смог, на том и написал. И кстати, если Вы внимательно читали - пока не очень понятно как это можно сделать на чем то еще.

Может оно и не нужно никому кроме.

Ну конечно. Да и сами числодробилки никому ненужны, а суперкомпьютеры для числодробилок строят тока что бы балао пилить, ага.

Да и будут/небудут это не важно, могут/немогут вот что важно.

Это все лирика. Может ли Б-г сотворить такой камень, что не сможет его поднять? Покажете мне реализацию LRnLA на фортране/лиспе/Go с адекватной производительностью - поговорим. А пока что, напомню, Вы высказали сильный тезис:

«Я вообще не вижу ни одной ниши, где плюсам не было бы замены»

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

ЗЫ Давеча на алгоритмах, основанных на LRnLA удалось обогнать по производительности CuBLAS на задаче перемножения матриц. Если Вам это о чем то говорит;-)

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

это почему «не стыкуется»?

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

макросы в D стыкуются лучше: foo!(bar,baz)(a,b,c,d) как-то понятнее foo<bar,baz>(a,b,c,d)

Вы макросы от шаблонов не отличаете?

пример? что будет если этот пример сейчас запустить? что будет в gdc, ldc?

Да вот мне заняться больше нечем.

это какой линейкой ты собираешься мерять базовые задачи и функциональные точки?

А я ещё думал притворяется...

metadeus
()
Ответ на: комментарий от metar

А можно для слоупоков ссылочку на стандарт? Когда это D стандартизировали (и как это произошло до заморозки изменений в dmd и D2)?

digitalmars.com/d

Да уж никак не меньше трех лет им: точно помню, что в статье The Case for D Александреску что-то про них писал.

Да Александреску вообще писатель, блин, если бы он их ещё реализовал, а не только ездил с лекциями о том «как они рулят и все такое».

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

Друг, это ты к чему? Ты читал вообще о чем мы речь ведем?

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