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.
Т.е. мне интересно, какой язык, который, если я его выучу, позволить мне решать гораздо более эффективно некоторый класс задач - при этом класс достаточно часто встречающийся, чтобы имело смысл заниматься этим заранее (т.е. если какой-то язык позволяет жутко эффективно программировать ядерные реакторы, то это непрактично - буду работать с реакторами, тогда и выучу).
Monday, April 9th, 2007 06:06 pm (UTC)
Я бы пожалуй рекомендовал ML (в виде диалекта O'Caml) - он в общем и практически полезен, хотя не уверен, что очень сильно, но он довольно сильно изменил к лучшему мой стиль программирования, причем касается это практически всех задач.

Причем - именно не Haskell, с которым все носятся, а O'Caml, который и проще и практичнее.
Monday, April 9th, 2007 06:34 pm (UTC)
В принципе я как-нибудь наверное соберусь написать развернутый комментарий. Пока же - вводная информация - язык статически типизированный, по сложности компиляции в нативный код он находится примерно на уровне паскаля (это надо оговорить, потому что первое впечатление совершенно другое - сначала вообще непонятно, как эти красоты можно эффективно реализовать)

Во-первых - как язык для программ, где надо иметь дело с всякими хитрыми структурами данных (синтаксические деревья etc) он хорош неверотяно - одной из моих коммерческих на нем работ был оптимизатор одного Zilog'овского ассемблера - с instruction scheduling, оптимизацией переходов, удалением неиспользуемого кода, и переименованием регистров (алгоритмика там стандартная, но не очень простая). Все это дело вписалось в полторы тысячи строк кода.

Пару раз в период увлечения я на спор переписывал Perl-овские скрипты знакомых админов на ML - в обоих случая они переписались "близко к тексту" и стали немного короче и при этом за счет типового контроля нашлись ошибки в исходных скриптах (хотя, разумеется, есть много перловых идиом, которые так просто не воспроизвести). Но вообще говоря, главная проблема при его практическом использовании - довольно бедные стандартные библиотеки.

Но это "прикладуха". На самом деле он imho интересен другим - если его юзить не "как паскаль" (то есть пытаться по возможности обходится без переменных и вообще - соблюдать стиль) то довольно быстро меняется техника программирования - и это транслируется и в "нормальные языки". "Чисто функциональные структуры данных", например, очень полезная техника - у них куча хороших свойств и в смысле мультитредности и в смысле версионирования etc.

То есть если коротко - то ML imho стоит изучить (и немного попрограммировать на нем) для расширения кругозора. У меня из всего моего списка языков он по этому параметру занимает первое место с большим отрывом.

PS: Возможно в качестве некоторого обзора забавная статья:
Strong Typing and Perl (http://perl.plover.com/yak/typing/typing.html). Там пол статьи про ML, хотя автор - перловщик и ML знает довольно поверхностно (но при этом пишет по делу)
Monday, April 9th, 2007 06:41 pm (UTC)
А как посоветуете подойти к изучению ML? Есть ли какие-то хорошие книги? Тюториалы?
Monday, April 9th, 2007 11:10 pm (UTC)
www.ocaml-tutorial.org
caml.inria.fr -- домашная страница проекта.
Tuesday, April 10th, 2007 07:56 am (UTC)
Спасибо!
Tuesday, April 10th, 2007 04:38 am (UTC)
Ну если совсем прикладной - то С# выучить навереное стоит. Другое дело, что учить там особенно нечего.
Monday, April 9th, 2007 11:11 pm (UTC)
про camlp4 забыли -- препроцессор работающий на уровне AST.
Tuesday, April 10th, 2007 04:37 am (UTC)
Это любопытная вещь, но она познавательна скорее в смысле демонстрации почти полной практической бесполезности мечты о произвольно расширяемомом синтаксисе :)
Tuesday, April 10th, 2007 10:38 am (UTC)
О!