HLFX.Ru Forum
Показать все 44 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- спор (https://hlfx.ru/forum/showthread.php?threadid=4164)


Отправлено thambs 11-11-2013 в 23:20:

спор

поспорили тут с ксвайдером, рассудите, кто дурак, а кто идиот. ниразу не кодер, потому самому интересно. по крайней мере среди тех кто занимается численным моделированием я часто встречал такой подход. например, вот эта http://hif.lbl.gov/theory/WARP_summary.html программа, насколько знаю так реализована.

Цитата:

(10 Nov 2013 23:56:06) timth:
... перевести её на f2py -- так что бы числодробильное ядро было на фортране, а всё управление делалось из питон-скриптов и можно было как угоддно комбинировать модули, без перекомпиляции
(10 Nov 2013 23:56:29) xwider:
можно я после этого тебя пристрелю?
(10 Nov 2013 23:57:04) xwider:
или сразу пиши на вижуал бейсике
(10 Nov 2013 23:57:32) timth:
какой ещё кроме питона скриптовый язык ты прелагаешь?
(10 Nov 2013 23:57:33) xwider:
no u
(10 Nov 2013 23:57:35) timth:
анальную lua?
(10 Nov 2013 23:57:43) timth:
анальный perl?
(10 Nov 2013 23:58:06) xwider:
если тебе не хватает make, shellscript, то...
(10 Nov 2013 23:58:28) timth:
shellscript не умеет напрямую вызывать фортрановые функции
(10 Nov 2013 23:58:35) timth:
да и сишные не умеет
(10 Nov 2013 23:58:42) timth:
он умеет только вызывать саму программу
(10 Nov 2013 23:58:42) xwider:
а ты их сделай экспортными или прост окак опции
(10 Nov 2013 23:58:55) timth:
ну так этих опций становится всё больше и больше
...
(10 Nov 2013 23:59:32) xwider:
если проге требуется какая-то внешняя поебень - адекватность сомнительна
(10 Nov 2013 23:59:52) xwider:
всё управление - в main
(11 Nov 2013 00:00:09) timth:
и main разрастается до неприличных размеров

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 11-11-2013 в 23:40:

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

Добавлено 12-11-2013 в 05:37:

thambs
Вообще, в таких спорах победителя определить очень просто.
Побеждает тот, у кого больше публикаций и индекс Хирша.

Добавлено 12-11-2013 в 05:40:

Вот с этим, я считаю, надо бороться, и это вроде как раз то, о чём ты говоришь.
http://pubs.acs.org/doi/abs/10.1021/ci800233y

__________________

xaerox on Vivino


Отправлено thambs 11-11-2013 в 23:45:

XaeroX

спор всё таки именно о подходе: или всё пишем на хардкодим компилируемом языке и делаем тыщу опций, или выносим логику в скрипт. конкретные яп -- дело вкуса. C и F95 одинакого быстро работают, а что lua, что python одинакого тормозят.

Добавлено 12-11-2013 в 02:43:

XaeroX

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

Добавлено 12-11-2013 в 02:45:

XaeroX

не пускает, можешь процитировать?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 11-11-2013 в 23:50:

thambs
Скрипты - это как плагины к редактору, они должны быть приятным и функциональным дополнением, но ядро должно уметь по меньшей мере 90% того, что может тебе понадобиться.
"Тыща опций" - признак плохой архитектуры, когда программа пишется по принципу "добавим это и прикрутим то, и готова новая бубликация". А сделать полноценный рефакторинг, конечно же, денег нет, да и зачем, главное ж отчёты написать, а рецензенты никогда в код не смотрят.
Собсно, потому научный софт и представляет собой помойку из сотен мало похожих инструментов с отсутствием каких-либо стандартов, разобраться в которых, вероятно, не смогут и сами авторы по прошествии десятка лет. Порой даже в рамках одного пакета (привет, AMBER).

Добавлено 12-11-2013 в 05:50:

Цитата:
thambs писал:
ты имел опыт работы с иностранными изателями

У нас неплохой опыт сотрудничества с Journal of Computational Chemistry (хотя импакт-фактор 4.2 не очень-то высокий), и свой софт я публиковал именно там. А что сказать? Если статья написана грамотно и по правилам, проблем нет. Принимают. Публикуют. Цитируют.
Начинал тоже с "хорошего отечественного журнала", но туда попасть намного проще, а импакт в разы ниже, какой смысл?
Цитата:
thambs писал:
что наши журналы почти не читают

Если уж писать в наш, то только в переводной, т.е. который сама редакция переводит на англ. и издаёт "там", хотя бы и чисто в онлайне.
Цитата:
thambs писал:
не пускает, можешь процитировать?

Ну там тулкит на питоновских скриптах как раз.

__________________

xaerox on Vivino


Отправлено thambs 11-11-2013 в 23:56:

>Ну там тулкит на питоновских скриптах как раз.

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

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено FreeSlave 11-11-2013 в 23:58:

Я не совсем понял, что имел в виду xwider в разговоре. С одной стороны предлагает шелл, а с другой выступает против внешней фигни - как я понял - под этим значится вызов сторонних программ с созданием процесса, что не true-way. А под "сделать экспортными" должно быть имеется в виду экспорт из динамической/разделяемой библиотеки?

Да и в каком контексте этот разговор? Разработка собственной системы мат. моделирования?


Отправлено thambs 12-11-2013 в 03:41:

>"Тыща опций" - признак плохой архитектуры, когда программа пишется по принципу "добавим это и прикрутим то

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

>архитектуры
вот тут ты мне подскажи, может такие вещи красиво можно сделать безо всяких внешних скриптов.

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

а вот в зависимости от задачи их можно по разному комбинировать:

сейчас у меня стоит задача газового разряда, поэтому мне необходимо считать все процессы. причём, так как ионы и электроны двигаются намного быстрее нейтральных атомов, то соответственно, на одну итерацию атомов приходится до ~1000 итераций плазменных циклов, и статистика собирается определённым образом, массивы зануляются в нужные моменты.

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

и вот вроде основа одна, а основной цикл счёта для разного типа задач получается разным.

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

>разработка
ну не разработка, а доведение до состояния, когда от быдлокода у посторонних глаза не вытекают.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено nemyax 12-11-2013 в 05:07:

Цитата:
XaeroX писал:
"Тыща опций" - признак плохой архитектуры

Ты бы предпочёл GUI с нодами?


Отправлено Дядя Миша 12-11-2013 в 06:56:

Цитата:
XaeroX писал:
Но я не теряю надежды и упорно гну свою линию.

Но я не теряю надежды и GNU свою линию!

А Хвидера слушать не надо, он раньше на STL ругался, а теперь вовсю юзает.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 12-11-2013 в 09:06:

вот это нихрена себе!
ночью двумя строчками в жабе перекинулись, и тут на тебе - спор! А это ничего, вообще, что чужие пьяные цитаты без спросу на форум выкидывают?
да ещё какие-то быдлоспоры про быдлокоды...

я хвидеру всё расскажу!

thambs
"ниразу не кодер", так и не поднимай флуды на глупые темы

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 12-11-2013 в 09:22:

Цитата:
thambs писал:
можешь тогда разъяснить, почему это плохо? не хочу повторят чужих ошибок.



Цитата:
nemyax писал:
Ты бы предпочёл GUI с нодами?

А кстати да.
Пример: http://ugene.unipro.ru/
В разработке участия не принимал, если не считать один совместно распиленный грант.

Цитата:
thambs писал:
то, что их уже порядка 20 меня несколько беспокоит.

Вынеси в конфиг.
Цитата:
thambs писал:
может такие вещи красиво можно сделать безо всяких внешних скриптов

Единая программа на плюсах, модули - классы, подключение - через опции в конфиге. Все параметры - в конфиг. В идеале несколько конфигов: один "простой", остальные "сложные" для тонкой подстройки. И быстродействие на высоте, и у юзера от обилия ру-файлов глаза не разбегаются, и можно организовать некий "дефолтовый" конвейер, походящий под большинство ситуаций. Ну, я так делаю.
Цитата:
Дядя Миша писал:
GNU свою линию

Кстати да, GNU GPL.

Добавлено 12-11-2013 в 15:22:

Цитата:
~ X ~ писал:
так и не поднимай флуды на глупые темы

Это как раз редкая "умная" тема, где можно о работе поговорить. А то всё халфа да халфа.

__________________

xaerox on Vivino


Отправлено nemyax 12-11-2013 в 09:31:

XaeroX
А чёйта в твоём демотиваторе всё больше про функциональщину? =)


