LINUX.ORG.RU

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


0

0

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

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

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

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

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

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

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

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

>И кто-то этого не знает?

все знают. вот только толку от этого знания - ноль. слишком общий термин

>В примере min мы абстрагируемся от всех сторон

а ещё мы производим абстракцию вычислительного процесса с помощью самого min (вводим процедуру). а ещё мы используем абстракцию "<", скрывающую предикат отношений. а ещё мы используем абстракцию class, скрывающую...и так далее

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

>C любыми и до упора займет слишком много времени :-)

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

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

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

Та, что выдает ошибки программеру, и та, которая инстанциирует абстракции^W шаблоны.

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

> созданный невежественным, но самоуверенным недоучкой

Первый признак умного человека -- оценивать, хотя бы приблизительно, объем того, что он не знает.

> ещё один квадроколёсный велосипед

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

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

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

>Та, что выдает ошибки программеру, и та, которая инстанциирует абстракции^W шаблоны.

то есть тайпчекер? боюсь, на его уровне, такого понятия как "абстракция" применительно к шаблонам, не будет

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

>Удивительно, насколько плохие языки тем не менее живы.

это повод их плодить?

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

к которым ты относишь меня, интересно? :) кстати, образования у меня нет, тут можешь гнобить до упора

>Первый признак умного человека -- оценивать, хотя бы приблизительно, объем того, что он не знает.

и что ты этим хотел сказать? что ты это делать умеешь?

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

> а ещё мы производим абстракцию вычислительного процесса с помощью самого min (вводим процедуру)

А вот с этим я не соглашусь.

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

>А вот с этим я не соглашусь.

аргументация? вот товарищи Абельсон и Сассман со мной вроде согласны:

Now we will learn about procedure definitions, a much more powerful
abstraction technique by which a compound operation can be given a
name and then referred to as a unit.

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

> к которым ты относишь меня, интересно? :) кстати, образования у меня нет, тут можешь гнобить до упора

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

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

> аргументация?

1. чисто техническая придирка: min это не процедура, это шаблон процедуры, у нее например невозможно взять адрес.

2. а теперь вопрос по сути: min должна быть абстрацией вычислительного процесса (т.е. таки мы должны иметь возможность взять ее адрес и сделать на него jump/call) или она должна быть абстракцией чего-то другого?

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

> и что ты этим хотел сказать? что ты это делать умеешь?

Что я это делаю сейчас. В частности, по твоему списку "что надо знать и насколько" можно сделать оценку "сколько я не знаю".

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

>min это не процедура

это с точки зрения C++ она не процедура. а так, как абстракция, вполне себе

>min должна быть абстрацией вычислительного процесса (т.е. таки мы должны иметь возможность взять ее адрес и сделать на него jump/call)

блок-схема - это тоже абстракция вычислительного процесса; и никаких тебе jump/call, сплошные рисуночки. аппелируешь к абстракциям, а мыслишь в терминах C++ :-/

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

> то есть тайпчекер? боюсь, на его уровне, такого понятия как "абстракция" применительно к шаблонам, не будет

Именно на его уровне.

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

> http://cs.wellesley.edu/~fturbak/pubs/6821/current/contents-nov22.pdf

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

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

>Cудя по главе про эффекты, книжка полезная

читаю, пока что весьма по нраву

>на рапидшаре есть, причем вроде как полный вариант?

у меня, опять же, в бумаге. дашь ссылку - сравню

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

> у меня, опять же, в бумаге. дашь ссылку - сравню

Запостил, потом подумал что варез, и удалил ;-)

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

"A" - единственное что более-менее подходит. "Б" не показатель. К любому языку можно прикрутить любой синтаксис. "В" это вообще не свойство языка(кроме специализированных встраиваемых языков, пожалуй), это свойство реализации.

guest-3484-2009
()
Ответ на: комментарий от guest-3484-2009

>Классический случай "C++ causes brain damage"

а я всё ждал, пока кто-нибудь это скажет :)

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

> "Б" не показатель. К любому языку можно прикрутить любой синтаксис.

Попробуй прикрути другой синтаксис к С++ (это действительно нужно).

Сколько человеко-лет тебе для этого потребуется?

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

> К любому языку можно прикрутить любой синтаксис.

Ты не скажешь, что "можно прикрутить к любому синаксису любую семантику"? Какое упущение %)

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

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

>Попробуй прикрути другой синтаксис к С++ (это действительно нужно).

А это не проблема. Более того, многие и так пишут на C++ если не в XML, то как минимум на чем-то более удобночитаемом, сгенерированном lex/yacc.

guest-3484-2009
()
Ответ на: комментарий от guest-3484-2009

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

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

> Скажем, в Dylan совсем мало круглых скобок, однако он остается лиспом.

Дооо... если учесть, что "просто Лиспа" не существует %) Так можно сказать, что и Питон - тоже Лисп без скобочек.

tailgunner ★★★★★
()
Ответ на: комментарий от guest-3484-2009

Вот мы и перешли к обсуждению синтаксиса...

> А это не проблема. Более того, многие и так пишут на C++ если не в XML, то как минимум на чем-то более удобночитаемом, сгенерированном lex/yacc.

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

2. Синтаксис С/С++ там не изменился, только добавился довесок.

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

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

