LINUX.ORG.RU

Facebook платит за устранение багов в реализации языка программирования D

 ,


1

5

На данный момент размер вознаграждения за исправление багов в общей сложности насчитывает 1500$. Со слов Александреску, они будут внимательно смотреть, как это скажется на сообществе.

Одно из определений языка D: «D — это то, чем должен был быть С++». Вокруг языка сломалось уже много копий, но несмотря на это язык продолжает жить и развиваться, демонстрируя свои замечательные возможности и расширяя свое сообщество. Все больше разработчиков из мира С++/Java пристально следят за развитием языка и стараются держать руку на пульсе. Должен отметить, что сообщество D не является ортодоксальным и фундаменталистким (что бы это ни значило), и нередко в ньюсгруппах можно увидеть, что в ответ на вопрос, можно ли использовать D для решения определенной задачи, члены сообщества рекомендуют задавшему вопрос использовать другой язык, отличный от D. Так что в лице сообщества D любой найдет грамотных специалистов своего дела, готовых ответить на нужный вопрос кратко и по существу. Все это делает развитие языка неизбежным и неотвратимым.

Список багов с ценами за их устранение

>>> Оригинал новости

★★

Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 6)

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

Возможность линковки с C это не проблема языка, тем более что такая возможность есть.

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

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

Вы таки в курсе, что программы пишутся не для услады программиста?

Это непрограммисты так думают, а их мнение неважно

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

А зачем? Я тоже уверен, что D наголову превосходит С++, но я также уверен, что если вас устраивает С++ и вы решаете с его помощью все необходимые задачи, вы его знаете и пользуете - то вам D не нужен. Как не нужен и любой другой язык. Вот когда не будет хватать, тогда и будете искать в других языках то, чего не хватает. А сейчас бесполезно вам любой тезис подтверждать - ничего он для вас не скажет. Поэтому используйте С++ и не трогайте D - вам он не нужен.

Ну как сказать. Спорить с тем, что С++ я знаю лучше, чем D и отсюда часть претензий возникает, не буду.

С другой стороны, тут возникает забавная ситуация. Часто говорят «D = улучшенная во всём версия С++ лишенная всех его недостатков (который и правда хватает)». А как посмотришь поближе, то получается, что местами это вообще совсем другое, местами совсем не лучше. Плюс (естественный) недостаток библиотек/инфраструктуры. В итоге получается забавно - языки, которые и не обещают мне «избавление от всех проблем» выглядят даже интереснее. Хотя бы потому что нет завышенных ожиданий и проще на них смотреть не через призму имеющихся привычек.

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

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

Кстати, facebook платит за баги в инструменте, а не в языке в вашем понимании.

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

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

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

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

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

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

Именно.

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

Возможности линковки с C-lib вполне достаточно.

Для чего? Ты представляешь сколько работы надо, чтоб нормально использовать, например, GTK? Да, есть обертка, как я и говорил, и да - они уже целый месяц как поддерживают GTK3, оперативность зашкаливает, и это одна из самых популярных библиотек.

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

А хаскиль исчё идеальнее :)

Был бы С++ идеален, не выпускались бы к его стандарту каждый год дополнения.
Да и какие дополнения? Которые во всех остальных «неидеальных» ЯП уж как сто лет в обед имеются.

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

Ну или, если хочется именно в _стандартной библиотеке_, то бери Racket (или Typed Racket с типизацией)

Меня это давно интересует, но смущает две вещи:

1. Так понимаю, что это всё-таки не основной диалект и непонятно сколько усилий ему уделять будут.

2. Что-то типа шаблонов изобразить нельзя (или ошибаюсь?). То есть что-то типа такого:

(define: (test [a : T] [b : T]) : T
  (+ a b))
«Объединения» (U) не катят, так как типы со своей функцией «+» могут добавляться и каждый раз их дописывать - решение не расширяемое и неудобное.

Правда есть «полиморфные функции»:

(define: (T) (test [a : T] [b : T]) : T
  (apply + (list a b)))
Но тут ряд неудобств. Во первых, просто плюс использовать уже нельзя, надо через apply изворачиваться. Во вторых, часть статических проверок типов мы теряем. Вот тут ошибка уже в рантайме будет:
(define: (mega-test) : Void
  (test 1 2)
  (test "eee" "aaa")
  (void))

SBCL declare type в качестве типизации?

