Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 19:12   #81
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
по вашему автоматическая подготовка модуля к выполнению это ошибка?
это вместо ручного вызова Module_Init .
Это всё зависит от планируемой идеологии языка. Для Си-плас-плас и аналогов это не айс, потому как непонятно когда именно вызовется эта самая инициализация и когда выгрузка ресурсов. Для какого-нибудь языка со сборщиком мусора освобождение ресурсов - это не так критично и Finalization не так убого будет выглядеть. Косяк Initialization в том, что работоспособность в некоторых случаях (если там какая-то работа с файлами, сетью,...) будет зависеть от порядка подключения модулей.
Организацию модулей программы в плюсах я бы вообще не рассматривал, т.к. её там нет. Есть отдельные срр файлы, которые друг с другом вообще никак не связаны и больше ничего. Основную работу, как я понимаю, выполняет линковщик и ему это, наверно, не очень легко
pu4koff вне форума Ответить с цитированием
Старый 30.11.2011, 19:45   #82
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Ленивые вычисления плохо сочетаются с побочными эффектами функций.
Не совсем представляю как это. Приведите пример из реальной жизни.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.11.2011, 20:47   #83
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Организацию модулей программы в плюсах я бы вообще не рассматривал, т.к. её там нет. Есть отдельные срр файлы, которые друг с другом вообще никак не связаны и больше ничего. Основную работу, как я понимаю, выполняет линковщик и ему это, наверно, не очень легко
я знаю что это не совсем корректный пример, но пример.
Цитата:
Косяк Initialization в том, что работоспособность в некоторых случаях (если там какая-то работа с файлами, сетью,...) будет зависеть от порядка подключения модулей.
я считаю что это должно быть на плечах компилятора, чтоб было четкое правило насчет последовательности инициализации модулей.
Цитата:
Для Си-плас-плас и аналогов это не айс, потому как непонятно когда именно вызовется эта самая инициализация и когда выгрузка ресурсов. Для какого-нибудь языка со сборщиком мусора освобождение ресурсов - это не так критично и Finalization не так убого будет выглядеть.
финализация модулей по большей части нужна ради действий перед завершением приложений, ибо утечки ресурсов не будет.(хотя не во всех ОС это справедливо пожалуй)

ну и думаю необходимо добавить возможность написание документации в коде(как в шарпе)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.12.2011 в 09:42.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2011, 14:22   #84
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
автоматическое задание типа переменной по её значению?
var в C#, auto в C++.0x
Не обязательно было перечислять, я знаю все эти языки...

Я говорю об автоматическом выводе типа вообще всего, для чего это возможно. Я хочу описывать функцию как foo(b, ts, es), а не как foo(b: bool; ts, es: String). И если я потом эту функцию использую как foo(x == y, "equals", "not equals"), то компилятор сам выведет тип аргументов функции, а из этого и тип результата. Фактически, тип нужно будет указывать только у public-функций модуля и у public- и protected-методов public-классов модуля.

Цитата:
Сообщение от Utkin Посмотреть сообщение
Не совсем представляю как это. Приведите пример из реальной жизни.
Код:
main() =
{
    f = File("ololo.txt");
    a = f.read(1); // Здесь мы не вычисляем значение,
    b = f.read(1); // т.к. оно нам пока не нужно
    print(b + a); // Здесь отложенные вычисления нужно произвести
    // Сначала a, потом b (по порядку в списке аргументов оператора +)
}
В приведённом примере на некоем абстрактном ЯП два байта будут записаны в переменные a и b в обратном (!) порядке, чем мы ожидаем, ведь сначала будет вычисляться значение второго аргумента оператора +. Если бы вместо сложения был бы некоммутативный оператор (порядок операндов имеет значение), то результат бы отличался от ожидаемого. А виной всему нечистота функции File::read, имеющей побочные эффекты.

Последний раз редактировалось anyx; 01.12.2011 в 14:28.
anyx вне форума Ответить с цитированием
Старый 01.12.2011, 14:38   #85
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

