avva: (Default)
avva ([personal profile] avva) wrote2002-04-20 10:44 pm

о эстетике языков программирования, Форте и Смолтоке: интроспекция

Мини-опрос: назовите три, с вашей точки зрения, самых красивых (своей эстетикой, своим устройством, своей структурой и т.п.) языка программирования. Ответы в комментах приветствуются.

Мои ответы:
1. Форт
2. Смолток
3. Не знаю - много разных претендентов на это место.


Видимо, учитывая первые два места в моём ответе, мне нравятся языки с таким свойствами:
  • очень простая концептуальная база;
  • практически неограниченные способности к расширению языка самим программистом в нём, включая самые фундаментальные его структуры;
  • прозрачность каждого действия на атомном уровне, переходящая в управляемую сложность на глобальном уровне, вытекающую из структуры, сотканной программистом.
  • мощная интегрированная среда, включающая в себя компилятор, интерпретатор и т.п., и всё это написано на самом языке за исключением крошечного ядра.

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

Форт: дистилляция до прозрачной, и вместе с тем неимоверно мощной простоты базовой идеи макроса: кода, который только и делает, что вызывает в последовательности один за другим другие макросы. Плюс к этому постфиксная нотация и раздельные стэки для данных и контроля выполнения. Всё.

Смолток: дистилляция до прозрачной, и вместе с тем неимоверно мощной простоты базовой идеи объекта: набора данных, который определяет и воплощает протокол коммуникации с ним других объектов.

Оба языка - вне "мейнстрима", у обоих - своя ниша (Форт - embedded software, Смолток - financial systems). Оба мне бы хотелось видеть в мейнстриме, но этого никогда не случится.

Оба я сделал бы (вместе ещё с пятью-шестью другими языками) обязательными для преподавания в программе компьютерного факультета. Оба не являются обязательными для преподавания ни на одном известном мне факультете.

[identity profile] levg.livejournal.com 2002-04-20 01:03 pm (UTC)(link)
Прочитал, задумался... и понял, что не чувствую никакой красоты ни в одном из известных мне языков программирования. Более или менее грамотно реализованные, подходящие для той или иной цели, те, что я знаю лучше или хуже, но красивые, пожалуй что нет...

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

Re:

[identity profile] avva.livejournal.com 2002-04-20 01:10 pm (UTC)(link)
Понимаю, да. У меня наоборот: во всём, что делаю, пытаюсь, иногда мучительно, найти красоту. Но не ощущаю себя при этом "художником", это другое.

[identity profile] muchandr.livejournal.com 2004-01-06 10:41 am (UTC)(link)
нельзя так. я вот предпочел выйти в отставку, чем стать ремесленником.

(no subject)

[identity profile] levg.livejournal.com - 2004-01-07 01:56 (UTC) - Expand

[identity profile] angerona.livejournal.com 2002-04-20 01:15 pm (UTC)(link)
Scheme

[identity profile] dhr-eigen.livejournal.com 2002-04-20 01:18 pm (UTC)(link)
Python
Haskell

Re:

[identity profile] avva.livejournal.com 2002-04-20 01:21 pm (UTC)(link)
А объяснить? ;)

У меня Хаскел один из претендентов на третье место. Питон... не, не потянет.

(no subject)

[identity profile] dhr-eigen.livejournal.com - 2002-04-20 13:32 (UTC) - Expand

(no subject)

[identity profile] simuran.livejournal.com - 2002-04-20 13:54 (UTC) - Expand

[identity profile] simuran.livejournal.com 2002-04-20 01:33 pm (UTC)(link)
I'll second that :)

[identity profile] cmm.livejournal.com 2002-04-20 01:24 pm (UTC)(link)
Scheme: лямбда-исчисление с латентными типами, абстракция контроля (в виде "продолжений").

Haskell: типированное лямбда-исчисление, lazy evaluation.

ML: по сути Scheme - скобки + типы.

