Faits :
A.
Par jugement du 25 mai 2018, le Tribunal criminel de l'arrondissement de Lausanne a libéré X._ du chef d'accusation de contrainte sexuelle; il l'a en revanche reconnu coupable de vol, de dommages à la propriété, de viol, de tentative de viol et d'infraction à la LEtr (RS 142.20) et l'a condamné à 8 ans de peine privative de liberté. Il a par ailleurs ordonné la mise en oeuvre d'une mesure d'internement, au sens de l'art. 64 CP, ainsi que l'expulsion du condamné du territoire suisse pour une durée de 15 ans.
B.
Par jugement du 22 novembre 2018, la Cour d'appel pénale du Tribunal cantonal vaudois a rejeté l'appel formé par X._ contre le jugement du tribunal criminel, qu'il a confirmé.
C.
Par l'intermédiaire de son avocat, X._ forme un recours en matière pénale au Tribunal fédéral contre le jugement de la Cour d'appel pénale, qu'il ne conteste que dans la mesure où il ordonne la mise en oeuvre d'une mesure d'internement au sens de l'art. 64 CP. Il conclut, avec suite de frais et dépens, principalement à ce qu'il soit renoncé à ordonner une telle mesure. A titre subsidiaire, il conclut à l'annulation du jugement attaqué et au renvoi de la cause à la cour cantonale pour nouvelle décision. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.
En outre, X._ a adressé personnellement au Tribunal fédéral une lettre datée du 6 janvier 2019 mais reçue le 12 février 2019.
Considérant en droit :
1.
Déposé hors délai, le courrier daté du 6 janvier 2019, qui confirme en substance les conclusions du recours, ne saurait être pris en considération.
2.
Le recourant reproche à la cour cantonale d'avoir occulté l'art. 59 CP, de sorte que l'internement ordonné à son encontre viole l'art. 64 al. 1 let. b CP.
2.1. Conformément à l'art. 56 al. 1 CP, une mesure doit être ordonnée si une peine seule ne peut écarter le danger que l'auteur commette d'autres infractions, si l'auteur a besoin d'un traitement ou que la sécurité publique l'exige et si les conditions prévues aux art. 59 à 61 (mesures thérapeutiques institutionnelles), 63 (traitement ambulatoire) ou 64 CP (internement) sont remplies (art. 56 al. 1 CP). Pour ordonner l'une de ces mesures, le juge se fonde sur une expertise qui doit se déterminer sur la nécessité et les chances de succès d'un traitement, sur la vraisemblance que l'auteur commette d'autres infractions et sur la nature de celles-ci ainsi que sur les possibilités de faire exécuter la mesure (art. 56 al. 3 CP). Si plusieurs mesures s'avèrent appropriées, mais qu'une seule est nécessaire, le juge ordonne celle qui porte à l'auteur les atteintes les moins graves. Cela implique notamment que le juge examine en premier lieu si les conditions d'une mesure thérapeutique institutionnelle (art. 59 CP) sont remplies, avant de se poser la question d'un éventuel internement au sens de l'art. 64 CP.
Aux termes de l'art. 59 al. 1 CP, lorsque l'auteur souffre d'un grave trouble mental, le juge peut ordonner un traitement institutionnel si l'auteur a commis un crime ou un délit en relation avec ce trouble (let. a) et si il est à prévoir que cette mesure le détournera de nouvelles infractions en relation avec ce trouble (let. b). Cette dernière condition est réalisée lorsque, au moment de la décision, il est suffisamment vraisemblable qu'un traitement institutionnel entraînera dans les cinq ans de sa durée normale une réduction nette du risque de récidive (ATF 140 IV 1 consid. 3.2.4 p. 9; 134 IV 315 consid. 3.4.1 p. 321 s.).
Selon l'art. 64 al. 1 CP, le juge ordonne l'internement si l'auteur a commis un assassinat, un meurtre, une lésion corporelle grave, un viol, un brigandage, une prise d'otage, un incendie, une mise en danger de la vie d'autrui, ou une autre infraction passible d'une peine privative de liberté maximale de cinq ans au moins, par laquelle il a porté ou voulu porter gravement atteinte à l'intégrité physique, psychique ou sexuelle d'autrui et si, en raison des caractéristiques de la personnalité de l'auteur, des circonstances dans lesquelles il a commis l'infraction et de son vécu, il est sérieusement à craindre qu'il ne commette d'autres infractions du même genre (let. a), ou si, en raison d'un grave trouble mental chronique ou récurrent en relation avec l'infraction, il est sérieusement à craindre que l'auteur ne commette d'autres infractions du même genre et que la mesure prévue à l'art. 59 CP semble vouée à l'échec (let. b).
Par rapport aux autres mesures, l'internement n'intervient qu'en cas de danger " qualifié ". Il suppose un risque de récidive hautement vraisemblable. Pratiquement, le juge devra admettre un tel risque s'il ne peut guère s'imaginer que l'auteur ne commette pas de nouvelles infractions du même genre. Une supposition, une vague probabilité, une possibilité de récidive ou un danger latent ne suffisent pas (ATF 137 IV 59 consid. 6.3 p. 70). En présence d'un trouble psychiatrique, l'internement constitue, conformément au principe de proportionnalité consacré par l'art. 56 al. 2 CP, une mesure subsidiaire aux mesures institutionnelles prévues par l'art. 59 CP. En tant qu'ultima ratio, en raison de la gravité de l'atteinte à la liberté personnelle qu'il représente, l'internement n'entre pas en considération tant que la mesure institutionnelle apparaît utile. Ce n'est que lorsque cette dernière semble dénuée de chances de succès que l'internement peut être ordonné, s'il est nécessaire. Cette démarche doit permettre d'éviter qu'un auteur soit déclaré a priori " incurable " et interné dans un établissement d'exécution des peines (ATF 140 IV 1 consid. 3.2.4 p. 9; 134 IV 315 consid. 3.2 p. 32).
2.2. Se fondant sur les rapports des experts, la cour cantonale a considéré qu'on n'entrevoyait pour le recourant aucune perspective concrète d'amélioration, de sorte qu'une mesure thérapeutique institutionnelle était exclue.
2.3. Le recourant évoque en premier lieu son expulsion du territoire suisse pour une durée de 15 ans, qui enlèverait selon lui tout sens à une mesure d'internement.
Cet argument n'est pas pertinent. Outre le risque jamais totalement exclu d'une entrée en Suisse malgré l'expulsion, ce sont bien les critères spécifiques à l'internement qu'il y a lieu de prendre en compte pour le prononcé d'une telle mesure, un prononcé d'expulsion n'y faisant pas en tant que tel obstacle.
2.4. Par ailleurs, le recourant soutient qu'il n'est pas d'emblée exclu qu'un traitement institutionnel entraîne, dans les cinq ans de sa durée normale, une réduction nette du risque de récidive.
La cour cantonale a relevé que les experts avaient diagnostiqué chez le recourant un trouble mixte de la personnalité de type dyssociale, narcissique et perverse, avaient considéré ces troubles, pris dans leur ensemble, comme sévères et entraînant des distorsions importantes des relations personnelles et conclu qu'il présentait un risque de récidive élevé d'actes de même nature et/ou violents. Elle a par ailleurs noté que, toujours selon les experts, les troubles de la personnalité présentés par le recourant étaient reconnus pour n'être que peu accessibles à un suivi psychothérapeutique, raison pour laquelle aucune mesure de soin n'était préconisée.
Savoir si une expertise est convaincante est une question d'interprétation des preuves, que le Tribunal fédéral ne revoit que sous l'angle de l'arbitraire. En l'espèce le recourant se contente d'une argumentation de nature appellatoire, qualifiant de subjective et inconsistante l'affirmation des experts selon laquelle les troubles dont il souffre sont fort peu accessibles à des soins; il ne la remet toutefois pas en question par une motivation satisfaisant aux exigences de l'art. 106 al. 2 LTF. Dans ces circonstances, on ne saurait reprocher à la cour cantonale d'avoir admis que le risque de récidive était élevé et qu'une mesure thérapeutique n'était pas à envisager faute de perspective concrète d'amélioration. L'internement ordonné à l'encontre du recourant ne viole dès lors pas le droit fédéral.
Mal fondé, le recours doit être rejeté dans la mesure où il est recevable.
3.
Vu l'issue de la procédure, les frais de la cause doivent être mis à la charge du recourant qui succombe (art. 66 al. 1 LTF). Comme les conclusions étaient dépourvues de chances de succès, l'assistance judiciaire ne peut être accordée (art. 64 al. 1 LTF); le montant des frais judiciaires sera toutefois fixé en tenant compte de la situation financière du recourant, qui n'apparaît pas favorable.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal vaudois.
Lausanne, le 21 mars 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
La Greffière : Paquier-Boinay