Автор Тема: Literate programming vs. языки  (Прочитано 3742 раз)

Евгений Филиппов

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Literate programming vs. языки
« : Январь 06, 2013, 11:31:06 am »
(20:16:18) egp: всё
(20:16:27) egp: меня достал С++ своей сложнотой
(20:17:58) egp: темплейтов этих
(20:19:29) egp: на каждую гадость надо самплы кода смотреть, как так.
(20:24:20) egp: никакого literate программирования невозможно с таким языком

Евгений Филиппов

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Literate programming vs. языки
« Ответ #1 : Январь 06, 2013, 11:58:48 am »
(20:33:54) valexey: egp: ну, это с непривычки :-)
(20:35:46) egp: valexey: я этот язык воспринять не могу ваще никак
(20:36:20) egp: valexey: я люблю простоту в машинах и машинных языках, а С++ просто исчадие ада. Не могу воспринять его. Нафиг.
(20:36:32) valexey: ну, дело твое.
(20:37:26) valexey: с наскоку за неделю действительно С++ глубоко не изучить.
(20:38:21) valexey: За неделю можно либо научиться пользоваться стандартными внеязыковыми абстракциями и приемами, либо научиться сям с классами.
(20:38:32) egp: valexey: это не "дело", это свойство психики. Как людей я не могу воспринять ("ад-это другие", "чужая душа-потёмки"), так и "варяжская душа" С++ мне неведома. Пусть Страуструп гоняет свои варяжские флоты без меня.
(20:39:11) egp: да классы бы ещё ничего, но вот всякая байда в темплейтах типа "operator()" меня бесит своей контрлогичностью
(20:39:40) valexey: operator() как раз к шаблонам отношения не имеет. это чисто классовая штука :-)
(20:40:00) valexey: впрочем, её можно сделать шаблонной :-D
(20:40:10) egp: типа "оператор сфера" - две круглые скобки это сфера - ну ладно, оператор "сферический конь в вакууме" - можно терпеть
(20:41:17) valexey: Типо оператор круглые скобочки. a() -- переменная "a" и оператор круглых скобок её
(20:42:09) egp: valexey: вот ты гришь С++ освоил. Нукось, сходу  объясни, как для типа enum X{Y} сделать хэшфункцию hashFunctionX чтобы её передать в "std::unordered_map<X, T, hashFunctionX>;"
(20:42:29) egp: ну вот именно, оператор сфера.
(20:43:18) egp: valexey: вот в яве и обероне это ясно как сделать и без доп. усилий
(20:43:25) egp: а как с С++?
(20:44:26) valexey: стоп. ты что куда хочешь отображать? что такое enum X{Y}? Как это соотносится с ключем и value map'a?
(20:44:37) egp: enum X{Y};
(20:44:41) egp: декларация такая
(20:44:56) egp: это ключ мапа
(20:45:07) egp: тип X - это ключ мапа
(20:45:38) egp: Y - Это енумовое значение
(20:45:45) egp: X::Y
(20:46:13) egp: можно ещё Z для красоты добавить
(20:46:19) egp: enum X{Y, Z};
(20:46:23) egp: X::Z
(20:47:13) egp: ошибку у себя нашёл
(20:47:21) egp: опечатка: "std::unordered_map<X, Y, hashFunctionX>;"
(20:47:23) valexey: ok. В данном случае, с ходу, будет так: unordered_map<int,Y> m;
(20:47:24) valexey: :-)
(20:47:29) egp: без опечатки "std::unordered_map<X, T, hashFunctionX>;"
(20:47:42) valexey: unordered_map<int,T> m;
(20:47:59) egp: вотвот
(20:48:08) egp: а как хашфункцию сделать ты знаешь
(20:48:09) egp: ?
(20:48:16) egp: вот в яве её легко сделать
(20:48:21) egp: в обероне тоже
(20:48:35) egp: а вот в С++ как?
(20:48:40) valexey: а как в обероне?
(20:49:22) egp: в обероне берём имплементацию хашмапа (находим где-то) и привязываем пойнтер на процедуру, если эта имплементация это позволяет
(20:49:42) egp: пойнтер на процедуру хашфункции
(20:50:00) egp: все литератно
(20:50:25) egp: в яве дефайним int hashCode() для нашего обжекта
(20:50:29) egp: а вот в С++?
(20:50:48) egp: в яве тоже литератно получается.
(20:53:55) egp: а в С++ литератно по ходу никак
(20:54:18) egp: токо сведением  к безтиповому виду, как ты сказал.