Cecil: generic programming, квинтессенция своего рода. все функции generic, parametric multiple dispatch, etc.

помню вот ещё Icon был очень красивый и интересный, только вот не упомню чем именно.

[identity profile] hotgiraffe.livejournal.com 2002-04-20 01:50 pm (UTC)(link)
Моя тройка: Haskell, Scheme, Smalltalk.
То есть, на самом деле (естессно, всё IMHO):

- Haskell, как самый правильный "чистый" функциональный язык (non-strict evaluation, симпатичные структуры, проработанная концепция взаимодействия с "императивным миром" через монады)
- Scheme, как самый правильный Лисп (лексическое связывание, continuations)
- Smalltalk, как самый правильный class-based ОО-язык (правильное соотношение статики и динамики, чистота подхода)

Причём все три а) могут быть весьма эффективно реализованы, б) достаточно удобны в преподавании CS и в) приятны в использовании.

Кандидаты (оба ОО), не вошедшие в тройку: Self и Cecil - первый за чистоту prototype-based ОО подхода, второй - за практичные мультиметоды.
Впрочем, ни одним ни другим я активно не пользовался (в отличии от тройки призёров).

[identity profile] avva.livejournal.com 2002-04-20 01:57 pm (UTC)(link)
Наверное, Вы меня убедили почитать о Схеме, я с ней никогда дела не имел как-то.

[identity profile] ex-ilyavinar899.livejournal.com 2002-04-20 04:22 pm (UTC)(link)
Только что нашел смешное Эволюция программиста на Хаскеле (http://www.willamette.edu/~fruehr/haskell/evolution.html)

[identity profile] fima.livejournal.com 2002-04-20 03:11 pm (UTC)(link)
Назову C++ как самый жизнеспособный (моё представление о прекрасном в программировании).
Языки, перечисленные выше (в комментариях других), обладают иными типами красоты. Я бы сравнил красоту С++ с красотой урбанистического пейзажа (Дефанс или Эйфелева башня, например), Smalltalk - с видом на лес из окна, Форт - с росписями Рублёва, Схему - со звездным небом (с Хаскелем дело не имел).
Ещё могу предложить Пролог как Саграда Фамилия.

ответ на каверзный вопрос

[identity profile] gong.livejournal.com 2002-04-20 03:32 pm (UTC)(link)
1. Деньги.

2. Власть.

3. Паскаль.

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

[identity profile] catpad.livejournal.com 2002-04-20 04:01 pm (UTC)(link)
Думаю, на первом месте Лисп (может и Схема, только о ней не знаю ничего).
Потом, сравнивать несравнимое трудно: хочется и ML и Prolog поставить на второе.
Prolog, конечно, не за удобство программирования, а за ощущение "чуда", которое всегда присутствует при его работе.
А за среду и usability - Java.
А вообще, вопрос классный, только ответить на него невозможно. Ты вот про человеческие языки спроси - интересно будет !

Re:

[identity profile] avva.livejournal.com 2002-04-20 07:40 pm (UTC)(link)
Про ощущение чуда с Прологом - это ты очень верно высказался.

Я в какой-то момент, очень давно (лет 9 назад), изучая Пролог, испытал это. У меня была программа (взятая из книги), я понимал каждый отдельную строку, понимал принцип работы Пролога, всё понимал - а как у программы получалось работать, не понимал. Запускал её снова и снова с почти религиозным восторгом.

(no subject)

[identity profile] catpad.livejournal.com - 2002-04-20 20:11 (UTC) - Expand

Re:

[identity profile] avva.livejournal.com - 2002-04-20 20:17 (UTC) - Expand

(no subject)

[identity profile] catpad.livejournal.com - 2002-04-20 20:26 (UTC) - Expand

[identity profile] 37.livejournal.com 2002-04-20 04:08 pm (UTC)(link)
Может, это не ответ на вопрос, или ответ, но на другой вопрос... Как старику Карамазову было все равно, какая женщина - хоть мовешка, хоть вьельфилька, так и для меня всегда хорош был тот язык, на котором я в тот момент писал. Иногда даже: чем хуже, тем лучше. Костный диалект вызывает к жизни чудеса изобретательности. В конце концов, я иногда вообще забываю, на каком языке я пишу и могу непроизвольно смешать конструкции :-)). Тем более, что, по крайней мере, в моей практике, язык почти никогда выбирать не приходилось. В конце концов, язык - это гвозди и молоток. Им сбиваешь конструкцию из стоящих над ним алгоритмов и интерфейсов.
Пожалуй лищь одно: в объектном мире я чувствую себя гораздо уютнее.

