{{notification.text}}

MirGames

17.07.11 05:09
0
В общем, после программирования на Delphi я, в своё время, перешёл на C++. Я думал, что это круто - почти все программисты пишут на плюсах, куча библиотек, поддержка и т.п.
И как-то я и не заметил. что сам язык не годится для быстрой разработки (в моих руках). Потом я перешёл на Java. Java меня поразила. Куча вещей и библиотек, которые в плюсах можно было выбирать в Java стандартизировано. Стандартные библиотеки по работе с окнами, автодокументирование и т.д. Вообще, Java мне понравилась своей строгостью и скорость разработки. Правда, после плюсов мне не сильно понравилась скорость выполнения, но, я думаю, это больше связано с Swing, а не самой платформой.
По работе пришлось столкнуться с AS3. Слов нет. Просто круто. Учится быстро, работается еще быстрее.

Как-то так я и пришёл к выводу о том, что, скорее всего, к C++ уже не вернусь ибо быстрее выучить новый язык и технологии под конкретную задачу, чем писать на какашках.
После AS3 проснулся интерес к различным скриптовым языкам. В своё время я бегло просматривал Python и он мне понравился. Но теперь нравится меньше: так же, как и плюсы, он дико нестандартизован. В нём куча библиотек по работе с GUI, например. Я не хочу этого. Я хочу всегда читать код на одной библиотеке. Максимум двух-трёх. Зато нравится принудительная расстановка пробельных символов.

Сейчас вот думаю, что поучить. Слышал, что Ruby впитал в себя Python. Потом услышал, что Groovy впитал в себя Ruby. Хочется узнать побольше о JVM-языках. Scala/Groovy. Какие языки для каких задач вы используете?

p.s. в ближайших планах узнать побольше о Scala для серверных приложений.
p.p.s. Очень сильно интересует кроссплатформенный язык со стандартизированными кроссплатформенными библиотеками для клиентских приложений, требовательных к скорости выполнения.
#1
MirGames Dev
17.07.11 19:15
0
Моё мнение:

C/C++ - для задач низкоуровневых, либо критичных к скорости выполнения, с большим объемом математики.

PHP - я бы его не использовал никогда.

Ruby/Python/Groovy - для быстрого прототипирования и прочих задач, критичных к скорости реализации, либо не накладывающих высоких требований к производительности. Писать на них сервер, обрабатывающий миллионы клиентов в день, - это самоубийство. Я бы использовал для не сильно нагруженных простых систем.

C#/Java/Scala - что-то среднее между питоном и плюсами, в основном удел Enterprise. Подходит почти для любых областей, где нет необходимости уложиться в 64 мб памяти, или просчитывать огромное количество математики. Java/Scala, как мне кажется, больше подходит для серверных приложений, нежели для GUI. Хотя если требуется кроссплатформенный язык для GUI, я бы выбрал JVM языки.
JetBrains MPS, кстати, позволяет расширять синтаксис Java по своему усмотрению)

JavaScript(node.js) - быстро можно писать сервера, обрабатывающие миллионы подключений, но сам по себе он сырой, и код быстро превращается в кашу.

Erlang - очень простой, функциональный, для распределенных систем.

OCaml - быстрый, почти такой же быстрый как С++, функциональный. Я бы использовал для увеличения производительности в связке с Erlang.
Отредактировано: 17.07.11 19:55
#2
Швец, жнец, на дуде игрец
17.07.11 19:18
0
Цитата
Как-то так я и пришёл к выводу о том, что, скорее всего, к C++ уже не вернусь ибо быстрее выучить новый язык и технологии под конкретную задачу, чем писать на какашках.

Полностью согласен. Как-то пытался учить его - но после того, как увидал толстенную книгу "C++ Gotchas" возникли большие сомнения. :)
Насчет "язык и технологии под конкретную задачу" - почитайте про концепцию DSL (Domain Specific Language), а так же попробуйте поковырять основы Common Lisp. Скорее всего, даже после самых его основ C++ вам покажется даже не "какашками" - а недоразумением, непонятно зачем существующим.
Только не пугайтесь скобок - попытайтесь понять суть, и, рано или поздно, вы поймете всю их простоту и мощь, и достигнете нирваны. :) Хоть я пока просветления и не достиг, но даже то, что уже накопал - невероятно радует.
Said, я это между прочим написал до того, как прочитал твои последние сообщения ;)

Цитата
В своё время я бегло просматривал Python и он мне понравился. Но теперь нравится меньше: так же, как и плюсы, он дико нестандартизован.

Питон хорош, но в нем хватает своих несуразностей - после объектно-ориентированной системы Ruby Питоновская кажется нелепой, со всеми этими self в каждом методе, бесконечными "__", и т.д.
С другой стороны, по-моему на роль "кроссплатформенного языка со стандартизированными кроссплатформенными библиотеками для клиентских приложений, требовательных к скорости выполнения" Питон подходит больше всего. Для GUI я использую wxPython, и вам советую. :)

