March 2026

S M T W T F S
12 34567
891011121314
151617 18192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Monday, April 9th, 2007 09:38 am
Очередная войнушка на тему "твой язык программирования сосет больше, чем мой язык программирования" у [personal profile] avva навела меня на мысль. Я подумал - какой язык программирования мне стоило бы выучить и зачем? Т.е. языков программирования наплодили столько, что пора уже им заиметь своего Линнея и Дарвина, и выпускать определитель видов и открывать факультеты по изучению их генезиса и повадок. Кстати, неужели мне первому в голову пришла эта мысль? Не поверю, где-то это уже должно быть. Но я отклонился от темы.
Итак, я знаю следующие языки (в произвольном порядке): C, C++, Java, Prolog, Perl, PHP, Javascript, Tcl, Visual Basic в различных его изводах, Pascal. "Знаю" здесь надо толковать очень широко - т.е. мои знания, скажем, в Прологе  гораздо хуже, и гораздо ржавее, моих знаний C, но концепции языка я знаю, и если бы понадобилось, думаю, смог бы продуктивно работать на нем после некоторого подновления знаний. Lisp/Scheme я встречал, однако в список внести не могу, поскольку ничего толком на нем не писал, и не уверен, что смог бы без серьезного вложения времени - а это, практически, то же самое, что учить язык заново.
Теперь вопрос - существует ли язык, который мне стоило бы выучить для практических целей? Т.е. если бы я, скажем, не знал Перла, то мне бы стоило выучить его или, скажем, Питон или PHP - потому что, скажем, писать ad-hoc программки для обработки информации в различных форматах на них удобнее, чем на C или Яве. Мне так кажется. А если бы я не знал C, то мне стоило бы его выучить, чтобы писать более эффективные программы или пользоваться тысячами готовых библиотек, у которых есть интерфейс с C.
Т.е. мне интересно, какой язык, который, если я его выучу, позволить мне решать гораздо более эффективно некоторый класс задач - при этом класс достаточно часто встречающийся, чтобы имело смысл заниматься этим заранее (т.е. если какой-то язык позволяет жутко эффективно программировать ядерные реакторы, то это непрактично - буду работать с реакторами, тогда и выучу).
Tuesday, April 10th, 2007 09:59 am (UTC)
Странно, что комментов было так мало.

На самом деле, язык программирования довольно жестко привязан к тематике. Определенный класс задач для Пролога и родственников, другой - для лисповых, третий для перлового семейства. И так далее. Пока не определишься, что хочешь программировать ядерные реакторы, нафиг тебе не потребуются соответствующие языки и библиотеки.

Есть, конечно, более универсальные языки, ну так в них главное - не базовый синтаксис, а то, к чему дается интерфейс, собссно, это не очень-то и связано с языком программирования.
Tuesday, April 10th, 2007 10:54 am (UTC)
А какой класс задач хорош именно для Пролога ?
Tuesday, April 10th, 2007 11:06 am (UTC)
Так называемое логическое программирование. Долго объяснять, тем более, что я это учил лет пятнадцать назад. Но завязано настолько, что курс логического программирования - это просто курс языка Пролог.
Tuesday, April 10th, 2007 12:07 pm (UTC)
"логическое" - В смысле вывода теорем математической логики ? Или что-то еще ?
Tuesday, April 10th, 2007 12:14 pm (UTC)
Нет... Ну как объяснить...
http://en.wikipedia.org/wiki/Logic_programming
Вот классический пример - задачки типа "Американец не пьет виски, русский живет в синем доме, у мексиканца есть брат, бразилец с жителем красного дома - любовники, владелец серой кошки - не сосед мексиканца. Какого цвета дом у американца?"
Tuesday, April 10th, 2007 12:39 pm (UTC)
а LISP для них не лучше подходит ?

Или просто тупо перебрать все варианты на любом языке :-)
Tuesday, April 10th, 2007 12:41 pm (UTC)
как Вы оцениваете эффективность изучения основ компьютерных наук методом обмена репликами в ЖЖ?
Tuesday, April 10th, 2007 12:52 pm (UTC)
я же не про науку вообще спрашиваю, а про узкий конкретный топик.
Tuesday, April 10th, 2007 12:53 pm (UTC)
Лиспом можно, но конструкции тяжелее. А на любом языке перебирать - оно можно, конечно, только десять строк пролога обращаются в тысячу на C. При том, что малейшие изменения условия совершенно убивают уже написанный сишный код. Ну как везде, когда язык не для этого предназначался.
Wednesday, April 11th, 2007 04:26 am (UTC)
У меня сомнения насчет "десять строк в тысячу строк".
Рассмотрим LISP (в прологе я менее компетентен) - там есть списки (с возможностью взять голову/хвост и apply function to all elements), ассоциативные массивы (property кажется там это называется), рекурсия.
В С++ со Standart Template Library все это тоже есть. Правда там все это сделано имея ввиду эффективную реализацию, что чyть затуманивает чисто-абстрактный смысл данных конструкций, но не сильно.
Да и с прологом, подозреваю что C++/JAVA классы с нужной функциональностью можно реализовать менее чем в 1000 строк.
Т.е. я подозреваю что языки типа LISP и пролог сейчас представляют интерес лишь теоретический, но не практический (за исключением разве что очень узких областей).
Wednesday, April 11th, 2007 04:53 am (UTC)
Пятьдесят к пятистам подойдет больше? Deal? :)
Лисповые дела на C реализовать несложно, хотя и сопряжено с головной болью. Прологовские сложнее. хотя дело мастера боится, cам-то пролог на C, в основном и реализован, по-моему. Дело не в списках и не в рекурсии. Логика языка другая. Можно реализовать. Но долго и противно.
Friday, April 13th, 2007 05:09 pm (UTC)
Для грамматического разбора Пролог пожалый неплохо подходит.
Впрочем парсеры компиляторов/интерпретаторов можно писать с помощью yacc (и более продвинутые штуки есть).
Более того, парсер можно довольно легко писать и пpocтo на С рекурсивными функциями, по функции на каждое грамматическое правило.