Автор Тема: Идеальный ЯП  (Прочитано 41850 раз)

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Идеальный ЯП
« : Февраль 26, 2011, 03:28:42 pm »
Хочу поделиться с записями, сделанными на начало прошлого года и содержащими идеи на тему, какими фичами должен обладать ЯП, условно приближенный к идеальному.
-) Все входные аргументы подпрограмм подлежат обязательной проверке assert-подобным выражением.

Код: (delphi) [Выделить]
procedure WriteChar
(
  x: int; Math.InRange(x, 0, WndWidth - 1);
  y: int; Math.InRange(y, 0, WndHeight - 1);
  col: str; ANY;
)
Смысл: координаты должны быть в рамках окна, а строка цвета - любой.

Особенности:
- Объявление одного аргумента - одна строка.
- Аргумент отделяется от охраны символом ";"
- Охрана - обычное логическое выражение. Если оно включает подпрограммы, то те не должны рекурсивно ссылаться на объявляемую подпрограмму.
- Константа ANY = TRUE.

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

-) Именованные параметры.
При вызове подпрограммы должны указываться пары: имя параметра ":" значение.

Код: (delphi) [Выделить]
WriteChar(x: 3; y: 4; col: 'black');! Исключение: если переменная/константа имеет то же имя, что и параметр, то может указываться просто имя параметра:
WriteChar(x, y, col: 'red');

-) Опциональные параметры.
Параметры, которые могут быть опущены при вызове. При этом в теле подпрограммы будут находиться проверки компилятора на проинициализированность подобных аргументов.

Код: (delphi) [Выделить]
procedure WriteChar
(
  x: ...
  y: ...
  optional Col: string; ANY; (* охрана типа осуществляется только, если аргумент инициализирован *)
)
{
  ...
  if !IsSet(Col)
  {
    Col := Console.Col;
  }
}
IsSet - проверяет, установлен ли аргумент. Прямое присваивание значения аргументу автоматически устанавливает его.

-) Аргументы со значением по умолчанию. Значение должно быть константным выражением!

Код: (delphi) [Выделить]
function Random
(
  Min: int = 0; Min >= 0; (* охрана сработает всегда *)
  Max: int = 99; Max >= Min; (* охрана сработает всегда *)
): int;

-) Аргументы по ссылке:
- in - после вызова переменная получает статус Unknown (равносильно неинициализированности)
- out - внутри подпрограммы имеет начальный статус Unknown
- inout - аналог var

-) Язык со сборкой мусора.

-) procedure и function для логического разделения подпрограмм. () после имени обязательно.

-) Обязательное присвоение значений переменным при объявлении с необязательной охраной.

Код: (delphi) [Выделить]
VAR
  AbsX: int = x + Con.Window.x1; AbsX in [0; Con.Width - 1];
-) Записи-константы и записи, создаваемые на лету.

Код: (pascal) [Выделить]
coords := (x: MyX, y); (* Заметьте, "y" не указывается два раза, та как имя переменной совпадает с именем поля в записи *)-) Опциональные поля записей.

Код: (pascal) [Выделить]
Cell = record
  optional Opacity: float = 1.0; (* прозрачность ячейки *)
end;
-) Обязательное присвоение значений полям записи.

Код: (delphi) [Выделить]
TCoord = record
  x: int = -1;
  y: int = -1;
end;
-) Соглашения.
Служат для точного указания особенностей подпрограмм.
Пусть соглашение - логическая функция.
Пусть часть функций работает с абсолютными координатами консоли, а другая с относительными (относительно границ логически подокна).

Код: (delphi) [Выделить]
convention  (Con: TConsole) UsesRelativeCoords ()
(
  x: int;
  y: int;
)
{
  result := Math.InRange(x, Con.WndWidth - 1) and Math.InRange(y, Con.WndHeight - 1);
}

procedure WriteChar
(
  x: int; ANY;
  y: int; ANY;
  Ch: char; ANY;
); UsesRelativeCoords;