А declare type в SBCL именно статически проверяется?

DarkEld3r ★★★★★
()

А где они там у себя Ди используют?

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

значит, его эстетические чувства при выборе языка учитывать необходимо

Херовое у вас представление о программистах.

Нормальные разрабы:
1. Знают домен разработки и свою цену.
.... (долго ничего нет)
2,3,4...7 - Знают один (несколько) ЯП, его (их) стандарт, теорию и техники разработки ПО, и умение выбирать один из под задачи

....
100500 - пресловутая эстетика

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

Этот не проблема языка.

как минимум проблема D в том, что его настойчиво позиционируют как «убийцу» плюсов и сравнивают с ними, хотя за то время, что D обгонял («на бумаге») C++, появилось большое кол-во ЯП, которые потеснили С++, а там где плюсы остались (тесная интеграция с сишным кодом, критичный к производительности софт или переносимость на большинство платформ) D просто ничего не светит

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

Этот не проблема языка.

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

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

Я что-то слышал, что там перегрузки функций не планируется.

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

чем аргументируют?

Секция Rationale в мануале пуста, а в списке рассылки обсуждаются совсем другие вещи :)

tailgunner ★★★★★
()

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

lucentcode ★★★★★
()

На данный момент размер вознаграждения за исправление багов в общей сложности насчитывает 1500$.

Что уж не лайк от Цукерберга? Да-да, по мотивам известного эксперимента.

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

Тут дело не в языке, а в реализации. В Java и C# вложены огромные ресурсы, в отличие от D.

да, в том числе и потому, что авторы D просто опоздали со своим ЯП, и даже больше - D не может им ничего противопоставить, потому и приходится оставшимся у разбитого корыта авторам D продолжать соревноваться с уже нишевым С++, который тоже между прочим не стоит на месте

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

А declare type в SBCL именно статически проверяется?

Разумеется.

$ cat infer.lisp
(defun foo (x)
  (+ x 1))

(defun bar (y)
  (string= y (foo y)))


$ sbcl --eval '(compile-file "infer.lisp")'
This is SBCL 1.1.8, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
; compiling file "/home/monk/languages/lisp/test/infer.lisp" (written 17 NOV 2013 06:28:35 PM):
; compiling (DEFUN FOO ...)
; compiling (DEFUN BAR ...)
; file: /home/monk/languages/lisp/test/infer.lisp
; in: DEFUN BAR
;     (STRING= Y (FOO Y))
;
; note: deleting unreachable code
;
; caught WARNING:
;   Derived type of (STRING= Y (FOO Y)) is
;     (VALUES NUMBER &OPTIONAL),
;   conflicting with its asserted type
;     (OR (VECTOR CHARACTER) (VECTOR NIL) BASE-STRING SYMBOL CHARACTER).
;   See also:
;     The SBCL Manual, Node "Handling of Types"
;
; compilation unit finished
;   caught 1 WARNING condition
;   printed 1 note


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

Не правда. Здесь вопрос больше политический, чем технический. Технически D лучше, С++. Java и С# из другой оперы.

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

AFAIK, ее нет и точно никто не обсуждает ее введение

Жаль.

Правда, по опыту программирования на Python оно и не сильно нужно.

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

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

Не правда. Здесь вопрос больше политический, чем технический.

Так ты аргументируй, чем D лучше того же C#?

Технически D лучше, С++

я уже говорил - D не конкурент плюсам

Java и С# из другой оперы.

а в какой опере ты видишь D?

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

когда гуглил, то находил что-то про перегрузку операторов

«Перегрузка операторов» делается через специальные встроенные (language items) трейты - через методы, фактически. Конечно, разные типы могут иметь одноименные методы с разными сигнатурами.

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

Разумеется.

Интересно. Жаль что это всё-таки предупреждение.

