Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - vlad

Страницы: 1 ... 86 87 [88] 89 90 ... 93
1306
Обратите внимание, в цитируемом сообщении не было сказано про использование по разным условиям, поскольку в обсуждаемом вопросе важна лишь необходимость инициализации нескольких переменных по 1-му условию, не более.

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

int a, b;
if (условие)
   a = ...
else
   b =...
/*общий код*/
if (условие)
   a;
else
   b;

Вот такая штука намного естественнее смотрится приведенная к такому виду:

int a, b;
if (условие)
   int a = ...
   f();/*общий код*/
   a;
else
   int b =...
   f();/*общий код*/
   b;

Цитировать
Цитировать
Если, конечно, не пытаться повторять плюсовую семантику с конструкторами копирования и т.д.
Потому я и написал, что можно обойти. А теперь про шутки, которые неизбежно вылезут.

struct S {int a,b};

s = S{s.b, s.a};//Прийдётся компилятор сделать шибко умным, чтобы правильно обрабатывать такие ситуации без ошибок и без накладных расходов

Хе-хе. А вот здесь мы имеем не инициализацию, а присваивание. Сильно разные вещи. Здесь всегда будет копирование. Оно здесь будет даже если вы напишите на оригинальном обероне по всем правилам - с объявлением временной структуры, ее инициализацией и последующим копированием.

Цитировать
s = f(s);//А вот тут даже умный компилятор не знает как без накладных расходов не допустить ошибок в общем случае, прийдётся выдумывать другие хитрые механизмы.

Аналогично. Это присваивание.

Цитировать
S f(S s, int i) { return {s.b + 1, s.a / (i - 1)} }
S s = S{1, 2};//1
try {
   s = f(s, 1);//2
} catch {
    s = f(s, 2);//программист вправе ожидать, что до присваивания s всё ещё имеет 1-е значение.
}

Аналогично. Это присваивание.

Цитировать
Цитировать
Какая-то надуманная ситуация. Почему именно в секции модуля?
Потому что несколько переменных могут зависеть от общих временных данных.

Ну и объявите эти временные данные здесь же, не в секции. В чем проблема-то?

Цитировать
Цитировать
Да никто ж не заставляет размазывать. Пропишите непосредственно перед секцией. Можно даже потребовать на уровне компилятора.
Как бы не так. Для того, чтобы проинициализировать осмысленным значением, бывает нужен более сложный алгоритм чем однострочник, и тут уж нужна процедура, объявленная до переменной, и, следовательно, появляется возможность размазывания.

Ну правильно. Все процедуры будут объявлены до переменной и до секции. Где размазывание? Тут на самом деле более интересная проблема: если инициализировать вызовом функции, то как обеспечить, чтобы функция не обратилась к этой же переменной модуля.

Структуры и массивы - дело тонкое, а мусором является  любое не осмысленное значение

Не, не скажите. С ноликами разница принципиальная. Если нолики всегда одинаковые, то и поведение всегда одинаковое (пусть даже и неправильное). А если мусор, то поведение начинает зависеть от фазы луны. Такое недопустимо в безопасном языке.

Цитировать
Цитировать
struct Stack {int count, int s[N]};
Stack s;
s.count = 0;
;
Структура инициализирована или нет?

Ошибка компиляции. Должна быть проинициализирована в точке объявления.

Цитировать
f(a);//устанавливаем значение уже объявленной

T b = {...};//мусорное присваивание, оно же накладные расходы
f(b)// ах, да - просто не надо создавать такие процедуры( так может и VAR-параметры удалить; + ещё 1 изменение ), но я уже написал про ваш хитрый автоматический механизм, так что надо.

Да, не надо писать такие процедуры. Если надо установить новое значение уже объявленной - пожалуйста, пишите a = f(). Да, в данном случае для a (объявление/инициализация/присваивание) накладные расходы при прочих равных будут больше, согласен. Зато есть гарантия, что структура не останется проинициализированной наполовину.

1307
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 09, 2011, 05:19:09 pm »
Про различные аппаратные платформы - опыта нет. Про портирование компилятора - также.
Какой опыт есть - это создание серверного middleware, который работает под Windows и Linux, большинство модулей которого являются платформенно-независимыми. Одно приложение запускается и под Windows, и под Linux без перекомпиляции (т.е. большая часть системы оказывается бинарно идентичной для обоих платформ), в зависимости от выбранного пускача (exe или elf).

