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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2011, 18:39   #71
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Вот такой можно еще синтаксический сахар:
Код:
while (...)
{ ... }
else
{ ... }
Ветвь else выполняется, если цикл не выполнился ни разу.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 29.11.2011, 19:08   #72
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Синтаксические замены? Ленивые вычисления? Последнее конечно сложновато для компиляторов, но все же. В конце концов все эти лиспы, Scheme и Haskell получили полноценные компиляторы и трансляторы в С.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.11.2011, 20:58   #73
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
тем что у них есть Initialization и Finalization секции
Которые используются частенько для инициализации и очистки памяти за глобальными переменными? Я, собственно, больше и не знаю что там можно понаписать.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
, плюс ещё куча всяких мелочей и нюансов.
Если не совсем забыл делфи, то там uses из интерфейсного раздела как бы наследуются.
Допустим, есть три модуля a,b и c.
в b написано uses a.
в c написано uses b, но про а ничего не написано. При этом модуль этот виден, т.к. он используется в b. Поправьте, если это я нафантазировал, ибо давненько я код на этом языке не писал
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
очевидно, это в 10 раз удобнее, чем тупые инклуды
Не так уж чтобы и в 10 раз... Просто сложно быть хуже банальной вставки содержимого указанного файла вместо строки #include ...
pu4koff вне форума Ответить с цитированием
Старый 29.11.2011, 22:12   #74
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Не знаю кто как, но я в php частенько пользуюсь подобным:
file.php:
Код:
<?
class MyModule extends Module{
//...
}
return new MyModule(...);
?>
core.php
<?
class Core{
  function CollectModules(){
    mod = include("file.php");
  }
}
?>
Да, да! Я быдло php кодер...

Цитата:
Код:
while (...)
{ ... }
else
{ ... }
Тоже и для for'а было бы не плохо
Kostia вне форума Ответить с цитированием
Старый 30.11.2011, 11:31   #75
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Чем оно принципиально отличается от инклюдов?
uses не включается в исходный код.
если вам ближе С++, то по сути это отдельная пара .cpp+.h, все что в .h мы видим, а в .cpp код.
итог, ускоряется время компиляции.
Цитата:
Тогда уж пусть будет всё и всегда виртуальным, для избежания путаницы.
в какой то мере так и будет, но про final помним.(искл, оптимизация итогового бинарника)
Цитата:
Вот такой можно еще синтаксический сахар:
интересная вещь, в принципе реализуется не сложно, но главное не перепуть где чей else.
Цитата:
Которые используются частенько для инициализации и очистки памяти за глобальными переменными? Я, собственно, больше и не знаю что там можно понаписать.
ну это зависит от программиста, но например jpeg использует эти секции для регистрации класса TJPEGImage для TPicture.LoadFromFile.
Цитата:
Если не совсем забыл делфи, то там uses из интерфейсного раздела как бы наследуются.
Допустим, есть три модуля a,b и c.
про доступ не помню, но использование естественно наследуется(обычно неявно, чтоб не мешать).
Цитата:
Не знаю кто как, но я в php частенько пользуюсь подобным:
я немного не понял этого...

PS: повторю еще раз, что занимаюсь в свободное время.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.11.2011, 15:42   #76
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Вот такой можно еще синтаксический сахар:
Код:
while (...)
{ ... }
else
{ ... }
Ветвь else выполняется, если цикл не выполнился ни разу.
В Python'е ветвь else цикла выполняется, если выход из цикла был не по break'у, а нормальный (конец последовательности в for'е, ложность условия в while'е). Хотя и такой , и ваш варианты я не приветствую. По-моему оно делает код нечитабельным.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
как в делфи uses.
Да, только вы не поняли меня до конца. Я имел ввиду, что import можно будет писать не только в начале файла, но и посреди метода. Тогда внешние имена модуля импортируются в локальное пространство имён, не загрязняя основное.

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

По поводу последних двух моих замечаний. Они оба касаются структуры программы на языке. Как вы могли заметить, я сторонник однородной функциональной декомпозиции, т.е. на самом верхнем уровне мы имеем некоторую проблему, а её решение разбито на подуровни, каждый из которых может также быть разбит и т.д.

