Автор Тема: Модифицированный синтаксис Оберона  (Прочитано 180444 раз)

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #30 : Январь 06, 2012, 10:52:06 am »
Также не очень понятно как свести к общему знаменателю Аду и Оберон - скажем в Аде есть generic-модули, в Обероне обобщенки нет вообще. Более того, чтобы скажем в ББ полноценно присутствовал и Оберон и КП, оный ББ придется переписать на их общем знаменателе - Обероне.
Значит Аду вычеркиваем)) Главное - семейство Оберонов. Если серьезно заниматься этим вопросом, то ББ все равно придется переписать хотя бы из-за жлобской лицензии.
« Последнее редактирование: Январь 06, 2012, 10:54:53 am от Vartovyj »

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #31 : Январь 06, 2012, 10:53:46 am »
Вы уж определитесь, для чего Вам нужен язык программирования -- для быстренкого написания простеньких программулек -- запустил и стёр -- или для долговременных проектов, где важна читабельность программ?
и то и другое...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #32 : Январь 06, 2012, 11:30:12 am »
А какие конкретно притензии к концструкциям вида "array of SomeType" ? Слишком долго писать? Или слишком долго читать? Или что-то еще?

По моему опыту, это было бы критично есили бы например в Обероне были бы замыкания и/или лямбда функции. Тогда длинный синтаксис объявления переменных больно бил бы по рукам. А поскольку ничего этого в Оберонах (Оберон, Оберон-2, КП) нет, то это не слишком критично.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #33 : Январь 07, 2012, 12:12:49 pm »
А какие конкретно притензии к концструкциям вида "array of SomeType" ? Слишком долго писать? Или слишком долго читать? Или что-то еще?
Каких-то особых претензий нет. Чисто эстетика. Хотя, может и будет выигрыш при больших объемах кода.

Цитировать
По моему опыту, это было бы критично есили бы например в Обероне были бы замыкания и/или лямбда функции. Тогда длинный синтаксис объявления переменных больно бил бы по рукам. А поскольку ничего этого в Оберонах (Оберон, Оберон-2, КП) нет, то это не слишком критично.
Кстати, стоило бы ввести в Оберон лямбда функции, если убрать обязательный VAR и разрешить объявление переменной в любом месте?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #34 : Январь 08, 2012, 08:25:54 pm »
Можно посмотреть как лямбды сделаны в Делфи (да, они там теперь есть) и... постараться избежать подобных граблей :-)

Кроме того, советую посмотреть как в Аде не превращаясь в Си сделали объявление переменых не только в "VAR" секции процедуры.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Валерий Лаптев

  • Jr. Member
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #35 : Январь 09, 2012, 06:07:32 am »
1. ИМХО, главное при разработке языка - чего уже нельзя убрать, а не чего еще можно добавить.
Ненужные обобщения приводят к таким монстрам!
2. Если правильный редактор (семантический), то синтаксис языка - пофигу, ибо ручками реально вводятся только имена и выражения. Проверено в первой версии редактора... :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #36 : Январь 09, 2012, 11:13:43 am »
1. ИМХО, главное при разработке языка - чего уже нельзя убрать, а не чего еще можно добавить.
Ненужные обобщения приводят к таким монстрам!
К каким? :-)
По моему, из языка как раз обобщения убирать нельзя, а вот все частные случаи - вполне можно. Ибо их можно сделать библиотечными.

2. Если правильный редактор (семантический), то синтаксис языка - пофигу, ибо ручками реально вводятся только имена и выражения. Проверено в первой версии редактора... :)
На самом деле это не так. Редактор действительно помогает писать. Но синтаксис во время написания как раз по рукам бьет не сильно. Синтаксис влияет на восприятие кода. И длинный, многословный, синтаксис (тех же лямбд например) менее читабелен и воспринимается хуже, чем короткий.

Пример:
sum := map(function (a, b: Integer) : Integer
  begin
    Exit(a+b);
  end,
  list);
