LINUX.ORG.RU

Кто знает объективные критерии качества языка программирования, или хотя бы синтаксиса?


0

0

1. Наличие таковых. Некоторые утверждают, что критерии качества языка программирования субъективны. Но это же не поэзия <неразборчиво>!

2. Мое понимание критериев качества языка программирования:

А. семантика -- тут вопрос в том, насколько язык умеет оперировать абстракциями -- т.е. создавать новые и правильно (верифицируемо) использовать готовые.

Б. синтаксис языка. Тут у меня есть точка зрения, но интересно послушать чужие мнения.

В. возможность цеплять чужие либы.

3. Ну и собственно вопрос. По каким ключевым словам на английском гуглить?

По-русски гуглиться мало, и достаточно хлипкие утверждения.

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

> А экономические критерии являются объективными?

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

www_linux_org_ru ★★★★★
() автор топика

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

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

красота кода ещё зависит от кодера, ага?

А так говнокодер легко превратит в говно вашу любимую яву/си/пайтон/баш/вотевеар.

world
()

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

Субъективные: всё остальное

Правильный ответ: С/С++ лучший (и не надо ныть про сборщики мусора и прочую ересь, при наличии прямых рук это лучший инструмент)

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

> (и не надо ныть про сборщики мусора и прочую ересь, при наличии прямых рук это лучший инструмент)

Мне кажется, что сборшик мусора можно аккуратно прикрутить к С++. Т.е. не нарушая возможности оперировать не-gc-указателями.

www_linux_org_ru ★★★★★
() автор топика

качество - совокупность потребительских свойств товара
(критерии качества - разновидность масла масленного)

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

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

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

пока писал эту ахинею, вспомнилось или подумалось, что критерии качества должны быть количественными, поэтому могу предложить взять несколько языков и сравнить, количество ключевых слов или групп ключевых слов(и выделить, что человек может оперировать 7 +- 2 чанка и как-то это всё совокупить), несколько алгоритмов и кол-во строк, которое понадобится для закодирования, частота использования в мире(что-то типа того)...
больше ничего полезного в голову не идёт, но ещё какая-нить бредятина придёт, обязательно запощу

p.s. это не для диплома случаем?

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

> p.s. это не для диплома случаем?

нет. захотелось небольшой такой syntax and type aware preprocessor написать с выхлопом в С++ (или даже С, но это не проще, а сложнее).

> количество ключевых слов или групп ключевых слов

Это как раз находится гуглем.

> несколько алгоритмов и кол-во строк, которое понадобится для закодирования, ...

Для одноразовых программ (а-ля однострочник на перле) это критерий.

Для программ посерьезнее... я боюсь всех распугать своими разговорами про абстракции :-)

Ну и еще... я все жду, как кто-нить скажет например "в синтаксисе важны 1. ключевые слова и 2. возможность использовать слова в правильном порядке, т.е. не something.moveTo(new_position), а move( something to=new_position)".

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

>возможность использовать слова в правильном порядке, т.е. не something.moveTo(new_position), а move( something to=new_position)".

Мастер Йода с тобой несогласен тут. Тогда самый реальный это сравнить формальные языки с естественными и выявить какой естественнее :)

dimon555 ★★★★★
()

читайте книги, в них рулез:
http://lucacardelli.name/Papers/BadPropertiesOfOO.html

Consider the following (informal) metrics:

1. Economy of execution. How fast does a program run?
2. Economy of compilation. How long does it take to go from sources to executables?
3. Economy of small-scale development. How hard must an individual programmer work?
4. Economy of large-scale development. How hard must a team of programmers work?
5. Economy of language features. How hard is it to learn or use a programming language? 

в тексте есть пояснения к метрикам и некоторые их приложения

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

> new_position something move-to

Вопрос не в *конкретном* порядке слов, а в том, что язык его не должен навязывать.

(new_position, something).move_to()

Хотя я предпочел бы, если уж...

something.move_to(new_position).rotate_by(45)

