Автор Тема: Часто замечаю за собой  (Прочитано 30743 раз)

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #15 : Февраль 24, 2012, 12:03:49 pm »
А язык тут причем? - надо Илье сказать - айайайай, и укоризненно покачать пальцем  :D

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #16 : Февраль 24, 2012, 12:05:46 pm »
А язык тут причем? - надо Илье сказать - айайайай, и укоризненно покачать пальцем  :D
Язык при том, что не позволяет это сделать универсально, удобно и быстро (по производительности) без подобных хаков :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #17 : Февраль 24, 2012, 12:07:26 pm »
А язык тут причем? - надо Илье сказать - айайайай, и укоризненно покачать пальцем  :D
Язык при том, что не позволяет это сделать универсально, удобно и быстро (по производительности) без подобных хаков :-)
А с чего вы взяли что он ДОЛЖЕН это делать?  ;)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #18 : Февраль 24, 2012, 12:12:53 pm »
А с чего вы взяли что он ДОЛЖЕН это делать?  ;)
Ну, если нам нужен действительно безопасный язык, то либо он сам должен всегда занулять (точнее забивать дефолтными значениями, дефолтное значение зависит от типа) все поля записей и прочее (предоставляя возможность прагмой или как-то иначе отрубить это забивание в данном конкретном месте), либо он должен предоставить возможность написать самому подобное используя лишь безопасные средства языка.

Скажем в D можно и так и эдак. То есть по умолчанию он всегда инициализирует все дефолтными значениями, зависящими от типа данных. Это можно отключить в данном конкретном месте, если там мы экономим такты процессора. Но если бы даже этого и не было бы, то в D это можно было бы сделать средствами метапрограммирования времени компиляции (то есть накладных расходов в рантайме будет не больше чем от возможности вшитой в язык). И все это не покидая уютненького safe-подмножества D. И никаких IMPORT SYSTEM.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #19 : Февраль 24, 2012, 12:23:08 pm »
А с чего вы взяли что он ДОЛЖЕН это делать?  ;)
Ну, если нам нужен действительно безопасный язык, то либо он сам должен всегда занулять (точнее забивать дефолтными значениями, дефолтное значение зависит от типа) все поля записей и прочее (предоставляя возможность прагмой или как-то иначе отрубить это забивание в данном конкретном месте), либо он должен предоставить возможность написать самому подобное используя лишь безопасные средства языка.

Скажем в D можно и так и эдак. То есть по умолчанию он всегда инициализирует все дефолтными значениями, зависящими от типа данных. Это можно отключить в данном конкретном месте, если там мы экономим такты процессора. Но если бы даже этого и не было бы, то в D это можно было бы сделать средствами метапрограммирования времени компиляции (то есть накладных расходов в рантайме будет не больше чем от возможности вшитой в язык). И все это не покидая уютненького safe-подмножества D. И никаких IMPORT SYSTEM.
Ну вы даете... вроде давно уже было показано, что текущие Обероны это плод комплексных усилий  Вирта и К . в которые входят 1. стремление к примитивизму 2. Стремление к универсальности 3. Неспособность рассматривать текущие реалии 4.  ... И тупое нежелание увеличивать описание языка хотя бы на страницу.  :D Как результат - имеет то , что имеем. Нетривиальным (по крайней мере, для меня) является вопрос об области наиболее эффективного использования их  творений...
 :D :D

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #20 : Февраль 24, 2012, 12:32:23 pm »
Кстати, вопрос к Илье - а не лучше ли подобные средства для обеспечения пущей безопасности, которые, тем не менее реализуются через системные возможности (типа ZeroRec), то есть требуют SYSTEM, завернуть в еще один модуль?

То есть есть SYSTEM.ZeroRec и компания. Берем, пишем какой-нибудь модуль SafeInit, уже в нем импортируем SYSTEM, и определяем SafeInit.ZeroRec, в которой дергается уже SYSTEM.ZeroRec. Таким образом модули которым SYSTEM не нужен, а безопасное зануление переменных для пущей безопасности, нужно, будут импортировать лишь SafeInit c безопасной функцией ZeroRec. А IMPORT SYSTEM останется для тех, кому нужны не безопасные возможности этого система, для неких своих низкоуровневых грязных хаков.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #21 : Февраль 24, 2012, 12:41:26 pm »
Кстати, вопрос к Илье - а не лучше ли подобные средства для обеспечения пущей безопасности, которые, тем не менее реализуются через системные возможности (типа ZeroRec), то есть требуют SYSTEM, завернуть в еще один модуль?

