Автор Тема: Тезис про Oberon, C, CP и ObjC.  (Прочитано 42881 раз)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #60 : Март 14, 2011, 07:53:15 am »
Что касается необходимости наличия тех. описания компилятора - я не отрицаю. Надо тем, кто разрабатывает компилятор. Но к языку это не относится.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #61 : Март 14, 2011, 08:02:51 am »
При чем тут потроха компилятора вообще?

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

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #62 : Март 14, 2011, 09:54:44 am »
valexey, приведи, пожалуйста, пример предлагаемого тобою уточнения.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #63 : Март 14, 2011, 12:12:50 pm »
valexey, приведи, пожалуйста, пример предлагаемого тобою уточнения.
Например как это определено в Модуле-2
Цитировать
5.3.8.4 Run-time Bounds Checking
Access to the indeterminate array field of a record of indeterminate type is bounds checked at run- time in the same manner as access to a determinate array is checked. The compiler automatically inserts the code to check array indices against the determinant field. Any attempt to access the array with a subscript that is out of bounds results in a run-time error.

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #64 : Март 14, 2011, 12:23:04 pm »
Ах, да, еще неплохо бы знать что случится при арифметическом переполнении.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #65 : Март 15, 2011, 08:21:04 pm »
Насколько я помню, без включённых особо доп. проверок ничего. Приводился пример с переполнением в цикле FOR и байтовым счётчиком.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #66 : Март 15, 2011, 08:26:53 pm »
Насколько я помню, без включённых особо доп. проверок ничего. Приводился пример с переполнением в цикле FOR и байтовым счётчиком.

Это "ничего" сильно зависит от железки. Т.е., все тот же undefined behavior. А где пример приводился?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #67 : Март 15, 2011, 08:37:06 pm »
Насколько я помню, без включённых особо доп. проверок ничего. Приводился пример с переполнением в цикле FOR и байтовым счётчиком.
Я не понимаю что значит "ничего". Вот у меня 8ми битная переменная. Значение у нее текущее 255, я инкрементирую её на единицу -- что значит "ничего"? То есть 255 и останется? Ибо если оно вдруг обнулится, это будет очень даже чего.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #68 : Март 16, 2011, 12:09:47 pm »
Но в массовом юникс-коммюнити таки наблюдается... раздолбайское презрение к "высокоуровневым штучкам", согласитесь :)
Занятно было бы провести опрос хотя бы по реакции на понятие "сборка мусора" - сколько процентов среди юникс-программистов охарактеризуют его как отрицательное и сколько - среди Windows-программистов :) Скриптовых программистов не опрашивать (ну а функциональные особо не дадут значения :) ).
Не, не соглашусь. Как-то резко все под одну гребенку. Давайте делить на мух и котлет оную субстанцию.

Итак, что мы имеем? Во-первых мы имеем разработчиков пишущих драйвера, куски ядра, системные сервисы, вообще вещи критические как по быстродействию так и по памяти. Тут, очевидно, соборщику мусора не место, тут не место даже просто жирному рантайму и стандартным либам. Поэтому это в основном Си (именно Си еще и потому, что posix на си завязян, кстати, я настолько уверен что позикс завязан на си, что уже начинаю в этом сомневаться, надо бы доки внимательно зачесть).

Далее мы имеем скриптинг. То есть автоматизацию рутинных операций пользователя ЭВМ. Не важно кто этот пользователь – программист, домохозяйка или доктор физмат наук. Важно что он сам автоматизирует оную рутину посредством написания так называемых скриптов. Тут важна хорошая интеграция языка с шелом (оболочкой в которой пользователь обычно работает) системы, посему тут рулят языки которые умеют легко и просто работать со стандартными потоками ввода-вывода и строками. А также не грузят пользователя-скриптопрограммиста своими мегапарадигмами навроде ООП там, строгой типизации и прочими артефактами программинга, ручное управление памятью сюда тоже входит. Соответственно тут рулят такие языки как shell, python, perl. У некоторых из них есть сборщик мусора, у некоторых нет. Но память в любом случае там управляется не руками.