Это ровно одна платформа. И рантайм один и железка одна и та же.

1308
Хм... Интересно. Но вызывающих процедур (и вызываемых!) может быть много. К тому же, вызов может быть из блока-модуля, у которого и стека-то как бы нет.

Так не бывает, что у вызывающей нет стэка, а у вызываемой есть. Откуда он берется? :) Если вызывающих много - то у них все равно у каждой свой участок стэка...

Весь вопрос в том, стоит ли игра свеч. В смысле, перевешивают ли достоинства предлагаемого решения те недостатки, которые связаны с усложнением реализации.  ;)

Да каое ж там усложнение? Чай не плюсовые шаблоны... :)

1309
А кстати, что допиливаем – Оберон, Оберон-2, КП, Оберон-07, Active Oberon, Zonnon, MiniComponent Pascal? :-)

Давайте КП. Потому что в нем лишнего вроде как нет. Остальные менее популярны.

1310
C новым синтаксисом:
PROCEDURE f(): Record;
VAR r: Record
...
r.field := 0;
RETURN r;
Не понял. Туплю что-то  :)
Как процедура вернёт r, ведь после возврата из процедуры её кадр (вместе с локальной переменной r) будет снят со стека.

Здесь 'r' расположена на стэке, да. Но на стэке вызывающей процедуры. И эта вызывающая процедура (неявно) передает 'r' вызываемой через (неявный) VAR параметр.

Можно рассмотреть более сложный вариант, когда у вас в процедуре больше одного экземпляра Record, процедура работает с этими экземплярами, а потом решает - какой и них она "вернет" (если она имеет несколько RETURN). В этом случае без копирования не обойтись. Но вы без копирования не обойдетесь и в случае, когда у вас нет такого синтаксиса (в случае "классического" VAR параметра).

1311
Неправда :) Сейчас функции "возвращают" записи как VAR-параметр.
VAR-параметры передаются по ссылке. И эту ссылку функция возвращает в регистре.

Да не надо ей ничего возвращать в регистре. Было:
VAR r: Record;
...
f(r);
x := f.field;

С новым синтаксисом стало:
x := f().field;

Что сделал компилятор:
VAR compiler_generated: Record;
...
f(compiler_generated);
x := compiler_generated.field;

Внутри функции было:
PROCEDURE f(VAR r: Record)
...
r.field := 0;

C новым синтаксисом:

PROCEDURE f(): Record;
VAR r: Record
...
r.field := 0;
RETURN r;


Что сделал компилятор:
PROCEDURE f(VAR r: Record);
...
r.field := 0;

1312
Сейчас, вроде, сделано так, что все функции всегда возвращают результат в регистрах проца. Если разрешить функциям возвращать записи, то этой эффективной реализации придёт кирдык.  :)

Неправда :) Сейчас функции "возвращают" записи как VAR-параметр. Так что вопрос сугубо синтаксический. Никто не мешает компилятору по-прежнему использовать VAR-параметр, просто но будет скрытый. А с точки зрения синтаксиса - все будет единообразно.

1313

ИМХО массивы не с 0 - однозначное зло :) Или это уже не массив, а что-то более конкретное с конкретным индексом. Сколько с таким сталкивался... даже в С++ где можно обложить все это типами, чтобы не выстрелить в ногу - только головная боль. Или массив и 0 или не массив и итератор/ключ.
Интересно.... Пояснить свою точку зрения сможете ? Я свою - могу...

Эти единицы будут везде лезть - где-то с плюсом, где-то с минусом.

offset = index2 - index1;
array[offset]; // вот здесь будет артефактная 1

1314
Мой список (в предположении что популярности КП быстро не достигнуть, а реальные ресурсы на проработку ограничены):
1. Возможность возвращение функцией записи (а не указателя). не фиг плодить сущности где это не требуется...
2. Массивы  индексируемые с 1...(untagged с 0) - язык должен быть дружественным к начинающим...
3. Либо убрать repeat until, либо заменить его на do while (без инверсии условия продолжения).

