Leave a comment

Comments 296

maxim November 25 2013, 14:22:52 UTC
Это все написано для недалекого С-программиста.
Ты попробуй написать такое же для Haskell-программиста,
заодно расскажи ему что его системы типов в Clojure сделаны лучше и изящней.

Reply

tonsky November 25 2013, 14:26:16 UTC
Я специально только синтаксиса касаюсь здесь, выношу все остальные особенности за скобки.

Reply

maxim November 25 2013, 14:33:00 UTC
Много хаскель программистов тоже не любят скобки.
Но это все для них не работает, потому что без скобок все равно лучше чем со скобками.

Reply

tonsky November 25 2013, 14:36:58 UTC

(defn jobs-distribution-live [cluster]
(util/transformed (:tree cluster)
(fn [{:keys [peers jobs]}]
(when-not (or (empty? peers) (empty? jobs))
(jobs-distribution peers jobs)))))

defn jobs-distribution-live cluster
util/transformed :tree cluster
fn :keys peers jobs
when-not or empty? peers empty? jobs
jobs-distribution peers jobs

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

Если Haskell-программисты просто не любят скобки (именно скобки, а не динамическую типизацию или еще что-то другое), то я не вижу чем они лучше недалекого С-программиста. Я бы сперва посмотрел на такого программиста, впрочем, и выслушал его аргуметны.

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

Reply


ext_668022 November 25 2013, 14:23:16 UTC
>> Любой язык надо учить. Если ты не знаешь Ruby, открываешь исходники на Ruby и ничего не понимаешь. Радости от того, что это выглядит похоже и знакомо, немного - это только иллюзия, на самом деле ты по прежнему ничего не понимаешь.

Orly? Если код не содержит вызовов незнакомых внешних библиотек и написан нормальным человеком для людей, а не гиком-фанатом, то любой c-подобный синтаксис вкуривается за пару часов. Хотя бы на уровне понимания того, что тут происходит. То есть "читаю со словарем"

Reply

tonsky November 25 2013, 14:25:33 UTC
Same thing here. Чтобы читать со словарем, больше 2-х часов не нужно.

Reply

dmytrish November 25 2013, 20:40:28 UTC
Но зато потом начинается баттхерт уже от самого языка и определения где что, где функция, где атом, где параметры, где тело функции, где импортированный элемент, где ключевое слово/встроенная форма. А когда начинаются макросы, особенно хитрые и не традиционные (не with-resource и подобное), без консультации с кодом вкурить, что тут вообще происходит, становится нереально.

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

Reply

tonsky November 26 2013, 05:45:04 UTC
Да вроде не начинается. Главное придерживаться правила «Don’t use “use”»

Reply


anonymous November 25 2013, 14:25:50 UTC
Большинство "программистов" даже не могут понять где синтаксис, где проверка типов, а где семантика - у них всё это сливается в кашу. С этого, наверное, и стоит начать просвящение.

Reply

anonymous November 25 2013, 14:33:13 UTC
В догонку: многие считают что тайпчекинг для проверки корректности и тайп-инференс для эффективной генерации кода неразрывно связаны, хотя я это неправда.

Reply


archydragon November 25 2013, 14:29:29 UTC
Лиспам вообще жирный плюс (ИМХО) за простоту синтаксиса. Чем меньше в синтаксисе возможностей реализовать что-либо более, чем одним способом (e.g. возможность опускать скобки при вызове функций в Perl/Ruby), тем выше средняя строгость, и проще и компилятору/VM, и человеку, который этот код поддерживать будет.

Reply

maxim November 25 2013, 14:35:10 UTC
В Clojure мудро сочитаются все виды скобок, [] {} () от этого он такой прикольный.

Reply

archydragon November 25 2013, 14:36:59 UTC
Смотрите комментарий выше, VM/компилятор и синтаксис никак не связаны: VM работает с байткодом, генерация кода в компиляторе работает с деревом промежуточного представления кода. Ни следа синтаксиса ни там ни там уже не остаётся.

Reply

archydragon November 25 2013, 14:38:18 UTC
Я именно этап преобразования написанного человеком кода в AST и имел в виду. Криво выразился, виноват.

Reply


thedeemon November 25 2013, 15:03:21 UTC
Я писал на языках с самыми разными синтаксисами (Pascal, asm, C*, Scheme, Perl, Ruby, OCaml, ATS, Clean, Haskell, Idris..) и продолжаю считать, что у лиспов синтаксис самый отвратительный. В угоду простоты парсера человеку приходится делать работу за компьютер, расставляя скобочки там, где другие языки отлично справляются без них. Все равно что на XML программировать. Тьфу.

Reply

sorhed November 25 2013, 15:22:22 UTC
Именно!

Reply

p1r4nh4 November 25 2013, 15:27:51 UTC
С другой стороны, структурное редактирование на хорошем уровне (иначе говоря - paredit) для других языков фактически невозможно.

Reply

maxim November 25 2013, 15:31:39 UTC
Ох прямо-таки невозможно :) для лисперов что-то есть невозможное.

Reply


Leave a comment

Up