Отправлено XaeroX 12-11-2013 в 09:43:

nemyax
Ну есть немного, но не большая часть.

__________________

xaerox on Vivino


Отправлено thambs 13-11-2013 в 00:27:

~ X ~
ну вот что ты опять бугуртуешь? выложил маленький кусочек что бы было ясно о чём речь, я ж там никаких твоих скелетов в шкафах не рассказывал (я по правде, о них и не знаю).

Добавлено 13-11-2013 в 03:27:

XaeroX

ну на счёт разных конфигов, это, наверное разумно. пока у меня всё в одном большом конфиге (ну кроме геометрии, она отдельным файлом ибо общая)

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено nemyax 13-11-2013 в 11:32:

Цитата:
XaeroX писал:
Ненавижу питон.

А лува чем лучше? У неё тоже нет ни паттерн-матчинга, ни алгебраических типов, ни даже быстродействия. Вкусовщина?


Отправлено XaeroX 13-11-2013 в 11:54:

nemyax
Много чем. Компактность, простота, нормальный синтаксис (правда, первое, что я делал - заменил комментарии на С-стайл, так что моя лува не совсем канонiчная), отсутствие маразма с отступами, легкая встраиваемость в любую систему, отсутствие процедуры инсталляции. Лува это именно скриптовый язык для частных целей, а петон - разросшийся монстр, активно лоббируемый "уч0ными", которым проще отгавкаться фразой "ну напиши скрипт", чем оторвать задницу, разморозить мозги и таки сделать свой софт юзабельным.

