LINUX.ORG.RU

Функциональное программирование должно вытеснить ООП.


3

2

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

ЗЫ: Немного пьян, так что повествование местами бессвязное.

Перемещено true_admin из talks


Ответ на: комментарий от korvin_

30-минут конечно долговато

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

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

ещё бы. При ТАКОЙ цене(и долговечности) аккумуляторов, цена электричества значения не имеет.

emulek
()
Ответ на: комментарий от anonymous

Там императивщина во все щели.

Напомнило:

The Koan of Side Effects

A student of FP came to Daniel de Rauglaudre and asked how to achieve FP Nature. Daniel replied, «to achieve FP Nature, you must learn to program without side effects and other imperative features». So the student went away to learn how to program in this style. He studied very hard so he could rid his programs of references and for-loops. He struggled to only use let bindings and let rec loops. One day, in order to find inspiration, he was studying the code of the Masters, and in reading the source of Camlp4, he saw a number of uses of references and for-loops! He rushed back to Daniel de Rauglaudre and exclaimed, «How can you tell me not to use imperative features when you use them yourself!» Daniel measured the student carefully in his gaze and replied, «But I already know how to program without side-effects.» At that moment the student was enlightened.

http://web.archive.org/web/20031105005932/www.bagley.org/~doug/ocaml/Notes/ok...

ymn ★★★★★
()
Ответ на: комментарий от Stahl

Что ты имеешь в виду? Давай уж какой-то пример на пальцах.

сишная ООП завязана на VT, таблице виртуальных методов. А эта таблица хорошо работает на текущей архитектуре типа x86. В частности поэтому массовые процессоры до сих пор как i8086 по системе команд, а не только из-за старого кода. И это несмотря на то, что система команд 8086 давно устарела, да и в нынешних процессорах она только с виду, т.е. с помощью дорогостоящих костылей.

emulek
()
Ответ на: комментарий от Dark_SavanT

оно в линуксе исполняться не умеет

«The „unix“ port requires a standard Unix environment with gcc and GNU make. x86 and x64 architectures are supported»

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

tailgunner ★★★★★
()
Ответ на: комментарий от emulek

это если ты готов заряжаться 20 часов в сутки.

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

расход энергии будет на столько же больше в городе, как и у ДВС.

Ну естестно. Только электричество (пока) дешевле, спроси у владельцев теслы.

Очень тяжело конкурировать с таким девайсом, как топливный бак

Ховайтесь, копетан в треде!

надо ждать, пока нефть будет стоить как уран. Ну лет 500 примерно.

Ння, изучай http://ru.wikipedia.org/wiki/Нефть#.D0.97.D0.B0.D0.BF.D0.B0.D1.81.D1.8B

true_admin ★★★★★
()
Ответ на: комментарий от wota

пишут, в том же SQLite, например

совместимость жеж. SQLite должна работать даже там, где нет C++, я уж молчу про хаскель.

emulek
()
Ответ на: комментарий от loz

Я пхп не знаю, так что не могу прокомментировать.

ну я имел ввиду императивщину, как в классической сишке.

emulek
()
Ответ на: комментарий от feofan

О качестве ты не говорил. Принципиально возможно. И некоторые даже на этом пишут.

некоторые и тетрис на sed пишут, и морской бой на brainfuck'е (не шутки).

emulek
()
Ответ на: комментарий от tailgunner

Так в том и хохма, что мне не нужна встраиваемая версия. Мне нужен standalone интерпретатор скриптиков, умещающийся в минимум кода, умеющий дрыгать сишные библиотеки и при этом не жрать память как не в себя. Так что и выбирал я между tinyscheme и jimtcl, и не уверен что выбор схемы был правилен.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от tailgunner

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от true_admin

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

может купишь велосипед?

Ну естестно. Только электричество (пока) дешевле

ты не так считаешь Оно «дешевле» в твоей розетке. Но пока оно доберётся до двигателя, оно подорожает в разы.

спроси у владельцев теслы.

на сегодня цена электричества для электромобилей не имеет значения. Их покупает неграмотное быдло в СШП, которое не понимает, что ущерб от киловатта электроэнергии для экологии совсем не равен нулю. Затоплять Over9000 гектаров, как делал Сталин для ДнепроГЭСов Обамка не станет, жечь мазут на ТЭС — те же грабли (да, на 1 кватт меньше, но и КПД меньше, и таки то на то и выходит). Ну как альтернатива — Чернобыль.

Ховайтесь, копетан в треде!

теперь ты понимаешь, что «дешёвый аккумулятор» == наивная мечта?

