LINUX.ORG.RU

Lisp, Haskell, Smalltalk, Forth... что дальше?


1

0

Навеяно предыдущей темой.

Последнее время совершенно отчетливо прослеживается, как маргинальные языки передают друг другу олимпийский факел, в смысле их популярности на ЛОРе.

Факел был когда-то зажжен незабвенным Проффессором Луговскером, и достался он лиспу. Прошло несколько лет, и теперь даже самый распоследний нубас на ЛОРе расскажет вам про REPL, метапрограммирование, квазиквотацию, eval, Slime и про жаба-monkey-кодеров. Лисп стал популярен на ЛОРе, и утратил позиции «элитного» языка, дискутировать о котором могли единицы.

Ниша долго не пустовала. Некоторое время факел находился у Haskell, а последние месяцы его гордо несет Smalltalk (я сужу исключительно по количеству новостей и дискуссий о нем). Но теперь завзятые маргинальщики начинают интересоваться Forth'ом, из чего я делаю вывод о том, что факел Smalltalk'а начал коптить, в силу его популяризации на ЛОРе.

Предлагаю коллективно поразмыслить над тем, какой язык мог бы принять эстафету у Форта. Из маргинальных неэзотерических языков осталось не так уж и много. Clean? Pure? Factor?

★★

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

> в том числе десяток активных разработчиков самой Vala

Vala разрабатывается одним основным разработчиком, парочкой ассистентов

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

>Интересно, где ещё кроме гнома используют

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

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

> Мелковато берете. Че сразу не Java? Глядите, как хорошо смотрелось бы:

Не увиливай. Причём тут вообще Java? Ты сейчас окончательно опозоришься, если начнешь сравнивать промышленную платформу с костыльной обёрткой для GObject.

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

> Qi - это «маленький кусок»? O_O

Это охрененной сложности система типов. А вот тот же Хиндли-Милнер в 100 строк пишется.

что написание этого чекера съест весь профит от его использования.

Ну так глупости же говоришь. Как всегда, собственно. Не исправляешься.

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

> Это охрененной сложности система типов. А вот тот же Хиндли-Милнер в 100 строк пишется.

А подкинь мне Хиндли-Милнера для CL, пусть даже и не в сто строк. Очень интересно.

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

>> т.е., кроме статически типизированных никто не имеет права на жизнь?

В общем, да.

Надуманная преувеличенная религиозная херня. Я про «динамическая типизация это плохо». -)

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

Для CL:

http://www.cliki.net/TypeL

Для Схемы - например так:

http://archives.cs.iastate.edu/documents/disk0/00/00/01/09/index.html

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

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

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

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

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

>> Qi - это «маленький кусок»? O_O

Это охрененной сложности система типов.

Ну так зачем ты ее помянул?

А вот тот же Хиндли-Милнер в 100 строк пишется.

TypeL, который ты же привел в пример, раз так в несколько побольше, но дело даже не в этом... нафига мне реализация Хиндли-Милнера?

что написание этого чекера съест весь профит от его использования.

Ну так глупости же говоришь.

Конечно, а ты, который бросил ссылку на учебные проекты, которые мертвы уже много лет - говоришь дело? %) Лисперы есть лисперы.

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

> Надуманная преувеличенная религиозная херня. Я про «динамическая типизация это плохо».

Это не плохо, это просто менее надежно :)

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

> На матлабе никто не пытается пейсать веб-серверов. Его трезво используют только там, где он реально нужен. А лисп, хаскель, форт и смолтолк маниакально пытаются засунуть в каждую дырку, с маниакальным же убеждением, что затычка получится лучше, чем из Си или Java.

Тогда мне интересно будет узнать, какой по-твоему областью применения обладает хаскель.

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

> Ну так зачем ты ее помянул?

Затем, что ты дурак.

Там нет ничего, кроме системы типов. Все остальные части компилятора берет на себя Лисп. Так что это отличный пример той архитектуры, о которой я говорил.

Могу еще и Axiom упомянуть - та же фигня.

но дело даже не в этом... нафига мне реализация Хиндли-Милнера?

Если хочешь систему типов как в Java - то это вообще 20 строк, не больше.

Конечно, а ты, который бросил ссылку на учебные проекты, которые мертвы уже много лет - говоришь дело?

А на что тебе ссылку давать? Реальные проекты более сложны (тот же Axiom), ты ведь даже в Qi не въезжаешь, куда уж тебе понять реальный код.

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

>утверждаете это сразу об очень многих языках

Это не утверждение. Таково каноническое определение языков общего назначения. Они все такие.

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

>> Ну так зачем ты ее помянул?

Затем, что ты дурак.

Кисо, ты обиделсо?

но дело даже не в этом... нафига мне реализация Хиндли-Милнера?

Если хочешь систему типов как в Java - то это вообще 20 строк, не больше.

Что так много? Давай в одну строку - сможешь?

ты ведь даже в Qi не въезжаешь

Ты мне льстишь штоле? Qi вообще никто не понимает, кроме его создателя.

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

> Надуманная преувеличенная религиозная херня. Я про «динамическая типизация это плохо». -)

Не «динамическая типизация - это плохо», а «динамическая типизация как основа языка - это плохо».

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

> Кисо, ты обиделсо?

Нет, просто констатирую факт. Если человек два утверждения связать не может, то он дурак.

Что так много? Давай в одну строку - сможешь?

На Прологе - могу строк в 5. А прологов встроенных в Лисп полно.

anonymous
()

Clean? Pure? Factor?

Скорее, что-нибудь с зависимыми типами. Epigram, Coq, AGDA. Поживём - увидим.

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

> Скорее, что-нибудь с зависимыми типами. Epigram, Coq, AGDA