против
sum = map (\a b -> a+b) list
Нет, желающие, конечно, по старой-доброй обероновской традиции, могут первый вариант вытянуть в одну строку:
sum := map(function (a, b: Integer) : Integer begin Exit(a+b); end, list);но я не уверен что от этого оно станет лучше читаться :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Валерий Лаптев

  • Jr. Member
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #37 : Январь 09, 2012, 11:25:38 am »
1. Следование концепции неймановской архитектуре ДО САМОГО КОНЦА в языке программирования неизбежно приводят к динамическому формированию программы и ее выполнению... :) То есть как ни крути, а все равно Лисп получается... :)
Но в императивных языках этого как раз нет. А должно быть, если следовать принципу обобщения... :)
Но реально-то есть либо указатели на функции, либо некая сущность исполняемого типа. Например, процедурные переменные. Но с ОЧЕНЬ ограниченной функциональностью. 
2. В одну строку писать и не надо. Надо писать структурно. Здесь редактор автоматом и обеспечит нужный уровень читабельности.
Если вдумаетесь, то лаконичность написания ( в ущерб читабельности) возникла именно как необходимость набирать ручками каждый символ.
Если редактор берет на себя рутину представления, то и нафига лаконичность?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #38 : Январь 09, 2012, 11:42:54 am »
1. Следование концепции неймановской архитектуре ДО САМОГО КОНЦА в языке программирования неизбежно приводят к динамическому формированию программы и ее выполнению... :) То есть как ни крути, а все равно Лисп получается... :)
Но в императивных языках этого как раз нет. А должно быть, если следовать принципу обобщения... :)
Как это нет? А забить массив а потом его исполнить как функцию? Эстеты содержимое массива могут получить прогнав по сгенерированному тексту транслятор, но можно и без изысков.

Ну а про динамическое формирование кода на этапе компиляции я вообще молчу - это ж сплошь и рядом используется.

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

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

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

2. В одну строку писать и не надо. Надо писать структурно. Здесь редактор автоматом и обеспечит нужный уровень читабельности.
ok. Как он организует мне нужный уровень читабельности вот этого:
sum := map(function (a, b: Integer) : Integer
  begin
    Exit(a+b);
  end,
  list);
Этот код не читабелен.

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

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

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #39 : Январь 09, 2012, 12:03:25 pm »
Цитировать
Кроме того, советую посмотреть как в Аде не превращаясь в Си сделали объявление переменых не только в "VAR" секции процедуры.
Те, которые как бы константы?
« Последнее редактирование: Январь 09, 2012, 12:11:29 pm от Vartovyj »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #40 : Январь 09, 2012, 12:04:01 pm »
Цитировать
Кроме того, советую посмотреть как в Аде не превращаясь в Си сделали объявление переменых не только в "VAR" секции процедуры.
Те, которые константы?
Те которые любые в любом, по сути, месте.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #41 : Январь 09, 2012, 12:10:29 pm »
Собственно вот: http://ada-ru.org/V-0.4w/part_1/ch_03.html#s3.3

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

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #42 : Январь 09, 2012, 12:11:42 pm »
Цитировать
В ущерб читабельности - да. Но в данном случае лаконичность описания идет не в ущерб читабельности, а во благо её. А вот многословность, отсутствие лаконичности, тут уже идет как раз в ущерб читабельности.
Есть предложения, какой аналог может быть в Обероне?:
sum = map (\a b -> a+b) list

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #43 : Январь 09, 2012, 12:16:32 pm »
кстати, понравилось в Аде:
if
........
end if;
имхо улучшает читаемость

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #44 : Январь 09, 2012, 12:16:44 pm »
Цитировать
В ущерб читабельности - да. Но в данном случае лаконичность описания идет не в ущерб читабельности, а во благо её. А вот многословность, отсутствие лаконичности, тут уже идет как раз в ущерб читабельности.
Есть предложения, какой аналог может быть в Обероне?:
sum = map (\a b -> a+b) list

В плане синтаксиса, можно посмотреть например сюда: http://wiki.oxygenelanguage.com/en/Lambda_Expressions

Но вообще, с лямдами в Обероне не все так просто. Их ведь там нет, и нет по сути нормальных предпосылок для того, чтобы они появились. То есть их введение затрагивает не только синтаксис, но и грамматику и семантику языка. Для того, чтобы можно было как-то приблизиться к "sum = map (\a b -> a+b) list" нужно ведь в языке иметь хоть какой-то но вывод типов.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"