Ння, изучай http://ru.wikipedia.org/wiki/Нефть#.D0.97.D0.B0.D0.BF.D0.B0.D1.81.D1.8B

не корректно. Ты про IPv4 слышал? Они уже должны были-бы кончится. Ан нет, есть ещё. Мой ISP за 100 руб/мес продаёт (гад, раньше бесплатно давал). Потребление нефти будет падать. Будем чаще ездить на трамвае.

emulek
()
Ответ на: комментарий от emulek

сишная ООП завязана на VT

Я не был бы столь категоричен. Это реализация. Стандарту языка как-то побоку каким образом будет выполняться динамическое связывание. Ты же про таблицу виртуальных методов говоришь?
Просто VMT самое примитивное и бронелобое решение, которое сложно сделать хреново.
Я, правда, всё равно не совсем понимаю, каким боком тут х86.
Таблицу с указателями можно сделать на любой архитектуре где есть указатели.

Stahl ★★☆
()
Ответ на: комментарий от emulek

Этот пост очень напоминает о так любимой тобой картинке с троллейбусом. Но зачем? Но принципиальная (и практическая) возможность использовать ООП в сишечке существует. «Если звёзды зажигают, значит это кому-нибудь нужно...» (С)

feofan ★★★★★
()
Ответ на: комментарий от tailgunner