[identity profile] ex-ilyavinar899.livejournal.com 2002-04-20 04:10 pm (UTC)(link)
1. Scheme - самый практичный из лиспов, широко применяющийся в педагогике.

2. ML.

3. Не знаю.

[identity profile] cmm.livejournal.com 2002-04-20 04:59 pm (UTC)(link)
> Scheme - самый практичный из лиспов.

ой. оёёй. оёёёёй.

в каком это смысле "практичный", не говоря уже о "самый"?

Дополнение:

[identity profile] catpad.livejournal.com 2002-04-20 04:12 pm (UTC)(link)
1. То, что ты написал про Форт, верно также и для никому не известного языка Trac. Очень симпатичное изобретение: здесь.
2. Есть такая книжка Дэвида Гелернтера (не помню названия), где он призывает на компьютерных факультетах преподавать курсы по эстетике, искусству, дизайну и т.п.
Как это было бы здорово и правильно !
Тогда бы не было программистов на Visual Basice и не возник бы JavaScript.

Re: Дополнение:

[identity profile] avva.livejournal.com 2002-04-20 07:25 pm (UTC)(link)
1. Спасибо, обязательно посмотрю.
2. Мечты, мечты. Это тот самый Гелернтер, который стал инвалидом из-за бомбы Унабомбера, верно?

Может быть, если бы Унабомберу на его факультете математики преподавали эстетику, искусство и дизайн... ;)

[identity profile] catpad.livejournal.com 2002-04-20 11:45 pm (UTC)(link)
А вот ещё забыл. Есть совершенно замечательный язык APL. Он, конечно, ужасен, но всё же, всё же... Я его люблю.
Его, кстати, преподавали в Технионе много лет и отменили года три назад. Я был последним ассистентом на этом курсе - грустно.

[identity profile] cmm.livejournal.com 2002-04-21 12:20 am (UTC)(link)
дa-да-да! про APL-то и забыли.

[ а я и не знал, что отменили. жалко. впрочем, Технион начинал неумолимо опопсевать ещё на моих глазах... ]

(no subject)

[identity profile] hotgiraffe.livejournal.com - 2002-04-21 02:03 (UTC) - Expand

K

[identity profile] muchandr.livejournal.com - 2004-01-06 13:18 (UTC) - Expand
ext_454496: (Default)

[identity profile] alexcohn.livejournal.com 2002-04-21 04:57 am (UTC)(link)
Мне в детстве довелось изучать Рефал, который придумал изгнанный отовсюду за диссиду Турчин. Ощущение чуда несравнимо острее, чем в Прологе.

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

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

[identity profile] ex-ilyavinar899.livejournal.com 2002-04-21 04:40 pm (UTC)(link)
Sue Graham из Беркли говорит, что двухуровневая грамматика настолько кошмарно сложна, что сами создатели языка так ее толком до ума и не довели.

