Обсуждаем языки программирования

Тема в разделе "Машинное отделение", создана пользователем WinPooh, 10 июл 2006.

  1. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Что-то не очегнь я верю в командные коммерческие проекты на С :)
    Ни разу не слышал о поиске программеров на чистый С на такой проект :)
    А насчет библиотек - кругом и всюду вижу, что пишутся и свои Гриды, и свои интерфейсы к БД и т.д.
    Вот в 1С - использовали движок CodeBase - уже восемь лет все 1Сники мучаются :))))
    Лучше бы свой написали....
  2. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Windows :)
  3. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Вот именно. Всегда когда есть возможность надо применять библиотеки. Кстати, С++ имеет смысл только ради STL и Boost.
  4. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А разве Винда написана не на С++ ???
  5. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Думаю, что нынешнюю версию Греки я в турнир выставлять не буду.
    Вот если к осени напишу новую версию, там посмотрим.
    Кстати, по итогам наших тут бесед решил попробовать написать её на чистом C; если что случится с моим рассудком - прошу во всём винить atoku :)
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Если хочешь повредить рассудок - пиши на Форте :)
    Умопомрачение гарантировано.
  7. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Windows 3.1: mostly assembly language, some supplied applications coded in C.

    Windows 9x/ME: the 16 bit subsystem was salvaged from DOS and Win 3.1 and therefore was written in assembly language; the rest was a combination of assembler and C. Win 9x was designed to work well on suboptimal, older hardware (486s and such), therefore needed the speed advantage of assembly language. Remember that Win 95 was originally packaged as an upgrade from Windows 3.1.

    Windows NT (which implies Windows 2000 and XP): mostly C, with some assembly language at the kernel and device driver level. The design goal of NT was said to be potential portability, and assembly language efficiency was a secondary concern. The portions in C were designed to be ported to other CPUs and platforms such as Alpha.

    (http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=28914)
  8. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    учитывая, что первая винда появилась раньше чем С++, то... это, может, на ядре NT пошел С++. и вообще, как можно на С++ написать API - в 95 году вроде MFC еще не было.
  9. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Прикольно. Но думаю сторонние компоненты они особо не использовали. Писали свои.
  10. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Ну, даже если Винда написана не целиком на C, есть ещё всякие коммерческие Юниксы.
  11. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    а также есть всякие некомерческие линуксы. пусть все и по отдельности пишут, зато команда!
  12. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    На С тоже можно и нужно писать объектно-ориентированно.

    А вот у меня как раз идея возникла написать все потом на O'Caml. Все равно второй раз придется с чистого листа переписывать! :)
  13. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Правда, писать на ANSI C у меня духу, наверное, не хватит :)
    Так что будет С99.

    А чем хорош O'Caml?
  14. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    C99 я тоже пишу. Только С99 это стандарт ANSI :)

    O'Caml - это промышленный функциональный язык с ООП и возможностью обычного программирования. Очень мощная разработка и черезвычайно быстрый код генерится. Подробности http://en.wikipedia.org/wiki/Ocaml

    Переносимый на большинство ОС, GPL * свободный
  15. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Я имел в виду предыдущую версию стандарта, 89-го года.
    Т.е. то, что gcc понимает как -ansi, в отличие от -std=c99.
  16. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Кстати, говорят MS Visual Studio до сих пор не знает ничего о С99... Им не выгодно
  17. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Написал на Си генератор ходов, по тому же алгоритму, что и в Греке. Выигрыш по скорости на разных тестовых позициях составляет от 5 до 15% (это пока без тщательной оптимизации). Выигрыш по размеру исполняемого файла - от 5 до 10 раз :)
  18. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    WinPooh очень неплохо :) а что за компилятор?
  19. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    gcc / MinGW 3.4.4
  20. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Даром время не теряешь :)! Здорово. А я ведь вроде видел предыдущий код Греки, там почти C. Плюсов у него мало...

    —-

    Мой stud научился пока лишь делать ходы. Ни мозжечка (генератор) ни коры головного мозга (выбор хода) у него, конечно, нет. И далеко не факт что будет.

    Кстати, ход везде кодируется 16 битами. Может и зря :)
  21. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Да, из плюсов там практически только std::string активно используется (эх, пришлось-таки вспомнить, с чем char* едят - сто лет такими строками не пользовался), да std::vector для хранения списков ходов и найденных вариантов - ну, тут замена на массив ещё более простая. А ходы я сейчас тоже в 16-битные short-переменные упаковал.
    Заодно понял, что для игры помещать в ход какие-то дополнительные флаги, коды ходившей и взятой фигур и пр. - расточительство. ПОТОМУ ЧТО БОЛЬШАЯ ЧАСТЬ СГЕНЕРЁННЫХ ХОДОВ ПРОСТО НЕ БУДЕТ РАССМОТРЕНА ИЗ-ЗА ОТСЕЧЕНИЙ :)
  22. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Мой тебе совет - когда будешь писать генератор ходов, с первых же версий встрой команду perft для тестирования легальности генератора. См. http://mypage.bluewin.ch/romanhartmann/perft.html

    Я писал генератор, наверное, в третий или четвёртый раз. И даже не столько писал, сколько адаптировал существующий код. И то, прежде чем значения perft стали совпадать с правильными, выловил штук пять багов...
  23. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    WinPooh а вот интересно проверить, вместо 16 заиспользовать 32 бита (даже ели ненужно лишние 16 бит) - куда скорость изменится? известно что современные процы 32-битный код кушают быстрей, чем 16-битный. (тут конечно не код а данные, но все равно интересно)
    хотя и от компилятора сильно зависит...
  24. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Что-то мне припоминается, что современные компиляторы на 32-битных платформах 16-битные числа всё равно кодируют в 32 бита... Так что выигрыша/проигрыша может и не быть.

    А скорость будет кушаться на операцию упаковки кода фигур (одно или два побитовых AND и ещё один сдвиг, например - ну, это в зависимости от реализации). Можно ещё, конечно, всякие битовые поля или объединения использовать - но тут надо уже на получающийся ассемблерный код смотреть, а это лениво :)
  25. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    16 бит будет быстрее. За счет того, что из памяти будут забираться конвеером по несколько штук. И конечно, больше будет памяти для хэш таблицы.

    Что касается моего хода, то там кодируется кто ходил, с какого поля на какое, если промоушен, то в кого превратился еще. Ну и нулевой ход туда же. Все влезает и еще есть место в 16 битах. Ну и рокировки тоже, ясное дело. Для Фишера остается место для положения ладей и короля. Я использую int16_t из С99
  26. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    WinPooh, спасибо за ссылку!
  27. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Не знаю как другие компиляторы, а Делфи-компилятор проваливается на 16 битных числах. (массивах)
  28. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Кстати, из истории разработки движка автора странички видно, что он глубоко прочувствовал необходимость тестирования генератора:

    # x-mas 2003, start to write a move generator
    ...
    # august 2004, move generator works fine up to ply 5
    # septembre 2004, fixed an ep-bug, move generator seems to work fine now
    # july/august 2005, fixed several bugs (promotion bugs)
    ...
    # February 2006, fixed some bugs in the movegenerator

    :)
  29. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Три года потрачено на Генератор ходов? :)
  30. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    А куда спешить-то? :)
  31. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    А я вот стал думать как делать unmove и стало неясно, как обходиться без кода взятой фигуры! :/
  32. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    atoku - можно обходится, если при makemove сохранять взятую фигуру в массив (ну и еще некоторые параметры хода), а при unmake использовать.
    экономия на том что если ход не был сделан то и ничего в этот массив не ушло :) и описатель хода очень простой получается-откуда и куда.
  33. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    После доработки кода напильником удалось достичь скорости в полтора раза большей, чем в текущей C++ версии Греки. Но это пока только генератор ходов и make/unmake. Надеюсь, в поиске тоже что-то удастся оптимизировать.
  34. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    И все же я ни фига не понял как обходиться без фигуры в ходе для анмува.
  35. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    По памяти, как сделано у меня. При МакeMove сохраняем взятую фигуру, кто ходил, признак взятия на проходе (поле, на котором было возможно взятие на проходе до исполнения хода), право рокировки до исполнения хода.
    (информация "откуда и "куда" у нас и так есть)

Поделиться этой страницей