вторник, 27 марта 2012 г.

Замечательный язык Паскаль!

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

Примечательно, что я про это вспоминал за пару дней до семинара. Потом пытался об этом поговорить с Всеволодом на самом семинаре, но там разговор ушёл в сторону FireMonkey. А потом появилась публикация поста: "2 года блогу: пишем понятный код - dBlog". И чегой-то меня “торкнуло”, и я подумал: “а ведь прикольно было бы писать текст на кириллице полностью, не переключая раскладку туда-сюда!”. И ведь задача-то не очень сложная, надо (для начала) научить компилятор понимать ключевые слова, написанные на другом языке – т.е. просто использовать некий словарь…

Ну вот к примеру, гляньте эту несуразную процедурку:

процедура РеверсСтрокиИКоеЧтоЕщё(вход Переменная1: строка; выход Результат: строка);
переменные
  Имя: строка;
  Буква: Символ;
  Список: ТСписокСтрок;
  Ц: ЦелоеЧисло;
начало
  Реузльтат := '';
  Список := ТСписокСтрок.Создать;
  попытка
    попытка
      для Ц := 0 до Длина(Переменная1) - 1 делать
      начало
        Буква := Переменная1[Ц];
        выбор Буква из
          'а': Буква := 'я';
          'б': Буква := 'ю';
          'в': Буква := 'э';
        конец;

        если Буква = ' ' то
          Буква := '•';

        Список.Добавить(Буква);
      конец
    кроме
      при И: Исключение делать
        Результат := И.Сообщение;
        повысить; 
    конец;

    для Ц := Список.Количество - 1 вниздо 0 делать
      Результат := Результат + Список[Ц];
  заключение
    Список.Освободить;
  конец;
конец;

Как оно читается, а? Немного не привычно, но если подсветить ключевые слова, то особо и вчитываться в текст не нужно – всё наглядно и читаемо. Напоминает это, кстати, 1С. 1С-программисты, при этом, с подобным синтаксисом живут довольно хорошо и не горюют.

Пока я этот текст набивал из головы, вот на что обратил внимание.

1) Символ (кавычка одинарная), который используется для обозначения строк, без переключения раскладки не набрать. Хоть меняй раскладку, или используй (двойная кавычка) вместо .

2) Двоеточие, точка с запятой – эти символы есть на цифрах 6 и 4, но мне привычнее нажимать их на клавише Ж.

3) “Русификации” одних ключевых слов не достаточно. Нужно также “русифицировать” типы, классы, методы… ну не русифицировать полностью, а хотя бы алиасы, чтоль, прописать… но всё равно ой как много всего тут. Более серьёзные проблемы могут возникнуть, если вдруг мы захотим поделиться таким кодом где-нить на torry.net. Поймут ли нас, например, французы? А поймём ли мы, ну например, испанский?

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

А ещё мне подумалось (теперь, а не тогда… в 2006м мне это всё было просто смешно), что на прикладном уровне это было бы здорово иметь RAD и действительно “быстро” и не задумываясь о переводе набирать код.

 

P.S.: На самом деле я это всё пишу с некоторой опаской. Всё-таки английский язык более лаконичный, чем русский. Английский (даже наверное более американский, чем английский) – это язык действий. И писать программы надо на английском. Когда я вижу текст на русском языке, мне хочется, чтобы он читался легко. Как в литературе. А если люди начнут писать программы на русском, то это будет не литературный, а … непонятно что. И со временем, русский превратится … а может и не превратится, ведь существует литературный английский?

P.P.S.: заметка так названа, потому что многие (в России, и не только) признают факт, что обучаться программированию лучше всего на Паскале. Если бы при этом Паскаль мог понимать кириллицу в ключевых словах, то для начинающих вообще было бы здорово…

13 коммент.:

Bonart комментирует...

"Английский (даже наверное более американский, чем английский) – это язык действий. И писать программы надо на английском."
Это принципиальная ошибка. Программы никогда не пишутся на естественных языках, а только на формальных, в которых имена и ключевые слова - иероглифы. И здесь использовать слова иностранного языка лучше - они именно так для русского и выглядят.

Всеволод Леонгов комментирует...

1. Многие - да - признают язык Паскаль, как не просто "хороший", а "самый лучший" для обучения программированию. Исследования в Великобритании показали, что школьники, изучающие информатику и программирование на Delphi, получают более высокий рейтинг по "их" ЕГЭ. А C# (Visual Basic .NET), С/С++ и Java вообще рекомендуют изъять из обучающих технологий. Но современный Object Pascal такой же мощный, как и другие ОО языки, каким он стал после Delphi 2010 (с новой RTTI) и Delphi 2009 (Unicode, методы в записях, generics и т.д.). И реализация FireMonkey на 100% чистом ObjectPascal - явное тому доказательство.

Анонимный комментирует...

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

Всеволод Леонов комментирует...