{
  ...
}
Те аргументы, которые указанны в соглашении, обзяаны быть и в подпрограммах, использующих эти соглашения.


DIzer

  • Гость
Re:Идеальный ЯП
« Ответ #1 : Февраль 26, 2011, 03:56:32 pm »
Можно коротко описать "идеал" - что это по вашему?
Надежность , читаемость, производительность, легкость в освоении, реализуемость... что-то еще и(или) в какой пропорции? (чтобы оценить соответствие ваших введений вашему замыслу)?

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #2 : Февраль 26, 2011, 05:25:04 pm »
Прежде всего надёжность и, соответственно, эффективность, высвобождаемая за счёт времени, которое потенциально могло было быть потраченным на поиск и исправление ошибок.

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Идеальный ЯП
« Ответ #3 : Февраль 26, 2011, 09:32:40 pm »
Но тогда Вы должны начать с фиксации ошибок, которые могли бы быть устранены компилятором языка. Которые возникают на практике.
Вот, например, обзывать параметры процедур в точке вызова мне, на первый взгляд, нравится. Но подумав, я понимаю, что никогда не сталкивался с ошибкой, которую это бы предотвратило. А память, например, у меня плохая - и наизусть сигнатуры я никогда не помню, всегда смотрю :)

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #4 : Февраль 26, 2011, 10:07:01 pm »
Цитировать
Но подумав, я понимаю, что никогда не сталкивался с ошибкой, которую это бы предотвратило.
Предполагалось, что повысится читаемость, ясность и исключится возможно путать аргументы. В php не путать параметры без справки просто нереально, но он не типизированный.
P.S Это всего лишь заметки. Я стараюсь делать подобные для размышлений.

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

  • Jr. Member
  • **
  • Сообщений: 58
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #5 : Февраль 27, 2011, 05:49:28 am »
Но тогда Вы должны начать с фиксации ошибок, которые могли бы быть устранены компилятором языка. Которые возникают на практике.
Вот, например, обзывать параметры процедур в точке вызова мне, на первый взгляд, нравится. Но подумав, я понимаю, что никогда не сталкивался с ошибкой, которую это бы предотвратило. А память, например, у меня плохая - и наизусть сигнатуры я никогда не помню, всегда смотрю :)
В 91-92 году я писал на С++ в среде Турбо С++ первую свою достаточно большую программу. И мечтал об инструменте, который бы снял часть заботы с моей башки именно в смысле сигнатур функций. Функций было сотни две, и изменение одной сигнатуры требовало выявить все вызовы этой функции в паре десятков файлов. Хотя память тогда у меня была "лошадиная", и я помнил, где и зачем я ее вызывал. Но необходимость ВРУЧНУЮ лазить по файлам меня сильно доставала.
Вот тогда я впервые задумался, что инструмент подобные операции должон автоматически выполнять.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #6 : Февраль 27, 2011, 06:58:27 am »
В 91-92 году я писал на С++ в среде Турбо С++ первую свою достаточно большую программу. И мечтал об инструменте, который бы снял часть заботы с моей башки именно в смысле сигнатур функций. Функций было сотни две, и изменение одной сигнатуры требовало выявить все вызовы этой функции в паре десятков файлов. Хотя память тогда у меня была "лошадиная", и я помнил, где и зачем я ее вызывал. Но необходимость ВРУЧНУЮ лазить по файлам меня сильно доставала.
Вот тогда я впервые задумался, что инструмент подобные операции должон автоматически выполнять.
Ну зато теперь с этим проблем нет -- любая современная среда разработки позволяет делать это автоматически.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

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

  • Jr. Member
  • **
  • Сообщений: 58
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #7 : Февраль 27, 2011, 12:50:40 pm »
Ну зато теперь с этим проблем нет -- любая современная среда разработки позволяет делать это автоматически.
Не любая... :) ББ пока не позволяет.
2. Прошло 20 лет! Так и помереть можно, не дождавшись... :)