Евгений Филиппов

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Literate programming vs. языки
« Ответ #2 : Январь 06, 2013, 12:02:15 pm »
(20:57:21) valexey: литерно конечно же как
(20:57:26) valexey: вопрос в том, как это сделать красивей :-)
(20:57:47) egp: valexey: просто я помню я делал когда-то хашфункцию в С++ и не могу найти этот сампл
(20:58:51) egp: потому что очень сложный синтаксис не помещается в памяти моей - там и темплейты и оператор() и классы - всё в одном месте, не умещается такая сложнота в памяти со всеми её особенностями

Евгений Филиппов

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Literate programming vs. языки
« Ответ #3 : Январь 06, 2013, 12:14:12 pm »
(21:00:05) valexey: size_t my_hash(A a)
{
    return 42;
}


int main(void)
{
    unordered_map<A,int,decltype(&my_hash)> m(0,my_hash);

(21:00:11) valexey: Быстро и грязно
(21:00:36) valexey: В качестве T тут int, можно поменять на любой другой тип - пофик
(21:00:49) egp: ну вот красиво я делал
(21:01:03) egp: а щас не помню как делал
(21:01:25) valexey: красивей без c++11 не выйдет :-)
(21:01:43) valexey: ну, можно конечно вместо хеш-функции использовать функциональный объект.
(21:01:46) egp: ну там не unordered_map был, а std::hashmap
(21:01:52) valexey: но не сказал бы что это красивей для данной задачи :-)
(21:02:38) egp: в каком компилере был <std::hashmap> я не помню
(21:03:11) egp: valexey: а где описано decltype?
(21:03:21) valexey: это ключевое слово, а что?
(21:03:22) egp: задекларировано
(21:03:26) valexey: в стандарте языка описано
(21:03:43) egp: ок. вот стандарты у С++ это огромный стафф
(21:04:01) egp: g++ тоже огромный стафф
(21:04:12) egp: ява значительно проще
(21:04:19) egp: оберон тоже
(21:04:49) egp: так что красота красоте рознь
(21:05:12) valexey: Если коротенько, то вот: http://en.wikipedia.org/wiki/Decltype
(21:05:13) valexey: :-)
(21:05:56) egp: valexey: короче я на C буду писать вместо С++
(21:06:12) valexey: гг. ну пиши на сях с классами, чо.
(21:06:45) egp: или вообще на ooc перелезть
(21:07:11) valexey: тоже дело
(21:07:31) egp: мне нужен язык для бутстрапа моего компилера
(21:08:17) egp: потому что С - та ещё скотинка нехорошая
(21:09:25) egp: не люблю неявности - они порок, мешают literate programming
(21:10:36) valexey: На Аде пиши - там основной слоган языка -- "все явно"
(21:11:15) egp: ща буду смотреть Аду.

Евгений Филиппов

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Literate programming vs. языки
« Ответ #4 : Январь 06, 2013, 12:19:37 pm »
(21:12:00) egp: в обероне тоже есть неявности
(21:12:08) egp: например LONGING - это сколько бит?
(21:12:17) egp: без поллитры и не узнаешь, сколько это бит
(21:12:38) egp: я бы предпочёл INT32BIT, а не LONGING
(21:12:55) egp: тут явно описывается кол-во бит
(21:13:08) egp: LONGINT
(21:13:15) valexey: В обероне - нисколько. Там нет LONGINT'a :-)
(21:13:17) egp: LONGINT*
(21:13:19) valexey: Вирт выпилил.
(21:13:31) egp: в оберонах некоторых есть лонгинт - в obc например
(21:13:42) Сергей Зорин вышел из комнаты.
(21:13:48) egp: ну а INTEGER там есть, тоже не сказано сколько бит
(21:13:53) valexey: Угу.
(21:14:02) valexey: Но была версия оберона, где сказано скоко бит.
(21:14:12) valexey: Ну и в КП сказано сколько бит четко
(21:14:15) valexey: Гвоздями прибито
(21:14:15) egp: вот круто бы. Но где она? неясно
(21:14:23) valexey: Они же кальку с явы делали.
(21:14:32) valexey: Соответственно типы КП соответствуют явовым
(21:14:32) egp: гвоздями не надо, надо INTEGER_N_BIT(N)
(21:14:56) egp: INTEGER_N_BIT(32) например
(21:15:19) egp: и пусть транслятор оптимизит
(21:15:41) valexey: Тогда тебе точно в Аду :-)
(21:15:59) valexey: Там когда создаешь свой целочисленный тип можно четко указать битность.
(21:16:02) valexey: Ну или диапазон
(21:16:10) egp: мы эту Аду ещё курочить эту аду начнём =)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Literate programming vs. языки
« Ответ #5 : Январь 06, 2013, 12:57:50 pm »
Цитата: egp
мне нужен язык для бутстрапа моего компилера
Рассматривались ли такие варианты: Modula-2 (GM2), Oberon-2 (OOC) ?

И, вообще, каковы требования к компилятору?