2. Английский язык, действительно, более удобен для программирование. Здесь чисто технико-лингвистический анализ:
- нет падежных окончаний;
- глаголы и существительные часто есть одно и то же сочетание букв;
- возможность использовать "левое определение".
Поэтому степень "корявости" - минимальна. Т.е. "программистский английский" ближе к "естественному английскому", чем, к примеру, русский.
Это не хорошо, и не плохо. Это просто факт.

Однако! Как абсолютно правильно заметил автор - обучающий и адаптационный аспект. Вот здесь - надо дать свободу профессионалам в области обучения и инженерной психологии. Отвергать или одобрять нельзя без анализа.

И еще маленькая ремарка. Все-таки программирование - достаточно молодая (очень молодая) сфера деятельности. Поэтому наблюдается терминологическая "чехарда". Например, new (новый) и delete (удалить) в языке С++ (и new в Java и C#) вообще нельзя воспринимать как "слова", это даже не термины... это "мнемонические символы", причем с путаницей. Какое new? Кого мы собираемся delete? Никакого delete вообще нет.
Здесь даже англо-подобные термины Create/Free более уместны.
Иероглифы - иероглифами, но пусть они не вводят в заблуждение, ибо ассоциация с "удалением объекта из памяти" вводит в заблуждение. А так - да, можно и "червячками" блоки помечать {}.

balmo комментирует...

Откровенно говоря, "РеверсСтрокиИКоеЧтоЕщё" вызывает неприязнь. Отчасти -- из-за "корявости", отчасти из-за сходства с э.. с тем, что называют "Язык программирования системы 1С:Предприятие".

Помимо тех факторов, что упомянул Сева, Я считаю что нужно следовать стандартам. А не использовать иероглифы для написания идентификаторов. Да и вообще на мой взгляд в коде НЕ должно быть никаких символов выходящих за пределы ANSI #0..#127. Всё что вне этого -- часть локализации и этому место в ресурсах или где-то ещё.

По поводу обучаемости и адаптации -- нет, не согласен категорически. Учиться плавать надо в воде, а не с помощью видеоуроков сидя на диване. Ну давайте ещё на первых порах разрешим не обнулять переменные при подсчете суммы.

Кириллица в коде -- это как раз не шаг к адаптации, а палка в колесе при переходе к более сложным проектам.

За примерами сюда -- http://bash.im/quote/208544 ))

Анонимный комментирует...

хм видимо совсем отстал от жизни :) но попробовал
procedure ПоказатьСообщение(s:string);
begin
ShowMessage(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
показатьсообщение(edit1.Text);
end;

действительно работает.

Анонимный комментирует...

Теоретически предлагаемое можно сделать через PreBuild, т.е. русский код вначале транслируется в паскаль. Хотя среда редактора кода тогда нужна другая.

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

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

Всеволод Леонов комментирует...

>>В этом смысле формальные языки программирования противоречат сути русского языка

По-лингвистическому это называется "аналитические и синтетические языки".

Господа, а никто не обратил внимание, что в в названиях полей РСУБД уже давным давно используют [имя заказчика]
или даже просто [customer name]?
Там тоже хватает своего холивара, но тем не менее это уже не воспринимается как "о, ужас!"

Анонимный комментирует...

>> Исследования в Великобритании показали, что школьники, изучающие информатику и программирование на Delphi, получают более высокий рейтинг по "их" ЕГЭ.

Где Вы такую траву берете?

Николай Зверев комментирует...

Спасибо за комментарии :с)

Я не буду как-то более обосновывать вышеизложенные "мысли вслух", хочу лишь акцентировать внимание вот на чём. Раньше, лет шесть назад, я смотрел на код 1С и мне было смешно его читать! Правда. И к кириллице в коде я относился... ну вот как Balmo пишет, я с ним солидарен... был. Времена меняются, и я начинаю думать, что в этом нет ничего плохого в принципе.

Ну т.е. в коммерческом продукте, который ведут N-программистов, конечно нужны какие-то корпоративные стандарты в плане оформления кода, именования идентификаторов и прочего.

А если, скажем, вот есть ученик/студент (причём он ещё не знает, будет ли он заниматься программированием на серьёзном уровне или нет), и он хочет попробовать быстренько запрограммировать какую-нибудь простенькую анимацию. Например, посмотреть, как строится циклоида, или ещё что-нибудь? Написал, посмотрел, показал сверстникам и забыл.

Николай Зверев комментирует...

> Где Вы такую траву берете?
не совсем ответ на вопрос, но в тему: ссылка на ресурс с блога Александра Алексеева: почитать pdf

Ссылка на исходную статью

CheckMC комментирует...

"1С-программисты, при этом, с подобным синтаксисом живут довольно хорошо и не горюют."

Меня колобасило полгода, когда была необходимость писать в 1С, от этого русского синтаксиса. Русский в программировании, впрочем, как и любой другой язык, кроме английского, неуместен. Теряется самое главное - "международность" языка.

П.Ы. И кстати, в 1С у всех команд, названий системных функций и пр. есть английский эквивалент. Вона куда метят! )))

Анонимный комментирует...

Дизель-паскаль

Отправить комментарий

.

.