Здравствуйте, Mamut, Вы писали:
A>>На самом деле, это скорее ВАУ фича, чем что-либо полезное. Те примеры что есть, скорее всего масксимум возможностей и показывают, а именно простые однопоточные приложения с простой моделью данных. M>Ну, на самом деле я на это дело смотрю, как на приятный расширенный REPL
Мне вот всегда было интересно зачем REPL нужен...
Здравствуйте, Ikemefula, Вы писали:
I>Apple родила язык.
Спасибо, Эппл, что не iGO.
I>Вывод типов
Это скорее реконструкция типов.
I>паттерн-матчинг,
Насколько я понял, он "плоский", Т.е. [Just a,_] не сматчит. Привет 60-е, короче говоря.
Да и синтаксис у него, конечно, тот еще:
enum ServerResponse {
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
case let .Result(sunrise, sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."case let .Error(error):
let serverResponse = "Failure... \(error)"
}
I>замыкания,
Это без ГЦ на одном подсчете ссылок? Ну ну.
I>дженерики,
Только вот от конструктора абстрагироваться-то как обычно нельзя.
I>'монадический' optional
Который, как я понял, автораспаковывается.
I>Если будет внятный GC,
А его хотя-бы обещают?
I>то это лучше C#, Джавы и С++ вместе взятых.
Тоже мне бином Ньютона. Чтоб хуже сделать — это специально постараться нужно, как Гуглу.
I>Но судя по набору фич язык сильно близко подобрался к Scala и F#
Он объединяет в себе недостатки этих языков: убогую систему типов F#-а c убогим Scala-синтаксисом.
I>И самое главное — Сишный синтаксис !
Как будто это что-то хорошее! Синтаксис не сишный, немного получше, но не сильно.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
A>>>На самом деле, это скорее ВАУ фича, чем что-либо полезное. Те примеры что есть, скорее всего масксимум возможностей и показывают, а именно простые однопоточные приложения с простой моделью данных. M>>Ну, на самом деле я на это дело смотрю, как на приятный расширенный REPL C>Мне вот всегда было интересно зачем REPL нужен...
Это очень удобный инструмент. Как для быстрого прототипирования и проверки некоторых идей, так и для быстрого тестирования некоторых вещей
Здравствуйте, Mamut, Вы писали:
M>>>Ну, на самом деле я на это дело смотрю, как на приятный расширенный REPL C>>Мне вот всегда было интересно зачем REPL нужен... M>Это очень удобный инструмент. Как для быстрого прототипирования и проверки некоторых идей, так и для быстрого тестирования некоторых вещей
Ну так берёшь, создаёшь файлик и туда записываешь (с автокомплитом и всеми прочими плюшками) нужный код. Потом с отладчиком выполняешь, они нынче умные и позволяют удобно инспектировать код.
Здравствуйте, Cyberax, Вы писали:
C>Мне вот всегда было интересно зачем REPL нужен...
Нужен для экспериментирования с кодом. Просто это подходит только для языков где небольшой снипет кода что-то нетривиальное делает без трудновоспроизводимого окружения, вроде функциональных языков, либо в тех, где это самое окружение легко сохранять, вроде лиспов и смолтоков.
Во всяких C/Java он в основном бесполезен. также очень легко сделать неюзабельный REPL "для галочки", как в F#.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
M>>>>Ну, на самом деле я на это дело смотрю, как на приятный расширенный REPL C>>>Мне вот всегда было интересно зачем REPL нужен... M>>Это очень удобный инструмент. Как для быстрого прототипирования и проверки некоторых идей, так и для быстрого тестирования некоторых вещей C>Ну так берёшь, создаёшь файлик и туда записываешь (с автокомплитом и всеми прочими плюшками) нужный код. Потом с отладчиком выполняешь, они нынче умные и позволяют удобно инспектировать код.
1. Зачем, если ты имеешь тот же автокомплит (и часто отладчик) прямо из REPL'а?
2. Для большинства языков, чтобы что-то выполнить, нужно написать толпу обвязки вокруг (все эти main'ы, вызовы и прочее), когда надо быстро проверить пару идей?
Здравствуйте, Klapaucius, Вы писали:
K>Насколько я понял, он "плоский", Т.е. [Just a,_] не сматчит. Привет 60-е, короче говоря.
90е и 2000 это Java и C#, в которых еще более примитивный switch
K>Да и синтаксис у него, конечно, тот еще:
Да, не такой, как в Хаскеле
I>>И самое главное — Сишный синтаксис !
K>Как будто это что-то хорошее! Синтаксис не сишный, немного получше, но не сильно.
Именно. Для 90% разрабов, которые только и имеют дело с сишным синтаксисом, это очень круто.
Здравствуйте, Mamut, Вы писали:
C>>Ну так берёшь, создаёшь файлик и туда записываешь (с автокомплитом и всеми прочими плюшками) нужный код. Потом с отладчиком выполняешь, они нынче умные и позволяют удобно инспектировать код. M>1. Зачем, если ты имеешь тот же автокомплит (и часто отладчик) прямо из REPL'а?
Не везде они есть.
M>2. Для большинства языков, чтобы что-то выполнить, нужно написать толпу обвязки вокруг (все эти main'ы, вызовы и прочее), когда надо быстро проверить пару идей?
А идеи без обвязки будут работать?
Здравствуйте, Klapaucius, Вы писали:
C>>Мне вот всегда было интересно зачем REPL нужен... K>Нужен для экспериментирования с кодом. Просто это подходит только для языков где небольшой снипет кода что-то нетривиальное делает без трудновоспроизводимого окружения, вроде функциональных языков, либо в тех, где это самое окружение легко сохранять, вроде лиспов и смолтоков.
Ну то есть, как замена удобному отладчику.
M>>2. Для большинства языков, чтобы что-то выполнить, нужно написать толпу обвязки вокруг (все эти main'ы, вызовы и прочее), когда надо быстро проверить пару идей? C>А идеи без обвязки будут работать?
Зависит от идеи
В C/C++/Java/C# ты даже строчку кода не можешь запустить без main'а
А мне надо сейчас баг решать, с разными вводными данными (небольшим количеством). Прямо в шелле:
Все, во втором окне запускаю curl для проверки резульатов (проверяем выхлоп REST API на некотором наборе данных, не можем воспроизвести ситуацию из бага).
При этом я тут же могу сделать стопятьсот других полезных вещей
Убило использование подсчета ссылок без автоматического разруливания за зацикливаний. В 21 веке это выглядит дико. Такому языку нужен GC или хотя бы автоматический поиск зацикливаний, как в Руби.
С экстернал-параметрами какой-то овердизайн. Плюс, похоже, перегрузки возможны только для функций с этими самыми экстернал-параметрами.
Чисто стилистически не понравилась утащенная из GO идея не писать круглые скобки, но всегда писать фигурные.
Плохо, что не поддерживается концепция "все является выражением".
Странно выглядит отсутствие приватных членов в классах (можно я чего-то не заметил?).
В остальном язык ничего. Во многом похож на Немерл.
Из присутствующего в нем и отсутствующего в Немерле можно выделить именованные кортежи в качестве возвращаемых значений функций и диапазоны в паттернах. Хотя не ясно можно ли задавать границы диапазонов переменными.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>многие слбни пускали по поводу какого-то концепта IDE, где выполнение показывалось на ходу. А Apple взяли и реализовали не концепт
О чем речь? Можно по подробнее?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>Ну, на самом деле я на это дело смотрю, как на приятный расширенный REPL
Только на практике репл годится только для поиграться. В больших приложениях нужны более серьёзные средства отладки и управления проектами. В Немерле репл сдох за ненадобностью.
Правильным подходом было бы встроить репл в отладчик. Остановился по точке останова и поигрался с данными с помощью локального репла. Ну, а еще правильнее чтобы можно было код править на лету, как в скриптах. У МС есть Edit & Continue, но слишком много ограничений.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, kaa.python, Вы писали:
KP>Если же говорить о разработках Apple, то компания является одним из основных (или даже основным) спонсором LLVM и Clang.
Ключевые слова — спонсор, и "один из". Не владельцы проекта.
Здравствуйте, VladD2, Вы писали:
VD>Убило использование подсчета ссылок без автоматического разруливания за зацикливаний. В 21 веке это выглядит дико. Такому языку нужен GC или хотя бы автоматический поиск зацикливаний, как в Руби.
Как в Питоне, наверное. В Руби испокон веков был честный mark & sweep, никакого RC.
В свифте они целились на рантайм-совместимость с Obj-C, а там тот же самый ARC. Трудно было бы добавить честный GC в один язык, не добавив в другой. Ну и скорее всего это дело принципа: обеспечить иллюзию детерминированности и какбы отсутствие тормозов GC, шоб андроид не получился.
M>>Ну, на самом деле я на это дело смотрю, как на приятный расширенный REPL
VD>Только на практике репл годится только для поиграться. В больших приложениях нужны более серьёзные средства отладки и управления проектами. В Немерле репл сдох за ненадобностью.
Правильно. Что надо сделать? Придумать за оппонента тезис, мол, REPL заменяет какие-то там средства отладки и т.п. И давай — шашку наголо и бороться с этим тезисом. Про Немерле смешно, да.
Здравствуйте, Mamut, Вы писали:
M>Правильно. Что надо сделать? Придумать за оппонента тезис, мол, REPL заменяет какие-то там средства отладки и т.п. И давай — шашку наголо и бороться с этим тезисом. Про Немерле смешно, да.
Я ничего не придумывал. Просто сказал, что он особо не нужен на практике.
M>Вот у нас большое приложение. Общее количество кода около миллиона строчек. Ничего, в разработке и REPL применяется, и «более серьёзные средства отладки».
Да, сдох. И единственная причина — не нужен никому на практике. Был бы нужен давно реанимировали. За все время вопрос о нем поднимался ровно один раз и успешно заглох.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
M>>Правильно. Что надо сделать? Придумать за оппонента тезис, мол, REPL заменяет какие-то там средства отладки и т.п. И давай — шашку наголо и бороться с этим тезисом. Про Немерле смешно, да.
VD>Я ничего не придумывал. Просто сказал, что он особо не нужен на практике.
Извини, но вот это:
Только на практике репл годится только для поиграться. В больших приложениях нужны более серьёзные средства отладки и управления проектами.
это именно придумывание.
M>>Вот у нас большое приложение. Общее количество кода около миллиона строчек. Ничего, в разработке и REPL применяется, и «более серьёзные средства отладки».
VD>Ну, расскажи как вы там репл в большом приложении применяете.
Здравствуйте, VladD2, Вы писали:
M>>Правильно. Что надо сделать? Придумать за оппонента тезис, мол, REPL заменяет какие-то там средства отладки и т.п. И давай — шашку наголо и бороться с этим тезисом. Про Немерле смешно, да.
VD>Я ничего не придумывал. Просто сказал, что он особо не нужен на практике.
M>>Вот у нас большое приложение. Общее количество кода около миллиона строчек. Ничего, в разработке и REPL применяется, и «более серьёзные средства отладки».
VD>Ну, расскажи как вы там репл в большом приложении применяете.
ставишь бряк куда надо, а там тупо вызываешь функции как хочешь. вместо перезапуска всего приложения ты можешь попробовать на лету пару вариантов и готовый результат перенести в код.
Вероятно оттого, что всё кругом на макросах а ни серверных приложений, ни мобильных не пишется.
Прикинь, как круто — на каждый мелкий бажок создаешь инсталяционный пекадж, инсталируешь, запускаешь, ждёшь, прогоняешь всю цепочку и все это для того, что бы выяснить ,что в путях потерялся один из компонетов.