устал от С++.
чувствую, что можно писать более эффективно (в плане затраты времени/функциональность) на других языках и получать большее эстетическое удовлетворение. пора что-то менять.
уже решил, что языком для низкого уровня оставлю С, но нужен язык для (сравнительно-)высокоуровневых задач.
что посоветует общественность?
беглый анализ ситуации показал, что претендентов не так уж и много, а именно:
1. ocaml
2. D
по певому:
— так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.
по второму:
— а дорос ли он уже до реального применения в промышленных системах?
опыт программирования приближается к 15 годам, в основном это С и C++.
сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.
Здравствуйте, zip_, Вы писали:
_>беглый анализ ситуации показал, что претендентов не так уж и много, а именно: _>1. ocaml _>2. D
_>сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.
А они вообще есть для QNX/ARM?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
ocaml: если использовать VM, то никаких проблем. ядро написано на С, компилируется без проблем, проверено. выполняется (байт-)код, полученный в т.ч. под виндой (очень удобно). есть также и native компилятор для ARM, говорят работает под QNX6, но сам не пробовал.
D: я так понял можно использовать gcc-frontend-компилятор везде, где есть gcc. под QNX6 компилятор именно gcc
Здравствуйте, zip_, Вы писали:
_>беглый анализ ситуации показал, что претендентов не так уж и много, а именно: _>1. ocaml _>2. D
Их на самом деле больше, но приводить их здесь и сейчас смысла нет — только растерянности прибавит.
_>по певому: _>- так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.
Да. Универсален и очень хорош. Без шуток. Особенно как замена С++
_>по второму: _>- а дорос ли он уже до реального применения в промышленных системах?
А вот здесь встает вопрос об осмысленности выбора. Ничего _качественно_ нового D в себе не несет, причем разные features, которыми он гордится мало связаны между собой в единую систему (формально).
Кроме всего прочего, тот же синтаксис, что и в С/С++, нагло влияющий на семантику языка. Что может и не является такой уж проблемой, но в общем зачете очков не прибавляет.
_>опыт программирования приближается к 15 годам, в основном это С и C++.
Плохо. Меньший опыт был бы лучше. Честное слово. Будут проблемы с освоением Окамла. Если все-таки соберетесь учить, рекомендую постараться забыть как можно больше о своем опыте, иначе кроме раздражения ничего не получите. Потом уже можно будет вспомнить и сравнить :) http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.
_>сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п.
По идее проблем быть не должно, в самом крайней случае FFI у окамла на случай общения с железом приличный.
Зашел по ссылке "на автомате". Остановился на фразе "Take a careful look at the bracketing and the lack of commas" раздела "Calling functions". Дальше читать не стал. Стало не интересно думать о количестве скобок и их последовательности.
Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах
Anton Batenev wrote:
> R>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ > программистов. > Зашел по ссылке "на автомате". Остановился на фразе "Take a careful > look at the bracketing and the lack of commas" раздела "Calling > functions". Дальше читать не стал. Стало не интересно думать о > количестве скобок и их последовательности.
Это скорее просьба обратить внимание на "нестандартный" синтаксис
OCaml'а. Таких проблем со скобочками как в Lisp'e в OCaml'е нет
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, reductor, Вы писали:
R>>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.
AB>Зашел по ссылке "на автомате". Остановился на фразе "Take a careful look at the bracketing and the lack of commas" раздела "Calling functions". Дальше читать не стал. Стало не интересно думать о количестве скобок и их последовательности.
Там всего-то говорится о том, что обычно вызов функции выглядит не как foo(arg1,arg2,arg3), а как foo arg1 arg2 arg3, только и всего, и комментарий был специально для привыкших к традиционному синтаксису.
AB>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах
ИМХО, ты слишком рано сдался
Здравствуйте, reductor, Вы писали:
R>Здравствуйте, zip_, Вы писали:
_>>беглый анализ ситуации показал, что претендентов не так уж и много, а именно: _>>1. ocaml _>>2. D
R>Их на самом деле больше, но приводить их здесь и сейчас смысла нет — только растерянности прибавит.
Мои требования:
— статическая типизация (неплохо также вывод типа иметь)
— претензия на практичность
— переносимость
— качество скомпилированного кода
— совместимость с С
Если есть другие языки, приведи, pls, примеры.
_>>по певому: _>>- так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.
R>Да. Универсален и очень хорош. Без шуток. Особенно как замена С++
Пожалуй стоит попробовать в реальном проекте.
_>>по второму: _>>- а дорос ли он уже до реального применения в промышленных системах?
R>А вот здесь встает вопрос об осмысленности выбора. Ничего _качественно_ нового D в себе не несет, причем разные features, которыми он гордится мало связаны между собой в единую систему (формально).
Несет удобство в работе, исправляет недостатки С++, как мне показалось (возможно не все). Однако верю, что функциональный подход может дать значительно больше того самого удобства, если к нему привыкнуть. В D как раз подкупает простота перехода с C++, фактически в первый же день можно начать писать сложные программы.
Но настораживает то, что слабо развивается и до сих пор нет релиза хотя бы версии 1.x
R>Кроме всего прочего, тот же синтаксис, что и в С/С++, нагло влияющий на семантику языка. Что может и не является такой уж проблемой, но в общем зачете очков не прибавляет.
Как ни странно, его синтаксис мне нравится куда больше, чем ocaml-овский (и вообще паскаль-подобный). Вероятно это субъективно, играет по-видимому сила привычки.
_>>опыт программирования приближается к 15 годам, в основном это С и C++.
R>Плохо. Меньший опыт был бы лучше. Честное слово. Будут проблемы с освоением Окамла. Если все-таки соберетесь учить, рекомендую постараться забыть как можно больше о своем опыте, иначе кроме раздражения ничего не получите. Потом уже можно будет вспомнить и сравнить R>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.
Это я понимаю.. Придется ломать себя..
_>>сейчас задачи связаны с разработкой под встраиваемые системы (QNX/ARM): протоколы обменов, сетевые интерфейсы, встраиваемые базы данных, GUI (touchscreen) и т.п. R>По идее проблем быть не должно, в самом крайней случае FFI у окамла на случай общения с железом приличный.
Здравствуйте, Anton Batenev, Вы писали:
AB>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на AB>первых разделах
Харпер. Лучший учебник по SML. Далее документация по всем ML языкам читается как художественная литература.http://www.cs.cmu.edu/~rwh/smlbook/. У меня русская версия есть, но взята с интера. Если хорошо прогуглиться, можно и такую найти.
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, reductor, Вы писали:
R>>http://www.ocaml-tutorial.org/ — туториал специально для С/С++ программистов.
AB>Зашел по ссылке "на автомате". Остановился на фразе "Take a careful look at the bracketing and the lack of commas" раздела "Calling functions". Дальше читать не стал. Стало не интересно думать о количестве скобок и их последовательности.
AB>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах
Да нет, мне наоборот понравилось, с юмором парень:
OCaml never does implicit casts like this. In OCaml, 1 + 2.5 is a type error. The + operator in OCaml requires two ints as arguments, and here we're giving it an int and a float, so it reports this error:
# 1 + 2.5;;
This expression has type float but is here used with type int
(In the "translated from the French" language of OCaml error messages this means "you put a float here, but I was expecting an int").
Здравствуйте, zip_, Вы писали:
R>>По идее проблем быть не должно, в самом крайней случае FFI у окамла на случай общения с железом приличный.
_>Что есть FFI?
Foreign Function Interface.
O'Caml может общаться с C, а для упрощения генерации stub'ов есть инструмент — CamlIDL.
Здравствуйте, Глеб Алексеев, Вы писали:
AB>>Не хочу отзываться плохо о языке... Лучше скажу, что-нибудь плохое про автора, писавшего туториал, и отбившего желание читать его дальше на первых разделах ГА>ИМХО, ты слишком рано сдался
Возможно. Однако, прежде чем откланятся, разрешите сделать лирическое отсупление?
Ради приличия, дочитал внимательнейшим образом главу до конца. Я не имею ни малейшего понятия об этом языке. В оглавлении стоит ремарка о том, что предполагается, что я уже скачал дистриб языка, установил его и жажду деятельности. Однако, за всю главу Basics мы не написали "Hello Word". Вам интересно было бы читать дальше при такой вводной как у меня?
Здравствуйте, Anton Batenev, Вы писали:
AB>Возможно. Однако, прежде чем откланятся, разрешите сделать лирическое отсупление?
AB>Ради приличия, дочитал внимательнейшим образом главу до конца. Я не имею ни малейшего понятия об этом языке. В оглавлении стоит ремарка о том, что предполагается, что я уже скачал дистриб языка, установил его и жажду деятельности. Однако, за всю главу Basics мы не написали "Hello Word". Вам интересно было бы читать дальше при такой вводной как у меня?
Знаете, по-моему, вам лучше перестать уже мучить себя и прекратить читать этот туториал.
Это дурацкий язык и в нем нет hello world
Здравствуйте, zip_, Вы писали:
_>Мои требования: _>- статическая типизация (неплохо также вывод типа иметь) _>- претензия на практичность _>- переносимость _>- качество скомпилированного кода _>- совместимость с С
_>Если есть другие языки, приведи, pls, примеры.
Ну критерии кроме статической типизации и переносимости однозначно не определимы, а с Си совместимы так или иначе все.
Кстати по поводу типизации — просто статическая типизация и та система типов, что в o'caml — это две большие разницы
И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/
И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.
А что до высокого уровня, то есть еще SML, Haskell, вот тут еще есть любители Оберона я слышал
Но Окамл — нормально. по крайней мере голову он заставит ломать меньше всех.
_>>>по певому: _>>>- так ли он хорош и универсален? несколько напрягает сложность перехода на него, т.к. времени свободного нет, а проекты делать надо, и делать в срок.
R>>Да. Универсален и очень хорош. Без шуток. Особенно как замена С++
_>Пожалуй стоит попробовать в реальном проекте.
Ну лучше сначала просто взять, накачать документов с исходниками разных штук и глядя в них написать что-нибудь маленькое для души.
Какую-нибудь утилитку, на которую нужна пара дней. Например, компилятор Scheme.
шутка.
но с долей не только шутки.
_>>>по второму: _>>>- а дорос ли он уже до реального применения в промышленных системах?
R>>А вот здесь встает вопрос об осмысленности выбора. Ничего _качественно_ нового D в себе не несет, причем разные features, которыми он гордится мало связаны между собой в единую систему (формально).
_>Несет удобство в работе, исправляет недостатки С++, как мне показалось (возможно не все). Однако верю, что функциональный подход может дать значительно больше того самого удобства, если к нему привыкнуть. В D как раз подкупает простота перехода с C++, фактически в первый же день можно начать писать сложные программы.
Ну на самом деле не нужно думать, что окамл — это только функциональный язык. Он все умеет и все очень красиво.
На самом деле если не думать слишком на тему "как это сложно выучить окамл", а просто сесть и представить, что учишь язык очень высокого уровня типа питона, то очень быстро все случится.
R>>Кроме всего прочего, тот же синтаксис, что и в С/С++, нагло влияющий на семантику языка. Что может и не является такой уж проблемой, но в общем зачете очков не прибавляет.
_>Как ни странно, его синтаксис мне нравится куда больше, чем ocaml-овский (и вообще паскаль-подобный). Вероятно это субъективно, играет по-видимому сила привычки.
У Окамла кстати не паскаль-подобный синтаксис совсем. Это так после Си кажется
Вернее будет сказать, у него, как и у всех последователей подхода Lanvin'a синтаксис почти отсуствует. Просто есть конструкции, которые конвертят некоторые keywords в "сырой" код. А вот в раздражающей С++ программистов специфике вызовы функции без скобок и запятых скрыта очень большая мощь.
И кстати. У окамла очень мощный препроцессор. Можно и Си синтаксис сделать. Но лучше не нужно. Многое можно потерять если ограничить себя сишным.
_>>>опыт программирования приближается к 15 годам, в основном это С и C++.
Здравствуйте, reductor, Вы писали:
R>И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/ R>И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.
Интересно. Но сейчас реально нужен язык для высокого уровня. Два языка изучать параллельно — это слишком
R>А что до высокого уровня, то есть еще SML, Haskell, вот тут еще есть любители Оберона я слышал R>Но Окамл — нормально. по крайней мере голову он заставит ломать меньше всех.
Я — точно не любитель (Оберона)
Haskell мне не кажется практичным и готовым к применению в промышленных проектах. Считаю, что это до сих пор академический язык.
SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у второго более серьезный компилятор и ОО-расширение (впрочем пока не уверен, что оно вообще нужно).
_>>Пожалуй стоит попробовать в реальном проекте.
R>Ну лучше сначала просто взять, накачать документов с исходниками разных штук и глядя в них написать что-нибудь маленькое для души. R>Какую-нибудь утилитку, на которую нужна пара дней. Например, компилятор Scheme. R>шутка. R>но с долей не только шутки.
Уже накачал, многое уже прочитал, и даже создал окружение для комфортной работы с проектом на OCaml. Осталось придумать задачку и попробовать реализовать.
Шутку оценил
ФЯ сильны в такого рода задачах, интересует как раз, живуч ли этот подход и в других применениях.
Кстати, а бумажные книжки по ML/SML (про Caml и не спрашиваю) существуют в природе? А на русском?
R>У Окамла кстати не паскаль-подобный синтаксис совсем. Это так после Си кажется R>Вернее будет сказать, у него, как и у всех последователей подхода Lanvin'a синтаксис почти отсуствует. Просто есть конструкции, которые конвертят некоторые keywords в "сырой" код. А вот в раздражающей С++ программистов специфике вызовы функции без скобок и запятых скрыта очень большая мощь. R>И кстати. У окамла очень мощный препроцессор. Можно и Си синтаксис сделать. Но лучше не нужно. Многое можно потерять если ограничить себя сишным.
Скобки и запятые не раздражают, это как раз то, что нравится. Как нужно правильно интерпретировать вызов функции с несколькими аргументами (..очень большая мощь..) знаю, про частичное применение знаю, зацепило.
Про препроцессор тоже уже знаю, первая (глупая) мысль, которая возникла после чтения документации — а не сделать ли replace begin -> {, end -> }, заменить ;; и т.п. Понял, что не стоит, надеюсь привыкну, это в общем-то мелочи.
_>>Что есть FFI?
R>Foreign Function Interface.
Здравствуйте, zip_, Вы писали:
R>>А что до высокого уровня, то есть еще SML, Haskell, вот тут еще есть любители Оберона я слышал R>>Но Окамл — нормально. по крайней мере голову он заставит ломать меньше всех.
_>Я — точно не любитель (Оберона) _>Haskell мне не кажется практичным и готовым к применению в промышленных проектах. Считаю, что это до сих пор академический язык.
Интересно по каким критериям На самом деле уже довольно давно нет. То есть язык сам вообще очень давно, а тот же GHC какое-то время.
Его сейчас двигают как раз в массы. Но правда стоит отметить, что по вылизанности GHC от окамла пока отстает.
_>SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у второго более серьезный компилятор и ОО-расширение (впрочем пока не уверен, что оно вообще нужно).
Ну это один так сказать core-язык. Различаются цели и детали реализации. SML — формальный язык имеющий открытый стандарт. У него несколько компиляторов с разными подходами — самый родной — SML/NJ, в MLKit — вместо сборки мусора — region inference используется, MLTon — супероптимизирующий (очень быстрый код генерит). С какой-то стороны можно и академической игрушкой назвать, а для других — полезный очень инструмент получается.
O'Caml — это произведение одной команды из франции, один компилятор, но очень легкий и отлаженный.
Может и не оптимизирует как MLTon, но очень многое дает тюнить руками.
Еще у них немного синтаксис отличается: http://www.ps.uni-sb.de/~rossberg/SMLvsOcaml.html
И в O'Caml есть поддержка ООП
Но вообще конечно зная один, тут же начать программировать на другом — проблемы не представляет. Семантика одна и та же.
_>Уже накачал, многое уже прочитал, и даже создал окружение для комфортной работы с проектом на OCaml. Осталось придумать задачку и попробовать реализовать. _>Шутку оценил _>ФЯ сильны в такого рода задачах, интересует как раз, живуч ли этот подход и в других применениях.
zip_ wrote: > > SML — принципиально ничем от OCaml не отличается (или я ошибаюсь?), но у > второго более серьезный компилятор и ОО-расширение (впрочем пока не > уверен, что оно вообще нужно).
Рассуждая с практической точки зрения, для SML'я, по-моему, проще найти
компилятор под какой-нибудь не совсем обычный процессор, чем для
Ocaml'а. Если не ошибаюсь, Ocaml поддерживает только x86, ARM, и, может
быть, MIPS.
Здравствуйте, zip_, Вы писали:
_>устал от С++. _>чувствую, что можно писать более эффективно (в плане затраты времени/функциональность) на других языках и получать большее эстетическое удовлетворение. пора что-то менять.
_>уже решил, что языком для низкого уровня оставлю С, но нужен язык для (сравнительно-)высокоуровневых задач.
_>что посоветует общественность?
_>беглый анализ ситуации показал, что претендентов не так уж и много, а именно: _>1. ocaml _>2. D
D как язык для UI лучше чем C++ скажем в разы. Это я со всей отвественностью
могу сказать. Пара D+C вообще круто. хотя в общем-то D сам по себе имеет
все возможности C но legacy code и все такое.
Templates в D человечнее и мощнее чем в C++.
Из недостатков D:
1) концепт const автором игнорируется напрочь и это печалит.
В C99 например const есть.
2) Нативно поддерживаются только Win и Linux. Все остальное через
GDC (GCC codegen) что сыровато в общем-то. И не так эффективно как
родной Вальтеровский codegen.
Что бы я порекомендовал в качестве пункта #3 — как ни странно но Java.
Либо стандартный Java SDK от Sun либо
сделать под себя Java VM из тех что есть в сети проблемы не представляет.
Использование богатого набора IDE — неоспоримый плюс.
Java как "клеевой" язык с C подобной нотацией и вычислительной моделью — самое оно.
Java VM как часть своего приложения это примерно 200-250k кода. Ничего по нынешним меркам.
И очень просто вяжется с C (JNI или вообще свой протокол).
А в качестве варианта "для сэбэ" я использую tiscript (javascript типа).
Удобно иметь под рукой в приложении интерпертатор. Да и вообще
Здравствуйте, Pzz, Вы писали:
Pzz>Рассуждая с практической точки зрения, для SML'я, по-моему, проще найти Pzz>компилятор под какой-нибудь не совсем обычный процессор, чем для Pzz>Ocaml'а. Если не ошибаюсь, Ocaml поддерживает только x86, ARM, и, может Pzz>быть, MIPS.
Здравствуйте, zip_, Вы писали:
_>Здравствуйте, reductor, Вы писали:
R>>И кстати-кстати. по поводу Си и низкого уровня — рекомендую обратить внимание: http://www.research.att.com/projects/cyclone/ R>>И система типов там похожа на окамловскую. Да и много что (кроме синтаксиса и управления памятью). Правда QNX там официально вроде пока не поддерживается, но попробовать можно. В любом случае, всяко лучше чем просто си.
_>Интересно. Но сейчас реально нужен язык для высокого уровня. Два языка изучать параллельно — это слишком