То есть есть SYSTEM.ZeroRec и компания. Берем, пишем какой-нибудь модуль SafeInit, уже в нем импортируем SYSTEM, и определяем SafeInit.ZeroRec, в которой дергается уже SYSTEM.ZeroRec. Таким образом модули которым SYSTEM не нужен, а безопасное зануление переменных для пущей безопасности, нужно, будут импортировать лишь SafeInit c безопасной функцией ZeroRec. А IMPORT SYSTEM останется для тех, кому нужны не безопасные возможности этого система, для неких своих низкоуровневых грязных хаков.
  ;) А я почему -то уверен, что так у него и сделано....

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Часто замечаю за собой
« Ответ #22 : Февраль 24, 2012, 12:42:16 pm »
Кстати, вопрос к Илье - а не лучше ли подобные средства для обеспечения пущей безопасности, которые, тем не менее реализуются через системные возможности (типа ZeroRec), то есть требуют SYSTEM, завернуть в еще один модуль?
Так оно и есть. Импорт SYSTEM требует сама ZeroRec для своей реализации, но импорт SYSTEM не требуется от того кто использует уже готовую ZeroRec.

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #23 : Февраль 24, 2012, 12:50:23 pm »
Кстати, вопрос к Илье - а не лучше ли подобные средства для обеспечения пущей безопасности, которые, тем не менее реализуются через системные возможности (типа ZeroRec), то есть требуют SYSTEM, завернуть в еще один модуль?
Так оно и есть. Импорт SYSTEM требует сама ZeroRec для своей реализации, но импорт SYSTEM не требуется от того кто использует уже готовую ZeroRec.
А по другому сделать вроде и невозможно -идиотский вариант помещения этой процедуры в модуль где она вызывается  исключаем (но даже в этом случае "небезопасная часть" ограничена этим модулем+ факт, что для использования сущности из SYSTEM НЕОБХОДИМО использование полного квалификатора )

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #24 : Февраль 24, 2012, 12:58:46 pm »
Кстати, вопрос к Илье - а не лучше ли подобные средства для обеспечения пущей безопасности, которые, тем не менее реализуются через системные возможности (типа ZeroRec), то есть требуют SYSTEM, завернуть в еще один модуль?
Так оно и есть. Импорт SYSTEM требует сама ZeroRec для своей реализации, но импорт SYSTEM не требуется от того кто использует уже готовую ZeroRec.
Ну, там народ не однозначно написал. У меня сложилось впечатление, что у Ильи слегка подхачен псевдомодуль SYSTEM, в который добавлена функция ZeroRec. Таким образом заимпортировав псевдомодуль SYSTEM получаем в свое рапоряжение инлайн-функцию ZeroRec, то есть на самом деле вызывая ZeroRec мы не получим вызова функции, обнуление будет выполнено на месте - минимум накладных расходов + минимум синтаксического оверхеда (не нужно писать ModuleName.ZeroRec, можно писать просто ZeroRec). Возможно конечно я тут ошибся.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #25 : Февраль 24, 2012, 01:06:08 pm »

Ну, там народ не однозначно написал. У меня сложилось впечатление, что у Ильи слегка подхачен псевдомодуль SYSTEM, в который добавлена функция ZeroRec. Таким образом заимпортировав псевдомодуль SYSTEM получаем в свое рапоряжение инлайн-функцию ZeroRec, то есть на самом деле вызывая ZeroRec мы не получим вызова функции, обнуление будет выполнено на месте - минимум накладных расходов + минимум синтаксического оверхеда (не нужно писать ModuleName.ZeroRec, можно писать просто ZeroRec). Возможно конечно я тут ошибся.
Инлайн - процедуры в КП? -а что они там есть ?, но пусть даже и есть, лично мне непонятно как можно ВЫЗВАТЬ  ZeroRec без ModuleName.ZeroRec - даже если она и находится в SYSTEM (SYSTEM.ZeroRec)?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #26 : Февраль 24, 2012, 01:19:57 pm »