Цитата
В нём куча библиотек по работе с GUI, например.

Ну, не сказать, чтобы "куча" - основных на мой взгляд три. Это: стандартная Tk, wxPython, и PyQt. GTK в расчет не беру, т.к. в Виндоусе он кривоват.

Цитата
Сейчас вот думаю, что поучить. Слышал, что Ruby впитал в себя Python.

Ruby - нет, не совсем. Это скорее гремучая смесь из Перла и Смоллтока.

Цитата
Потом услышал, что Groovy впитал в себя Ruby. Хочется узнать побольше о JVM-языках.

Groovy после Java вам скорее всего понравится - хотя, говорят, он тормозной :) Я бы еще вам порекомендовал посмотреть в сторону Clojure - он подойдет как введение в мир Lisp'а.

Цитата
p.s. в блаижайших планах узнать побольше о Scala для серверных приложений.

Scala - отличный выбор.
Хотя я бы предпочел Erlang, из-за личной неприязни к .NET и Java.

Цитата
Какие языки для каких задач вы используете?

Постепенно продвигаюсь к такому джентльменскому набору:
1) Ruby - для простых и не очень Веб-приложений и сайтов.
2) JavaScript - для клиентских Веб-приложений.
3) Python - для GUI.
4) Erlang - для серверных приложений и распределенных вычислений.
5) Common Lisp - для всего остального.

Подытоживая, на вашем месте я бы двигался в следующем направлении: Clojure -> Common Lisp -> Scala, но в конечном счете - решать вам, конечно.

И да, учтите - отход от Делфов и C++ в сторону скриптовых языков необратимо сворачивает мозг в сторону UNIX-подобных ОС, так как вы будете постоянно сталкиваться с тем, что библиотеки пишутся в основном с расчетом на Linux/MacOS X/FreeBSD, т.к. некоторые необходимые фичи в Виндоусе просто напросто отсутствуют. А где UNIX-подобные ОС - там и Vim с Emacs'ом недалеко, так что готовьтесь изучать много больше (по крайней мере, так было у меня).
Отредактировано: 17.07.11 20:11
#3
17.07.11 22:41
0
Цитата(Podust @ Сегодня, 15:18)
[snapback]108318[/snapback]
2) JavaScript - для клиентских Веб-приложений.

Почему не ActionScript?

Цитата(Podust @ Сегодня, 15:18)
[snapback]108318[/snapback]
3) Python - для GUI.

Почему не Java. Почему вообще неприязнь к Java?

Цитата(Podust @ Сегодня, 15:18)
[snapback]108318[/snapback]
5) Common Lisp - для всего остального.

Lisp преподавали в универе, но так и не понял его фишки, если честно. нам месяца полтора говорили о том, что в Lisp'е за две недели пишется в одиночку то, что на плюсах пишется год-полтора группой программистов. Но что в Lisp'е такого особенного (функции высшего порядка, в теории, можно использовать и в C++ из массива указателей на некоторые атомарные функции, lambda-выражения, т.е. просто неименованные функции, тоже есть во многих языках) я так и не понял. В чем крутость?
#4
Limited Edition
17.07.11 22:47
0
"Java для GUI" лол. Не говори такого больше.
#5
17.07.11 23:05
0
RzCoDer
К чему ты это? Почему бы и нет?
#6
Limited Edition
17.07.11 23:09
0
Вячеслав
Нет, потому что юзерам не нравится ждать несколько секунд отклика интерфейса.
#7
17.07.11 23:39
0
RzCoDer
Дай мне, пожалуйста, файл Java-проекта, в котором интерфейс Swing'овый тормозит несколько секунд. Условия два:
1. Исключительно интерфейс. Без прочего кода.
2. Swing/AWT.
#8
Limited Edition
17.07.11 23:42
0
Вячеслав
Бери любое JAVA IDE (eclipse, netbeans etc) и втыкай.
#9
MirGames Dev
18.07.11 00:51
0
RzCoDer
Тролль. Неторопливость GUI - вина не Java, но используемых библиотек. Eclipse, кстати, использует SWT, и отзывчивость GUI на высоте. Другое дело, что там очень много функционала и фич, которые требовательны к ресурсам, но даже на моём нетбуке Eclipse работает шустро.
#10
Limited Edition
18.07.11 01:56
0
MeF Dei Corvi, чего сразу тролль? Java не тормозит, ага? Неторопливость GUI - вина хвалёных стандартных ява библиотек, которые не могут в аппаратное ускорение.
Типичный пример, если винда свопит процесс нетбинса он разворачиваться может чуть ли не минуты. Любой другой тяжёлый процесс делает это максимум 30 секунд.
#11
Швец, жнец, на дуде игрец
18.07.11 01:58
0
Цитата(Вячеслав @ 17.07.2011 - 19:41) [snapback]108320[/snapback]
Почему не ActionScript?