...Ivy

:)

tailgunner ★★★★★
()

Пипец. Тему не читаю, но сейчас вздремнул на пол-часика перед работой и приснилось, на ряду с прочим, что мне доказывают (какие-то люди в реале), что Форт мало пригоден для практического программирования из-за того, что сложно за стеком следить. На что я отвечаю, что в других языках тоже можно перепутать, что в какую переменную кладёшь... :D Приснится же :)

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

>Приснится же :)

Ну так полно таких. Даже про фактор то же самое говорят, хотя в плане стека там все намного дружелюбней.

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

Если хочешь систему типов как в Java - то это вообще 20 строк, не больше.

Что так много? Давай в одну строку - сможешь?

На Прологе - могу строк в 5

Показывай.

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

>Лучше расовый русский РЕФАЛ.

черт, я хотел его предложить.

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

> Хм, мне, поскольку я не первый день в интернете и представляю на чём делает гугл деньги - нет. Как быстро можно вернуть 700 млн. долларов продолжая стричь бабло? Попробуйте немного подумать.

нда.

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

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

ещё не обсуждали ... Qu

Интересно, это «ку» или «кю»? Какая тема пропадает! :)

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

Ну, попробуй подумать ещё раз: как часто гугл вкладывает по 700 млн. долларов в «капитоловложения», в какие и зачем он это делает.

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

1. В основе системы лежали «продолжения»

Интересно, а чем тебе продолжения не угодили? Например, на них основан async workflow из f#. Там аж целых три продолжения внутри одного async. И ничего, пользователи просто балдеют от него.

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

>> При желании можно изобразить динамическую типизацию в статически типизированном языке, но не статическую - в динамически типизированном.

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

1. идиллию рушит одна практическая деталь: тебе придется тайпчекать код, использующий библиотеки, которые писались *без* твоей статической типизации

тогда, конечно, появляется идея type inference и/или аннотаций типа для готового кода, но дополнительно жизнь осложняет то, что эти библиотеки могут быть написаны не только на самом языке, а допустим на си, как в случае РНР; думаю, у лиспа тоже порядком библиотек, юзающих FFI и значит си, а то и с++

обратный же переход со статики на динамику тривиален: это запихать в объект тайп-тег (хотя он может сопровождаться ритуалом)

2. очень интересно, как ты собираешься тайпчекать макросы

А. хотелось бы тайпчекнуть макрос так, что бы быть уверенным, что он раскроется в правильный код независимо от тех компайл-тайм переменных, от которых он зависит (ну там констант или типов)

но даже если это и сделать, все равно интересно

В. как обеспечить обязательный тайп-чек после выполнения произвольного кода в макросе? есть ли в CL поддержка этого момента?

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

Молодой человек, вас никогда не учили этике цитирования? Моя фраза звучала так:

Vala разрабатывается одним основным разработчиком, парочкой ассистентов и помощниками из сообщества.


Итого как раз набирается активный десяток.

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

> Показывай.

<vanga-mode>
Сейчас он тебе ответит: «Зачем? Ты все равно не поймешь. И да, я ничего не должен доказывать быдлу» :)
</vanga-mode>

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

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

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

> Интересно, а чем тебе продолжения не угодили?

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

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

> Ну, попробуй подумать ещё раз: как часто гугл вкладывает по 700 млн. долларов в «капитоловложения», в какие и зачем он это делает.

зачем? да уж точно не затем, чтобы «быстро ... вернуть 700 млн. долларов», так что подумать тут надо не мне

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

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

Не уловил логики.

dave ★★★★★
()

вероятно, в т.ч. и под влиянием критики на ЛОРе лисперы перешли к более интересной точке зрения:

http://13-49-ru.blogspot.com/2010/06/repl.html (это здешний mv)

Запустил обмолачиваться 13.5 гигабайт данных в самописном лисповом утиле. Посмотрел на скорость, опечалился. Приостановил утиль (C-c, выпадает в дебаггер с repl'ом), поставил ограничение на примерно половину длины дампа, пустил работать дальше. Открыл вторую консоль, запустил такой же утиль, только работающий со второй половиной. Типа, решил на ходу заюзать SMP, не теряя результатов из уже обработанных данных :)

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

обычно я ставлю костыли (ну или запускаю с самого начала)

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

>практическая деталь

сложность и необходимость.

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

>идиллию

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

теперь лор узнал правду.

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

>Демагогия (др.-греч. δημαγωγία «руководство народом; заискивание у народа»)

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

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

> Не уловил логики.

Что именно вызвало затруднения?

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

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

вообще-то, в моем посте речь шла всего лишь о способах создать статическую типизицию поверх динамической;

кстати, в диалекте схемы, который называется racket, че-то сделали на эту тему, но х.з. как у них с этими проблемами и что там в CL, т.к. макросы в нем не те

что по моему вкусу надо заимствовать из лиспа — так это readtable, более консистентный синтаксис (но естественно не лисповские скобки!!), возможно более свободное перемещение потока управления по стэку и, возможно, большая демократичность реализации (например то, что в с++ vtbl является закрытой деталью реализации — это ужасно)

макросы нужны немного в иной форме — в основном на «чтение AST», создание же AST делать, вероятно, другим методом

все вроде.

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

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

язык это в общем-то синтаксис, проверки и inference (ну есть еще кодогенерация, но ее можно переложить на gcc допустим)

так вот, если какой-то «специализированый» язык умеет то, что невозможно или некрасиво реализуется на якобы языке общего назначения Х, то это означает, что Х — не есть язык общего назначения

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

> Именно потому «плохо подходят», и именно потому все, кому лень, пишут DSLи для своих задач.

DSL должны умереть, embedded DSL наше все

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