Re[16]: Что лучше?
От: anonymous Россия http://denis.ibaev.name/
Дата: 27.12.08 19:05
Оценка:
Здравствуйте, AndrewVK, Вы писали:

A>>Так язык был предназначен изначально для обработки текстовых данных.

AVK>Пофик

Конструктивно, да.

AVK>>>и ряд синтаксических конструкций Перла явно испирирован регексами.

A>>Каких?
AVK>Например, указание типа при помощи односимвольного префикса, всякие @_ и $_.

Сигилы (односимвольные префиксы) — наследие командных оболочек, а встроенные переменные просто получили как можно более короткие имена. К регулярным выражениям это отношения не имеет.

Сигилы позволяют иметь переменные разных типов с одинаковыми именами. Вот что Дамиан Конвей говорит о сигилах (к вопросу о естественности языка):

В Perl это было с самых ранних времен, и с этим всегда была проблема. Проблема была в том, что это как формы слов в грамматике: если у меня есть массив, то я записываю перед его именем @, и это примерно то же, что сказать: «эти вещи». Но когда нужно сказать об одной из них, вы говорите: «эта вещь», вы не можете сказать «эти вещь». Так, в Perl 5, что вы делали, чтобы сослаться на один элемент массива, так это меняли сигил. Вы меняли его с символа @, который означает «эти», на символ доллара, который означает «этот». И тогда вы добавляете квадратные скобки, чтобы указать, какой нужен индекс. С лингвистической точки зрения это очень остроумная идея, и она дает возможность ввести тонкие различия в поведении. Но на деле выходит, что девяносто процентов программирующего населения просто не может понять такую идею. И это не оттого, что они тупые. Просто это не их естественный ход мысли. Естественный ход мысли в отношении сигилов такой: если тут доллар, то это скаляр; если массив, то должен быть знак @; если тут знак процента, то это должен быть хеш. И проблема смены сигила для другого использования слова в том, что это сбивает людей с толку, особенно англоговорящих — нам это не очень хорошо дается.

В других языках гораздо сильнее проявляется смена формы, когда меняется то, как используется слово, не то что в английском. Таким образом, мы обнаружили, что множество пользователей просто не могут иметь дело с «Ой! Вы должны изменить сигил, даже если это та же самая переменная».

Поэтому в Perl 6 использование сигилов будет изменено, на более ожидаемое программистами.

А встроенные переменные имеют мнемоники: $_, @_ — подчёркивание используемого операнда, $@ — в каком месте (at) была ошибка, и т. п.
Re[14]: Что лучше?
От: anonymous Россия http://denis.ibaev.name/
Дата: 27.12.08 19:20
Оценка:
Здравствуйте, VoidEx, Вы писали:

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


Возможно, главная заслуга Ларри как автора Perl заключается в том, что ему удалось создать язык, учитывающий свойства и принципы естественного языка: ситуативную многозначность конструкций, разумную избыточность (и за счет этого стилевое разнообразие), максимальную адаптированность к различному уровню знаний носителей языка, гибкость и выразительность синтаксических средств. [...] При разработке языка Perl были использованы многие лингвистические принципы. Перечислим наиболее важные из них.

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

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

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

Принцип свободы в естественных языках предполагает, что всегда есть несколько вариантов выражения одной и той же мысли. Как и в естественных языках, в Perl одного и того же результата можно достичь несколькими способами, используя различные выразительные средства языка. Это так называемый принцип TIMTOWTDI. В соответствии с ним каждый разработчик выбирает тот вариант языковой конструкции, который больше подходит ему в конкретной ситуации, больше соответствует его стилю или уровню знания языка.

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

http://avatara9.desper.ru/archives/135
Re[9]: Что лучше?
От: Гест Украина https://zverok.github.io
Дата: 27.12.08 23:22
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Здравствуйте, Nuald, Вы писали:


N>>Да что вы все так боитесь отступов?


DM>Это чисто психологический момент, какая-то подсознательная боязнь, что незаметно для глаза перепутаются пробелы и табы, в результате я буду видеть одно, а компилятор — другое.


