Очередная войнушка на тему "твой язык программирования сосет больше, чем мой язык программирования" у
avva навела меня на мысль. Я подумал - какой язык программирования мне стоило бы выучить и зачем? Т.е. языков программирования наплодили столько, что пора уже им заиметь своего Линнея и Дарвина, и выпускать определитель видов и открывать факультеты по изучению их генезиса и повадок. Кстати, неужели мне первому в голову пришла эта мысль? Не поверю, где-то это уже должно быть. Но я отклонился от темы.
Итак, я знаю следующие языки (в произвольном порядке): C, C++, Java, Prolog, Perl, PHP, Javascript, Tcl, Visual Basic в различных его изводах, Pascal. "Знаю" здесь надо толковать очень широко - т.е. мои знания, скажем, в Прологе гораздо хуже, и гораздо ржавее, моих знаний C, но концепции языка я знаю, и если бы понадобилось, думаю, смог бы продуктивно работать на нем после некоторого подновления знаний. Lisp/Scheme я встречал, однако в список внести не могу, поскольку ничего толком на нем не писал, и не уверен, что смог бы без серьезного вложения времени - а это, практически, то же самое, что учить язык заново.
Теперь вопрос - существует ли язык, который мне стоило бы выучить для практических целей? Т.е. если бы я, скажем, не знал Перла, то мне бы стоило выучить его или, скажем, Питон или PHP - потому что, скажем, писать ad-hoc программки для обработки информации в различных форматах на них удобнее, чем на C или Яве. Мне так кажется. А если бы я не знал C, то мне стоило бы его выучить, чтобы писать более эффективные программы или пользоваться тысячами готовых библиотек, у которых есть интерфейс с C.
Т.е. мне интересно, какой язык, который, если я его выучу, позволить мне решать гораздо более эффективно некоторый класс задач - при этом класс достаточно часто встречающийся, чтобы имело смысл заниматься этим заранее (т.е. если какой-то язык позволяет жутко эффективно программировать ядерные реакторы, то это непрактично - буду работать с реакторами, тогда и выучу).
Итак, я знаю следующие языки (в произвольном порядке): C, C++, Java, Prolog, Perl, PHP, Javascript, Tcl, Visual Basic в различных его изводах, Pascal. "Знаю" здесь надо толковать очень широко - т.е. мои знания, скажем, в Прологе гораздо хуже, и гораздо ржавее, моих знаний C, но концепции языка я знаю, и если бы понадобилось, думаю, смог бы продуктивно работать на нем после некоторого подновления знаний. Lisp/Scheme я встречал, однако в список внести не могу, поскольку ничего толком на нем не писал, и не уверен, что смог бы без серьезного вложения времени - а это, практически, то же самое, что учить язык заново.
Теперь вопрос - существует ли язык, который мне стоило бы выучить для практических целей? Т.е. если бы я, скажем, не знал Перла, то мне бы стоило выучить его или, скажем, Питон или PHP - потому что, скажем, писать ad-hoc программки для обработки информации в различных форматах на них удобнее, чем на C или Яве. Мне так кажется. А если бы я не знал C, то мне стоило бы его выучить, чтобы писать более эффективные программы или пользоваться тысячами готовых библиотек, у которых есть интерфейс с C.
Т.е. мне интересно, какой язык, который, если я его выучу, позволить мне решать гораздо более эффективно некоторый класс задач - при этом класс достаточно часто встречающийся, чтобы имело смысл заниматься этим заранее (т.е. если какой-то язык позволяет жутко эффективно программировать ядерные реакторы, то это непрактично - буду работать с реакторами, тогда и выучу).
Tags:
no subject
Причем - именно не Haskell, с которым все носятся, а O'Caml, который и проще и практичнее.
no subject
no subject
Во-первых - как язык для программ, где надо иметь дело с всякими хитрыми структурами данных (синтаксические деревья 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 знает довольно поверхностно (но при этом пишет по делу)
no subject
no subject
Для расширения кругозора - это все понятно, но меня в данном случае интересовал более практический подход.
no subject
Оно, конечно, понятно что это бледное подобие
левой рукиЯвы, но спрос на него есть, и язык, в отличие от большинства поделок Микрософта, не омерзительный.no subject
no subject
Только немного синтакс другой? Да и к тому же, автор спрашивает про практическое применение, а что он сможет сделать с C#, а на Java нет?
no subject
no subject
caml.inria.fr -- домашная страница проекта.
no subject
no subject
no subject
no subject
no subject
no subject
Framework
Да, атрибуты
Вот еще например, я последний месяц занимаюсь стыковкой C# с голым C через Interop. Очень интересно.
no subject
На самом деле, язык программирования довольно жестко привязан к тематике. Определенный класс задач для Пролога и родственников, другой - для лисповых, третий для перлового семейства. И так далее. Пока не определишься, что хочешь программировать ядерные реакторы, нафиг тебе не потребуются соответствующие языки и библиотеки.
Есть, конечно, более универсальные языки, ну так в них главное - не базовый синтаксис, а то, к чему дается интерфейс, собссно, это не очень-то и связано с языком программирования.
no subject
no subject
Т.е. если бы я, скажем, не знал Перла, то мне бы стоило выучить его или, скажем, Питон или PHP - потому что, скажем, писать ad-hoc программки для обработки информации в различных форматах на них удобнее, чем на C или Яве.
""
Я для цели ad-hoc обработки текстов (текстовых репортов) использую gawk (GNU awk) - дешево и сердито, быстро и достаточно для данной цели.
Не настаиваю чтоб вы его учили, PERL конечно мощнее.
no subject
no subject
no subject
no subject
http://en.wikipedia.org/wiki/Logic_programming
Вот классический пример - задачки типа "Американец не пьет виски, русский живет в синем доме, у мексиканца есть брат, бразилец с жителем красного дома - любовники, владелец серой кошки - не сосед мексиканца. Какого цвета дом у американца?"
no subject
Или просто тупо перебрать все варианты на любом языке :-)
no subject
no subject
no subject
no subject
no subject
no subject
Рассмотрим LISP (в прологе я менее компетентен) - там есть списки (с возможностью взять голову/хвост и apply function to all elements), ассоциативные массивы (property кажется там это называется), рекурсия.
В С++ со Standart Template Library все это тоже есть. Правда там все это сделано имея ввиду эффективную реализацию, что чyть затуманивает чисто-абстрактный смысл данных конструкций, но не сильно.
Да и с прологом, подозреваю что C++/JAVA классы с нужной функциональностью можно реализовать менее чем в 1000 строк.
Т.е. я подозреваю что языки типа LISP и пролог сейчас представляют интерес лишь теоретический, но не практический (за исключением разве что очень узких областей).
no subject
Лисповые дела на C реализовать несложно, хотя и сопряжено с головной болью. Прологовские сложнее. хотя дело мастера боится, cам-то пролог на C, в основном и реализован, по-моему. Дело не в списках и не в рекурсии. Логика языка другая. Можно реализовать. Но долго и противно.
no subject
Впрочем парсеры компиляторов/интерпретаторов можно писать с помощью yacc (и более продвинутые штуки есть).
Более того, парсер можно довольно легко писать и пpocтo на С рекурсивными функциями, по функции на каждое грамматическое правило.
no subject
no subject
Читаем HTML, выбираем данные квартир, кладем в ассоциативные массивы индексируя уникальным ключом квартиры(адресом?); затем читаем и переписываем таблицу, по записанному там ключу проверяя в массивах. Вроде все гладко и удобно ложится на возможности gawkа
no subject
Ну а если совсем хочется challenge то можно попробовать RTL и так как вы интересуетесь криптоанализом то наверное слышали что алгоритм который подбирает ключи к кодировкам, если пробежит на железке сможет подобрать ключь примерно за 1.5 часаа в сравнении с миллионом лет вроде на самом крутом PC
no subject
no subject
Правда, об алгоритмах со временем 1.5 часа против миллиона лет я не слыхал. Это какие?
no subject
no subject
Только если на С можно тот же алгоритм гонять для разных ключей то на RTL только на 1, так как это всё в Hardware и не получает никаких инпутов.
no subject
А на этих сайтах я был, видел вопросы и находил ответы по синтаксу PHP, только меня больше интересует мнение опытного человека чем синтакс.
К примеру как лучше решить данную задачу, на PHP, a не как называется та или иная функция
а какой класс "некоторый"?