Далее имеем разработку всякого прикладного софта, который с одной стороны пишется один раз, а используется многими и при этом достаточно сложен (посему это не скриптинг), с другой стороны он должен быть достаточно технологичен, то есть дешев в производстве и при этом там нет таких жестких ограничений на память и проц как в системных сервисах, но они все равно есть. Поскольку он сложен, тут уже без программерских артефактов, вроде того же ООП не обойтись, ибо нужно как-то со сложностью бороться.  Поскольку он должен быть достаточно дешев, тут автоматическое управление памятью желательно, хотя и не обязательно (ряд задач например все равно требует таки реалтайма, например те же игры).  Да, и при этом он должен быть легко скомпилирован на большенстве машин потенциальных пользователей оными пользователями не программистами. То есть инструментарий должен быть легко доступен во всех смыслах этого слова. Тут рулит сонма языков. Это: vala, java, c#, c++, ObjC, C, python, erlang, ruby, js, lua и так далее. Причем часто используются сочетания языков. Например C + Python. Подавляющее большенство этих языков имеют автоматическое управление памятью в том или ином виде, большенство из них имеют сборщик мусора.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #69 : Март 16, 2011, 08:09:37 pm »
Цитировать
Я не понимаю что значит "ничего". Вот у меня 8ми битная переменная. Значение у нее текущее 255, я инкрементирую её на единицу -- что значит "ничего"? То есть 255 и останется? Ибо если оно вдруг обнулится, это будет очень даже чего.
Пример был на oberoncore.ru. Сейчас уже не найду. Происходит, естественно, переполнение в 0.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #70 : Март 16, 2011, 08:21:32 pm »
Цитировать
Я не понимаю что значит "ничего". Вот у меня 8ми битная переменная. Значение у нее текущее 255, я инкрементирую её на единицу -- что значит "ничего"? То есть 255 и останется? Ибо если оно вдруг обнулится, это будет очень даже чего.
Пример был на oberoncore.ru. Сейчас уже не найду. Происходит, естественно, переполнение в 0.
В сообщении о языке поведение в этом случае никак не специфицировано, следовательно там может быть все что угодно. Например HALT() или некий аналог ему. Или может вылезти -1, а может внезапно испортиться память в соседней ячейке. Это типичный ub, который к тому же таковым в спеке на язык не обозначен, что как бэ усугубляет.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

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

  • Jr. Member
  • **
  • Сообщений: 58
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #71 : Март 17, 2011, 05:19:51 am »
Цитировать
Я не понимаю что значит "ничего". Вот у меня 8ми битная переменная. Значение у нее текущее 255, я инкрементирую её на единицу -- что значит "ничего"? То есть 255 и останется? Ибо если оно вдруг обнулится, это будет очень даже чего.
Пример был на oberoncore.ru. Сейчас уже не найду. Происходит, естественно, переполнение в 0.
Вот это как раз НЕ естественно. Вообще, если исходить из того, что описание языка - это есть спецификация некоторой виртуальной машины (а по Вирту вроде именно так и есть), то спецификация должна описывать ВСЕ.В том числе и все операции в деталях.
Либо должно быть явное указание на то, что данная операция отображается на реальную операцию "железа".
Ведь с памяться в описании КП написано совершенно явно - должна быть сборка мусора, иначе это - не КП.
При сертификации компиляторов Ады поступили так же: компилятор ДОЛЖЕН удовлетворять определеннным свойствам-качествам, иначе это - не компилятор Ады.
 

kemiisto

  • Jr. Member
  • **
  • Сообщений: 64
    • Просмотр профиля
    • kemiisto.ru
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #72 : Март 17, 2011, 09:43:13 am »
А мне думается, что стандартизация КП на данный момент - лишнее. Во-первых, отсутствие ISO-стандарта характерно для множетсва языков. Даже Педивикия в курсе:
Цитировать
A programming language is usually split into the two components of syntax (form) and semantics (meaning) and many programming languages have some kind of written specification of their syntax and/or semantics. Some languages are defined by a specification document, for example, the C programming language is specified by an ISO Standard, while other languages, such as Perl, have a dominant implementation that is used as a reference.
Или тот же Python. Есть референсная реализация CPython. Во всяких там Jython'ах и IronPyton'ах есть отличия. Так что покамест можно отталкиваться от ББ, как референсной реализации. Пока, потому что на данный момент популярность КП мала. Мала настолько, что стандартизация бессмысленна. А может даже и опасна, так как "заморозит" язык и в потенциале родит проблемы, связанные с поддержкой обратной совместимости. Для того же С++ стандартизация была проведена по острой необходимости. Когда популярность стала высока, а различие между реализациями велико. К этому моменту был накоплен неплохой опыт использования С++ и стандартизация была делом тривиальным. По сути были закреплены best implementation practices. Для КП время ещё не подошло. То есть стандартизация должна следовать за широкой распространённостью языка, а не служит средством её  достижения.

DIzer

  • Гость
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #73 : Март 17, 2011, 09:57:50 am »
Вот это как раз НЕ естественно. Вообще, если исходить из того, что описание языка - это есть спецификация некоторой виртуальной машины (а по Вирту вроде именно так и есть), то спецификация должна описывать ВСЕ.В том числе и все операции в деталях...
Порочный и бессмысленный путь (в лучшем случае результатом будет "удачное" описание ЯП) ..... Изходить НУЖНО из того ЯП является описанием - 1. одной из моделей коцепции алгоритма (как метода решения задач, описания систем). 2 Модели исполнителя . 3 .Модели восприятия синтаксических конструкций человеком... Короче... у меня хандра  :-\\

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Тезис про Oberon, C, CP и ObjC.
« Ответ #74 : Март 17, 2011, 10:46:27 am »
А мне думается, что стандартизация КП на данный момент - лишнее. Во-первых, отсутствие ISO-стандарта характерно для множетсва языков. Даже Педивикия в курсе:
За ISO-стандартизацию КП никто не ратует, мы ратуем лишь за полноту описания языка, с чем в том же Python'e много лучше.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"