Ну, это совсем разное ведь - ActionScript - он для Флэша, который проприетарная технология Макромедия/Адобы - и ничего хорошего это в себе не несет. А JavaScript доступен в любом браузере, почти на любом мобильном устройстве - и при этом это мощный и элегантный язык, если чуть копнуть про прототипы и его объектную систему.

Цитата
Почему не Java. Почему вообще неприязнь к Java?

Во-первых, суд Оракла с Гуглом. Нас это напрямую не касается, но все же - как и в случае с Адобой, нет ничего хорошего в том, что одна корпорация начинает контролировать платформу. Отсюда же и неприязнь к .NET - все там замечательно, но контроль Майкрософта лично меня тяготит (хотя сейчас кое-кто, продавший душу Майкрософту, докажет вам обратное :)).

Во-вторых, язык - тот же C++, только сбоку. Создан умными людьми, бувально - для идиотов (ничего личного). То есть, с тем учетом, чтобы на нем мог начать писать любой человек повтыкав пару дней в книжку "Java для чайников за 24 часа". А на выходе получаем то, что получаем - посмотрите код 90% проектов Java - волосы встанут дыбом.

Но, повторюсь, это только моя позиция - которую никому не навязываю.

Цитата
нам месяца полтора говорили о том, что в Lisp'е за две недели пишется в одиночку то, что на плюсах пишется год-полтора группой программистов.

Верно, это не сильно далеко от правды.

Цитата
Но что в Lisp'е такого особенного (функции высшего порядка, в теории, можно использовать и в C++ из массива указателей на некоторые атомарные функции, lambda-выражения, т.е. просто неименованные функции, тоже есть во многих языках) я так и не понял.

Это все приятные плюшки, не более.
К слову, многое из этого впервые появилось именно в Лиспе - в том числе рекурсия и if/then/else.

Цитата
В чем крутость?

В скобках. Я не шучу.
Это настоящий разрыв шаблона - но эти самые скобки позволяют вытворять такое, к чему другие языки еще очень долго не придут - а если и придут, то в итоге окажутся тем же самым Lisp'ом. Потому что скобки это Abstract Syntax Tree в чистом виде - то, во что преобразуются ваши программы, написанные на ActionScript, Java, Delphi, и любом другом языке высокого уровня. А тут уже начинается магия - написание программ напрямую в AST позволяет использовать макросы, одну из главных фишек Лиспа - писать программы, которые пишут программы. Они позволяют сделать из языка именно то, что нужно вам. Захотели ввести новый оператор for ... in ...? Пожалуйста - напишите один макрос, и пользуйтесь. Хотите писать SQL прямо в коде (как LINQ в C#) - скажем, (select :from (super-table) (where :abc > 2))? Да запросто - настругайте макросов, и у вас это будет. Хоть транслятор из Лиспа в ActionScript/Java/C++ делайте - даже это возможно (а вот обратное - не очень). В C++ и в пресловутой Java все прибито гвоздями, и вы должны использовать то, что предписано стандартом языка. В Лиспе язык создаете вы сами (и, в свою очередь, на этом языке можете описывать другие) - даже ООП там сделан с помощью тех же макросов. База - это 10-20 основных функций, и все. А из этих примитивов уже можно строить бесконечные абстракции.
Ну, это меня уже понесло. :) Поэтому рекомендую изучить по крайней мере азы - и тогда уже будете знать, какими должны быть хорошие языки программирования.
Отредактировано: 18.07.11 02:03
#12
Программир Всия Руси!
18.07.11 03:00
0
На низком уровне, все либы пишуться на С++ у нас.
Поверх C#.
И совсем поверх Lua.
Для веба это: php и Ruby on Rails.
#13
MirGames Dev
18.07.11 16:49
0
Цитата
в теории, можно использовать и в C++ из массива указателей на некоторые атомарные функции, lambda-выражения, т.е. просто неименованные функции, тоже есть во многих языках
В теории, на С++ можно сделать почти всё, что угодно) Правда зачастую это превращается в сложную в сопровождении магию шаблонов. Делегаты есть и в boost, но то, как они там работают - это черная магия)
Цитата
Потому что скобки это Abstract Syntax Tree в чистом виде
Проект MPS от Jetbrains делает то же самое для Java (и, теоритически, для любых других языков). Весь код в нём представлен в виде AST и есть возможность осуществлять рефакторинг в терминах AST, вводить новые конструкции в язык, и так далее... На adconf ребята из JetBrains показывали - очень интересно выглядит.
Цитата
Почему не ActionScript?
ActionScript - очень медленный и проприетарный.
Цитата
Неторопливость GUI - вина хвалёных стандартных ява библиотек, которые не могут в аппаратное ускорение.