Кстати, интерпретатор Руби 1.9 с недавних пор выдает предупреждение про неправильные отступы:

def meth1
  if Time.now.hours > 12
    puts "Afternoon"
end


— я на таком много раз накалывался, перейдя с C++ — поскольку в С-подобных языках if с одним оператором в теле не требует "скобок", а в Руби — требует. Т.е. правильно:

def meth1
  if Time.now.hours > 12
    puts "Afternoon"
  end
end


Проблема этой ошибки в том, что парсер-то конечно заругается, но не там, где действительно пропущен end, а в самом конце файла (что-то end'ов маловато). Так вот в новых версиях он скажет "warning: mismatched indentations at 'end' with 'if' at 2".

В комментариях к блоговой записи, сообщающей об этом, слово "python" встречается чуть менее, чем в каждом
Re[10]: Что лучше?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 28.12.08 07:42
Оценка:
Ну, это просто удобная эвристика для для лучшего сообщения об ошибке. Сама ошибка тут допущена программистом и отлично видна глазу. Это совсем не то же, что возможность изменения поведения программы из-за того, что текстовый редактор где-то поменял пробелы и табы.
Re[15]: Да ну!
От: Wolverrum Ниоткуда  
Дата: 28.12.08 11:46
Оценка:
Здравствуйте, anonymous, Вы писали:
A>Почему не золото? Синтаксис Perl даже с помощью БНФ нельзя описать.

ЕЯ можно, а перловку уже и нельзя?!
Re[16]: Да ну!
От: anonymous Россия http://denis.ibaev.name/
Дата: 28.12.08 13:17
Оценка:
Здравствуйте, Wolverrum, Вы писали:

A>>Почему не золото? Синтаксис Perl даже с помощью БНФ нельзя описать.

W>ЕЯ можно, а перловку уже и нельзя?!

perldoc perlfaq7:

  Can I get a BNF/yacc/RE for the Perl language?
    There is no BNF, but you can paw your way through the yacc grammar in
    perly.y in the source distribution if you're particularly brave. The
    grammar relies on very smart tokenizing code, so be prepared to venture
    into toke.c as well.

    In the words of Chaim Frenkel: "Perl's grammar can not be reduced to
    BNF. The work of parsing perl is distributed between yacc, the lexer,
    smoke and mirrors."

Re[17]: Не аргумент
От: Wolverrum Ниоткуда  
Дата: 28.12.08 21:30
Оценка:
A>perldoc perlfaq7:

здесь, например описано что грамматика Перла "всего лишь" слегка не КС (класс 2), но никак не невозможная в терминах BNF с помощью которой можно расписывать грамматики класса 0 (естественные языки)
Re[17]: Да ну!
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 29.12.08 04:59
Оценка:
Грамматика сформулирована в yacc, значит все не так уж страшно.
В Руби то же самое — лексер специальный, а парсер yacc.
Re[18]: Не аргумент
От: anonymous Россия http://denis.ibaev.name/
Дата: 29.12.08 06:25
Оценка:
Здравствуйте, Wolverrum, Вы писали:

A>>perldoc perlfaq7:

W>здесь, например описано что грамматика Перла "всего лишь" слегка не КС (класс 2), но никак не невозможная в терминах BNF с помощью которой можно расписывать грамматики класса 0 (естественные языки)

Да, могу тогда я увидеть БНФ русского языка? Ну и Perl уж заодно.
Re[19]: Не аргумент
От: Wolverrum Ниоткуда  
Дата: 29.12.08 10:43
Оценка:
A>Да, могу тогда я увидеть БНФ русского языка?
Уж извините — всю не положу, это ж практически коммерческая тайна )

Но вот пару правил разной степени общности укажу:

<местоимение> 'есть' 'херня' ::= 'это' '-' 'херня' | 'это' 'херня' | 'то' 'херня'
<предложение> ::= <подлежащее><сказуемое>|<сказуемое><подлежащее>|<сказуемое>|<сложносочиненное-предложение>
Таки, БНФ.

В целом, сотней правил можно "покрыть" 70-80% грамматики русского языка, и еще тыщонками-миллионами — оставшиеся 30-20%
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.