crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Языки программирования, о которых мало знают, редкие или даже очень редкие языки программирования
molchanoviv
  опции профиля:
сообщение 7.11.2008, 10:30
Сообщение #11


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


жесть. Нифига не понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 7.11.2008, 10:57
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(AD @ 7.11.2008, 9:49) *
Вот еще одна занимательная статейка:
http://t-a-w.blogspot.com/2007/02/right-to...rogramming.html
:)


Понравилось из комментов:
Цитата
Anonymous said...
The right to criticize programming languages? Or the right to compare programming languages to your current favorite? I hate Ruby and I hope it fails miserably. Not because of the language itself but because of the community of fanboys and the hype machine. Go program something G**DAMMIT and stop writing about how great Ruby is('nt)!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2008, 11:26
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


А куда Tonal пропал? Мне было интересно услышать точку зрения столь хорошо осведомленного во многих языках программирования человека! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2008, 14:11
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


AD, а я думаю у него "язык" устал еще на прогорге, по поводу D и C#
а тут вообще флуд полнейший, не практичный.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2008, 14:52
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 10.11.2008, 14:11) *
AD, а я думаю у него "язык" устал еще на прогорге, по поводу D и C#
а тут вообще флуд полнейший, не практичный.

Ну ведь тема позволяет. :) На счет практичности - согласен. А вот узнать новенькое, для самообразования, так сказать, послушать - интересно! :)
А я тут слышал, что скоро выйдет новый стандарт C++. Кто его видел, от некоторых его новых возможностей радуются. Все-таки ввели в сам язык какие-то возможности функциональных языков! Слышали о новом стандарте, что думаете о нем?

А на счет C# согласен, что это даже не язык - а не знаю даже что, но что-то странное. Без среды не работает, сред уже 3 или 4 штуки, все не зависят друг от друга и т.п. Это просто большой МИНУС.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 4.12.2008, 13:30
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Куда пропал, язык устал...
Занят сильно, однако! :)
#haskell
-- Написать программу декодирования телефонного номера для АОН.
-- По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
-- - Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена
-- - Каждая значащая цифра повторяется минимум 2 раза
-- - Если в номере идут несколько цифр подряд, то для обозначения <такая же цифра как предыдущая> используется идущий 2 или более подряд раз знак #
-- Например, входящая строка 4434###552222311333661 соответствует номеру 4452136

aon_decode [] = []
aon_decode (x:xs) = reverse $ dec' xs x []
  where
    dec' [] _ res = res
    dec' ('#':xs) y res = dec_repid xs y res
    dec' (x:xs) y res
      | x == y    = dec2res x xs y res
      | otherwise = dec' xs x res
    dec_repid ('#':xs) y res = dec2res '#' xs y res
    dec_repid xs y res = dec' xs y res
    dec2res x xs y res = dec' (dropWhile (==x) xs) x (y:res)

Кстати условие не очень чётко сформулировано. Не ясно как трактовать последовательность # после последовательности одинаковых цифр.
Приведённое решение в этом случае цифру удваивает, например:
*Main> aon_decode "44##"
"44"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 5.12.2008, 13:38
Сообщение #17


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


А вот более компактная и прямолинейная реализация:
#haskell
import List

aon_decode xs = [head x | x <- rep $ group xs, lenGr1 x]
  where
    rep (x:y:xs) | head y == '#' && lenGr1 y
      = (head x : x) : (head x : x) : rep xs
    rep (x:xs) = x : rep xs
    rep xs = xs
    lenGr1 = not . null . drop 1

Если вдруг кому интересно - могу расшифровать. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.12.2008, 14:08
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 5.12.2008, 13:38) *
А вот более компактная и прямолинейная реализация:

Если вдруг кому интересно - могу расшифровать. :)

Конечно, расшифровывай. А что ты думаешь по поводу приведенных языков? Какое мнение на счет АПЛ-языков? Видишь ли ты будущее за каким-нибудь из названных в статьях языков? Что можешь сказать на счет нового стандарта С++?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 5.12.2008, 18:00
Сообщение #19


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Немного про синтаксис haskell-а
Комментарии до конца строки два "-"
haskell - строго типизирован, даже сильнее чем С++. :)
Сигнатура функций записывается таким образом:
func_name :: param1 -> param2 -> ... -> paramN -> result
Сигнатуры не обязательны, т.к. компилятор умеет их вычислять, но бывают полезны в неоднозначных ситуациях или для документирования.
#haskell
-- Импортируем модуль дополнительных функций работы со списками для group
import List

