LINUX.ORG.RU

[D-lang] Итоги и небольшой обзор о состоянии языка


0

0

Не многим более часа спустя, после боя колоколов, мною был создан тред о языке D. В содержании я описал свой относительно поверхностный взгляд на его текущее состояние. Благодаря некоторым личностям мне удалось взглянуть ближе на «внутреннее» состояние проекта, коммьюнити, языка, реализаций. И да, мне есть что высказать отдельно, в данном треде.

Маленькое введение:
На данный момент язык D является успешно воскрешаемым системным языком программирования высокого уровня. Хочется подчеркнуть два слова: «Системный», «Высокоуровневый». Данные слова редко когда можно встретить рядом. Так получилось что что «Системный» стало синонимом слов: «сложный», «ручной», «быстрый», «низкоуровневый». А «Высокоуровневый»: «медленный», «лёгкий», «большой», «безопасный».

Язык D включает в себя самое лучшее:

  • он быстрый - компиляция идёт напрямую в бинарный код, как в c, cpp, pascal
  • он лёгкий - синтаксис не сложен. Поддерживаются все возможности CPP. Внешне синтаксис и семантика почти идентичны аналогам в C#.
  • он безопасный - за памятью следит сборщик мусора, более не нужно следить за памятью вручную. А сам GC очень быстр ибо его создателями были и являются мировые специалисты по оптимизации. Благодаря конструкциям try, можно легко отловить все проблемы и ошибки, при этом легко оперируя объектами{ом} ошибки.

За пруфами - http://www.digitalmars.com/

Я узнал о том что у нас есть русское коммьюнити, которое активно занимается D - d@conference.jabber.ru
Я пообщался с людьми и смог узнать много нового. И так, обо всём по порядку.

Сейчас есть 2 реализации, на которые стоит обратить внимание:

  • DMD - официальная реализация. Сейчас активно развивается D2.0, который сейчас очень даже жив и используется всеми. Последний релиз был несколько дней назад. Сейчас данную реализацию используют почти все, в т.ч. и я.
  • LDC - фронтэнд к LLVM. В данный момент слабо развивается, не поддерживает D2.0. Как говорят в коммьюнити, лучшим вариантом для ldc будет вовсе отказ от цели «поддержка D2.0». Увы, это охначает что половина последних проектов прост не запустится и не будет запускаться на LDC. Лично я, пока, забыл про LDC.

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

По сему, всё что было и есть в D - творение рук человеческих, а не «лап коммерческих». Что удивительно, коммьюнити успело сделать уже многое:

  • Биндинг к GTK - gtkD. Развивается активно. Увы, сейчас есть пара багов из-за изменений в последнем DMD(ну не успели пока).
  • Биндинг к QT - qtD. Достаточно большая и сильная разработка. Заявлено что будет реализация биндингов ко всему функционалу QT - в т.ч. и DB, OGL etc.
  • Полноценный 3D-движок на opengl с поддержкой glsl - moonglide. Сейчас активно разрабатывается. О всех подробностях разработки всегда можно наблюдать на d@c.j.r.
  • Продвинутая система сборки - xfBuild. Сейчас всё больше и больше используется вместо dsss(ныне почти не развивается). Даёт действительно большие возможности. Отличная альтернатива make.
  • Интерпретатор+скриптовой язык - miniD. Уже вышел miniD2, который поддерживает D2.0!
  • Хорошая библиотека GUI для opengl-based приложений - hybrid. Сейчас используется в moonglide. Очень и очень хорошая либа.
  • 2D движок для игр с редактором - ArcLib. От создателя DreadMoon Linux!

И ещё десятки биндингов и хороших проектов: http://www.dsource.org/projects/ http://h3.team0xf.com/ http://talks.dprogramming.ru/

Всё это делает коммьюнити, при этом не просто как «лисперы» и «хаскелеводы», ибо оно нужно и иначе никак, а так, ради забавы. Всё это развивается, несколько людей думают заняться хорошим ORM, кто-то хочет сделать нормальный биндинг python, кто-то переписывает свой проект на D. Язык имеет большой потенциал и развитие идёт. Одна проблема - люди. Цель данного треда - призвать новых людей, заинтересовать всех кого можно. Лично я сейчас прекратил разработку редактора на python и начинаю изучать глубже сам язык D чтобы помочь gtkD в написании биндингов.

Если у вас есть лишнее время, вам надоело считать байты на сях, вы уже погрязли в скобках лиспа и не знаете как из них выбраться, если вы осознали что до релиза(а не промежуточных отчётов-сырцов) UnladenSwallow ждать ещё не мало, если вам надоело что очередной билд вашего приложения течёт из-за того что вы забыли добавить ещё 2-3 звезды(разыменование) в начало переменной, то