Ну и фортовская странная запись -- это отнюдь не достостоинства. Достоинства -- это например x [ 123 456 + SOMETHING ] * ( если я скобки не перепутал )

www_linux_org_ru ★★★★★
() автор топика

Критерии не связанные с языком непосредственно: 1) Комьюнити (адекватное, многочисленное) 2) Платформа для разработки - IDE, степень надежности либ, документированность и тп.

Связанные с языком: 1) Статическая типизация 2) Возможность "расширить" если чего-то не будет хватать 3) Большая степень защищенности от дурака.

ЗЫ. Итого: 1 место присуждается Java (с расширениями туго - горы XML, но тем не менее) 2 место присуждается С++ (защиту от дурака можно прикрутить при желании)

ЗЗЫ. Однако есть критерий, который перекрывает все остальные - количество фана, которое получаешь при написании=))))) Приятно писать код - язык хорош. Сплошные подводные камни, матюки, язык плох (ну или не дорос до него просто, в любом случае он не для тебя)

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

> читайте книги, в них рулез:

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

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

>Ага, о том и спрашиваю. На сайте у него есть интересные заголовки. В самой статье в пдф-ке уж больно совсем мало.

ну это популярная статья всё-таки; серъёзно он про ОО пишет, как-никак. ну и про биологию

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

> Связанные с языком: 1) Статическая типизация

и local type inference обязательно

> 2) Возможность "расширить" если чего-то не будет хватать

мне тут с++ больше всего жмет, а лисповский подход к расширению (макросы) считаю неправильным

> 3) Большая степень защищенности от дурака.

Тут есть куча сторон:

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

- возможность запретить опасные фичи (например, приводящие к динамической аллокации памяти)

- понятные сообщения об ошибках

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

> ну это популярная статья всё-таки; серъёзно он про ОО пишет, как-никак.

Ну это типично для исследователя. "А давай-ка я подробно изучу... ООП". А зачем ООП нужно (т.е. те самые критерии качества языка программирования), и может вовсе не ООП надо подробно изучать, а effect system?

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

>> Связанные с языком: 1) Статическая типизация

>и local type inference обязательно

если кто-то добавит в замечательный event-oriented язык Tcl статическую типизацию, он перестанет быть таким замечательным; то же самое, в общем-то, про Erlang. с подобным подходом выведения "абсолютных критериев" для "универсального языка" (область применения ты не указываешь, так что считаю что она не выражена) полезность твоих действий стремится к нулю

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

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

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

>А зачем ООП нужно (т.е. те самые критерии качества языка программирования), и может вовсе не ООП надо подробно изучать, а effect system?

ты статьи его почитай, что ли, для начала. умник нашёлся

jtootf ★★★★★
()

Можешь ещё сравнивать языки с основными моделями вычислений: машиной Поста. машиной Тьюринга, Диофантовами выражениями и рекурсивными функциями

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

> ты статьи его почитай, что ли, для начала. умник нашёлся

Да, умник, и да, нашелся.

Кстати, насчет прошлого твоего несогласия со мной -- вот тебе ссылка http://www.cs.berkeley.edu/~daw/papers/pure-ccs08.pdf "Verifiable Functional Purity in Java". Я считал это настолько тривиальным, что и доказательство можно и не приводить, хотя детали там почитать интересно. Там они еще парочку дополнительных свойств предлагают.

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

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

> Можешь ещё сравнивать языки с основными моделями вычислений:

Я правда не курсовик делаю :-)

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

> Тогда самый реальный это сравнить формальные языки с естественными и выявить какой естественнее :)

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

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

> если кто-то добавит в замечательный event-oriented язык Tcl статическую типизацию, он перестанет быть таким замечательным

Пример маленького "плохого кода" можно? При условии, что local type inference у нас есть.

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

>в правильном порядке, т.е. не something.moveTo(new_position), а move( something to=new_position)"

Это субъективно. Слыхал, что китайцам привычнее первый вариант. При попытке объективизации число китайцев определит "правильным" именно его.

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