-- Строки в haskell - это списки символов, поэтому функция декодирования принимает список и возвращает список
aon_decode :: [Char] -> [Char]
-- Сама функция проста:
-- в переданном списке все подряд идущие одинаковые символы группируются в списки: group xs
-- этот список списков преобразуется функцией учёта повторений: rep ...
-- далее для всех подсписков проверяем что длинна больше 1: [... | x <- ..., lenGr1 x]
-- из прошедших проверку формируем список "голов": [head x | x <- ..., ...]
aon_decode xs = [head x | x <- rep $ group xs, lenGr1 x]
  where
    -- Локальная функция учёта повторений принимает список групп и возвращает его преобразованным
    rep :: [[Char]] -> [[Char]]
    -- Случай когда на входе список из не меньше чем 2х элементов:  rep (x:y:xs) ...
    -- причём второй состоит из '#': rep (x:y:xs) | head y == '#' ...
    -- и его длинна больше 1: rep (x:y:xs) | ... && lenGr1 y
    rep (x:y:xs) | head y == '#' && lenGr1 y
      -- удлиняем первый список: head x : x
      -- и собираем результат из двух удлинённых списков и результата обработки остатка этой же функцией: (...) : (...) : rep xs
      = (head x : x) : (head x : x) : rep xs
    -- Случай, когда есть любой другой список с головой и хвостом возвращаем список из той же головы и результата обработки остатка этой же функцией
    rep (x:xs) = x : rep xs
    -- В случае пустого списка возвращаем пустой список
    rep [] = []
    -- Локальная функция проверяет, что в списке больше 1го элемента
    lenGr1 :: [a] -> Bool
    -- для этого отбрасывает первый элемент если он есть: drop 1
    -- тестирует получившийся список на пустоту и инвертирует результат:  not . null . ...
    lenGr1 = not . null . drop 1

Как можно заметить текстовое описание несколько длиннее самого кода, при этом код не теряет в понятности, когда немного привыкнешь к синтаксису и всеобщей рекурсивности. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 5.12.2008, 18:52
Сообщение #20


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Про языки: действительно их очень много и они постоянно рождаются и умирают.
Почему? Думаю можно выделить несколько основных идей:
1. Обучение.
Каждый, серьёзно изучающий программирование должен быть знаком с технологиями компиляции. В нормальных вузах должны быть лабораторные или курсовые по созданию небольшого языка программирования. :)
Да и при самообразовании эту область нужно хотя бы просмотреть.
Таких языков очень много, но они в основном живут очень недолго: пока не сдан соответствующий предмет. :)
2. Отработка новых идей.
Lisp, Prolog, Simula, SmallTalk, APL
Языки могут создаваться для проверки и отработки каких-нибудь идей в этой области.
Их сильно меньше чем предыдущих, но они могут иметь очень большое влияние на развитие всей индустрии. :)
3. DSL (Domain Specific Langiage) - языки для какой-то конкретной узкой области применения.
Видимо самые известные из этой серии: языки регулярных выражений, SQL, HTML, XSLT...
По сути это краткая запись, в терминах близких к предметной области.
Таких довольно много и из них могут вырасти языки общего назначения, но в основном они малоизвестны и остаются в пределах своей ниши. :)
4. Макро-языки, языки скриптования.
Создаются для автоматизации рутинных действий в сложных системах.
Это sh и клоны, bat и клоны, ECMAScript (JavaScript, JScript, ActionScript), VBScript, VBA, командный язык модемов, язык заданий принтеров (HP), FarMacro...
Часто начинаются как примитивное перечисление последовательности действий (макросы Photoshop5-6, MS Accecc), а потом развиваются (или заменяются) в полноценные языки (ActionScript, VBA).
5. Улучшение существующих языков или идей:
C, С++, Java, C#, D, Pascal, Modula, Oberon, 1С, J, K, Q...
5. Незнание.
Иногда языки создаются потому, что просто не в курсе альтернатив, или лень найти подходящий и изучать его. :)

Языки класса APL ориентированы на удобную работу с массивами. так что всё, что хорошо укладывается в массивы должно на них хорошо выражаться.

Мне кажется, будущее за декларативностью, а императивность будет понемногу сдавать позиции.
Так что сегодняшний мейнстрим постепенно уйдёт в какие-то небольшие ниши. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.4.2024, 17:10