Но разве я сказал, что петон надо вытеснять лувой? Все эти конструкторы а ля "сделай сам" надо вытеснять продуманными архитектурами на плюсах. А в качестве довеска "для любознательных" (т.е. кому функционала не хватило) лува подходит куда лучше.

Цитата:
nemyax писал:
ни даже быстродействия

А ты lua.dll в релизе компилил?

__________________

xaerox on Vivino


Отправлено thambs 13-11-2013 в 12:01:

XaeroX

а можешь вот такой же дем про фортран сделать, интересно, что именно в нём не нравится как в узкоспециализированном яп.

ну а на python уже давно у меня выбор пал, из за того что на нём вот эта штука есть -- её и графики рисую и из результатов счёта мультфильмы делаю. она и с LaTeXом прексрано связывается.потому и думал, может и управление на него повесить, хотя я сегодня, внезапно обнаружил, что некоторые параметры можно менять не плавно, а скачком и разряд прекрасно к этому адаптируется, никаких нефизичных разбалтываний не возникает, так что может слишком большие заморочки на тему управления мне и не понадобятся.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено nemyax 13-11-2013 в 12:06:

Цитата:
XaeroX писал:
А ты lua.dll в релизе компилил?

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


Отправлено XaeroX 13-11-2013 в 12:48:

Цитата:
thambs писал:
а можешь вот такой же дем про фортран сделать, интересно, что именно в нём не нравится как в узкоспециализированном яп.

Не нравится главным образом морально устаревший синтаксис. С одной стороны - не язык ассемблера, но с другой - и не язык высокого уровня. Что-то среднее.
Все остальные беды проистекают из этого.
Скоро все маститые фортранщики умрут (от старости), и все забудут про этот ЯП, как про кошмарный сон. Все библиотеки/функции давно реализованы на С (те же Numeric Recipes).

Цитата:
thambs писал:
ну а на python уже давно у меня выбор пал, из за того что на нём вот эта штука есть -- её и графики рисую и из результатов счёта мультфильмы делаю

Ну вот а я как раз и пишу свой софт для этих целей.
Мне не совсем понятно, зачем там петон вообще. Вроде ничего не мешало сделать на плюсах. Ан нет. Есть два вивера, например, VMD и PyMol, первый труъ-сишный (с прикрученным Tcl как скриптовым языком), второй на петоне, и второй по функционалу (именно как гуй) куда удобнее. Причём видно, что это не петона достоинство, а людей, писавших софт. Что это, какое-то глобальное умственное помешательство? Или они скажут, что петон легче плюсов? Это не так, синтаксис можно освоить любой при желании, а приёмы программирования везде одинаковые. Под петон больше чужих библиотек? И это не так. Петон кроссплатформенный? Qt. На си надо следить за освобождением памяти и нулевыми указателями? Ну, с быдлокодерами мне вообще говорить не о чем.