Согласитесь, это похоже не решение многих реальных задач? Было бы удобно, если бы язык давал возможность безболезненно писать подобные вещи. Например, так:

Код:
foo(x, y, z) = a * b * c // Разбиваем задачу на подзадачи
    where
        a = very_long_calculation(x, y) // Решаем каждую
        b = very_long_calculation(z, y) // подзадачу отдельно
        c = very_long_calculation(x, z)
Конечно, в типичных ЯП (С++) такой подход итак применяется, но он не структурирован. Т.е. в одном пространстве имён десятки переменных, и не всегда понятно, для чего они нужны. Тем более там они объявляются до использования, а тут описаны после. А иногда, читая программу сверху вниз, удобно сначала видеть решение большой задачи, а потом уже решение подзадач.

И да, если выберите мой способ, то придётся дать возможность объявлять функции не только в корне файла, но и внутри функций (в примере вместо переменных a, b и c в блоке where вполне могли быть объявлены и функции)

Последний раз редактировалось anyx; 30.11.2011 в 15:48.
anyx вне форума Ответить с цитированием
Старый 30.11.2011, 16:12   #77
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Конечно, в типичных ЯП (С++) такой подход итак применяется, но он не структурирован. Т.е. в одном пространстве имён десятки переменных, и не всегда понятно, для чего они нужны. Тем более там они объявляются до использования, а тут описаны после. А иногда, читая программу сверху вниз, удобно сначала видеть решение большой задачи, а потом уже решение подзадач.

И да, если выберите мой способ, то придётся дать возможность объявлять функции не только в корне файла, но и внутри функций (в примере вместо переменных a, b и c в блоке where вполне могли быть объявлены и функции)
Велосипед который Вы изобретаете называется функциональное программирование. Добавьте безымянные функции и Вы получите лямбда исчисление.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.11.2011, 16:23   #78
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Велосипед который Вы изобретаете называется функциональное программирование. Добавьте безымянные функции и Вы получите лямбда исчисление.
Ну дык функции внутри функций и в си можно объявлять.
the_deer_one вне форума Ответить с цитированием
Старый 30.11.2011, 16:25   #79
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Велосипед который Вы изобретаете называется функциональное программирование. Добавьте безымянные функции и Вы получите лямбда исчисление.
Спасибо, я знаю.
Не думаете же вы, что конструкцию where я сам придумал, да ещё и по странному совпадению обозвал тем же словом, что и в Хаскелле?

Цитата:
Сообщение от Utkin Посмотреть сообщение
Ленивые вычисления?
Ленивые вычисления плохо сочетаются с побочными эффектами функций. А язык, насколько я понимаю, будет императивный, и побочные эффекты будут его неотъемлемой частью.

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
Ну дык функции внутри функций и в си можно объявлять.
Во-первых, не в Си, а в С++, и только последней версии стандарта.
Во-вторых, отсутствие автоматического вывода типов (и, как следствие, необходимость объявлять тип в лямбдах), делает их громоздким и неудобным инструментом (каким, собственно, сам С++ и является)

Кстати, Пепел Феникса, как в вашем языке дела с автоматическим выводом типов? Это слишком полезная вещь, чтобы от неё отказываться.

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

Цитата:
Мне кажется, что такие секции в модулях дельфы - источник подводных камней. Вы юзаете модуль, даже не подозревая об его побочных эффектах (выполнение кода до начала выполнения основной программы и после её завершения). Вообще любые побочные эффекты - источник потенциальных ошибок.
по вашему автоматическая подготовка модуля к выполнению это ошибка?
это вместо ручного вызова Module_Init .
Цитата:
Я имел ввиду, что import можно будет писать не только в начале файла, но и посреди метода. Тогда внешние имена модуля импортируются в локальное пространство имён, не загрязняя основное.
С++ using.
Цитата:
Ленивые вычисления плохо сочетаются с побочными эффектами функций. А язык, насколько я понимаю, будет императивный, и побочные эффекты будут его неотъемлемой частью.
при умении нормально сочтутся, но тут нужна сильная поддержка от компилятора.
Цитата:
Кстати, Пепел Феникса, как в вашем языке дела с автоматическим выводом типов? Это слишком полезная вещь, чтобы от неё отказываться.
автоматическое задание типа переменной по её значению?
var в C#, auto в C++.0x
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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