> Это субъективно. Слыхал, что китайцам привычнее первый вариант. При попытке объективизации число китайцев определит "правильным" именно его.

Тогда это называется "объективно зависит от естественного языка читателя". Ну и повторюсь -- язык программирования не должен навязывать этот порядок.

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

>детали там почитать интересно

почитаю, хотя вряд ли там есть что-то большее, чем в том же Slice

>доказательства мне не интересны

жаль

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

>Пример маленького "плохого кода" можно? При условии, что local type inference у нас есть.

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

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

>язык программирования не должен навязывать этот порядок

ты же вроде выступал против вариабельного синтаксиса?

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

>ты же вроде выступал против вариабельного синтаксиса?

Луна в каком тогда знаке зодиака была^W^W^W^W^W^W^W В этом треде или раньше?

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

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

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

1. гетерогенный список значений -- на плюсах пишется элементарно, я вот даже den73 работающую прогу постил. На яве м.б. проблемы, ибо боксинг. На С# не знаю, но дженерики там по слухам разные для значений и не-значений.

2. endianess -- а нельзя в результате просто переставить байты? Если нельзя, то рефлекшен и где подвох? (в плюсах в стандарте рефлекшена нет, но есть на основе gccxml)

______________________________

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

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

>1. гетерогенный список значений -- на плюсах пишется элементарно

>2. endianess -- а нельзя в результате просто переставить байты?

можно. я нигде не говорил что нельзя. но станет намного менее удобно,
вот в чём беда

>если ввести типизацию в тикль

динамическая типизация там есть

>просил пример кода на тикле, который вдруг испортится

set str1 [list $messageLength]
set str2 [list [PF MTPTYPE_MOSTMessage] \
               [PF MTP_SUBTYPE_UNUSED] \
               0 0 \
               $fblock \
               $instance]
set str3 [list $fid]
set str4 [list $optype \
               [PF TRANS_TX_CONTROL_CHANNEL]]
                 
set res [binary format S1c6S1c2c[llength $data] $str1 $str2 $str3 $str4 $data]

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

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

>В этом треде или раньше?

раньше

>Синтаксис может быть вариабельным по-разному.

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

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

>generic, multithreaded, и reflective - это парадигмы %)

*с олимпийским спокойствием* а я что, употреблял слово "парадигма"? :)

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

>tacit

ну, APL-подобные языки с чистой совестью можно считать point-free-ориентированными

jtootf ★★★★★
()

Что качественнее: финский, шведский, арамейский, латынь или фарси? Объективно. :D

sf ★★★
()

Всё зависит от объектива ...

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

> Что качественнее: финский, шведский, арамейский, латынь или фарси? Объективно. :D

Да без проблем! Только ты сначала выкати объективные критерии оценки. (собственно, их для ЯП я и спрашиваю).

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

> set str1 [list $messageLength] > set ... > set ... > set ... > set res [binary format S1c6S1c2c[llength $data] $str1 $str2 $str3 $str4 $data]

Не вижу никакого подвоха. Если тут действительно надо создавать гетерогенные списки -- система типов тут не мешает. Однако подозрения закрадывается, что код кривой, особенно вот из-за этого -- S1c6S1c2c[llength $data] -- языки с типами вычислили бы эту фигню *сами*.

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

Задачу не понял.

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

> Что качественнее, финка, шведка, итальянка или мусульманка?

Выкати объективные критерии. Например, "отношение длины ног к росту".

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

>языки с типами вычислили бы эту фигню *сами*

покажи мне язык с типами, в котором была бы такая фигня, с чем-то вроде Word[big-endian]. а кайф этой конструкции, вообще говоря, именно в том, что эта строка вычисляется не сама - и ты в любой момент можешь её подстроить так, как тебе нужно. проверится только общее количество байт

>Задачу не понял.

void f(int, double, int);

и пусть есть гетерогенный список vec, хранящий три значения - int, double и int. задача - передать функции значения из вектора, не используя явно количество аргументов:

f({*}vec) должно превратиться в f(vec[0], vec[1], vec[2])

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