__________________

xaerox on Vivino


Отправлено thambs 13-11-2013 в 13:02:

>С одной стороны - не язык ассемблера, но с другой - и не язык высокого уровня. Что-то среднее.

ээ, а можно пример. у меня совершенно противоположное впечатление сложилось. ну когда в том же фортране что бы получить, например, целочисленный логарифм по основанию 2 я просто вызываю функцию exponent, а в ц для этого надо вручную выковыривать нужные байты floatного представления (в 11м стандарте вроде уже добавили такую функцию).

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

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 13-11-2013 в 13:39:

Цитата:
thambs писал:
ну когда в том же фортране что бы получить, например, целочисленный логарифм по основанию 2 я просто вызываю функцию exponent, а в ц для этого надо вручную выковыривать нужные байты floatного представления

Я не знаю, что тут сказать.
Фортран - это язык для компов с магнитными лентами и перфокартами.
С задачами тех лет он справлялся.
Сейчас его пытаются довести до уровня си и даже си++, но я не понимаю, кому это надо. Видимо, такие же фанаты, как и мы со своими ксашами и волатилами.
Перечислять достоинства С перед фортраном - это всё равно что объяснять, чем мерседес S600 лучше мопеда на 49 кубиков. Т.е. список преимуществ составить можно, а нужно ли?

Цитата:
thambs писал:
в 11м стандарте вроде уже добавили такую функцию

Может, авторы стандарта С и посходили с ума (всё возможно), но изначально в стандарте какие-либо функции отсутствовали в принципе. Как таковые. Это в фортране "в новой версии введены функции...", а в С - есть ЯП и есть функции. Их либо надо писать самому, либо заюзать библиотеку типа CRT. А можно не юзать стандартные функции вообще, и будет рабочая программа (например, запуск-вызов функции винапи-завершение).
В этом смысле не вижу препятствий написать функцию, выдирающую нужные байты флоат-представления. Один раз написал и юзай на здоровье. Кстати, это будет логарифм по основанию 10, разве нет? а логарифм по основанию 2 легко вычисляется двоичным сдвигом.

Добавлено 13-11-2013 в 19:39:

Цитата:
thambs писал:
ну или то что нельзя красиво бреакнуть цикл на несколько уровней вверх

Зачем красиво бреакнуть некрасивую конструкцию?
Есть же goto для таких случаев, даже Кармак юзал такой способ.
А вообще глубоко вложенных циклов лучше избегать.

__________________

xaerox on Vivino


Отправлено thambs 15-11-2013 в 09:28:

>некрасивую конструкцию
поясни что с ними не так, мне этот момент не понятен. ну, например, 4 уровня -- это плохо?
>С задачами тех лет он справлялся. Сейчас его пытаются довести до уровня си и даже си++, но я не понимаю, кому это надо
так задачи для моделистов с тёх лет качественно, разьве изменились? параллельность добавилась и всё.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 15-11-2013 в 09:44:

thambs
Считается, что высокий уровень вложения циклов - это признак плохого стиля программирования. Как правило, это можно решить созданием отдельных функций. Тогда и проблем с брейками не будет.
Пример:

C++ Source Code:
1
Vector a[100];
2
Vector b[100];
3
for ( int i = 0; i < 100; ++i )
4
  for ( int j = 0; j < 3; ++j )
5
    b[ i ][ j ] += a[ i ][ j ];

Легко решается перегрузкой оператора += у класса Vector, и имеем:
C++ Source Code:
Vector a[100];
Vector b[100];
for ( int i = 0; i < 100; ++i )
  b[ i ] += a[ i ];

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

Добавлено 15-11-2013 в 16:44:

Цитата:
thambs писал:
так задачи для моделистов с тёх лет качественно, разьве изменились? параллельность добавилась и всё.

Приёмы программирования изменились. Сейчас важно не только писать быстрый код, но и писать его быстро. Для этого и пригождаются всякие классы, шаблоны, операторы и прочие изыски плюсов.

__________________

xaerox on Vivino


Отправлено thambs 15-11-2013 в 11:36:

XaeroX

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

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 15-11-2013 в 11:47:

Цитата:
thambs писал:
а есть библиотеки классов, реализующие размерности величин, так чтоб аж компилятор матерился, когда сантиметры с граммами сложить пытаешься?