Ну, например, сделай grep ref hack/src/typing/*.ml*

anonymous
()
Ответ на: комментарий от Hertz

Единственное, что go сейчас не хватает, так это вменяемой IDE. Но, могу с уверенностью заявить, что свою нишу он обязательно займет.

deterok ★★★★★
()
Ответ на: комментарий от deterok

Никогда не мог понять зачем вообще нужна IDE где нибудь помимо жабы и скалы. Vim и Emacs на всё хватит.
Может просто не имел дело со здоровыми проектами где без IDE ногу сломишь.

Hertz ★★★★★
()
Ответ на: комментарий от Stahl

Стандарту языка как-то побоку каким образом будет выполняться динамическое связывание.

стандарту пофиг, а вот синтаксис классов не поменяешь. Вот именно синтаксис(или семантика скорее) C++ и определяет то, что реализация в x86 очень хорошо для этого подходит. Т.е. в каждом объекте класса ты хранишь указатель на таблицу, и делаешь jmp/call на адрес, из этой таблицы. И вот именно ЭТИ(дважды косвенные) jmp/call очень хорошо оптимизированы в x86. В другой архитектуре будут другие возможности, они в чём-то другом будут лучше, но C++ виртуальные функции будут не так хороши. Отказаться от C++ мы не можем, т.к. он хорош на x86, отказаться от x86 мы не можем, потому-что он хорош на C++. Порочный круг.

Intel сама в курсе, и уже пыталась поменять архитектуру (на IA-64), fail. Эта таблица по своей сути должна быть «в памяти», ибо индексируется числом из «памяти», т.е. нам обязательно нужно эмуляцию памяти, а не кучу регистров как в Itanium. В этой IA-64 есть всё, но нет команды «перейти по адресу из регистра с номером N+base, который в другом регистре». А в amd64 такая команда есть, хоть она и с «памятью», который на самом деле в кеше L1(т.е. не намного дальше регистров). ИЧСХ, этих команд Over9000 в коде, т.к. в классе часто полно мелких виртуальных методов.

Таблицу с указателями можно сделать на любой архитектуре где есть указатели.

можно. Но она будет в памяти. А в amd64 она в кеше L1. Спрашивается: а куда девать сотни регистров?

В ФП всё проще, там таблица если и есть, то прямо в самой функции, а вот для C++ таблица может находится где угодно. Задачка «найти двадцать ненужных регистров подряд» не так проста, если их всего 256, даже если сделать специальные «указатели на регистры».

Короче, проблема C++ в том, что разные куски одного объекта могут быть расположены где угодно, в отличие от ФП, в котором объект компактен, и лежит в одном контексте. Такой объект легко положить в регистры, если их много. А для C++ достаточно десятка регистров, но очень быстрой памяти, которую можно как угодно индексировать.

emulek
()
Ответ на: комментарий от Hertz

В emacs проекты убогие... Пытался им целых 1.5 года пользоваться. В итоге только настроил и понял, что он не сможет удовлетворить мои потребности. В итоге на Eclipse вернулся из-за его комбайности.

deterok ★★★★★
()
Ответ на: комментарий от feofan

Но принципиальная (и практическая) возможность использовать ООП в сишечке существует.

ООП алгоритм можно в _любой_ архитектуре и ЯП реализовать. И в сишечке тоже можно. Я с этим и не спорил.

Например в sed нет чисел. ВООБЩЕ нет. Их _можно_ реализовать из строк(один даже калькулятор написал). Т.е. получается, что для написания калькулятора не нужна поддержка чисел в ЯП. Достаточно тьюринг-полноты. И это формально — правда.

emulek
()
Ответ на: комментарий от emulek

Какое такое «аргументированное мнение» может быть у необразованного плебея из дикой и грязной страны третьего мира?

anonymous
()
Ответ на: комментарий от emulek

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

Сеть зарядок явно дешевле сети заправок, и таким образом вполне окупится (вполне вероятно).

nightingale
()
Ответ на: комментарий от emulek

Это не «аргументированное мнение», это пердежь нищей, безграмотной, тупой свиньи. Проходи мимо, дикарь из грязной Парашки.

anonymous
()
Ответ на: комментарий от nightingale

Сеть зарядок явно дешевле сети заправок

это с какого перепугу?

и таким образом вполене окупится

при чём тут якобы дешевизна заправок? Всё зависит от вала и прибыли.

emulek
()
Ответ на: комментарий от anonymous

Это не «аргументированное мнение», это пердежь нищей, безграмотной, тупой свиньи. Проходи мимо, дикарь из грязной Парашки.

спасибо. Я выслушал ваши аргументы. Согласен, спорить мне с вами бесполезно.

emulek
()
Ответ на: комментарий от emulek

Что ты споришь? Электромобили уже катаются в куче стран, вики в помощь. Уже даже ВАЗ осилил электромобиль, время зарядки 8 часов — то есть то время, которое ты спишь (а зарядки на каждом углу обеспечить можно), хватает на 140 км. Это на устаревших технологиях. Стоят обычно электромобили от 1 млн. рублей.

Если государство захочет поддержать тему, как и относительно любого вопроса, у него есть множество рычагов, чтобы на одни цены значительно снизились, а другие поднялись. Инфраструктура тем более есть вопрос, которым власти должны заниматься, смотря не на коммерческую окупаемость, а на разного рода (например, на вопросы экологи, или относительно некоторых других вопросов, например — на окупаемость в целом для экономики страны).

Что такое сеть заправок? Это серьезная логистика; это сами заправки, занимающие много дорогой земли; это люди, на них работающие. Сеть же зарядок — это всего лишь провода с розетками и несколько энергодиспетчеров.

nightingale
()
Ответ на: комментарий от emulek

хранишь указатель на таблицу, и делаешь jmp/call на адрес, из этой таблицы

Я не делаю этого явно. Так что синтаксис языка тут не помеха.

ЭТИ(дважды косвенные) jmp/call очень хорошо оптимизированы в x86

Тут мои примитивные знания ассемблера х86 и компиляторов не позволяют ничего сказать, кроме того, что далеко не всегда вызов виртуальных функций влечёт за собой возню с таблицей — зачастую компилятор способен поставить «прямой» указатель сразу куда надо.

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

Stahl ★★☆
()
Ответ на: комментарий от nightingale

Электромобили уже катаются в куче стран, вики в помощь.

за кой ляд? Я Top Gear посмотрел на эту тему. (перед тем, как орать «всё куплено», сначала посмотри. И подумай, что хозяевам вики тоже хочется кушать)

Если государство захочет

я не в том государстве родился. Увы.

Инфраструктура тем более есть вопрос, которым власти должны заниматься, смотря не на коммерческую окупаемость, а на разного рода (например, на вопросы экологи, или относительно некоторых других вопросов, например — на окупаемость в целом для экономики страны).

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

Что такое сеть заправок? Это серьезная логистика; это сами заправки, занимающие много дорогой земли; это люди, на них работающие. Сеть же зарядок — это всего лишь провода с розетками и несколько энергодиспетчеров.

«провода с розетками» тоже инфраструктура. И она далеко не бесплатная. И какая из этих сетей экономичнее — вопрос неоднозначный. И да, судя по картинке с ссылки выше, зарядка от теслы занимает ровно столько же земли, сколько и АЗС. Если ты думаешь, что это просто столб в земле, то ты сильно ошибаешься. АЗС это тоже грубо говоря «бак зарытый в землю». И да, зарядки надо строить ДОПОЛНИТЕЛЬНО. Вместе с АЗС не получится. И исключить АЗС можно только к трёхтысячному году.

emulek
()
Ответ на: комментарий от Stahl

Тут мои примитивные знания ассемблера х86 и компиляторов не позволяют ничего сказать, кроме того, что далеко не всегда вызов виртуальных функций влечёт за собой возню с таблицей — зачастую компилятор способен поставить «прямой» указатель сразу куда надо.

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

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

где взять компилятор, в котором хорошая оптимизация C++ кода для какого-то не-x86 процессора? Чем будешь «размахивать»?

emulek
()
Ответ на: комментарий от TERRANZ

gobject тебе в помощь

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

emulek
()
Ответ на: комментарий от emulek

я не в том государстве родился.

Это понятно.

Если ты думаешь, что это просто столб в земле, то ты сильно ошибаешься.

Зарядка «теслы» может быть и не столб в земле, а электромобили попроще если посмотреть, возможно которые не за 30 минут, а за 8 часов таки заряжаются... http://commons.wikimedia.org/wiki/File:BetterPlaceEVsCharging.JPG

И да, зарядки надо строить ДОПОЛНИТЕЛЬНО.

В городе это можно организовать вполне. Все сразу на электромобили тоже не перейдут, люди будут использовать еще то, что уже есть, и еще немало времени многим электромобиль не подойдет по разным причинам, но задача «сделать электромобиль юзабильным в Москве (или в Петербурге) для значительной части автомобилистов» выглядит ерундой по сравнению со строительством ВСМ до Казани за 4 года (впрочем, не построят).

nightingale
()
Ответ на: комментарий от emulek

компилятор не может явно знать

Насколько знаю оптимизирующий компилятор при некоторых обстоятельствах вполне может сразу подставить указатель на нужную функцию. Но пруфов не будет поскольку я не знаю где их искать.

Чем будешь «размахивать»?

Тот же gcc портирован да овердохрена платформ, но что там и как я не знаю. Так что махать есть чем, просто не знаю чью сторону это махание подтвердит:)

Stahl ★★☆
()
Ответ на: комментарий от emulek

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

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

nightingale
()
Ответ на: комментарий от nightingale

Зарядка «теслы» может быть и не столб в земле, а электромобили попроще если посмотреть, возможно которые не за 30 минут, а за 8 часов таки заряжаются.

угу. Это как минимум охраняемая платная парковка, а не зарядка.

выглядит ерундой

так, ещё раз: я сомневаюсь, что в этом вообще может быть профит. И уж точно не в рашке.

Наличие где-то людей, которые готовы за это платить, ни о чём не говорит. Я вот своей жене на восьмое марта тоже цветы купил — мы оба понимаем, что с экономической т.з. это выброшенные деньги. Но эмоции... За эмоции тоже надо платить. Кому-то нравится, что его автомобиль модный и «экономичный», почему не делать на этой эмоции деньги? Не вижу тут ничего плохого, хороший, годный бизнес.

emulek
()
Ответ на: комментарий от anonymous

В Лондоне зарядки для электромобилей бесплатные. Так что, это, слейся уже.

Это ты слейся: никто не буудет покупать дорогущие электромобили, если не будет зарядок. Особенно учитывая мизерный ресурс и огромную цену АКБ.

emulek
()
Ответ на: комментарий от Siado

После рубей ты должен был отупеть и начать клепать сайтики даже не задумываясь о существовании функционального программирования

Внезапно не начал. Точнее сказать это долго держало меня на плаву, но очень сильно ушатало психику, так что на слове «веб-интерфейс» у меня появляется жуткое желание кого нибудь убить.

ioway
() автор топика
Ответ на: комментарий от Stahl

Насколько знаю оптимизирующий компилятор при некоторых обстоятельствах вполне может сразу подставить указатель на нужную функцию. Но пруфов не будет поскольку я не знаю где их искать.

в общем случае не может. Подумай сам: указатель на foo* занимает 4 байта(в IA-32), как узнать, что там лежит? Только одним способом: прочитать то, куда указывает этот foo*. Там может быть лежать наследник bar(совсем с другой VT).

В каком-то другом ЯП ты можешь сделать «указатель», в котором что угодно лежит, но только не в C++, увы.

Есть правда ссылки, но ссылками всё не сделать. Есть smart pointer, но это только фантик, внутри там всё равно тот же foo*.

Т.е. даже если у тебя есть void foo->helloworld(), которая выводит helloworld, ты всё равно должен пойти, и посмотреть, куда же указывает этот foo, хотя оттуда тебе ничего не нужно. Такая вот семантика C++. В других ЯП foo->helloworld() может хранить что угодно, в т.ч. и адрес функции. В C++ это просто номер функции в таблице. А адрес конкретной таблицы лежит в объекте, т.к. в 4 байта тупо не влезает.

emulek
()
Ответ на: комментарий от nightingale

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

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

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.