присоединяйтесь к нам: d@conference.jabber.ru.

Надпись на этикетке: жир - 0%, бЕлки - ни одной, ккал - овер9к



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

>Ой б-же б-же, забыл ответить. Как я мог...

все нормально :)

Ну тогда не стоит уходить за пределы этой ячейки.

ну так Vala ни на что и не претендует. Такая тулза гномеров и гномеры ей рады.

Я тоже, фигово быть нами =/

угу. верно.

Как языка - может быть. Но язык это ещё не всё.

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

Всё проще. D обратносовместим с C. Точно как и C++ с С. Т.е. ЧИСТО также.

это хорошо.

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

>поэтому когда D обрастет биндингами, документацией и поддержкой IDE мне нужно будет взглянуть еще раз.
Буду только рад :)
Пока стараемся всем коммьюнити развить прикладное ПО на Ди. Вроде, пока успешно :)

tia
() автор топика
Ответ на: комментарий от den73

>> D обратносовместим с C

Я не понял. Значит, в D есть и препроцессор, и malloc?


Все компиляторы поддерживают C ABI через extern(C) и в D есть все типы языка C, включая указатели и структуры. Использовать функцию можно скопировав и немного поправив её из заголовок .h файла.

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

> И как сломается при такой замене Abi этой функции и замыкания всех её вызывающих?
Примерно вот так:

(defun ff1 (x) x)

FF1

(compile 'ff1)

FF1
NIL
NIL

(defun ff2 (x) (lambda () (ff1 x)))

FF2

(compile 'ff2)

FF2
NIL
NIL

(defparameter *my-closure* (ff2 5))

*MY-CLOSURE*

(funcall *my-closure*)

5

(defun ff1 (x y) (+ x y))

FF1

(funcall *my-closure*)


Error: Call ((LAMBDA (#:X #:Y) (DECLARE (SPECIAL:SOURCE #) (HARLEQUIN-COMMON-LISP:LAMBDA-NAME FF1)) (BLOCK #:FF1 (+ #:X #:Y))) 5) has the wrong number of arguments.

Т.е., мягко, без сегфолтов. Конечно, это без (optimize speed). Хотя согласен, есть такая проблема. Но ведь и без замыканий вызов со старой сигнатурой может вызвать ошибку времени выполнения. Да и если старая версия функции была ошибочной и произвела какие-то вычисления, то след этих вычислений может остаться. Лично я обычно меняю функцию путём добавления новых параметров-ключей, а замыкания использую редко. Поэтому, у меня никогда ещё не было подобной проблемы и я даже не знал, как себя поведёт лисп в этой ситуации, до сегодняшнего дня.

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

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

> Препроцессор к языку отношения не имеет
Хорошо, D обратно совместим с C, то, наверное, на нём можно скомпилировать «Hello, World» на С. Я не очень понимаю, как это можно сделать без препроцессора.

malloc - обычная функция

Быть ей может помешать то, что нарушается безопасность. Получается, мы имеем четыре вида памяти, а не три. Куча D и куча C. Причём, ссылки из C в D напрямую вряд ли возможны (они протухнут после сборки мусора), а ссылки из D в C сводят к нулю безопасность языка. Вот я и не понимаю: столько стараний, а результат какой?

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

> Хорошо, D обратно совместим с C

D, как и C++, не обратно совместим с C. Прошу простить tia за ошибочную информацию, он ещё маленький. И двух недель нет. ^_^

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

Можешь, но придётся пропустить этот файл через C Preprocessor (cpp foo.d), обернуть строку в extern(C) и надеяться, что там не найдётся ничего такого, что не поддерживает D. Например, массивов и структур переменной длинны, которые, кстати, и C++ не поддерживает.

Обычно вместо этого .h пропускают через утилитку, делающую из него .d.

А в данном случае можешь просто написать import std.c.stdio;

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

Ладно, спасибо за разъяснения, теперь я окончательно понял, что для меня D не подходит. Видимо, нужно копать opencxx.

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

> Ну так я могу написать #include <stdio.h> или нет?

в голом виде — нет. Но можно написать модуль-враппер, который через extern(C) подключит все те же прототипы. В Dylan, кстати, написать можно: http://www.opendylan.org/melange.phtml http://www.opendylan.org/old-docs/maker-out/melange.htm

[code] define interface #include <stdio.h> end interface; [/code]

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

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

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