Это легко сделать самому.
Этот код компилится:
C++ Source Code:
float d = 1.0f;
float w = 2.0f;
printf( "%f", d + w );


C++ Source Code:
1
class distance_t {
2
public:
3
  distance_t( float value ) : data( value ) {}
4
  distance_t operator +( distance_t &other ) { return data + other.data; }
5
private:
6
  float data;
7
};
8
class weight_t {
9
public:
10
  weight_t( float value ) : data( value ) {}
11
  weight_t operator +( weight_t &other ) { return data + other.data; }
12
private:
13
  float data;
14
};
15
 
16
distance_t d = 1.0f;
17
weight_t w = 2.0f;
18
printf( "%f", d + w );

А этот - нет.
Причём ошибка весьма внятная:
Цитата:
1> error C2679: binary '+' : no operator found which takes a right-hand operand of type 'main::weight_t' (or there is no acceptable conversion)
1> could be 'main::distance_t main::distance_t::operator +(main::distance_t &)'
1> while trying to match the argument list '(main::distance_t, main::weight_t)'

Т.е. компилятор намекает, что надо бы distance_t складывать с distance_t, а не с чем-то другим.

__________________

xaerox on Vivino


Отправлено nemyax 15-11-2013 в 11:52:

Цитата:
XaeroX писал:
Считается, что высокий уровень вложения циклов - это признак плохого стиля программирования. Как правило, это можно решить созданием отдельных функций.

Что будет работать быстрее?


Отправлено XaeroX 15-11-2013 в 11:54:

nemyax
С хорошим компилятором - одинаково.

__________________

xaerox on Vivino


Отправлено thambs 15-11-2013 в 12:11:

XaeroX

эт, ясно, а так что бы размерности умножались друг на друга и возводились в степень? это, вроде, тогда надо в каждый класс вводить член хранящий степень длины, массы и времени. что то заморочено получается. ну или, по крайней мере, для всех производных величин. или там можно всё выкинуть сразу на этапе компиляции?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 15-11-2013 в 12:18:

thambs
Проще определить новый класс, скажем, area_t или squareDistance_t.
И возвращать его как результат умножения двух distance_t (релизовав так же через оператор).
Да, получается весьма геморно, ну так это потому, что компьютеру ещё со времен фон Неймана глубоко плевать, расстояние у тебя во флоате хранится или площадь.

__________________

xaerox on Vivino


Отправлено thambs 15-11-2013 в 12:23:

XaeroX
ну не то что геморно а в общем виде нереализуемо. хотя, в виде некоторого препроцессинга, ещё до передачи компилятору, такую проверку, вроде можно сделать. может уже и есть где ни будь.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 15-11-2013 в 12:44:

Цитата:
thambs писал:
в общем виде нереализуемо

Я не буду претендовать на красивые решения (над ними можно думать долго), но вот по-быстрому сделал общее решение:

C++ Source Code:
1
template<typename T,int unused>
2
class valueHolder {
3
public:
4
  valueHolder( T value ) : data( value ) {}
5
  operator T () { return data; }
6
private:
7
  T data;
8
};
9
 
10
template<typename T>
11
class quadraticValue {
12
public:
13
  quadraticValue( T value ) : data( value ) {}
14
  quadraticValue<T> operator +( quadraticValue<T> &other ) { return data + other.data; }
15
private:
16
  T data;
17
};
18
 
19
template<typename T>
20
class linearValue {
21
public:
22
  linearValue( T value ) : data( value ) {}
23
  linearValue<T> operator +( linearValue<T> &other ) { return linearValue<T>( data + other.data ); }
24
  quadraticValue<T> operator *( linearValue<T> &other ) { return quadraticValue<T>( data * other.data ); }
25
private:
26
  T data;
27
};
28
 
29
typedef linearValue<valueHolder<float,1>> distance_t;
30
typedef quadraticValue<valueHolder<float,1>> area_t;
31
 
32
typedef linearValue<valueHolder<float,2>> weight_t;
33
typedef quadraticValue<valueHolder<float,2>> squaredWeight_t;
34
 
35
void foo( void )
36
{
37
  // компилится
38
  distance_t d1 = 1.0f;
39
  distance_t d2 = 2.0f;
40
  area_t a = d1 * d2;
41
 
42
  // компилится
43
  weight_t w1 = 1.0f;
44
  weight_t w2 = 2.0f;
45
  squaredWeight_t sw = w1 * w2;
46
 
47
  // не компилится
48
  area_t a2 = w1 * w2;
49
  squaredWeight_t a3 = d1 * d2;
50
}