А про racket что-нибудь скажешь? Или ты именно лиспер? (:

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

надо через apply изворачиваться

Во вторых, часть статических проверок типов мы теряем

Так потому и теряем, что через apply. Ты можешь по-человечески сказать, что должно проверяться?

(define: (T) (test [a : T] [b : T]) : T переводится как «для всех типов T test от a и b этих типов должен вернуть этот же тип». Но для + это не верно. Например, если тип Zero или One, или даже Fixnum.

Даже если выкинуть проверку возвращаемого типа, то неясно, что должно проверяться. (test 1 2) это ошибка или нет? Ведь 1 можно считать типа One, а можно Fixnum. Поэтому утверждение «эти две переменные с разными значениями имеют один тип» вообще бессмысленно. Если тип = «множество из одного значения», то всегда ответ «нет», если тип = Any, то всегда «да».

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

Технически D лучше С++

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

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

Жаль что это всё-таки предупреждение.

При использовании ASDF предупреждение будет трактоваться как ошибка сборки. А предупреждением оно должно быть, так как на момент компиляции bar ошибка есть, но нет гарантии, что ты сейчас не скомпилируешь следующий файл, в котором переопределишь foo на string-upcase, например. И уже ошибки нет.

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

так как типы со своей функцией «+» могут добавляться

Увы. В scheme не могут. Это же не defgeneric из CLOS. Если функция определена, то доопределить её нельзя (разве что через set!).

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

На момент создания и разгона ( где-то в 2008) D был интересен - но он стал неактуален после появления C++11...

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

хотя за то время, что D обгонял («на бумаге») C++, появилось большое кол-во ЯП, которые потеснили С++

Что это за языки-то такие, да еще в большом количестве?

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

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

monk ★★★★★
()

D — это то, чем должен был быть С++

Эта избитая фраза порядком уже надоела.

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

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

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

Так потому и теряем, что через apply. Ты можешь по-человечески сказать, что должно проверяться?

Проще всего будет на примере приплюснутых шаблонов:

template<typename T>
T test(T a, T b)
{
  return a + b;
}
То есть хочу написать функцию, которая складывает два обьекта одного типа и возвращает результат такого же типа. Соответственно, эта функция может быть хоть в либе, но с пользовательскими типами будет работать без модификаций.

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

«Должно» проверяться, что оба аргумента и возвращаемое значения одного типа. Из текста ошибки видно, что плюс работает с определёнными типами:

Zero Zero -> Zero
One Zero -> One
Zero One -> One
Positive-Byte Zero -> Positive-Byte
Zero Positive-Byte -> Positive-Byte
Byte Zero -> Byte
Zero Byte -> Byte
Positive-Index Zero -> Positive-Index
Zero Positive-Index -> Positive-Index
Index Zero -> Index
Zero Index -> Index
Positive-Fixnum Zero -> Positive-Fixnum
Zero Positive-Fixnum -> Positive-Fixnum
Nonnegative-Fixnum Zero -> Nonnegative-Fixnum
Zero Nonnegative-Fixnum -> Nonnegative-Fixnum
Negative-Fixnum Zero -> Negative-Fixnum
Zero Negative-Fixnum -> Negative-Fixnum
Nonpositive-Fixnum Zero -> Nonpositive-Fixnum
Zero Nonpositive-Fixnum -> Nonpositive-Fixnum
Fixnum Zero -> Fixnum
Zero Fixnum -> Fixnum
Positive-Byte Positive-Byte -> Positive-Index
Byte Byte -> Index
Positive-Byte Positive-Byte Positive-Byte -> Positive-Index
Byte Byte Byte -> Index
Positive-Index Index -> Positive-Fixnum
Index Positive-Index -> Positive-Fixnum
Positive-Index Index Index -> Positive-Fixnum
Index Positive-Index Index -> Positive-Fixnum
Any, очевидно, не подходит.

Но для + это не верно. Например, если тип Zero или One, или даже Fixnum.

Так в чём проблема? Пусть будет ошибка при использовании именно аргументов этих типов.

То есть берём «минимально подходящий» тип к которому могут привестись оба аргумента без потерь. Не получается - ну ошибка и здорово.

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

Так понимаю, что это всё-таки не основной диалект и непонятно сколько усилий ему уделять будут.

Весь racket/base в типизированный перенесли. А всё остальное зависит только от пользователей. На самом деле всегда можно прописать сигнатуры для тех функций, что нужны. Сам по себе движок вывода и проверки типов работает очень надёжно.

Что-то типа шаблонов изобразить нельзя

Кажется начал понимать... Шаблонов в смысле C++? Когда тело функции зависит от типа параметра? Нельзя. Для этого есть классы.

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

нишевым

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

какая же это ниша?

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

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

man Qt, это если надо гуй, в том числе под мобильные платформы (и в том числе там, где «переносимой» жабки нет), а если не надо, то непонятно в чем вообще проблема

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