guest-3484-2009
()
Ответ на: комментарий от www_linux_org_ru

>1. Если я в яке вызову сишную функцию, подав ей аргументы неправильных типов, то ругнется компилятор С, а вовсе не як. Это можно назвать препроцессором, но никак не полным языком. Ну и? Я говорю о том, что синтаксис это только обвесок.

guest-3484-2009
()
Ответ на: комментарий от guest-3484-2009

> Питон это не лисп потому как он не наследует главное свойство лиспа - программа это данные.

И заметь - привинтить это нельзя.

> Мало того, что были, так уже время экспериментов прошло давно

И тебе, конечно, нетрудно привести примеры?

tailgunner ★★★★★
()
Ответ на: комментарий от guest-3484-2009

> Знакомо словосочетание "генераторы парсеров"?

А что-нибудь конкретное будет? Ну в духе "синтаксис языка X привинтили к языку Y". Только не на уровне "Дилан - это Лисп".

А про генераторы парсеров я слышал краем уха. Только не понимаю, какое они имеют отношение к свинчиванию _готовых_ синтаксисов и семантик.

tailgunner ★★★★★
()
Ответ на: комментарий от guest-3484-2009

> Ну и? Я говорю о том, что синтаксис это только обвесок.

Это только в том случае, если язык был специально спроектирован под это. С++ не был, и лисп видимо тоже.

Более-менее подходящим примером такого будет ассемблер СLI (C#).

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

> Знакомо словосочетание "генераторы парсеров"?

yacc & bison на выходе тебе дадут парсер, в крайнем случае -- препроцессор, но НЕ новый синтаксис для языка.

З.Ы. Кроме того, щас лучше юзать PEG.

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

>yacc & bison на выходе тебе дадут парсер, в крайнем случае -- препроцессор, но НЕ новый синтаксис для языка.

много думал. а что же даст языку синтаксис?

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

>Питон это не лисп потому как он не наследует главное свойство лиспа - программа это данные

http://en.wikipedia.org/wiki/Homoiconic

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

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

> тут, правда, и семантику малость расширили, ну да это уже мелочи

ага, расширили. феликс не позволяет никаких привидений типов, кроме как из T в const T.

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

>не позволяет никаких привидений типов, кроме как из T в const T

ну, можно подпатчить если нужно :)

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

> много думал. а что же даст языку синтаксис?

не больше 54 секунд, как я погляжу.

парсер (и даже препроцессор) не даст -- надо еще как-то заюзать родной type checker (что в случае gcc возможно и реально)

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

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

> ну, можно подпатчить если нужно :)

У феликса семантика другая, чем у плюсов. Он собственно для другой семантики и создавался.

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

>Он собственно для другой семантики и создавался.

ну дык я не спорю. но синтаксис же прикрутили, n'est-ce pas?

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

>парсер (и даже препроцессор) не даст -- надо еще как-то заюзать родной type checker

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

>разбираться в сообщениях об ошибках

это да, но это уже отдельная задача, к "привинчиванию синтаксиса" имеющая весьма отдалённое отношение

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

> но синтаксис же прикрутили, n'est-ce pas?

К другой семантике :)

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

> ну дык я не спорю. но синтаксис же прикрутили, n'est-ce pas?

прикрутили? то есть он может использовать буст из своих программ и выдавать ошибки при его использовании в терминах *своего* синтаксиса, а не плюсового?

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

> если мы не меняем семантику, то не меняем и типы. и тайпчекер будет тем самым

ты упорно пытаешься написание препроцессора назвать "привинчиванием синтаксиса"

никто не спорит, что препроцессор написать легко, а вот "привинтить синтаксис" означает привинтить так же бесшовно, как и родной.

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

>ты упорно пытаешься написание препроцессора назвать "привинчиванием синтаксиса"

а ты упорно называешь привинчиванием синтаксиса изменение всего языка - включая семантику. если ты трогаешь только синтаксис, ты получаешь синтаксический сахар - вроде do-нотации из Haskell, или boost.assign из C++

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

>в терминах *своего* синтаксиса

в синтаксисе нет "терминов". "термины" есть в семантике

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

> а ты упорно называешь привинчиванием синтаксиса изменение всего языка - включая семантику. если ты трогаешь только синтаксис, ты получаешь синтаксический сахар - вроде do-нотации из Haskell, или boost.assign из C++

Нет. Давай по-порядку:

1. Синаксический сахар -- это например добавление к с++ оператора ` означающего opPwr.

1a. preprocessor -- просто заменяем на opPwr

1b. syntax aware preprocessor -- заменяем на opPwr, учитывая приоритет операций, в т.ч. . -> ()

1с. syntax & type aware preprocessor -- заменяем на opPwr, учитывая приоритет операций и имея возможность определять разную ассоциативность этому оператору в зависимости от типов операндов

1d. расширение синтаксиса -- 1b или 1с и обязательное условие, что компилятор отдает сообщение об ошибках без opPwr, а с `, и дебаггер видимо тоже

2. привинчивание нового синтаксиса: это замена синтаксиса {} на питоновские отступы и обязательное условие, что все утилиты -- компилятор, дебаггер, ... используют новый синтаксис и не используют старый. Тут прямо хочется еще добавить "и документация на существующие библиотеки".

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