SWT использует нативные системные библиотеки. Swing - да, рисует сам, поэтому медленный.
#14
Хранитель Флейма
22.07.11 04:02
0
Давайте покаемся!

Да, я предлагаю вам покаяться в своих грехах, пока не поздно, пока есть еще шанс искупить свои грехи!
Скажем нет Unix, скажем НЕТ б-гомерзкому Open Source, скажем нет дьявольщине в лице Java, Python, Ruby, Erlang, скажем нет этому грядущему зверю в лице ФЯ на всевозможных VM.

Возрадуемся друзья мои! Путь к спасению есть! Благословенна будет эта благодатная фирма, дарящая нам добро, скажем да Visual Studio, скажем Я ЛЮБЛЮ ТЕБЯ WINDOWS, да будет славен и всемогущ C# и .NET его чуден да будет!

<holly shit scipped>

Всем привет с солнечного берега реки Дон. Я тут сижу в палатке, и на маке у меня запущена эклипса с pydev и т.к. кроме python у меня там ничего нет, приходится писать на нем :) Правда любая моя молитва на нем начинается со следующих благословенных строк:

Код

def Cons(x, y):
    def pair_proxy(getter):
        return getter(x, y)
    return pair_proxy

def IsPair(pair):
    return getattr(pair, "__name__", "") == "pair_proxy"

def Car(pair):
    return pair(lambda x, y: x)

def Cdr(pair):
    return pair(lambda x, y: y)

def Null():
    pass

def IsNull(pair):
    return getattr(pair, "__name__", "") == "Null"

def List(*elements):
    if len(elements) == 0: return Null
    elif len(elements) == 1: return Cons(elements[0], Null)
    else: return Cons(elements[0], List(*elements[1:]))

def Length(list):
    def length(x, iter):
        if IsNull(x): return iter
        else: return length(Cdr(x), iter + 1)
    return length(list, 0)

def ListRef(list, index):
    if index == 0: return Car(list)
    else: return ListRef(Cdr(list), index - 1)

def ForEach(func, list):
    if not IsNull(list):
        func(Car(list))
        ForEach(func, Cdr(list))

def Map(selector, list):
    if IsNull(list): return list
    else: return Cons(selector(Car(list)),
                      Map(selector, Cdr(list)))

def Reduce(agregate, initial, list):
    def reduce_iter(result, rest):
        if IsNull(rest): return result
        else: return reduce_iter(agregate(result, Car(rest)), Cdr(rest))
    return reduce_iter(initial, list)

def Reverce(list):
    return Reduce(lambda x, y: Cons(y, x), List(), list)

def Filter(predicate, list):
    return Reduce(lambda x, y: Cons(y, x) if predicate(y) else x, List(), list)


Мне стоит объяснять какое там дальше мракобесие происходит? :)

На счет ответа на вопрос - Common Lisp учи, его родимого.
#15
23.07.11 05:07
0
Цитата
Всем привет с солнечного берега реки Дон. Я тут сижу в палатке, и на маке у меня запущена эклипса с pydev и т.к. кроме python у меня там ничего нет, приходится писать на нем

отдыхать не умеешь. покайся
#16
Хранитель Флейма
23.07.11 18:18
0
antonn
Я тут до лета 2012, времени вагон на все - на отдых, на работу, на охоту :P
#17
17.08.11 02:25
0
для математики fortran само то :) помню как нам его начали преподовать после бейсика это было что то с чем то :)
#18
Хранитель Флейма
17.08.11 03:49
0
DYUMON
А для литературы вполне неплох Shakespeare. Ага.
Я надеюсь ты намек понял :)
#19
17.08.11 23:24
0
Said
Ты ради эклипсы Мак брал?) Шучу, конечно, просто думал, что на маках есть какая-нибудь мегакрутая ИДЕ, которая поразит мой мозг одним только существованием фишек, в ней заложенных.

По делу: а зачем тебе Common Lisp'овские фишки на Питоне? Почему не Clojure, а именно Lisp? Откуда ненависть к VM?
#20
Хранитель Флейма
18.08.11 02:21
0
Вячеслав
В eclipse я и под виндой работаю и в линухе. Удобно. Хотя местами бывает даже слишком криво, но за неимением лучшего (vim я еще не освоил - нуб). "Фишки на питоне" были написаны от нечего делать.
Кстати, честных однонаправленных списков в питоне нет (правда есть куча библиотек, которые такие списки добавляют).

Всевозможные ФЯ на всевозможных VM - обожаю. В предыдущем посте был страшно пьяный стеб, но это было понятно из примера на Python.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}