Алгол-68 прекрасен своей ортогональностью, но если я правильно помню, в язык включено очень многое (напр. семафоры), и поэтому он не подходит под критерии Аввы: ни простой концептуальной базой, ни расширяемостью. Вот (http://vestein.arb-phys.uni-dortmund.de/~wb/RR/rrTOC.html), кстати, нашел определение языка.

А что есть в Рефале такое, чего нету в Лиспе?

(no subject)

[identity profile] alexcohn.livejournal.com - 2002-04-22 03:16 (UTC) - Expand

"Антилехенты. Красиво идуть..."

[identity profile] lvalien.livejournal.com 2002-04-21 08:36 am (UTC)(link)
Уважаемый Авва. Нельзя ли чуть-чуть усложнить задачку?

Пусть будет необходимо выбрать три языка, уже имеющие как минимум один принятый ANSI стандарт. Можно даже упростить - пусть не ANSI, пусть - уровня ANSI. Паскаль, насколько я помню, там не проканал пока, а вот где-то в Европе (Британии?)...

Re: И по теме

[identity profile] lvalien.livejournal.com 2002-04-21 08:41 am (UTC)(link)
Алгол - хоть я его никогда уже не увижу опричь "в пробирке"
REXX - хоть он и принадлежит с потрохами одной мегакорпорации
Пролог - хоть под него необходимо создавать совсем другие процессоры, а без поддержки на уровне проца это всего лишь красивая игрушка.
nine_k: A stream of colors expanding from brain (Default)

[personal profile] nine_k 2002-04-22 08:46 am (UTC)(link)
Тройка -- это мало :-)
Forth и Smalltalk -- согласен. Ещё ML за невероятную красоту хитрой типизации, проверяемую в compile time (которой, afair, нет в Scheme), и lazy evaluation. Конечно, Prolog.
REXX чудесен своей сковозной интерпретируемостью (как на нём сделаны массивы -- это песня :-)).
Кстати, не забыть бы и Eiffel.

Ветку Trac успешно продолжил ужасный, хотя концептуально остроумный brainf*ck. Упоминавшийся тут APL разве обладает малой и изящной базой концепций? На нём one-liner-ы хорошо писать. В ту же категорию ужасных в своей концептуальности -- perl ('it works the way you expect, unless you expect consistency') и С++ c Algol-68.

Если б раздавать ещё и призы за попытку красиво реализовать практически потребное сложное, что нельзя свести к минимализму в духе smalltalk / lisp / forth, то тут бы упомянуть Simula-67 (сопрограммы) и Ada (модули, рандеву), и python (удачная попытка совместить в одном языке кучу подходов, оставив его предельно понятным и непротиворечивым).

APL, unlambda

[identity profile] muchandr.livejournal.com 2004-01-06 01:26 pm (UTC)(link)
Не силен в оригинальном APL, но судя по K, такая концепция еще как есть, а именно то что код должен полностью убираться в "визуальный буфер" программиста. Компактность любой ценой. Например однажды я заменил 2.5K линий кода на Jave на всего 4 линии K. Есть еше более экстремальный чем brainfuck язык unlabda, из двух что ли всего операторов. Он такой странный, что для него даже квайн никто долго написать не мог.

[identity profile] nslu.livejournal.com 2002-04-29 10:27 pm (UTC)(link)
что за...
ФОРТРАН!

[identity profile] nslu.livejournal.com 2002-04-29 10:30 pm (UTC)(link)
http://valeo.ncport.ru:8106/ANEKDOTY/non_pas.txt

Re:

[identity profile] avva.livejournal.com - 2002-04-30 03:47 (UTC) - Expand

Forth + smalltalk

(Anonymous) 2003-10-14 12:43 am (UTC)(link)
Гибкость обоих позволяет (особенно форт) создать любую парадигму внутри себя в сети немало реализаций lisp и prolog как расширений форта Также пролог легче реализовать как класс в смолтолке чем пристыковывать программы на нем к др программам (в принципе пролог легко реализуется в любой ООП системе) Но все таки любую парадигму качественно реализовать можно только в Форте

Py

(Anonymous) 2004-02-23 10:05 am (UTC)(link)
** Python
@ красивый
@ живой
@ перспективный,
считаю что он "равен" Java и C#
**

one word comment

(Anonymous) 2004-05-24 09:37 am (UTC)(link)
Python