ИМХО массивы не с 0 - однозначное зло :) Или это уже не массив, а что-то более конкретное с конкретным индексом. Сколько с таким сталкивался... даже в С++ где можно обложить все это типами, чтобы не выстрелить в ногу - только головная боль. Или массив и 0 или не массив и итератор/ключ.

1315
Общий раздел / Допилить оберон под себя
« : Март 09, 2011, 02:41:10 pm »
Про идеальный ЯП поговорили. Давайте про реальный: чего нужно допилить в КП (как наиболее "реальном" обероне) лично для вас, чтобы можно было его использовать вместо вашего текущего ЯП для текущих задач (если бы все пришлось писать заново). Оставим за скобками инфраструктуру (библиотеки, IDE и т.д.) - только сам язык. Вот мой список (в порядке уменьшения значимости):

1.Параллельные вычисления. Не знаю в каком виде, но нечто более высокоуровневое, нежели "вот вам стандартный мьютекс - а дальше вы сами разбирайтесь". ActiveOberon - тоже слишком низкоуровнево. Как минимум, на уровне языка должны быть полностью решены проблемы конкурентной модификации данных.
2. Обработка ошибок. Что-нибудь более продвинутое, чем явное таскание кода ошибки.
3. Обобщенное программирование. Хотя бы на уровне контейнеров и алгоритмов. Чтобы не изобретать в 10 раз за день список и не писать WHILE там, где на самом деле foreach.
4. Замыкания. Принципиально упрощают код, по сравнению с закатами солнца вручную.
5. Что-то для работы с ресурсами в scope (хотя бы аналог шарпового using).
6. Объявление переменных по месту. Писать с допотопным VAR'ом я уже не смогу :)
7. Синтаксис. Ну да, можно скрипеть зубами, писать КАПСОМ и расставлять все эти точки с запятой. Но после питона от нового языка хочется чего-нибудь человеческого.

P.S. Кстати, питон удовлетворяет этому списку, за исключением пункта 1. Ну и динамической типизации :) Есть еще хаскель... :) Но хотелось бы пойти от базового, понятного и простого.

1316
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 08, 2011, 08:31:18 pm »
Отсюда разумно и "человеколюбиво" по отношению к страждущим нормальной автоматизации организациям - выращивать как можно больше таких адекватных исполнителей или вооружать их подходом, практиками, инструментами для такой штучной автоматизации.

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

1317
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 08, 2011, 08:16:26 pm »
Только не решаются оне... задачи энти.
Что-то маловато довольных пользователей в сфере той же автоматизации предприятий.

Ну хорошо. Есть такая проблема. Казалось бы, причем тут оберон? Потому что Вирт смог соорудить такую систему с нуля? Еще раз: откуда уверенность, что на такое способен каждый "производственник на месте" в свободное от основной деятельности время?

1318
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 08, 2011, 08:09:28 pm »
Высосанные из пальца проблемы (при том у тех, у кого вообще нет практики в обсуждаемых технологиях) и ещё более надуманное их обсасывание.
Как же скучно.

Расскажите про ваш опыт портирования систем на КП на нескольких платформ. В смысле есть он или нет. Если же подобной практики у вас нет, то расскажите почему вы так уверены, что в случае КП подобные "высосанные" проблемы не актуальны (может быть портирование вообще не предусматривается, просто каждый раз создаем с нуля)?

1319
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 07, 2011, 08:40:07 pm »
Вот тут большое недопонимание касательно невостребованности.

Это иллюзия.

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

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

1320
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 07, 2011, 04:11:57 pm »
Вместо того, чтобы развязать руки от второстепенных мелочей и пройти по грани "необходимого и достаточного", решив за то же время целый ряд задач.

Я очень хорошо понимаю ваше желание "сэкономить" и недовольство большими спеками. Никто их не любит, все хотят быстро, качественно и дешево. Проблема в том, что это не работает "в большом" - в больших системах, с большим количеством разработчиков, с большим временем жизни.

Как Вирт с ПК, ОС и прикладными пакетами, или новосибирцы с Кроносом.

И опыт Вирта с его оберон-ОС'ом лишнее тому подтверждение. Где эта оберон-ОС? Кто ее будет тащить на новое железо? Не, напишут с нуля новую, еще более правильную. Но такую же невостребованную.

Страницы: 1 ... 86 87 [88] 89 90 ... 93