Ну, там народ не однозначно написал. У меня сложилось впечатление, что у Ильи слегка подхачен псевдомодуль SYSTEM, в который добавлена функция ZeroRec. Таким образом заимпортировав псевдомодуль SYSTEM получаем в свое рапоряжение инлайн-функцию ZeroRec, то есть на самом деле вызывая ZeroRec мы не получим вызова функции, обнуление будет выполнено на месте - минимум накладных расходов + минимум синтаксического оверхеда (не нужно писать ModuleName.ZeroRec, можно писать просто ZeroRec). Возможно конечно я тут ошибся.
Инлайн - процедуры в КП? -а что они там есть ?, но пусть даже и есть, лично мне непонятно как можно ВЫЗВАТЬ  ZeroRec без ModuleName.ZeroRec - даже если она и находится в SYSTEM (SYSTEM.ZeroRec)?
SYSTEM это ж не модуль, это псевдомодуль. То есть импортируя его модифицируешь язык. Например новые языковые конструкции становятся доступны (могуть становиться). См в ББ например всякие там [untagged] [call] и прочее. То есть импорт этого дела не просто добавляет возможность вызывать какие-то новые процедуры, а модифицирует в том числе и синтаксис языка. Ну и добавить несколько предопределенных inline-процедур - как нефиг делать.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #27 : Февраль 24, 2012, 01:36:05 pm »
То есть импорт этого дела не просто добавляет возможность вызывать какие-то новые процедуры, а модифицирует в том числе и синтаксис языка. Ну и добавить несколько предопределенных inline-процедур - как нефиг делать.
Не понимаю
 Причем тут инлайн процедуры?- я знаю 2 значения этого понятия:
1. Процедуры написанные с использованием кодов  процессора (сверх - низкий уровень) - изредка использовались в ранних версиях Борландовых паскалей
2.В СИ++  "безопасный" аналог  макроподстановки -требует 2- проходного компилятора.
Но ни первое, ни второе определение не позволяют изменить КОМПИЛЯТОР - в частности, правила по которым обрабатываются идентификаторы (в данном случае вызовы процедур). Конечно можно представить себе некий препроцессор, который перед компиляцией  заменят  M.Proc -на SYSTEM.ZeroRec - но это в контексте задачи идиотизм в квадрате...
« Последнее редактирование: Февраль 24, 2012, 01:38:04 pm от DIzer »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Часто замечаю за собой
« Ответ #28 : Февраль 24, 2012, 01:47:37 pm »
Еще раз - IMPORT SYSTEM может добавить встроенных в язык функций. Ведь никто не указывает имя модуля когда использует функцию LEN, или INC, или ASSERT. При этом они не являются зарезервированными, ключевыми, словами языка.

Так вот - импортировал SYSTEM, получил еще одну встроенную функцию ZeroRec.

Кроме того, ни INC ни LEN ни ASSERT обычно не являются функциями/процедурами, то есть никто ничего на стек не кладет, не делает  call и не разбирает возвращаемое значение. Это чисто inline-функции/процедуры. То же самое может быть и с ZeroRec.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Часто замечаю за собой
« Ответ #29 : Февраль 24, 2012, 02:13:09 pm »
Еще раз - IMPORT SYSTEM может добавить встроенных в язык функций. Ведь никто не указывает имя модуля когда использует функцию LEN, или INC, или ASSERT. При этом они не являются зарезервированными, ключевыми, словами языка.

Так вот - импортировал SYSTEM, получил еще одну встроенную функцию ZeroRec.

Кроме того, ни INC ни LEN ни ASSERT обычно не являются функциями/процедурами, то есть никто ничего на стек не кладет, не делает  call и не разбирает возвращаемое значение. Это чисто inline-функции/процедуры. То же самое может быть и с ZeroRec.
МОЖЕТ , например если вы покопаетесь в компиляторе, кстати чего-то не увидел ИСХОДНИКИ модуля SYSTEM , с чего бы это ?  ;)  и добавить процедуру туда точно  уж  - НЕ "как нефиг делать".
« Последнее редактирование: Февраль 24, 2012, 02:15:37 pm от DIzer »