DIzer

  • Гость
Re:Идеальный ЯП
« Ответ #8 : Февраль 27, 2011, 12:58:35 pm »

Не любая... :) ББ пока не позволяет.
....
А зачем уродовать ББ -послушайте его адептов... там и так все замечательно... это у вас дефект сознания, который вот уже 20 лет дает о себе  знать..  ;)
А у них, благодоря тому что они тренеруются ежедневно с этим, с памятью все в порядке  ;D
« Последнее редактирование: Февраль 27, 2011, 01:02:13 pm от DIzer »

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

  • Jr. Member
  • **
  • Сообщений: 58
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #9 : Февраль 27, 2011, 01:24:48 pm »
Не... В ряде моментов ББ требует доработки (не подсветка синтаксиса, естественно)...
Я б начал с реализации контекстной помощи.
И далее навешивал бы дополнительные удобства для программиста- чтобы рефакторинг было удобно проводить,
unit-тестирование... далее - более индивидуальные удобства...

DIzer

  • Гость
Re:Идеальный ЯП
« Ответ #10 : Февраль 27, 2011, 01:33:29 pm »
Не... В ряде моментов ББ требует доработки (не подсветка синтаксиса, естественно)...
Я б начал с реализации контекстной помощи.
И далее навешивал бы дополнительные удобства для программиста- чтобы рефакторинг было удобно проводить,
unit-тестирование... далее - более индивидуальные удобства...
Не... (приведу ultimate аргумент адептов) - "есле бы это было действительно нужно, то это было бы давно сделано".  ;)

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Идеальный ЯП
« Ответ #11 : Февраль 27, 2011, 07:35:08 pm »
У Вас есть человеко-часы - инвестировать в эти фичи? - инвестируйте. Мне что, людей своих вот нечем больше занять? Со временем попутно может и появиться.
Вот как уйма разрабов под тот же Веб работают в обычных редакторах (типа Gedit в Линуксе) - и как-то тоже не страдают.

А тут понятно, что можно докрутить что угодно, было б время и надобность - чего париться-то?

DIzer

  • Гость
Re:Идеальный ЯП
« Ответ #12 : Февраль 27, 2011, 07:42:38 pm »
У Вас есть человеко-часы - инвестировать в эти фичи? - инвестируйте. Мне что, людей своих вот нечем больше занять? Со временем попутно может и появиться.
Вот как уйма разрабов под тот же Веб работают в обычных редакторах (типа Gedit в Линуксе) - и как-то тоже не страдают.

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

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Идеальный ЯП
« Ответ #13 : Февраль 27, 2011, 07:52:52 pm »
У меня есть конкретное понимание, насколько наличие доп. фич увеличит производительность разработки. И соотнесение этого с тратой даже 2-3 человеко-месяцев на разработку. И факт в том, что это неоправдано (хотя было бы приятно это получить когда-нибудь, конечно, но только в удобном виде, в парадигме "текст-как-интерфейс", а не в ужасном и устаревшем стиле оконно-формочных студий).

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

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Идеальный ЯП
« Ответ #14 : Февраль 27, 2011, 08:08:03 pm »
У меня есть конкретное понимание, насколько наличие доп. фич увеличит производительность разработки. И соотнесение этого с тратой даже 2-3 человеко-месяцев на разработку. И факт в том, что это неоправдано (хотя было бы приятно это получить когда-нибудь, конечно, но только в удобном виде, в парадигме "текст-как-интерфейс", а не в ужасном и устаревшем стиле оконно-формочных студий).
Отсутствие этих проверок конечно не играют решающей роли на маленьких проектах, но начинают больно бить по лбу когда проект становится хотя бы средним. Не от хорошей жизни например Ада такая какая есть, это просто необходимо для обеспечения надежности больших систем.

У вас (т.e. той команды, в которой ты участвуешь) есть четкое представление какими темпами будет расти проект? Когда его размер достигнет той самой черты?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"