- 1
- 2
- 3
- 4
- 5
- 6
Point ReadPoint ()
{
Fixed x = ReadFixed();
Fixed y = ReadFixed();
return Point(x,y);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−11
Point ReadPoint ()
{
Fixed x = ReadFixed();
Fixed y = ReadFixed();
return Point(x,y);
}
Как же меня бесит отсутствие чётко определённого стандартом порядка вычисления аргументов!!!!!!!
guest 17.09.2013 16:47 # +6
LispGovno 04.12.2013 20:57 # 0
3.14159265 04.12.2013 21:08 # +3
HaskellGovno 04.12.2013 21:17 # +1
defecate-plusplus 17.09.2013 17:10 # 0
guest 17.09.2013 17:16 # 0
roman-kashitsyn 17.09.2013 17:41 # +3
Это же Тарас, наверняка карты уровней/сохранения/текстуры из файлов вычитывает.
guest 17.09.2013 17:20 # 0
bormand 17.09.2013 19:18 # 0
TarasB 18.09.2013 09:37 # +1
p<<ReadFixed()<<ReadFixed();
return p;
что ли?
defecate-plusplus 18.09.2013 11:55 # 0
roman-kashitsyn 18.09.2013 11:57 # +6
О боже, дефекейт не в ту сторону стрелочки нарисовал! Вот что жаба с людьми делает!
defecate-plusplus 18.09.2013 11:59 # 0
править не буду :)
TarasB 18.09.2013 12:05 # 0
defecate-plusplus 18.09.2013 12:09 # 0
но дело не в этом
объекту не важно откуда его читают (это обеспечит тебе std::istream)
зато ему важно, чтобы он сам контролировал своё состояние и целостность (это обеспечит тебе его же член класса fixed, point и т.д.)
захочешь потом читать число не из файла, а из памяти, например (принял xml из сети) - будешь писать новую функцию ReadFixed()?
TarasB 18.09.2013 13:07 # 0
поправил
как спасёт твой способ?
defecate-plusplus 18.09.2013 14:02 # +1
CreateRectBrick - это что? видимо, нечто, отдающее объект RectBrick
этому объекту виднее, как он хранится, как ему сериализоваться и десериализоваться
TarasB 18.09.2013 15:25 # 0
defecate-plusplus 18.09.2013 16:40 # 0
TarasB 19.09.2013 09:49 # 0
Сериализация есть, работает совсем иначе.
defecate-plusplus 19.09.2013 09:50 # 0
TarasB 19.09.2013 10:47 # 0
Данные для загрузки бинарные и содержат совсем другую информацию, храняющую именно текущее состояние.
bormand 18.09.2013 13:16 # 0
Трабла в том, что стрелки для всяких int'ов перегружены под текстовый ввод-вывод. И придется либо пилить свой базовый класс для бинарных стримов (например как обертку над istream), либо обертки для примитивов...
defecate-plusplus 18.09.2013 14:18 # 0
но для задачи сериализации/десериализации я бы не стал вообще уже велосипед изобретать - boost::archive
польза в том, что правила сериализации/десериализации можно описать один раз, ну и то, что ты хочешь - boost::archive::binary_i(o)archive - есть в коробке
bormand 18.09.2013 13:21 # +3
Везет Тарасу, его еще не поразило ООП головного мозга.
kegdan 19.09.2013 15:30 # 0
bormand 19.09.2013 15:36 # 0
anonimb84a2f6fd141 17.09.2013 19:51 # −3
bormand 17.09.2013 19:54 # +2
kegdan 17.09.2013 22:09 # 0
bormand 17.09.2013 22:29 # +1
Параллелизм это отдельная тема. Там не только компилятор, но и процессор любит пошалить.
Знание модели памяти твоего языка (если, конечно, это не си) спасет отца русского параллелизма.
Qwertiy 17.09.2013 22:37 # 0
kegdan 18.09.2013 17:12 # 0
Stertor 18.09.2013 18:52 # −5
kegdan 18.09.2013 22:07 # 0
Qwertiy 18.09.2013 21:00 # 0
kegdan 18.09.2013 22:09 # 0
логично но в случае func(funca(),funcb()) порядок выполнения funca(),funcb() строго не определен. поэтому иногда нужно выносить и ставить барьер памяти
Qwertiy 17.09.2013 22:39 # 0
Qwertiy 17.09.2013 22:36 # 0
defecate-plusplus 17.09.2013 22:42 # +3
bormand 17.09.2013 22:48 # +7
defecate-plusplus 17.09.2013 23:10 # +11
требуется многотомник по крестосмирению и крестопросветлению, 21 день слишком мало для этого
roman-kashitsyn 17.09.2013 23:18 # +3
bormand 17.09.2013 23:32 # 0
roman-kashitsyn 18.09.2013 00:02 # 0
bormand 18.09.2013 00:11 # +1
З.Ы. Язык похож на питона проглотившего паскаль и си.
roman-kashitsyn 18.09.2013 00:16 # 0
от ООП нужна только парадигма "реализует интерфейс", и то желательно в виде, близком по духу к Haskell: не путём "наследования", а через отношение тип - семейство типов.
roman-kashitsyn 18.09.2013 00:18 # +1
и поужинавшего Go, Scala, Haskell и, возможно, Ocaml
anonimb84a2f6fd141 18.09.2013 04:14 # −2
crastinus 18.09.2013 07:01 # 0
TarasB 18.09.2013 09:41 # 0
в остальном не понимаю только слово Unit, без него семантика обычная сишно-паскальная, только разве что множественный возврат
roman-kashitsyn 18.09.2013 09:53 # 0
объект типа "Нихрена"
присваивание лучше выглядит как
a(0) <- 1
только это не очень хорошо сочетается со всякими +=. Предложи свой вариант оформления цикла.
TarasB 18.09.2013 11:06 # 0
a(i) := a(i - 1) + a(i - 2); } );
roman-kashitsyn 18.09.2013 11:12 # 0
TarasB 18.09.2013 11:48 # 0
А вооще я хочу изобрести язык, где запрещены любые циклы, кроме циклов по диапазону с границами, известными при компиляции.
Рекурсия и блокирующие операции тоже запрещены.
Это позволит любому участку кода при компиляции дать оценку времени выполнения.
Да, придётся делать дохрена уиелдов для записи любого алгоритма, надо, чтоб язык это поддерживал.
На основе этого языка написать ось, которая никогда не будет виснуть - ведь в ней WndProc будет ограничена по времени.
Только в ядре, конечно же, придётся разрешить циклы итд, ядро надо писать на другом языке. А вот все прикладные программы - в виде исходников на этом языке.
Эта ось будет многозадачно работать даже без потоков, правда, как красиво использовать возможности 4 ядер, я пока не могу придумать.
roman-kashitsyn 18.09.2013 12:06 # 0
по поводу инвариантов - цикл for не так уж плох, мы тут недавно с царём его обсуждали. for же по факту из трёх частей состоит: 1) установка инварианта 2) проверка инварианта 3) изменение состояния, потенциально влияющее на инвариант. Таким образом, тело цикла выполняется только в случае выполнения некого инварианта (типичный примеры - индекс массива находится в заданных рамках, нода списка не пуста, etc). Часто удобно видеть все три части вместе.
TarasB 18.09.2013 13:09 # 0
Для остальных можно оставить крестозапись.
Модель Ерланга? Там используются операции гарантированного времени или костыль, называемый потоками?
RealTime оси есть, я знаю, только дорогие. Неудивительно, что дорогие, и как сделать дешевле, даже не знаю толком.
Винда не риалтайм, и иногда это оооочень заметно и просто пиздец бесит.
Stertor 18.09.2013 17:06 # −3
А как же тогда искать файлы? Первое, что пришло на ум.
TarasB 19.09.2013 09:50 # −3
Stertor 19.09.2013 12:02 # −3
wvxvw 18.09.2013 19:59 # +2
anonimb84a2f6fd141 19.09.2013 01:11 # 0
TarasB 19.09.2013 09:50 # 0
wvxvw 19.09.2013 09:57 # +1
TarasB 19.09.2013 10:46 # 0
Конечно, блокирующий ReadLn идёт нафиг, а вот событийно-оприентированный подход, как в Edit, уже проканает.
wvxvw 19.09.2013 11:44 # 0
Об этом есть интересная популярная книжка Хофстадтера: Гедель, Эшер, Бах, где он описывает как Рассел "избавился" от парадоксов в теории множест, но тем самым сделал ее неспособной решать настоящие проблемы. Вернее, думал, что избавился. Ну а Гедель, собственно, показал, что в любой системе такого типа парадоксы неизбежны.
TarasB 19.09.2013 11:50 # 0
> задач, где нельзя наперед знать время выполнения
Нет таких задач. Дело в том, что любой алгоритм квантуется. То есть можно разбить на несколько (возможно, бесконечное число) действий
SomeObject.NextIteration, каждое из которых имеет детерминированное время выполнения.
А в MainHandler ты просто делаешь проверку, что если мы в данный момент недовыполнили такую-то задачу, то надо выполнить следующий квант её решения.
wvxvw 19.09.2013 11:52 # 0
Если оно будет бесконечным, то мы уже нарушили наше обещание отсутствия бесконечных циклов...
TarasB 19.09.2013 11:57 # 0
Пример: программа-часы.
Часы могут идти хоть вечность.
Код программы:
Ну с точностью до шелухи типа передачи параметра типа события, кода создания окна при получении MESSAGE_STARTPROGRAM, реакции на закрытие программы.
Обещание нарушает ось, а не программа. Оси мы доверяем.
roman-kashitsyn 19.09.2013 12:05 # 0
TarasB 19.09.2013 12:09 # 0
Это тоже решается тем же квантованием, но в данном случае будем считать, что у виджета окно имеет конечный размер, так проще для понимания.
wvxvw 19.09.2013 12:12 # 0
Чтобы это лучше понять:
1. Попробуй почитать книжку о которой я говорил двумя постами раньше.
2. Подумай, как ты реализуешь таймер без безконечного цикла.
TarasB 19.09.2013 12:16 # 0
2. Подумай.
bormand 19.09.2013 12:18 # +1
Таймеры в ТарасоОси будут реализованы на уровне ядра, где бесконечные циклы вполне разрешены. Вот и все решение.
А без минималистичного доверенного ядра, которое может делать все что угодно, задача не имеет решения ;) По крайней мере на текущем железе.
wvxvw 19.09.2013 12:51 # +1
bormand 19.09.2013 13:08 # 0
Ну в каком-то смысле да. Только с реализацией его извне, а не с помощью средств языка.
bormand 19.09.2013 12:06 # 0
Ага, вот только тот же BEAM (эрланговый рантайм) вполне справляется с этим квантованием на автомате. Текущий "поток" (в терминологии эрланга процесс) получает право сделать N редукций (вызовов функций), после чего он обязан отдать управление шедулеру. Циклов там вообще нет, поэтому повиснуть не делая редукции он не сможет. Простым, неблокирующим нативным функциям приписывается оценка в редукциях, в зависимости от времени их исполнения. Сложные или блокирующие нативные функции крутятся в отдельных сервисных потоках, не мешая основному планировщику.
То, что ты изобретаешь, очень напоминает эту идею. Вот только ты издеваешься над программистом, заставляя делать квантование руками.
TarasB 19.09.2013 12:12 # +1
Или процессор, OH SHI-...
Проблема только в том, что он может алгоритм порезать на части не совсем там, где тебе надо, поэтому привет 100500 проблем синхронизации и прочей фигни.
bormand 19.09.2013 12:14 # 0
В эрланге их кардинальным образом решили: "процессы" не могут иметь общей памяти. Вообще. Инфой они могут обмениваться только передавая месаги друг-другу.
P.S. Вобщем покури эрланг, лишним не будет. Может какие-то идеи оттуда почерпнешь для себя.
TarasB 19.09.2013 12:17 # 0
roman-kashitsyn 19.09.2013 12:23 # +1
1. Тарас идёт на shootout и смотрит производительность эрланга.
2. Тарас печатает книгу по эрлангу и публично сжигает её.
bormand 19.09.2013 12:27 # 0
delay vs throughput... извечная проблема...
Большинство систем перекошено в сторону throughput, и поэтому совершенно не катят для реалтайма из-за конских и недетерминированных задержек (например квантом по 50мс в типичных осях).
Эрланг и реалтайм оси уменьшают delay, но за счет этого они медленней.
Выиграть и в том и в другом невозможно ;)
TarasB 19.09.2013 13:19 # 0
TarasB 19.09.2013 13:20 # 0
Хехе, можно ещё ввести оператор, который сохраняет состояние в специальную структуру (возвращает её ид), и возвращает управление системе (при этом в очередь сообщений запихивается MESSAGE_CONTINUE с параметром ид, чтобы можно было его схватить и продолжить выполнение). Тогда рекурсии и бесконечные циколы уже разрешены получаются. Но этот сахарок уже слишком приближает программу к классической говнопоточности.
Но без него даже удлинение строки в пиздец превращается.
bormand 19.09.2013 13:44 # +2
Баян: call with current continuation в scheme, отчасти питоний yield, крестоблядский boost::context и boost::coroutine в конце концов :)
> классической говнопоточности
Классическая говнопоточность все-таки имеет плюс - последовательный алгоритм выглядит как последовательный алгоритм, а не как распидорашенная асинхронная кастрюля с лапшой.
TarasB 19.09.2013 14:49 # 0
Ну, это дело привычки, надо подождать, и народ проникнется же!
...какое-то пидорко заботовало 16 раз...
bormand 19.09.2013 15:01 # 0
К сожалению народ уже проникся... И эта кастрюля с лапшой называется NodeJS.
Кстати, взгляни на питонскую либу twisted. Вот где имхо асинхронщину красиво вывернули на изнанку. Там последовательный код неплохо смотрится. Емнип, добавляется только yield перед каждой "блокирующей" операцией.
anonimb84a2f6fd141 20.09.2013 20:22 # 0
Async руки, у кого нету - сосет.
bormand 20.09.2013 20:49 # 0
Ну вот async/await в шарпе и yield в аналогичных целях в twisted'е, это таки кошерная асинхронщина, в которой линейный алгоритм выглядит линейно.
А вот тот же node.js - ебучая лапша.
anonimb84a2f6fd141 21.09.2013 08:47 # −1
Елда тут не причем, в твистеде там елда с декоратором работает. И отдельное ключевое слово лично мне больше нравится.
wvxvw 19.09.2013 14:25 # 0
TarasB 19.09.2013 16:07 # −1
а ещё пиздец, что есть разные операторы и
roman-kashitsyn 19.09.2013 16:08 # +4
> анальный 31-битный инт
> есть разные операторы
ты путаешь с Окамлом
TarasB 19.09.2013 16:19 # 0
Так это другой язык!
Интересно...
roman-kashitsyn 01.10.2013 13:55 # 0
wvxvw 17.09.2013 23:32 # −1
bormand 17.09.2013 23:37 # +2
> хорошо спроектированной библиотекой
> модульной системой
> прозрачной семантикой
>> Forth.
/0
wvxvw 18.09.2013 00:02 # 0
Ну а типизации нет никакой. Если сильно хотелось строгую типизацию, то конечно Форт не подходит, но по сравению со всем остальным... ну, еще Оккам - интересный вариант, но он, на сколько я понимаю, остался только в книжках.
bormand 18.09.2013 00:23 # 0
Ага... ее просто нет... ибо вся семантика скрыта в словах. И каждое слово может иметь такую семантику, как хотелось его автору. Впрочем и синтаксиса тоже нет.
wvxvw 18.09.2013 00:29 # 0
bormand 18.09.2013 00:40 # 0
Форт и так не язык. Это конструктор для своих языков. Ну и набор стандартных слов, которые при желании можно выкинуть или переделать.
bormand 18.09.2013 00:43 # 0
wvxvw 18.09.2013 00:50 # 0
Для примеров того, как это делается / может выглядеть - все та же замечательная книжка Б. С. Пирса. Там он разбирает семантику очень простого языка (в котором есть 5 ключевых слов, цифры и ложь / истина). И это занимает три-четыре раздела в книжке. И это только один из подходов (он описывает операционную семантику).
http://books.google.co.il/books?id=ti6zoAC9Ph8C&lpg=PP1&pg=PA23#v= onepage&q&f=false
bormand 18.09.2013 05:55 # 0
Но насчет форта - ну да, можно описать семантику изкоробочного набора слов. Но дальше то язык можно менять как угодно ;)
Никаких специальных конструкций в форте нет. Даже кавычка это обычное слово (из-за чего приходится писать после нее пробел, что довольно некрасиво), и при желании можно ее переделать, прикрутив другой формат для хранения строк.
roman-kashitsyn 18.09.2013 07:27 # 0
bormand 18.09.2013 06:57 # +1
bormand 18.09.2013 07:15 # 0
bormand 18.09.2013 07:37 # −1
Запилить что-ли на досуге такой диалектик...
wvxvw 18.09.2013 11:24 # −1
Yuuri 01.10.2013 14:21 # 0
someone 18.09.2013 08:03 # 0
roman-kashitsyn 18.09.2013 09:31 # 0
Хотелось бы именно замену сишке, чтобы лоулевел и никакой магии. Ассемблер высокого уровня с нормальной семантикой и без вагона костылей.
Vasiliy 19.09.2013 13:07 # 0
roman-kashitsyn 17.09.2013 23:30 # +8
bormand 17.09.2013 22:42 # +1
C++98, 5.2.2 Function call, пункт 8 гласит:
The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified.
Так что нехуй полагаться на этот порядок, нехуй.
> __cdecl (по умолчанию)
На cdecl свет клином не сошелся. Особенно на таких платформах, как х86_64.
Dummy00001 17.09.2013 23:28 # −1
Типичная парадигма, которая в переводе на челевеческий означает: "мешает компилятору оптимизировать."
Я когда-то находился по граблям порядка вызова конструкторов полей объекта. Вашу боль понимаю.
bormand 17.09.2013 23:35 # +1
O_o. А с ним то что не так? Емнип, порядок конструкторов-деструкторов очень строго расписан, без всяких undefined и unspecified.
Dummy00001 17.09.2013 23:44 # −1
bormand 17.09.2013 23:48 # 0
> в порядке как они были указаны после двоеточия в конструкторе
На такое говно сейчас все адекватные компиляторы выдают ворнинг, уговаривая написать их в одинаковом порядке и в классе и в конструкторе ;) Что в общем-то решает проблему.
Dummy00001 17.09.2013 23:49 # −1
bormand 17.09.2013 23:52 # 0
Отсюда и решение: забить на порядок в конструкторах (и выдавать ворнинг, если он кривой), верить только порядку полей в классе.
Dummy00001 17.09.2013 23:56 # +3
defecate-plusplus 17.09.2013 23:58 # +6
причем, очевидно, проблема легко могла быть не выявлена годами - когда в классе все поля Form1, Button5 и Label666
bormand 18.09.2013 00:00 # 0
А списки инициализации в конструкторах девственно пусты?
bormand 17.09.2013 23:58 # 0
Пиздец. Хотя код, зависящий от порядка исполнения дефолтных конструкторов\списка инициализации пиздец еще больший ;)
> 5й билдер
Его поди до стандарта писали... Ему простительно.
Dummy00001 17.09.2013 23:59 # −1
Ит ол мэйкс сэнс нау.
TarasB 18.09.2013 09:38 # −1
Всегда в одном и том же.
Студия всегда с конца, гцц всегда с начала.
bormand 18.09.2013 11:13 # +1
А если опции оптимизации пощелкать? Или на x86_64 собрать? :)
TarasB 18.09.2013 13:11 # −1
Stertor 19.09.2013 13:21 # −2
TarasB 19.09.2013 13:31 # +5
Stertor 19.09.2013 15:39 # −16
Это твой автопортрет.
Stertor 19.09.2013 15:52 # −17
Это твой автопортрет.
TarasB 19.09.2013 16:02 # +3
Значит жопа-то твоя, а, петушок?
Stertor 19.09.2013 16:03 # −8
Окей. что и требовалось доказать. 12 ботов, +-2. 12-ый плюс кто-то другой поставил.
TarasB 19.09.2013 16:06 # −2
Stertor 19.09.2013 16:09 # −6
Если ты такой разговорчивый, почему проигнорировал мое лс? я отправлял с [email protected]
TarasB 19.09.2013 16:18 # −1
То есть ты говно пидорское, которое ссыт назвать себя?
Stertor 19.09.2013 16:23 # −6
Что прикажете делать, троллить его дальше, или заткнуть? Вы жаждете зрелищ, я знаю..
TarasB 19.09.2013 16:29 # −1
Stertor 19.09.2013 16:30 # −5
(
roman-kashitsyn 19.09.2013 16:31 # 0
Мне кажется, его кто-то жестоко обманул.
Stertor 19.09.2013 16:32 # −5
Gromov 21.09.2013 10:28 # −9
1024-- 19.09.2013 16:34 # +1
Годные посты ведь были: http://govnokod.ru/13544
И доставляющее "Можно заблокировать тролля, но нельзя забанить троллинг, ибо это не причина, а следствие.".
А сраться с Тарасом и постить гоатсе - как минимум уныло.
Stertor 19.09.2013 16:35 # −2
Stertor 19.09.2013 16:39 # −2
Дичайший быдлокод, что и говорить. Но я постоянно совершенствую свои познания в Делфи, особливо учитывая, что я самоучка.
kegdan 19.09.2013 16:42 # −3
1024-- 19.09.2013 16:51 # −1
Ещё кое-кто любит сообщения редактировать. На почту приходит одно, отвечаешь уже на другое.
Stertor 19.09.2013 17:08 # +3
Подними уже трубку, мать твою.
1024-- 19.09.2013 17:17 # −1
Stertor 19.09.2013 17:17 # −1
yadelphi.ru/форум/фак/воспроизведение звуков через сис. динамик
Stertor 19.09.2013 17:44 # −2
Сколько ж можно это терпеть??
guest 20.09.2013 18:23 # −12
guest 20.09.2013 19:04 # −12
guest 20.09.2013 19:07 # −12
http://ru.wikipedia.org/wiki/%C1%E8%F1%E5%EA%F1%F3%E0%EB%FC%ED%EE%F1% F2%FC
guest 20.09.2013 19:07 # −12
guest 20.09.2013 19:08 # −12
Gromov 21.09.2013 10:26 # −6
Stertor 21.09.2013 16:40 # −5
Stertor 02.10.2013 19:32 # −2
guest 21.09.2013 14:23 # −14