anyx, Вы, как мне кажется перепутали немного. В вашем примере все должно вычисляться. Мне известны два варианта организации ленивых вычислений - это неявная обработка параметров функций и явно откладывание вычислений. Явное откладывание реализовано в Scheme - там есть два оператора, один "замораживает" вычисление, до тех пор пока это не потребует другой оператор, который заставляет немедленно вычислить выражение в данной точке. Все явно и ответственность за косяки лежит на программисте. В первом же случае входящий параметр не вычисляется в момент входа в функцию. Например
Код:
функция (х, у) - В данный момент значения и первого и второго параметра неизвестны  
(
     Введем переменную а=10 - В данный момент значения и первого и второго параметра неизвестны  
     а = х+5 - Здесь вычисляется х, затем вычисляется а. У не известен
     а = а/у - Здесь вычисляется у, затем вычисляется а
)
Как видите все тривиально и противоречия не возникают. Если вызвать функцию, например как функция (10, 4-6*2), то второй параметр будет вычислен только в строке:
Код:
а=а/4-6*2
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 01.12.2011 в 14:46.
Utkin вне форума Ответить с цитированием
Старый 01.12.2011, 14:41   #86
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Я говорю об автоматическом выводе типа вообще всего, для чего это возможно. Я хочу описывать функцию как foo(b, ts, es), а не как foo(b: bool; ts, es: String). И если я потом эту функцию использую как foo(x == y, "equals", "not equals"), то компилятор сам выведет тип аргументов функции, а из этого и тип результата. Фактически, тип нужно будет указывать только у public-функций модуля и у public- и protected-методов public-классов модуля.
это практически шаблоны С++.
Цитата:
В приведённом примере на некоем абстрактном ЯП два байта будут записаны в переменные a и b в обратном (!) порядке, чем мы ожидаем, ведь сначала будет вычисляться значение второго аргумента оператора +. Если бы вместо сложения был бы некоммутативный оператор (порядок операндов имеет значение), то результат бы отличался от ожидаемого. А виной всему нечистота функции File::read, имеющей побочные эффекты.
добавить компилю чуть ума и все норм.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2011, 14:58   #87
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
это практически шаблоны С++.
ЧТО? Ничего общего. Шаблоны - способ реализации обобщённого программирования, с автоматическим выводом типов не имеет вообще ничего общего. Вы меня плохо поняли, перечитайте посты.

Цитата:
Сообщение от Utkin Посмотреть сообщение
Явное откладывание реализовано в Scheme - там есть два оператора, один "замораживает" вычисление, до тех пор пока это не потребует другой оператор, который заставляет немедленно вычислить выражение в данной точке. Все явно и ответственность за косяки лежит на программисте.
В Haskell это происходит автоматически и прозрачно для программиста. Я имел ввиду, естественно, именно это. Естественно, компилятор должен сам за всем следить
anyx вне форума Ответить с цитированием
Старый 01.12.2011, 15:11   #88
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
В Haskell это происходит автоматически и прозрачно для программиста. Я имел ввиду, естественно, именно это. Естественно, компилятор должен сам за всем следить
Да, там реализовано по параметрам функций. При том, там еще типа оптимизации - синтаксическая замена. В идеале такой вызов функции из примера может быть заменен вообще константой (если возвращаемый тип позволит).

Пепел Феникса, там идет речь еще и об удобстве синтаксиса - в большинстве случаев на основании рассмотрения операций проводимых в функции можно определить типы входящих параметров и результата без участия программиста. Вывод типов полезная фишка.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 01.12.2011 в 15:13.
Utkin вне форума Ответить с цитированием
Старый 01.12.2011, 15:21   #89
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
ЧТО? Ничего общего. Шаблоны - способ реализации обобщённого программирования, с автоматическим выводом типов не имеет вообще ничего общего. Вы меня плохо поняли, перечитайте посты.
вы имеете в виду чтоб компилятор по коду функции(и вызову при необходимости) вывел типы функций при компиляции?

если нет вызовов то такое можно гарантировать(и то с оговорками) только для встроенных типов(базовых).
а если есть, то практически для любых классов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.12.2011 в 15:26.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2011, 15:29   #90
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
вы имеете в виду чтоб компилятор по коду функции(и вызову при необходимости) вывел типы функций при компиляции?
Что значит при компиляции? В тот момент как Вы закончили её писать .

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

Цитата:
Ну дык функции внутри функций и в си можно объявлять.
Да, только там еще надо догадаться, что если функция будет использоваться только внутри другой, то и имя ей можно не давать и вообще будет полный шоколад .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 01.12.2011 в 15:58.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55