12 мая 2012 · Комментарий

Без заголовка

В любом случае, все эти языки не слишком-то обсуждают проблемы programming-in-the-large, когда много-много самых разных библиотек самых разных авторов, и много-много самых разных программ обработки на самых разных вычислительных узлах. И мало какие конструкции языка (а хоть и расширяемого) помогают в этой ситуации. Да, у меня по этому поводу тоже часто есть печалька. Вот как подумаешь, вроде столько всего нового в программировании делается, а совместное использование кучи разнородных библиотек является серьезной проблемой. В том смысле что часто вроде как библиотека есть, но приходится ее переписывать под свои нужды по тем или иным причинам, и грустно от этого. Складывается впечатление, что новые языковые фичи придумывают в основном затем, чтобы можно было быстро переписать какую-то библиотеку заново под свои нужды :). Я достаточно давно осознал сию проблему, и думаю периодически какое тут может быть решение. У меня это называется абстракции алгоритомов (в смысле это лишь название решения, а не само решение :)). В начале этой недели я даже сделал прототип генератор из весьма выразительного функционального языка в человеко-читабельную Скалу (вообще планировал в Жаба и ПХП). Точнее допили существующий генератор в нечитабельный Си, собственно мой вклад там невелик. Т.е. это для меня есть экспериментальная версия прототипа тулзы, с помощью которой можно было бы обобщенные бибилиотеки транслировать в различные языки на выбор, типа С, Джава, ПХП. Ну в функциональные еще проще, ибо исходный язык функциональный (правда без ленивости). На данный момент, я также понял что какие-то подвижки в этом плане есть в основом в Хаскелле и МЛ языках. Судя по всему в Хаскелле разнородные библиотеки (на Хаскеле) можно использовать с меньшими проблемами, в силу того императивность тщательно изолированна. Правда на Хаскелле будут проблемы с юзанием библиотек на других языках, однозначно. Второй момент - это модули, и что еще важнее, функторы из МЛ языков, типа OCaml и Standrd ML. Судя по всему они так же есть и в Racket. Вот это совершенно недооцененный пункт, который я только сейчас начал втыкать, и он как раз направлен на programming-in-the-large. Это наиболее близкое из тех решений, что я ищу. В Хаскелле насколько я понимаю функтуров нет, а их type class'ы есть жалкое подобие. В F# модули исключили. Возможно что-то смутно подобное есть в Scala - надо разбираться. К сожалению МЛ языки получаются достаточно verbose в этих случаях. Т.е. у Хаскела есть специальные нотации, поддерживающие монады и проч, а в SML этого нет. В OCaml есть хотя бы мощный препроцессор. Но в целом, мне думается что если сделать транслятор из ML-подобного языка в императивные типа Жабы/ПХП, то это решило бы много проблем. Если конечно переписать библиотеки на этот новый языг :).

К записи · К обсуждению