__________________

xaerox on Vivino


Отправлено thambs 15-11-2013 в 12:57:

XaeroX

не получится, ты ж не можешь произвольные сочетания distance^x weight^y time^z делать. о, во -- смотри что нашёл -- вроде в буусте такое есть http://www.boost.org/doc/libs/1_54_...imensionExample

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 15-11-2013 в 13:00:

Да я знаю, что в буусте есть.
Я говорю о том, что если как следует подумать, можно и самому на шаблонах это реализовать.

__________________

xaerox on Vivino


Отправлено thambs 15-11-2013 в 13:39:

XaeroX

ну шаблоны да, расовая штука, тут не поспоришь. жаль у меня у меня таки не было времени свою софтину на плюсах переписать, а то б эти буустовские штуки заюзал -- меньше б плюх лепил.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 15-11-2013 в 15:35:

Цитата:
XaeroX писал:
Если же красота кода мало заботит, то goto - прекрасный оператор для выхода из цикла любой вложенности. При этом этот оператор соответствует нативным машинным командам, т.е. не является сколько-нибудь вычислительно затратным.

Я даже больше скажу. Именно поэтому от нас её всячески прячут и нерекомендуют использовать, поскольку goto ломает к чертям все слои абстракции. Особенно на С++. На Си еще небольшая беда, если вы из функции выпрыгнете. А если из приватного члена класса?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 15-11-2013 в 16:08:

Дядя Миша
ну вот мне и странно было, что через такую жопу надо делать..

в фортране это красиво сделали:

C++ Source Code:
1
outer: do i=1,100
2
inner: do j=1,1000
3
exit outer
4
enddo inner
5
enddo outer

так, в принципе, можно не только из циклов, но и из ifов и selectов выходить. по моему, очень удобно, меня несколько шокировало то, что в c-языках такой конструкции нет.

блин и ведь так всегда, в одном языке одни расовые вещи, а другом другие, а так что бы сразу всё -- хрен там.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 15-11-2013 в 16:41:

thambs
То, что ты описал на фортране, как раз и решается с помощью goto.
Есть ещё вариант с sentinel цикла:

C++ Source Code:
1
bool sentinel = true;
2
for ( int i = 0; i < 100 && sentinel; ++i )
3
  for ( int j = 0; j < 1000 && sentinel; ++j ) {
4
    sentinel = false; break;
5
  }
6
}

__________________

xaerox on Vivino


Отправлено PomanoB 15-11-2013 в 17:27:

Такое есть в JavaScript и, кажется, в джаве, выход по break и continue из вложенных циклов.
Но я боюсь, что со мной будет, если признаюсь в склонности к JavaScript'у


Отправлено nemyax 15-11-2013 в 19:21:

А что в C++ с каррированием и паттерн-матчингом, которые есть в демотиваторе? Тоже на шаблонах?


Отправлено XaeroX 15-11-2013 в 19:31:

nemyax
Каррирование на шаблонах, а паттерн-матчинг - ну, в принципе, тоже можно на них, но вроде бы можно и просто с помощью наследования реализовать. Или даже с помощью typeid.

__________________

xaerox on Vivino


Отправлено nemyax 15-11-2013 в 19:32:

Цитата:
XaeroX писал:
Каррирование на шаблонах

Как это в коде хоть выглядит? =)


Отправлено XaeroX 15-11-2013 в 19:34:

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

Добавлено 16-11-2013 в 02:34:

Цитата:
nemyax писал:
Как это в коде хоть выглядит? =)

Бинды из STL в качестве простой иллюстрации подойдут?

__________________

xaerox on Vivino


Отправлено nemyax 15-11-2013 в 19:41:

Цитата:
XaeroX писал:
Бинды из STL

Это получается полноценное частичное применение с канпеляцией промежуточных функций?


Отправлено XaeroX 16-11-2013 в 10:10:

nemyax
Пожалуй, да - только частично-применёнными будут не функции, а функторы (но это без разницы). Только это всё compile-time фичи, компилируется потом всё вместе.

Кстати, нашёл тут в википедии, что луа поддерживает замыкания (синтаксис такой же как у похапе), а вот петон, судя по всему, нет.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 04:35.
Показать все 44 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024